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.

Near death stat increase

I need a script for this since if I did it, I'd probably end up erasing the game from my computer.

Timmy is down to 40% of his maximum HP. I want his attack power to increase, and keep increasing as his health further declines.

Also, this will need to apply to the other three party members, each member recieving a different stat boost.
 
I'd tell you to do a search, but I'm not sure you'd have found it if you did. It's only a few pages back, and it allows more customization than that.

Cornered Battle Statistics

EDIT: actually, my version is for XP. I'l have to make a quick mod to make it work for VX. Just a minute.

Here, this version is for VX:

Code:
#==============================================================================
# ** Glitchfinder's Cornered Battle Statistics (Version 1.00)
#------------------------------------------------------------------------------
#  This script helps game designers to manipulate the statistics of an enemy or
#  character based on their remaining HP.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# * Version History
#  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
#   Version 1 ---------------------------------------------------- (2008-08-10)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# * Instructions
#  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
#  Place this script above Main, and below the default scripts. (I realize this
#  is obvious to most, but some people don't get it.)
#
#  To change the default percentage of HP at which an enemy will start
#  experiencing stat changes, edit the values in the Enemy_Percent array within
#  the Conrnered_Stats module. Each value corresponds to a specific enemy, with
#  the first being enemy 001 (The default is Slime), the second being enemy 002
#  (Bat), and so on.
#
#  To change the default percentage of HP at which an actor will start
#  experiencing stat changes, edit the values in the Actor_Percent array within
#  the Cornered_Stats module. This array follows the same rule as the
#  Enemy_Percent array mentioned above.
#
#  To modify the maximum percentage that an enemy's stats can change, edit the
#  values in the Enemy_Percent_Change array in the Cornered_Stats module. The
#  order of the values is Attack, Defense, Spirit, and Agility. The first row
#  is the first enemy in the database, (Ghost), the second row is the second
#  enemy in the database (Basilisk), and so on.
#
#  To modify the maximum percentage that an actor's stats can change, edit the
#  values in the Actor_Percent_Change array in the Cornered_Stats module. The
#  rules are the same as within the Enemy_Percent_Change array mentioned above.
#
#  The percentages placed within the Enemy_Percent and Actor_Percent arrays must
#  be in the decimal forma, while those placed within the Enemy_Percent_Change
#  and Actor_Percent_Change arrays must be placed as a percentage, minus the %
#  symbol.
#
#  The percentages in the Enemy_Percent_Change and the Actor_Percent_Change
#  arrays may be either negative or positive, while those placed in the
#  Enemy_Percent and Actor_Percent arrays must be positive.
#
#  If you do not want an enemy or actor to recive stat changes, then put nil in
#  the proper location in the Enemy_Percent or Actor_Percent arrays.
#
#  If you have designated an enemy or actor as unable to recieve stat changes,
#  you must still define their row in their place in the Enemy_Percent_Change or
#  Actor_Percent_Change arrays by placing a 0 in each stat.
#
#  The amount that an enemy's or an actor's stats will change when this script
#  comes into effect depends upon their remaining HP. The remaining HP is
#  divided by the threshhold, and then is multiplied by the percent that the
#  stat can change.(The threshhold is the amount of HP that corresponds to the
#  percent defined in the Enemy_Percent or Actor_Percent arrays of the
#  Cornered_Stats module.)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# * Advice
#  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
#  This script is meant for people with at least basic scripting knowledge. It
#  may be difficult to use, and thus, if you are unsure of your abilities, it
#  may be simpler to avoid using this script.
#
#  I would recommend leaving the percentages within the Enemy_Percent_Change and
#  Actor_Percent_Change arrays low, due to large stat distortions that may
#  occur. (For example, even minor changes in one or two stats will render an
#  enemy either unable to hit an actor or able to hit an actor every time)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# * Usage
#  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -
#  This script may be used in any commercial or non-commercial project.
#
#  Please credit Glitchfinder if you use this script.
#==============================================================================

