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.

Rounding numbers in RMXP? RESOLVED

Hey,

So I've been getting real adventurous messing around with scripts, and I have something going. All I need for it to fully work is some way to round a number to -7 places. I found a term "round_to(x)" which RPG Maker didn't seem to recognize. Please help and remember that I don't actually know how to script when replying.
 
Uggh I feel really stupid making all these requests but I don't know what I'm doing and it's better than getting someone else to do everything for me.

I changed some of the formulas around to my liking and unfortunately I've made the ends not add up or something. I added ends all through the script and tried different things in different places, but... help!

Code:
#==============================================================================

# ** Game_Battler (part 3)

#------------------------------------------------------------------------------

#  This class deals with battlers. It's used as a superclass for the Game_Actor

#  and Game_Enemy classes.

#==============================================================================

 

class Game_Battler

  #--------------------------------------------------------------------------

  # * Determine Usable Skills

  #     skill_id : skill ID

  #--------------------------------------------------------------------------

  def skill_can_use?(skill_id)

    # If there's not enough SP, the skill cannot be used.

    if $data_skills[skill_id].sp_cost > self.sp

      return false

    end

    # Unusable if incapacitated

    if dead?

      return false

    end

    # If silent, only physical skills can be used

    if $data_skills[skill_id].atk_f == 0 and self.restriction == 1

      return false

    end

    # Get usable time

    occasion = $data_skills[skill_id].occasion

    # If in battle

    if $game_temp.in_battle

      # Usable with [Normal] and [Only Battle]

      return (occasion == 0 or occasion == 1)

    # If not in battle

    else

      # Usable with [Normal] and [Only Menu]

      return (occasion == 0 or occasion == 2)

    end

  end

  #--------------------------------------------------------------------------

  # * Apply Skill Effects

  #     user  : the one using skills (battler)

  #     skill : skill

  #--------------------------------------------------------------------------

  def skill_effect(user, skill)

    # Clear critical flag

    self.critical = false

    # If skill scope is for ally with 1 or more HP, and your own HP = 0,

    # or skill scope is for ally with 0, and your own HP = 1 or more

    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or

       ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)

      # End Method

      return false

    end

    # Clear effective flag

    effective = false

    # Set effective flag if common ID is effective

    effective |= skill.common_event_id > 0

    end

    # Calculate power

    if skill.power != 0

    power = (skill.power*100 / (self.pdef * skill.pdef_f ) / (self.mdef * skill.mdef_f)

      power = [power, 0].max

      self.damage = power

      self.damage *= ((user.str * (skill.str_f))) / 2

      self.damage *= ((user.int * (skill.inf_f))) / 2

      self.damage.round_to(-8)

      self.damage /= 100000000

      # Element correction

    self.damage *= elements_correct(skill.element_set)

    self.damage /= 100

      # If damage value is strictly positive

      if self.damage > 0

      # Guard correction

      if self.guarding?

        self.damage /= 3

      # Critical correction

      if rand(100) < skill.dex_f

        self.damage *= 2

        self.critical = true

      end

      end

    # Dispersion

    if skill.variance > 0 and self.damage.abs > 0

      amp = [self.damage.abs * skill.variance / 100, 1].max

      self.damage += rand(amp+1) + rand(amp+1) - amp

    end

    # Second hit detection

    acc = skill.hit

    if skill.atk_f > 0

      acc += user.hit - 100

    end

    eva = self.eva * skill.eva_f / 100

    hit = self.damage < 0 ? acc : acc - eva

    hit = self.cant_evade? ? acc : hit

    hit_result = (rand(100) < hit)

    # Set effective flag if skill is uncertain

    effective |= hit < 100

    # If hit occurs

    if hit_result == true

      # If physical attack has power other than 0

      if skill.power != 0 and skill.atk_f > 0

        # State Removed by Shock

        remove_states_shock

        # Set to effective flag

        effective = true

        end

      end

      # Substract damage from HP

      last_hp = self.hp

      self.hp -= self.damage

      effective |= self.hp != last_hp

      # State change

      @state_changed = false

      effective |= states_plus(skill.plus_state_set)

      effective |= states_minus(skill.minus_state_set)

      # If power is 0

      if skill.power == 0

        # Set damage to an empty string

        self.damage = ""

        # If state is unchanged

        unless @state_changed

          # Set damage to "Miss"

          self.damage = "Miss"

        end

    # If miss occurs

    else

      # Set damage to "Miss"

      self.damage = "Miss"

          # Clear critical flag

    self.critical = false

    end

    # If not in battle

    unless $game_temp.in_battle

      # Set damage to nil

      self.damage = nil

    end

    # End Method

    return effective

 

  #--------------------------------------------------------------------------

  # * Application of Item Effects

  #     item : item

  #--------------------------------------------------------------------------

  def item_effect(item)

    # Clear critical flag

    self.critical = false

    # If item scope is for ally with 1 or more HP, and your own HP = 0,

    # or item scope is for ally with 0 HP, and your own HP = 1 or more

    if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or

       ((item.scope == 5 or item.scope == 6) and self.hp >= 1)

      # End Method

      return false

    end

    # Clear effective flag

    effective = false

    # Set effective flag if common ID is effective

    effective |= item.common_event_id > 0

    # Determine hit

    hit_result = (rand(100) < item.hit)

    # Set effective flag is skill is uncertain

    effective |= item.hit < 100

    # If hit occurs

    if hit_result == true

      # Calculate amount of recovery

      recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp

      recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp

      if recover_hp < 0

        recover_hp += self.pdef * item.pdef_f / 20

        recover_hp += self.mdef * item.mdef_f / 20

        recover_hp = [recover_hp, 0].min

      end

      # Element correction

      recover_hp *= elements_correct(item.element_set)

      recover_hp /= 100

      recover_sp *= elements_correct(item.element_set)

      recover_sp /= 100

      # Dispersion

      if item.variance > 0 and recover_hp.abs > 0

        amp = [recover_hp.abs * item.variance / 100, 1].max

        recover_hp += rand(amp+1) + rand(amp+1) - amp

      end

      if item.variance > 0 and recover_sp.abs > 0

        amp = [recover_sp.abs * item.variance / 100, 1].max

        recover_sp += rand(amp+1) + rand(amp+1) - amp

      end

      # If recovery code is negative

      if recover_hp < 0

        # Guard correction

        if self.guarding?

          recover_hp /= 2

        end

      end

      # Set damage value and reverse HP recovery amount

      self.damage = -recover_hp

      # HP and SP recovery

      last_hp = self.hp

      last_sp = self.sp

      self.hp += recover_hp

      self.sp += recover_sp

      effective |= self.hp != last_hp

      effective |= self.sp != last_sp

      # State change

      @state_changed = false

      effective |= states_plus(item.plus_state_set)

      effective |= states_minus(item.minus_state_set)

      # If parameter value increase is effective

      if item.parameter_type > 0 and item.parameter_points != 0

        # Branch by parameter

        case item.parameter_type

        when 1  # Max HP

          @maxhp_plus += item.parameter_points

        when 2  # Max SP

          @maxsp_plus += item.parameter_points

        when 3  # Strength

          @str_plus += item.parameter_points

        when 4  # Dexterity

          @dex_plus += item.parameter_points

        when 5  # Agility

          @agi_plus += item.parameter_points

        when 6  # Intelligence

          @int_plus += item.parameter_points

        end

        # Set to effective flag

        effective = true

      end

      # If HP recovery rate and recovery amount are 0

      if item.recover_hp_rate == 0 and item.recover_hp == 0

        # Set damage to empty string

        self.damage = ""

        # If SP recovery rate / recovery amount are 0, and parameter increase

        # value is ineffective.

        if item.recover_sp_rate == 0 and item.recover_sp == 0 and

           (item.parameter_type == 0 or item.parameter_points == 0)

          # If state is unchanged

          unless @state_changed

            # Set damage to "Miss"

            self.damage = "Miss"

          end

        end

      end

    # If miss occurs

    else

      # Set damage to "Miss"

      self.damage = "Miss"

    end

    # If not in battle

    unless $game_temp.in_battle

      # Set damage to nil

      self.damage = nil

    end

    # End Method

    return effective

  end

  #--------------------------------------------------------------------------

  # * Application of Slip Damage Effects

  #--------------------------------------------------------------------------

  def slip_damage_effect

    # Set damage

    self.damage = self.maxhp / 10

    # Dispersion

    if self.damage.abs > 0

      amp = [self.damage.abs * 15 / 100, 1].max

      self.damage += rand(amp+1) + rand(amp+1) - amp

    end

    # Subtract damage from HP

    self.hp -= self.damage

    # End Method

    return true

  end

  #--------------------------------------------------------------------------

  # * Calculating Element Correction

  #     element_set : element

  #--------------------------------------------------------------------------

  def elements_correct(element_set)

    # If not an element

    if element_set == []

      # Return 100

      return 100

    end

    # Return the weakest object among the elements given

    # * "element_rate" method is defined by Game_Actor and Game_Enemy classes,

    #    which inherit from this class.

    weakest = -100

    for i in element_set

      weakest = [weakest, self.element_rate(i)].max

    end

    return weakest

  end

end

 
 
When you're writing scripts, always make sure your indenting and formatting is correct. It definitely helps with syntax errors; I can see an extra end on line 57. Go through the rest of your script and start formatting, and you'll be sure to spot any other errors.

As a side note, you may want to google some basic tutorials if you're serious about learning RGSS. Getting down the basic coding conventions, variables, arrays, etc. will really help in the long run.
 

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