This is a high capability Mana Shield / Blood Magic script. It has high capability because it doesn't overwrite anything.
Simply just add <MANA SHIELD> in the state's notebox for mana shield and <BLOOD MAGIC> in the state's notebox for blood magic.
#----------------------------------------------------------------------------
# [ADVT] Mana Shield and Blood Magic
#
# Compatibility: High
# Difficulty: Easy
#
# Description:
# Mana Shield is a state that causes damage to be subtracted from
# MP instead of HP. However, if you do not have enough MP, the remaining damage
# will be subtracted from HP.
#
# Blood Magic is a state that causes you to pay HP to use skills instead of MP.
# However, if you do not have enough HP to use the skill, the skill can not be used.
#
# Notetags:
# Add <MANA SHIELD> in the notebox of the state you want to be mana shield.
# Add <BLOOD MAGIC> in the notebox of the state you want to be blood magic.
#
# Alias - Game_ActionResult > make_damage
# New Method - Game_BattlerBase > bloodmagic?
# Alias - Game_BattlerBase > skill_mp_cost
# Alias - Game_BattlerBase > skill_cost_payable?
# Alias - Game_BattlerBase > pay_skill_cost
#
# For maximum compatibility, place this script below all other scripts.
#
# Credit not required.
# Credit "Adventurer_inc" if you want.
#
#----------------------------------------------------------------------------
class Game_ActionResult
#--------------------------------------------------------------------------
# * Alias: Calculate Damage
#--------------------------------------------------------------------------
alias advt_make_damage make_damage
def make_damage(value, item)
advt_make_damage(value, item)
manashielded = false
@battler.states.each{|state| manashielded = true if state.note.include?("<MANA SHIELD>")}
if manashielded && @battler.mp > 0
overdamage = @hp_damage - @battler.mp
@mp_damage += @hp_damage
@hp_damage = (overdamage > 0 ? overdamage : 0)
end
@success = false unless item.damage.to_hp? || @mp_damage != 0
end
end
#--------------------------------------------------------------------------
# END- class Game_ActionResult
#--------------------------------------------------------------------------
class Game_BattlerBase
#--------------------------------------------------------------------------
# * New Method: bloodmagic?: for simplicity
#--------------------------------------------------------------------------
def bloodmagic?
return false if self == nil
bloodmagic = false
self.states.each{|state| bloodmagic = true if state.note.include?("<BLOOD MAGIC>")}
return bloodmagic
end
#--------------------------------------------------------------------------
# * Alias: Calculate Skill's MP Cost
#--------------------------------------------------------------------------
alias advt_skill_mp_cost skill_mp_cost
def skill_mp_cost(skill)
bloodmagic? ? 0 : advt_skill_mp_cost(skill)
end
#--------------------------------------------------------------------------
# * Alias: Determine if Cost of Using Skill Can Be Paid
#--------------------------------------------------------------------------
alias advt_skill_cost_payable? skill_cost_payable?
def skill_cost_payable?(skill)
return false if bloodmagic? && hp < (skill.mp_cost * mcr).to_i
advt_skill_cost_payable?(skill)
end
#--------------------------------------------------------------------------
# * Alias: Pay Cost of Using Skill
#--------------------------------------------------------------------------
alias advt_pay_skill_cost pay_skill_cost
def pay_skill_cost(skill)
self.hp -= (skill.mp_cost * mcr).to_i if bloodmagic?
advt_pay_skill_cost(skill)
end
end
#--------------------------------------------------------------------------
# END- class Game_BattlerBase
#--------------------------------------------------------------------------