#==============================================================================
# ** Cornered_Stats
#------------------------------------------------------------------------------
#  This module deals with values used in an addition to the battle system. Its
#  used within the Game_Battler and Scene_Battle classes.
#==============================================================================
module Cornered_Stats
  Enemy_Percent = [0.75, 0.25, 0.30, 0.40, 0.35, nil, nil, nil, nil, nil, nil,
                    nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
                    nil, nil, nil, nil, nil, nil, nil, nil, nil]
  Actor_Percent = [0.15, nil, nil, nil, nil, nil, nil, nil]
  Enemy_Percent_Change = [
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
  ]
  Actor_Percent_Change = [
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
  ]
end

#==============================================================================
# ** Game_Battler
#------------------------------------------------------------------------------
#  This class deals with battlers. Its used as a superclass for the Game_Actor
#  and Game_Enemy classes.
#==============================================================================

class Game_Battler
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  alias glitchfinder_cornered_stats_initialize initialize
  def initialize
    glitchfinder_cornered_stats_initialize
    @atk_change = 0
    @def_change = 0
    @spi_change = 0
    @agi_change = 0
    @atk_change = 0
    @pdef_change = 0
    @mdef_change = 0
    @eva_change = 0
  end
  #--------------------------------------------------------------------------
  # * Get Attack
  #--------------------------------------------------------------------------
  def atk
    n = [[base_atk + @atk_plus + @atk_change, 1].max, 999].min
    for state in states do n *= state.atk_rate / 100.0 end
    n = [[Integer(n), 1].max, 999].min
    return n
  end
  #--------------------------------------------------------------------------
  # * Get Defense
  #--------------------------------------------------------------------------
  def def
    n = [[base_def + @def_plus + @def_change, 1].max, 999].min
    for state in states do n *= state.def_rate / 100.0 end
    n = [[Integer(n), 1].max, 999].min
    return n
  end
  #--------------------------------------------------------------------------
  # * Get Spirit
  #--------------------------------------------------------------------------
  def spi
    n = [[base_spi + @spi_plus + @spi_change, 1].max, 999].min
    for state in states do n *= state.spi_rate / 100.0 end
    n = [[Integer(n), 1].max, 999].min
    return n
  end
  #--------------------------------------------------------------------------
  # * Get Agility
  #--------------------------------------------------------------------------
  def agi
    n = [[base_agi + @agi_plus + @agi_change, 1].max, 999].min
    for state in states do n *= state.agi_rate / 100.0 end
    n = [[Integer(n), 1].max, 999].min
    return n
  end
  #--------------------------------------------------------------------------
  # * Set Attack Power Modifier
  #     atk : new Attack Power
  #--------------------------------------------------------------------------
  def atk_modifier=(atk)
    @atk_change = atk
  end
  #--------------------------------------------------------------------------
  # * Set Attack Power Modifier
  #     atk : new Attack Power
  #--------------------------------------------------------------------------
  def def_modifier=(defense)
    @def_change = defense
  end
  #--------------------------------------------------------------------------
  # * Set Spirit Modifier
  #     atk : new Attack Power
  #--------------------------------------------------------------------------
  def spi_modifier=(spi)
    @spi_change = spi
  end
  #--------------------------------------------------------------------------
  # * Set Agility Modifier
  #     atk : new Attack Power
  #--------------------------------------------------------------------------
  def agi_modifier=(agi)
    @agi_change = agi
  end
  #--------------------------------------------------------------------------
  # * Get Cornered Stats
  #--------------------------------------------------------------------------
  def cornered_stats(percent_change)
    cornered_atk(percent_change)
    cornered_def(percent_change)
    cornered_spi(percent_change)
    cornered_agi(percent_change)
  end
  #--------------------------------------------------------------------------
  # * Get Cornered Attack
  #--------------------------------------------------------------------------
  def cornered_atk(percent_change)
    atk_formula = (8 * (self.id)) - 8
    if self.is_a?(Game_Enemy)
      atk_change_default = Cornered_Stats::Enemy_Percent_Change[atk_formula]
    else
      atk_change_default = Cornered_Stats::Actor_Percent_Change[atk_formula]
    end
    atk_change_percent = atk_change_default * (percent_change * 100)
    atk_change = (base_atk * atk_change_percent)
    self.atk_modifier = atk_change
  end
  #--------------------------------------------------------------------------
  # * Get Cornered Defense
  #--------------------------------------------------------------------------
  def cornered_def(percent_change)
    def_formula = (8 * (self.id)) - 7
    if self.is_a?(Game_Enemy)
      def_change_default = Cornered_Stats::Enemy_Percent_Change[def_formula]
    else
      def_change_default = Cornered_Stats::Actor_Percent_Change[def_formula]
    end
    def_change_percent = def_change_default * (percent_change * 100)
    def_change = (base_def * def_change_percent)
    self.def_modifier = def_change
  end
  #--------------------------------------------------------------------------
  # * Get Cornered Spirit
  #--------------------------------------------------------------------------
  def cornered_spi(percent_change)
    spi_formula = (8 * (self.id)) - 6
    if self.is_a?(Game_Enemy)
      spi_change_default = Cornered_Stats::Enemy_Percent_Change[spi_formula]
    else
      spi_change_default = Cornered_Stats::Actor_Percent_Change[spi_formula]
    end
    spi_change_percent = spi_change_default * (percent_change * 100)
    spi_change = (base_spi * spi_change_percent)
    self.spi_modifier = spi_change
  end
  #--------------------------------------------------------------------------
  # * Get Cornered Agility
  #--------------------------------------------------------------------------
  def cornered_agi(percent_change)
    agi_formula = (8 * (self.id)) - 5
    if self.is_a?(Game_Enemy)
      agi_change_default = Cornered_Stats::Enemy_Percent_Change[agi_formula]
    else
      agi_change_default = Cornered_Stats::Actor_Percent_Change[agi_formula]
    end
    agi_change_percent = agi_change_default * (percent_change * 100)
    agi_change = (base_agi * agi_change_percent)
    self.agi_modifier = agi_change
  end
