#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Absorb HP/SP Skill by Blizzard
# Version: 2.0b
# Type: Enhanced Skill
# Date: 8.5.2006
# Date v1.7b: 14.11.2006
# Date v1.72b: 20.10.2007
# Date v1.8b: 20.3.2008
# Date v2.0b: 13.7.2008
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# new in v1.7b:
# - overworked code, fixed bugs and glitches, added "undead SP"
#
# new in v1.72b:
# - slightly improved code and slight system change
#
# new in v1.8b:
# - fixed a bug with SP absorbing that would kill an enemy instead of taking
# all remaining SP
#
# new in v2.0b:
# - enhanced compatibility with Full Reflection System and Blizz-ABS
#
# Just include all the skill IDs that are supposed to steal HP/SP. You can
# also define undead enemies who will (due to common belief...) revert the HP
# absorb effect. Also you may add any IDs of enemies who use the same undead
# effect, but on SP. Just add the IDs into UNDEAD_SP. Note that you can make
# enemies who only are "undead" for HP stealing, SP stealing or even both.
#
# Note:
# If you let a skill steal both HP and SP, only HP will be stolen.
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# START Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SKILL_IDS_HP = [24,42,116,275,293,575,613,621,622,623,629,682,734] # add any Skill IDs and separate them with commas
SKILL_IDS_SP = [63,117] # add any Skill IDs and separate them with commas
UNDEAD_IDS = [] # add IDS and separate them with commas
UNDEAD_SP = [] # add IDS and separate them with commas
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
# END Configuration
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#==============================================================================
# Game_Battler
#==============================================================================
class Game_Battler
alias skill_effect_hpsp_absorb_later skill_effect
def skill_effect(user, skill)
last_hp = self.hp
last_sr = self.sr if $crls && self.is_a?(Game_Actor)
result = skill_effect_hpsp_absorb_later(user, skill)
if $game_system.ABSORB_HP_SP && self.damage.is_a?(Numeric)
if SKILL_IDS_SP.include?(skill.id)
self.sr = last_sr if $crls && self.is_a?(Game_Actor)
if user != self
if self.is_a?(Game_Enemy) && UNDEAD_SP.include?(self.id)
self.damage = -self.damage
end
if self.sp >= self.damage
self.sp -= self.damage
else
self.damage, self.sp = self.sp, 0
end
else
self.damage = 0
end
elsif SKILL_IDS_HP.include?(skill.id)
lost_hp = last_hp - self.hp
self.sr = last_sr if $crls && self.is_a?(Game_Actor)
if user != self
if self.is_a?(Game_Enemy) && UNDEAD_IDS.include?(self.id)
self.damage = -self.damage
end
self.damage = lost_hp
else
self.damage = 0
end
end
end
return result
end
end
#==============================================================================
# Scene_Battle
#==============================================================================
class Scene_Battle
alias update_phase4_step5_hpsp_absorb_later update_phase4_step5
def update_phase4_step5(battler = nil)
if $game_system.ABSORB_HP_SP
@status_window.refresh
@help_window.visible, damages = false, 0
@target_battlers.each {|target|
if target.damage != nil
target.damage_pop = true
damages += target.damage if target.damage.is_a?(Numeric)
end}
if check_absorb(@active_battler, @active_battler.current_action.skill_id,
damages)
@status_window.refresh
end
@skill, @phase4_step = nil, 6
elsif battler == nil
update_phase4_step5_hpsp_absorb_later
else
update_phase4_step5_hpsp_absorb_later(battler)
end
end
def check_absorb(user, id, damage)
if (SKILL_IDS_HP | SKILL_IDS_SP).include?(id)
if SKILL_IDS_HP.include?(id)
user.hp += damage
elsif SKILL_IDS_SP.include?(id)
user.sp += damage
end
user.damage, user.damage_pop = -damage, true
return true
end
return false
end
end