The RPG Maker Resource Kit

RMRK RPG Maker Creation => RPG Maker General => General Scripting => Topic started by: dudeguy119 on June 26, 2013, 04:57:36 PM

Title: [VX]Attempting to create skill with damage based on variable, having problem
Post by: dudeguy119 on June 26, 2013, 04:57:36 PM
I actually am not really sure what the problem is. I know the code is working. The only part that isn't is the part
where its supposed to read the chosen variable as the integer. Here's the code:

     
Code: [Select]
#----------------------------------------------------------------------
      # <damage: -x variable hp>   <damage: +x variable hp>
      # <damage: -x variable mp>   <damage: +x variable mp>
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      # This will cause MP and HP damage based on variable X. This damage is
      # affected by variance criticals, elements, and guarding.
      # --- Example --- - - - - - - - - - - - - - - - - - - - - - - - - - - -
      # <damage: -20 variable hp>
      # <damage: -20 variable hp>
      #----------------------------------------------------------------------
      when /([\+\-]\d+)[ ]VARIABLE[ ](.*)/i
        var = $game_variables[$1.to_i].to_i
        case $2.to_s
        when "HP"
          hp_dmg = var
        when "MP", "SP"
          mp_dmg = var
        end
        healing_formula = true if var < 0
        ignore_elements = false
        ignore_variance = false
        ignore_critical = false
        ignore_guarding = false
        ignore_inflates = false

The code is derived from another melody code, which it only differs from slightly (and I know this one works under the same conditions I set for my new code):

     
Code: [Select]
#----------------------------------------------------------------------
      # <damage: -x% current hp>   <damage: +x% current hp>
      # <damage: -x% current mp>   <damage: +x% current mp>
      # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      # This will cause the target to lose x% of their current HP or MP. If
      # a negative value is used for x, then the target will take damage of
      # that percent. If the value is positive, the target will recover that
      # percent instead. The damage is unaffected by variance, criticals, and
      # elements and guarding.
      # --- Example --- - - - - - - - - - - - - - - - - - - - - - - - - - - -
      # <damage: +50% current hp>
      # <damage: -25% current mp>
      #----------------------------------------------------------------------
      when /([\+\-]\d+)([%?])[ ]CURRENT[ ](.*)/i
        percent = $1.to_i
        case $3.to_s
        when "HP"
          hp_dmg = target.hp * percent / -100
        when "MP", "SP"
          mp_dmg = target.mp * percent / -100
        end
        healing_formula = true if percent > 0
        ignore_elements = true
        ignore_variance = true
        ignore_critical = true
        ignore_guarding = true
        ignore_inflates = true

I think its breaking down where its supposed to read the variable as an integer, but I don't understand why, seeing as I've done this sort of thing before with variables. When I try to use it in battle, I get 0 damage. I feel like the answer is pretty basic, but it isn't coming to me. I'm going to continue looking. 

EDIT: Just as a clarification, I know the code is being read and performed in battle. That can't be the problem. I know because when I futz with the code and put in a value that's not defined, it kicks back an error message when the enemy attempts to use the skill. So, as far as I can tell, it is performing the operations when the skill is being used, and I haven't overlooked anything when it comes to actually getting the operation to perform.

EDIT 2: Okay, I did some experimenting and it is definitely the part where it is supposed to convert the value of the variable into an integer. Thing is, I've done this before, so I have no idea why it won't read the variable's value as the damage value. Any help would be appreciated.
Title: Re: [VX]Attempting to create skill with damage based on variable, having problem
Post by: modern algebra on June 28, 2013, 04:20:05 PM
I don't have time to look at this in any detail right now, as I am about to leave for a trip and need to pack, but one quick thing that I've noticed is that your REGEXP accepts any lowercase or uppercase string for your second group, but you are only checking for uppercase incarnations in your case branch. Thus, nothing would be read if you had:

-20 variable hp

It would need to be:

-20 variable HP

To fix that, you could change the case line from:

Code: [Select]
case $2.to_s

to:

Code: [Select]
case $2.upcase

Also, $ results from a match are all strings, so no need to covert them.