end

#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
#  This class handles enemy characters. It's used within the Game_Troop class
# ($game_troop).
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # * Get Enemy ID
  #--------------------------------------------------------------------------
  def id
    return @enemy_id
  end
end

#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
  
  #--------------------------------------------------------------------------
  # * Battle Action Processing
  #--------------------------------------------------------------------------
  def process_action
    return if judge_win_loss
    return if $game_temp.next_scene != nil
    set_next_active_battler
    if @active_battler == nil
      turn_end
      return
    end
    hp_percent = @active_battler.hp.to_f / @active_battler.base_maxhp.to_f
    battler_id = @active_battler.id - 1
    if @active_battler.is_a?(Game_Enemy)
      enemy_cornered_percent = Cornered_Stats::Enemy_Percent[battler_id]
      if enemy_cornered_percent != nil && enemy_cornered_percent.to_s.to_f != 0
        if enemy_cornered_percent.to_s.to_f >= hp_percent
          percent_change = (((enemy_cornered_percent.to_s.to_f *
          @active_battler.base_maxhp) - @active_battler.hp) /
          (enemy_cornered_percent.to_s.to_f * @active_battler.base_maxhp))
          @active_battler.cornered_stats(percent_change.to_f)
        end
      end
    end
    if @active_battler.is_a?(Game_Actor)
      actor_cornered_percent = Cornered_Stats::Actor_Percent[battler_id]
      if actor_cornered_percent != nil && actor_cornered_percent.to_s.to_i != 0
        if actor_cornered_percent.to_s.to_f >= hp_percent
          percent_change = (((actor_cornered_percent.to_s.to_f *
          @active_battler.base_maxhp) - @active_battler.hp) /
          (actor_cornered_percent.to_s.to_f * @active_battler.base_maxhp))
          @active_battler::cornered_stats(percent_change)
        end
      end
    end
    @message_window.clear
    wait(5)
    @active_battler.white_flash = true
    unless @active_battler.action.forcing
      @active_battler.action.prepare
    end
    if @active_battler.action.valid?
      execute_action
    end
    unless @active_battler.action.forcing
      @message_window.clear
      remove_states_auto
      display_current_state
    end
    @active_battler.white_flash = false
    @message_window.clear
  end
end

Honestly, you could at least say thank you. Sheesh, talk about leeching.
 

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