Delayed damage, delayed healing
Thu, 05 Jun 2008 08:23:04 -0400 - Author:
This script is for RPG Maker VX. It implements "delayed damage" and "delayed healing". To use it, the delayed damage/healing state should have a note containing [DelayedDamageState: X] or [DelayedHealState: X], respectively, where X can be either a number or a percentage. The damage or healing effect triggers as soon as the state is removed naturally, and not when the state is removed from an effect. The code is below.
class Game_Battler
def setHPDamage(amount)
@missed=false
@hp_damage=amount
@mp_damage=0
@evaded=false
@absorbed=false
execute_damage(nil)
end
end
class Scene_Battle
alias :petero_delayedHeal_remove_states_auto :remove_states_auto
@@_DelayedHealStates=nil
@@_DelayedDamageStates=nil
def remove_states_auto
petero_delayedHeal_remove_states_auto
if @@_DelayedHealStates==nil
@@_DelayedHealStates={}
@@_DelayedDamageStates={}
for dataState in $data_states
next if !dataState
dataState.note.gsub!(/\[DelayedHealState\:\s*(\d+)\]/i){
@@_DelayedHealStates[dataState.id]=$1.to_i; next ""
}
dataState.note.gsub!(/\[DelayedHealState\:\s*(\d+)%\]/i){
@@_DelayedHealStates[dataState.id]=-($1.to_i); next ""
}
dataState.note.gsub!(/\[DelayedDamageState\:\s*(\d+)\]/i){
@@_DelayedDamageStates[dataState.id]=$1.to_i; next ""
}
dataState.note.gsub!(/\[DelayedDamageState\:\s*(\d+)%\]/i){
@@_DelayedDamageStates[dataState.id]=-($1.to_i); next ""
}
end
end
damage=0
for state in @@_DelayedHealStates.keys
if @active_battler.removed_states.include?($data_states[state])
amt=@@_DelayedHealStates[state]
if amt<0
damage-=@active_battler.maxhp*(-amt)/100
else
damage-=amt
end
end
end
if damage!=0
@active_battler.setHPDamage(damage)
display_damage(@active_battler)
display_state_changes(@active_battler)
wait(25)
end
damage=0
for state in @@_DelayedDamageStates.keys
if @active_battler.removed_states.include?($data_states[state])
amt=@@_DelayedDamageStates[state]
if amt<0
damage+=@active_battler.maxhp*(-amt)/100
else
damage+=amt
end
end
end
if damage!=0
@active_battler.setHPDamage(damage)
display_damage(@active_battler)
display_state_changes(@active_battler)
wait(25)
end
end
end
