Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

changing how Shield/Barrier work

I am trying to modify the scripts so that if a party member has the Barrier state, then the final calculated damage that they take will be split in half, rather than the state simply changing their PDEF. I'd like the same for Shield too.

I tried modifying a section in Game_Battler 3 to this:

Code:
 

      # If damage value is strictly positive

      if self.damage > 0

        # Guard correction

        if self.guarding?

          self.damage /= 2

        end

        # Barrier state (added by ImmuneEntity)

        if self.state?(14) #14 is the Barrier state ID

          self.damage /= 2

        end

      end

For some reason, it doesn't work. If the party member has state 14, the damage does not change. Does anyone have an idea of how to get this working?
 
use this:

[rgss] 
class Game_Battler
#------------------------------------------------------------------------
  # * Applying Normal Attack Effects
  #     attacker : battler
  #----------------------------------------------------------------------
  def attack_effect(attacker)
    # Clear critical flag
    self.critical = false
    # First hit detection
    hit_result = (rand(100) < attacker.hit)
    # If hit occurs
    if hit_result == true
      # Calculate basic damage
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      # Element correction
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        # Critical correction
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end
      # Dispersion
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Second hit detection
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    if self.guarding? || self.state?(14)
      self.damage /= 2
    end
    # If hit occurs
    if hit_result == true
      # State Removed by Shock
      remove_states_shock
      # Substract damage from HP
      self.hp -= self.damage
      # State change
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    # When missing
    else
      # Set damage to "Miss"
      self.damage = "Miss"
      # Clear critical flag
      self.critical = false
    end
    # End Method
    return true
  end
end
 
[/rgss]

I tested it, and it works fine.
 
Thanks, I see now what I was doing wrong. I was accidentally modifying the wrong section of code, but I guess I was on the right track :) Just couldn't figure out why it wasn't working.

Thanks for the help!
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top