Delayed damage, delayed healing

Thu, 05 Jun 2008 12:23:04 +0000 - Author: Peter O.
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


Discussion

Other Formats