[VX ACE] STORING DAMAGE DEALT INTO A VARIABLE?
Posts
Pages:
1
Haven't been lucky trying to find an answer for this one so far, but is there a way to store the damage dealt by an enemy into a variable during a battle? I'm looking to create a skill that uses the number in said variable in its damage formula.
Alright, I'll whip something up. I'll use three variables: Cumulative over battle, cumulative over turn, and last damage received that you can do as you wish. I assume on your gameprofiles this is for Ace then?
Durf, it's right there in the topic title. Not sure if you want it stored in an actual $game_variables or not so I did it both ways.
This will track everybody's hp damage from the last time they took damage. It won't record healing or no-damage actions that targeted a battler. All battlers have this information recorded but when actors take damage the value is stored in a variable. The variable is ID# ActorDamageIDStart in sets of three. The first number is last damage received (reset when taken new damage), the second is damage taken this turn (reset at the start of the next turn), the third is damage taken the entire battle (reset on the start of battle). The variables are read only, changing them won't affect the actors themselves but I can change that if needed. You can access anybody's last damage via hp_damage_last, hp_damage_turn, and hp_damage_battle and change them freely.
Here's a demo project. Fight the two slimes in the first troops with Eric and Natalie. Both have the same three moves that work based on the last damage taken / damage taken this turn / damage taken over the battle (this one even resets itself!).
ActorDamageIDStart = 1 class Game_Battler < Game_BattlerBase # Make these available to be read by anyone (and set too just in case) attr_accessor :hp_damage_last, :hp_damage_turn, :hp_damage_battle alias :initialize_remember_damage :initialize unless $@ def initialize(*args) initialize_remember_damage(*args) # Set our last damage taken arguments to zero @hp_damage_last = @hp_damage_turn = @hp_damage_battle = 0 end # When the battler takes damage remember that HP damage alias :execute_damage_remember_damage :execute_damage unless $@ def execute_damage(user) # Call the original method execute_damage_remember_damage(user) # We want to record damage only, not healing return if @result.hp_damage <= 0 # Remember this actor's last damage taken, override last value @hp_damage_last = @result.hp_damage # Add to the cumulative turn damage here @hp_damage_turn += @result.hp_damage # And add to the battle cumulative damage here @hp_damage_battle += @result.hp_damage end end class Game_Actor < Game_Battler alias :execute_damage_remember_damage_actor :execute_damage unless $@ def execute_damage(user) # Call the original method so hp damage is applied correctly execute_damage_remember_damage_actor(user) # We want to record damage only, not healing return if @result.hp_damage <= 0 # We want to remember the damage taken in variables too, do so here index = (@actor_id - 1) * 3 + ActorDamageIDStart # Remember this actor's last damage taken, override last value $game_variables[index + 0] = @hp_damage_last # Add to the cumulative turn damage here $game_variables[index + 1] = @hp_damage_turn # And add to the battle cumulative damage here $game_variables[index + 2] = @hp_damage_battle end end class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # * Battle Start #-------------------------------------------------------------------------- alias :battle_start_remember_damage :battle_start unless $@ def battle_start # Call the original method battle_start_remember_damage # And wipe everybody's battle-scope damage $game_party.members.each { |member| member.hp_damage_battle = 0 } $game_troop.members.each { |member| member.hp_damage_battle = 0 } end #-------------------------------------------------------------------------- # * Start Turn #-------------------------------------------------------------------------- alias :turn_start_remember_damage :turn_start unless $@ def turn_start # Call the original method turn_start_remember_damage # And wipe everybody's turn-scope damage $game_party.members.each { |member| member.hp_damage_turn = 0 } $game_troop.members.each { |member| member.hp_damage_turn = 0 } end end
This will track everybody's hp damage from the last time they took damage. It won't record healing or no-damage actions that targeted a battler. All battlers have this information recorded but when actors take damage the value is stored in a variable. The variable is ID# ActorDamageIDStart in sets of three. The first number is last damage received (reset when taken new damage), the second is damage taken this turn (reset at the start of the next turn), the third is damage taken the entire battle (reset on the start of battle). The variables are read only, changing them won't affect the actors themselves but I can change that if needed. You can access anybody's last damage via hp_damage_last, hp_damage_turn, and hp_damage_battle and change them freely.
Here's a demo project. Fight the two slimes in the first troops with Eric and Natalie. Both have the same three moves that work based on the last damage taken / damage taken this turn / damage taken over the battle (this one even resets itself!).
Nice. I'll test it out this weekend. Would I need to insert this as its own seperate script, or would I need to insert it elsewhere?
Insert as its own script after materials and before main. See the demo project for an example where to put it and how to use it. Yell at me if you see something not working and I'll try to fix it.
It works perfectly. No conflicting scripts or anything of the sort. Now I just need to figure out who in my game could put it to use. Thanks so much, I needed something like this. I'll definetly make sure to credit you in my game.
Pages:
1