iPhone App Directory
RPG Maker VX
 
Gallery Members Search Calendar Help


Welcome Guest ( Log In | Register )

Collapse

>Announcement

Keep an eye out for the upcoming 3rd Quarter Contest!
5 Pages V   1 2 3 > »   
Reply to this topicStart new topic
> Skill Functions (v 2.3), Lots of extra options for skills and their damage formulas.
Rating 5 V
Mithran
post Dec 21 2008, 02:09 AM
Post #1


Scripter
Group Icon


Type: Coder
Alignment: True Neutral




Skill Functions v 2.3
by Mithran


NOTE: v 2.2 and beyond will have the instructions separated from the actual script due to spoiler tag length. The customization section is with the actual script. It is still recommended that the instructions section be copied in with the script for reference.

Introduction
You know those boxes where you can set attack f and spirit f for skills? Well, why dont they have function boxes for every single stat? Now you do, including any you want to set yourself. Includes various other features.

Features
- Easy setup for most features with note tags
- Function values for every default stat
- An additional, nearly limitless expansion for user defined stats - set as many as you want (see customization section)
- 'Ignore Guard' set to have skills ignore guard
- HP and MP damage scaling - alter the final damage of a skill based on the user's current HP or MP
- recoil damage - set a skill to reflect a certain percent of damage inflicted back onto the user
- damage both HP and MP - allow a single skill to damage to both HP and MP at the same time (also works with absorb check box)
- absorb percent - sets a skill to only absorb a portion of the damage instead of 100%
- HP based weapon - A weapon that gains attack based on a set percentage the actor's current HP.
- HP (inverted) based weapon - A weapon that gains attack based on the actor's missing HP.
- Exact damage - deal an exact amount of damage with a skill
- Non Fatal - A skill that will always leave the target with 1 HP remaining.
- New - Heal on use - Recover a certain amount or percentage of your max hp when a skill connects.

Screenshots
N/a

How to Use
Place it above main on the script list. If you use my critical skills script, you must place it below critical skills for both to work.
Full instructions are here and should be copied above the script for reference.

Instructions and Use:
Spoiler:
CODE
# Skill Functions v 2.3
# by Mithran
# - Last Update Setpember 3, 2009
=begin

Okay, no fancy borders this time, but that stuff was taking wayyy too long.
Here are the simple instructions.

First, a little background on how attack_f and spirit_f work.  Keep in mind that
any skill that heals or ignores defense will bypass the defense portion.

Attack_F -
Approx. 4 points of damage are dealt per Attack point per 100 atk_f.
Approx. 2 points of damage are subtracted per Defense point of the target
per 100 atk_f.

Spirit_F
Approx. 2 points of damage are dealt per Spirit point per 100 spi_f.
Approx. 1 point of damage is subtracted per Spirit point of the target
per 100 spi_f.

Note tags - Input the following in the note box for each skill.
This first set is designed to reproduce attack_f and spirit_f boxes of skills,
but for every single stat.  

*NEW*
<heal hp on use ##>
<heal mp on use ##>
<heal both on use ##>
Each successful hit on the target will also recover the specified amount on the
user.  If you appent a percent sign to the end-
<heal hp on use ##%>
<heal mp on use ##%>
<heal both on use ##%>
It will heal that percentage of the user's maximum HP.  

Example:
<heal hp on use 10%>
Skill user recover's 10% of their maxhp every time the skill connects on a target.
Physical/no damage does not count.

================================================================================

Added 5/9/09 -
<skill function pos>
All custom functions for this skill will be calculated as if the base damage was
a positive number.  Base Attack F and Spirit F functions are calculated normally.
<skill function neg>
All custom functions for this skill will be calculated as if the base damage was
a negaive number.  Base Attack F and Spirit F functions are calculated normally.

Using these settings, you can now have functions that deal a specific amount of
damage or healing without the unsightly +1 or -1.  The intent is to let the user
choose if a '0 base damage' skill is intended to be a heal or a damage spell without
altering the damage itself.  

================================================================================

<hp_f ##> - Sets the hp_f value of the skill.  HP F values differ from all others
in that their rate is further divided by 10.  HP F values are defended by defense.
Approx. 4 points of damage are dealt per HP per 1000 hp_f.
Approx. 2 points of damage are subtracted per defense point of the target
per 100 hp_f.

<mp_f ##> - Sets the mp_f value of the skill.  Works exactly like setting a
spirt_f value except the stat used for the calculation is current MP.  The stat
used for enemy defense is spirit.
Approx. 2 points of damage are dealt per MP per 100 mp_f.
Approx. 1 point of damage is subtracted per Spirit point of the target
per 100 mp_f

<agi_f ##> - Sets the agi_f value of the skill.  Agi_F values work exactly like
spirit_f values, except the stat used for offense is agility, and the stat used
for enemy defense is also agility.
Approx. 2 points of damage are dealt per Agility point per 100 agi_f.
Approx. 1 point of damage is subtracted per agility point of the target
per 100 agi_f
  
<def_f ##> - Sets the def_f value of the skill.  Def_f values work exactly like
attack_f values, except the stat used for offense is defense (yeah, sounds confusing)
The stat used for enemy defense is also defense.
Approx. 4 points of damage are dealt per Defense point per 100 def_f.
Approx. 2 points of damage are subtracted per Defense point of the target
per 100 def_f

<hpi_f ##> - (Hp inverted F) works exaclty like hp_f, except the damage is
calculated based on how much HP is missing
Approx. 4 points of damage are dealt per missing HP per 1000 hpi_f.
Approx. 2 points of damage are subtracted per defense point of the target
per 100 hpi_f.

<mpi_f ##> - (MP inverted F) works exaclty like mp_f, except the damage is
calculated based on how much MP is missing
Approx. 2 points of damage are dealt per missing MP per 100 mpi_f.
Approx. 1 point of damage is subtracted per Spirit point of the target
per 100 mpi_f

<????_f ##> - User defined values are now supported.  See Customization
Section for setup and usage

Other tags for skills:

<ignore_guard> - the skill will deal approxiamtely the same amount of damage
whether or not the target is guarding.

<hp scale xx-yy> - Scales the final damage in the skill calculation based on the
current HP of the user. xx and yy are numbers.  
Example: <hp scale 50-150> - The skill will deal 50% damage when near death, and
150% damage when at full HP

<mp scale xx-yy> - Same as HP scale, except uses MP for the calculation

<hp scale invert xx-yy> Same as HP scale, but inverts the calculation.
Example: <hp scale invert 50-150> - The skill will deal 150% damage when near
death, scaling to 50% damage when at full HP

<mp scale invert xx-yy> - Same as HP scale invert, but uses MP

<recoil ##> - where ## is the percent of damage you want reflected.
Reflects back the given percentage of inflicted damage onto the attacker.
Example: <recoil 10> Would have the user take 10% of the damage he inflicted
every time he hit with the skill.  Also reflects MP damage.

<damage both ##> - This one might be a bit confusing at first.  
By default ## is the percentage of the skill's normal damage you also want to
deal to MP.
Example: <damage both 30> Would deal the skills normal damage to HP, and 30% of
this damage to MP.

However - if you click the damage to MP box, the switch is reversed.
Example: <damage both 30>, Damage to MP box checked
Would deal the skill's normal damage to MP, and 30% of this damage to HP.
Both work with the 'absorb damage' check box.

<nonfatal> - The attack will always leave at least 1 HP remaining on the target
Fairly self explanitory.

<absorb_pct ##> - Absorbs a percent of the damage dealt (rather than all of the
damage dealt).  ## is the percentage.
Example: <absorb_pct 20> on a 1000 damage skill would heal the user for 200 HP

<exact_dmg ##> - Sets the skill to deal exactly this much damage, ignoring all
function values and guard.  It does, however, take into account elements, works
with absorb, 'damage both', 'recoil', can be reduced to nonfatal and supports
negative values as well (for exact recovery).  For true exact damage, just dont
set any elements or nonfatal.

For weapons:
<hpwpn ##> - sets the weapon to add ## percent of the equipper's current HP
to his own attack.  Attack gained from other sources (including the attack on
the weapon itself from the database) will still be valid.  Small percentages are
recommended.  <hpwpn 10> on an actor with 2000 HP would add 200 atk.  As his HP
dropped, the weapon's attack would also drop.

<hpiwpn ##> - sets the weapon to add ## percent of the equipper's missing HP
to his own attack.  Attack gained from other sources (including the attack on
the weapon itself from the database) will still be valid.  Small percentages are
recommended.  <hpiwpn 10> on an actor with 2000/2000 HP would add 0 atk.  As his HP
dropped, the weapon's attack would increase, scaling to approximately 199 atk
(the game rounds down from 199.9) at 1 HP.

Install: Place above main.  If you use my Critical Skills script, place it above
the Critical Skills Script
=end


Demo
None at the moment.

Script
Spoiler:
CODE
# Skill Functions 2.3 by Mithran
# Please do not redistribute without asking.  At the very least, have the decency to include the instruction section.
#===============================================================================
#                             *CUSTOMIZATION*
#===============================================================================

=begin

Okay, here goes the explanation on user defined values.  If you have additional
scripts installed that support additional stats, you can use these for function
values as well.  Some setup is required.  Your note tag will be automatically
created for you as soon as you set up a value in FunctionDamageStats.


Default stat codes are as follows:
  # "hp" - hit points
  # "mp" - magic points
  # "atk" - attack
  # "spi" - spirit
  # "agi" - agility
  # "def" - defense
  # "hit" - Hit chance
  # "eva" - Evasion Chance
  # "cri" - Critical chance
  # "maxhp" - Maximum HP
  # "maxmp" - Maximum MP
  # "level" - Level, for actors ONLY (makes the formula 0 and gives an error
  message for enemies if in test mode)
  
I have added methods for four stat codes myself -
  # "hp_missing" - Amount of HP missing
  # "mp_missing" - Amount of MP missing
  # "hp_pct" - Percentage of HP remaining, expressed as an integer
    # between 0 and 100
  # "mp_pct" - Percentage of MP remaining, expressed as an integer
    # between 0 and 100

Other known values for other scripts:
  # "lck" - Enelvon's Ultimate Luck Script
  # "res" - Enelvon's Magic Resist Script

=end

module Mithran
  module SkillFunctions
    FunctionDamageStats = {  
#-------------------------------------------------------------------------------
    # These first few are the pre-defined for the script.  
    # You dont need to edit these
    # They are here for reference
    
    :hp => "hp", # The stat code used to calculate hp_f
    :mp => "mp", # The stat code used to calculate mp_f
    :agi => "agi", # The stat code used to calculate agi_f
    :def => "def", # The stat code used to calculate def_f
    :hpi => "hp_missing",# The stat code used to calculate hpi_f
    :mpi => "mp_missing", # The stat code used to calculate mpi_f
#------------------------------------------------------------------------------
    ## In this section you add additional function stats
    # The regular format is:
    # :TAG => "CODE" ,
    # Change CODE to the stat code you want to use.
    # Change TAG to the tag you want to use.
    # both the tag and the code should be lowercase
    # On the left side you put the symbol for the stat
    # (This is what the script reads from the note tag before) _f
    # On the right side, in quotes, you put the stat code
    # Dont forget the comma at the end!

    # For example, if you wanted a function value for Enelvon's resist,
    # you would type:  
    :res => "res",
    # The note tag for res would be <res_f ##>
    # You can use whatever combination of lowercase letters you wish for the tag
    # For example:
    # :mdef => "res",
    # would set the <mdef_f ##> note tag to use res as its stat
    # During playtesting, this will give an error message if res is undefined
    # During normal play, it will just be ignored

    # Some other examples include:
    :hit => "hit", #<= Dont forget the comma after each entry
    # To access it with the note tag, you would type <hit_f ##>
    # the following sets critical rate to a function value
    :cri => "cri",
    # To access it with the note tag, you would type <cri_f ##>
    :lvl => "level", # I wont assign a formula for this one
    # It will deal approx 4 damage per actor level per 100 lvl_f

        
    # Define additionals before here
#-------------------------------------------------------------------------------
    } # <= Do not move or change

#-------------------------------------------------------------------------------
    DEFAULT_DAMAGE_FORMULA = "stat * 4 * frate / 100"
    # The default damage formula  used.  stat is the statistic used, and frate
    # is the function value.  This is only used if the damage formula is not
    # rate is not defined below.
#-------------------------------------------------------------------------------
    
    FunctionDamageFormulas = {
#-------------------------------------------------------------------------------
    # This section sets the damage formulas for each value. Again, you dont need
    # to edit the first few, but they are here for reference
    :hp => "stat * 4 * frate / 1000" ,# The Formula used to calculate hp_f
    :mp => "stat * 2 * frate / 100" ,# The Formula used to calculate mp_f
    :agi => "stat * 2 * frate / 100" ,# The Formula used to calculate agi_f
    :def => "stat * 4 * frate / 100" ,# The Formula used to calculate def_f
    :hpi => "stat * 4 * frate / 1000" ,# The Formula used to calculate hpi_f
    :mpi => "stat * 2 * frate / 100" ,# The Formula used to calculate mpi_f
#-------------------------------------------------------------------------------
    # Define your own formulas in this section.
    # If you do not assign a formula to any given stat, the default formula
    # will be used.
    # The formula codes:
    # stat  the stat you defined earlier
    # frate  the function value set for any given skill
    # >>CODE  replace CODE with the code (in lowercase) for any stat to use
    # this stat in the formula.  This allows you to use stats outside the one
    # you have associated in the above section.
    # *  Multiplication
    # /  Division.  Be sure to put a space before the next value.
    # +  Addition.
    # -  Subtraction
    # ANY NUMBER - you can use any integer value in the calculation
    # To ensure the most accurate calculation due to integer calculation
    # rounding, division should go last.  Parenthesis can be used for grouping
    
    # if you want to use a stat other than the one defined above, use >> before
    # the stat code in the formula
     :hit => "stat * >>agi * 4 * frate / 100 / 100" , # < Dont forget the commas
     # yeilds 4 times agi at 100 frate and 100 hit
     :cri => "stat * >>atk * frate / 100" ,
     # yeilds attack times critical at 100 Frate

    
    # Define additionals before here
#-------------------------------------------------------------------------------
    }  # <= Do not move or change

#-------------------------------------------------------------------------------
    DEFAULT_DEFENSE_FORMULA = "stat * 2 * frate / 100"
    # The default defense formula used.  
    # This is only used if the rate is not defined below
#-------------------------------------------------------------------------------
    
    FunctionDefenseFormulas = {
#-------------------------------------------------------------------------------
    # This section allow you to edit the defending formulas for each value
    # Feel free to edit the defending stat to whatever you want
    # To get a balanced calculation, the defending stat should subtract
    # approxiamtely half as much as the attacking stat adds
#-------------------------------------------------------------------------------
    :hp => ">>def * 2 * frate / 100" ,# The Formula used to defend against hp_f
    :mp => ">>spi * 1 * frate / 100", # The Formula used to defend against mp_f
    :agi => "stat * 1 * frate / 100" ,# The Formula used to defend against agi_f
    :def => ">>def * 2 * frate / 100" ,# The Formula used to defend against def_f
    :hpi => ">>def * 2 * frate / 100" ,# The Formula used to defend against hpi_f
    :mpi => ">>spi * 1 * frate / 100" ,# The Formula used to defend against mpi_f    
#-------------------------------------------------------------------------------
    # Assign your own values past this point.  If not assigned, the default
    # formula above will be used
    :hit => ">>eva * >>eva * frate / 8 / 100" , # Evasion squared divided by 8
    # at 100 frate is used to defend
    :cri => "(stat + 1) * >>def * frate / 2 / 100" , # Critical plus one times
    # defense divided by 2 at 100 frate
    :lvl => "0", # Yes, you can also set the value to just an integer.  Setting
    # it to zero makes the defending value for the function also zero, which
    # means this value cant be defended against.


    
    # Add any other values above here
#-------------------------------------------------------------------------------
    }  # <= Do not move or change    
    
  end
end

#-------------------------------------------------------------------------------
# Editing the text values here just changes the message displayed.
# %s is the user's name.
module Vocab
  RecoilText      = "%s was hit by recoil!" # Displayed when taking recoil
  AbsorbPct      = "%s absorbed some energy!" # Displayed when absorbing by percent
  # The next two lines have no bearing on the script
  ActorDrain      = "%1$s was drained of %3$s %2$s!"
  EnemyDrain      = "%1$s was drained of %3$s %2$s!"
  # I changed the vocab for drain because the default sounds absoloutley
  # ridiculous.

end

#===============================================================================
#                             END CUSTOMIZATION
#===============================================================================

module Mithran
  module SkillFunctions
    IGNORE_GUARD_TAG = /<(ignore[\s_]?guard|No[\s_]?guard)>/i
    HPMP_SCALE_TAG = /<(hp|mp)[\s_]?scale[\s_]?(invert)?\s?(?:(\d+)\s?\-\s?(\d+))?>/i
    RECOIL_TAG = /<recoil (\d+)>/i
    DAMAGE_BOTH_TAG = /<(?:damage[\s_]?both|dmg[\s_]hpmp) (\d+)>/i
    ABSORB_PERCENT_TAG = /<absorb[\s_]pct (\d+)>/i
    HEAL_ON_USE_TAG = /<heal[\s_](hp|mp|both)[\s_]on[\s_]use (\d+)(%)?>/
    FVALUE_TAG = /(<[a-z]+_)f (\d+)>/i
    NONFATAL_TAG = /<non[\s_]?fatal>/i
    EXACT_DMG_TAG = /<exact[\s_]?dmg (\-?\d+)>/i
    FUNCTION_SIGN_TAG = /<skill[\s_]?function[\s_]?(pos|neg|\+|\-)(?:itive|ative)?>/i
  end
end

class Game_SkillFuncts
  attr_accessor :skill_damage_formulas
  attr_accessor :skill_defense_formulas
  def initialize
    damagestats = Mithran::SkillFunctions::FunctionDamageStats
    damageformulas = Mithran::SkillFunctions::FunctionDamageFormulas
    defenseformulas = Mithran::SkillFunctions::FunctionDefenseFormulas
    @skill_damage_formulas = {}
    @skill_defense_formulas = {}
    usablefuncts = {}
    damagestats.each_pair { |keyID, value|
      dmg_formula = ""
      def_formula = ""
      if damageformulas[keyID] == nil
        dmg_formula = Mithran::SkillFunctions::DEFAULT_DAMAGE_FORMULA
      else
        dmg_formula = damageformulas[keyID]
      end
      if defenseformulas[keyID] == nil
        def_formula = Mithran::SkillFunctions::DEFAULT_DEFENSE_FORMULA
      else
        def_formula = defenseformulas[keyID]
      end
      dmg_formula.gsub!(/stat/i, ('user.' + value))
      dmg_formula.gsub!(/>>/i, 'user.')
      dmg_formula.gsub!(/frate/i, ("obj.fvalue[:#{keyID}]"))
      def_formula.gsub!(/stat/i, ('self.' + value))
      def_formula.gsub!(/>>/i, 'self.')
      def_formula.gsub!(/frate/i, ("obj.fvalue[:#{keyID}]"))
      dmg_formula.downcase!
      def_formula.downcase!
      @skill_damage_formulas[keyID] = dmg_formula
      @skill_defense_formulas[keyID] = def_formula
    }
  end

end


class Scene_Title < Scene_Base
  alias load_database_orig_mith_SF load_database
  def load_database
    load_database_orig_mith_SF
    for skill in $data_skills.compact
      skill.make_skill_function_cache
    end
    for item in $data_items.compact
      item.clear_skill_function_cache
    end
    $game_skillfuncts = Game_SkillFuncts.new
  end
  
  alias load_bt_database_orig_mith_SF load_bt_database
  def load_bt_database
    load_bt_database_orig_mith_SF
    for skill in $data_skills.compact
      skill.make_skill_function_cache
    end
    for item in $data_items.compact
      item.clear_skill_function_cache
    end
    $game_skillfuncts = Game_SkillFuncts.new
  end
end

class RPG::BaseItem
  attr_accessor :ignore_guard
  attr_accessor :hp_scale
  attr_accessor :mp_scale
  attr_accessor :hp_scale_invert
  attr_accessor :mp_scale_invert
  attr_accessor :hp_scale_min
  attr_accessor :hp_scale_max
  attr_accessor :mp_scale_min
  attr_accessor :mp_scale_max
  attr_accessor :hpmp_damage_rate
  attr_accessor :use_advanced_formulas
  attr_accessor :recoil_rate
  attr_accessor :hpmpdmg_extra
  attr_accessor :absorb_pct
  attr_accessor :fvalue
  attr_accessor :nonfatal
  attr_accessor :exact_damage
  attr_accessor :function_sign
  attr_accessor :heal_on_use
  
  def clear_skill_function_cache
    @ignore_guard = false
    @hp_scale = false
    @mp_scale = false
    @hp_scale_invert = false
    @mp_scale_invert = false
    @hpmp_damage_rate = 0
    @use_advanced_formulas = false
    @recoil_rate = 0
    @hpmpdmg_extra = 0
    @hp_scale_min = 0
    @hp_scale_max = 100
    @mp_scale_min = 0
    @mp_scale_max = 100
    @absorb_pct = 0
    @fvalue = {}
    @nonfatal = false
    @exact_damage = nil
    @function_sign = self.base_damage
    @heal_on_use = []
  end
  
  def make_skill_function_cache
    clear_skill_function_cache
    @use_advanced_formulas = true
    self.note.split(/[\r\n]+/).each { |line|
      case line
      when Mithran::SkillFunctions::IGNORE_GUARD_TAG
        @ignore_guard = true
      when Mithran::SkillFunctions::HPMP_SCALE_TAG
        match = $~.clone
        case match[1]
        when /hp/i
          @hp_scale = true if match[2] == nil
          @hp_scale_invert = true unless match[2] == nil
          if match[3] == nil
            @hp_scale_min = 50
            @hp_scale_max = 150
          else
            @hp_scale_min = match[3].to_i
            @hp_scale_max = match[4].to_i
          end
        when /mp/i
          @mp_scale = true if match[2] == nil
          @mp_scale_invert = true unless match[2] == nil
          if match[3] == nil
            @mp_scale_min = 50
            @mp_scale_max = 150
          else
            @mp_scale_min = match[3].to_i
            @mp_scale_max = match[4].to_i
          end
        end
      when Mithran::SkillFunctions::RECOIL_TAG
        @recoil_rate = $1.to_i
      when Mithran::SkillFunctions::DAMAGE_BOTH_TAG
        @hpmpdmg_extra = $1.to_i
      when Mithran::SkillFunctions::ABSORB_PERCENT_TAG
        @absorb_pct = $1.to_i
      when Mithran::SkillFunctions::FVALUE_TAG
        match = $~.clone
        text = match[1]
        text.gsub!(/[<_]/ , "")
        eval("@fvalue[:#{text}] = #{match[2].to_i}")
      when Mithran::SkillFunctions::NONFATAL_TAG
        @nonfatal = true
      when Mithran::SkillFunctions::EXACT_DMG_TAG
        @exact_damage = $1.to_i
      when Mithran::SkillFunctions::FUNCTION_SIGN_TAG
        if $1 == "pos" or $1 == "+"
          @function_sign = 1
        elsif $1 == "neg" or $1 == "-"
          @function_sign = -1
        end
      when Mithran::SkillFunctions::HEAL_ON_USE_TAG
        @heal_on_use = [$1, $2.to_i, !$3.nil?]
      end
    }
  end
end

class Game_Actor < Game_Battler
  alias base_atk_orig_hpwpn base_atk
  def base_atk
    n = base_atk_orig_hpwpn
    for item in weapons.compact
      n += (self.hp * item.hpwpn) / 100
      n += (self.hp_missing * item.hpiwpn) / 100
    end
  return n
  end
end

class RPG::Weapon < RPG::BaseItem
  
  def hpwpn # Hit point to weapon attack percent
    return $1.to_i if self.note =~ /<hpwpn (\d+)>/i
    return 0
  end
  
  def hpiwpn # missing hit point to weapon attack percent
    return $1.to_i if self.note =~ /<hpiwpn (\d+)>/i
    return 0
  end
end  
  
class Game_Battler
  attr_accessor :recoil_damage_hp
  attr_accessor :recoil_damage_mp
  attr_accessor :recoil
  attr_accessor :absorbed_pct
  attr_accessor :absorbed_hp
  attr_accessor :absorbed_mp
  attr_accessor :heal_on_use
  
  alias make_obj_damage_value_orig_mith_SF make_obj_damage_value
  def make_obj_damage_value(user, obj)
    @sf_temp_ignore_guard = false
    @sf_temp_ignore_guard = true if obj.use_advanced_formulas && obj.ignore_guard    
    make_obj_damage_value_orig_mith_SF(user, obj)
    make_obj_damage_value_advanced_SF(user, obj) if obj.use_advanced_formulas
    @sf_temp_ignore_guard = false
  end
    
  def hp_missing
    @hp = [[hp, maxhp].min, 0].max
    return (self.maxhp - self.hp)
  end
  
  def mp_missing
    @mp = [[mp, maxmp].min, 0].max
    return (self.maxmp - self.mp)
  end
  
  def hp_pct
    @hp = [[hp, maxhp].min, 0].max
    return 0 if maxhp == 0
    return (self.hp * 100 / self.maxhp)
  end
  
  def mp_pct
    @mp = [[mp, maxmp].min, 0].max
    return 0 if maxmp == 0
    return (self.mp * 100 / self.maxmp)
  end
  
  def make_obj_damage_value_advanced_SF(user, obj)
    damage = 0
    if obj.function_sign > 0
      $game_skillfuncts.skill_damage_formulas.each_pair { |i, sdf|
      begin
        next if obj.fvalue[i] == nil
        damage += eval(sdf).to_i
      rescue
        print "Oops!  There seems to be an error with your damage formula.  The current formula is: \n" +
        sdf + "\n" if $TEST
      end
      }
      unless obj.ignore_defense
        $game_skillfuncts.skill_defense_formulas.each_pair { |i, sdf|
        begin
          next if obj.fvalue[i] == nil
          damage -= eval(sdf).to_i
        rescue
          print "Oops!  There seems to be an error with your defensive formula.  The current formula is: \n" +
          sdf + "\n" if $TEST
        end
        }
        damage = 0 if damage < 0
      end
    elsif obj.function_sign < 0
      $game_skillfuncts.skill_damage_formulas.each_pair { |i, sdf|
      begin
        next if obj.fvalue[i] == nil
        damage -= eval(sdf).to_i
      rescue
        print "Oops!  There seems to be an error with your recovery formula.  The current formula is: \n" +
        sdf + "\n" if $TEST
      end
      }
    end
    damage = (damage * elements_max_rate(obj.element_set)) / 100
    damage = apply_variance(damage, obj.variance)
    damage = apply_guard(damage)
    if obj.damage_to_mp
      damage += @mp_damage
    else
      damage += @hp_damage
    end
    damage = obj_hpmp_scaling(user, obj, damage)
    unless obj.exact_damage == nil
      damage = obj.exact_damage * elements_max_rate(obj.element_set) / 100
    end
    if obj.damage_to_mp
      @mp_damage = damage
      @hp_damage = damage * obj.hpmpdmg_extra / 100
    else
      @hp_damage = damage
      @mp_damage = damage * obj.hpmpdmg_extra / 100
    end
    if obj.nonfatal
      @hp_damage = @hp - 1 if @hp_damage >= @hp
    end
  end
  
  def obj_hpmp_scaling(user, obj, damage)
    if obj.hp_scale
      dmg = damage
      scale_min = obj.hp_scale_min
      scale_max = obj.hp_scale_max
      scale_range = scale_max - scale_min
      damage = dmg * user.hp * scale_range / user.maxhp / 100
      damage += dmg * scale_min / 100
    end
    if obj.mp_scale
      dmg = damage
      scale_min = obj.mp_scale_min
      scale_max = obj.mp_scale_max
      scale_range = scale_max - scale_min
      damage = dmg * user.mp * scale_range / user.maxmp / 100
      damage += dmg * scale_min / 100
    end
    if obj.hp_scale_invert
      dmg = damage
      scale_min = obj.hp_scale_min
      scale_max = obj.hp_scale_max
      scale_range = scale_max - scale_min
      damage = dmg * scale_range * (100 - (user.hp * 100 / user.maxhp)) / 100 / 100
      damage += dmg * scale_min / 100
    end
    if obj.mp_scale_invert
      dmg = damage
      scale_min = obj.mp_scale_min
      scale_max = obj.mp_scale_max
      scale_range = scale_max - scale_min
      damage = dmg * scale_range * (100 - (user.mp * 100 / user.maxmp)) / 100 / 100
      damage += dmg * scale_min / 100
    end
    return damage
  end
    
  alias make_obj_absorb_effect_orig_mith_SF make_obj_absorb_effect
  def make_obj_absorb_effect(user, obj)
    if obj.nonfatal
      @hp_damage = @hp - 1 if @hp_damage >= @hp
    end
    if obj.absorb_pct == 0
      make_obj_absorb_effect_orig_mith_SF(user, obj)
    end
  end
  
  def make_obj_absorb_pct_effect(user, obj)
    @absorbed_hp = @hp_damage * obj.absorb_pct / 100
    @absorbed_mp = @mp_damage * obj.absorb_pct / 100
    @absorbed_hp = [@absorbed_hp, (self.hp * obj.absorb_pct / 100) ].min
    @absorbed_mp = [@absorbed_mp, (self.mp * obj.absorb_pct / 100) ].min
    if @absorbed_hp > 0 or @absorbed_mp > 0
      @absorbed = false
      @absorbed_pct = true
    end
  end
    
  alias apply_guard_orig_mith_SF apply_guard
  def apply_guard(damage)
    return damage if @sf_temp_ignore_guard
    return apply_guard_orig_mith_SF(damage)
  end
  
  def make_obj_recoil_effect(user, obj)
    @recoil_damage_hp = @hp_damage * obj.recoil_rate / 100
    @recoil_damage_mp = @mp_damage * obj.recoil_rate / 100
    @recoil_damage_hp = [@recoil_damage_hp, (self.hp * obj.recoil_rate / 100) ].min
    @recoil_damage_mp = [@recoil_damage_mp, (self.mp * obj.recoil_rate / 100) ].min
    if @recoil_damage_hp > 0 or @recoil_damage_mp > 0
      @recoil = true
    else
      @recoil = false
    end
  end
  
  def make_obj_HOU_effect(user, obj)
    return if @sf_temp_obj.heal_on_use.empty?
    return if @sf_temp_obj.physical_attack && @hp_damage == 0 # physical no damage
    type = @sf_temp_obj.heal_on_use[0]
    amount = @sf_temp_obj.heal_on_use[1]
    rate = @sf_temp_obj.heal_on_use[2]
    case type
    when /both/i
      @absorbed_hp += rate ? amount * user.maxhp / 100 : amount
      @absorbed_mp += rate ? amount * user.maxmp / 100 : amount
    when /hp/i
      @absorbed_hp += rate ? amount * user.maxhp / 100 : amount
    when /mp/i
      @absorbed_mp += rate ? amount * user.maxmp / 100 : amount
    end
    @heal_on_use = true if @absorbed_hp > 0 or @absorbed_mp > 0
  end
  
  alias execute_damage_orig_mith_SF execute_damage
  def execute_damage(user)
    if @sf_temp_obj != nil && @sf_temp_obj.nonfatal
      @hp_damage = @hp - 1 if @hp_damage >= @hp
    end
    execute_damage_orig_mith_SF(user)
    make_obj_absorb_pct_effect(user, @sf_temp_obj) if @sf_temp_obj != nil
    make_obj_recoil_effect(user, @sf_temp_obj) if @sf_temp_obj != nil
    make_obj_HOU_effect(user, @sf_temp_obj) if @sf_temp_obj != nil
    if @absorbed_pct or @heal_on_use
      user.hp += @absorbed_hp
      user.mp += @absorbed_mp
    end
    if @recoil
      user.hp -= @recoil_damage_hp
      user.mp -= @recoil_damage_mp
    end
    if @recoil_damage_hp > 0
      user.remove_states_shock
    end
  end
  
  alias clear_action_results_orig_mith_SF clear_action_results
  def clear_action_results
    clear_action_results_orig_mith_SF
    @recoil = false
    @recoil_damage_hp = 0
    @recoil_damage_mp = 0
    @absorbed_pct = false
    @heal_on_use = false
    @absorbed_hp = 0
    @absorbed_mp = 0
  end
  
  alias skill_effect_orig_mith_SF skill_effect
  def skill_effect(user, skill)
    @sf_temp_obj = skill
    skill_effect_orig_mith_SF(user, skill)
    @sf_temp_obj = nil  
  end
  
  alias item_effect_orig_mith_SF item_effect
  def item_effect(user, item)
    @sf_temp_obj = item
    item_effect_orig_mith_SF(user, item)
    @sf_temp_obj = nil
  end
  
end

class Scene_Battle < Scene_Base
  alias display_damage_orig_mith_SF display_damage
  def display_damage(target, obj = nil)
    display_damage_orig_mith_SF(target, obj)
    if target.absorbed_pct or target.heal_on_use
      display_absorb_pct(target, obj)
    end
    if target.recoil
      display_recoil(target, obj)
    end
  end
  
  def display_absorb_pct(target, obj = nil)
    @message_window.add_instant_text(sprintf(Vocab::AbsorbPct, @active_battler.name)) if target.absorbed_pct
    wait(15)
    if target.absorbed_hp > 0
      fmt = @active_battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
      text = sprintf(fmt, @active_battler.name, Vocab::hp, target.absorbed_hp)
      Sound.play_recovery
      @message_window.add_instant_text(text)
      wait(15)
    end
    if target.absorbed_mp > 0
      fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
      text = sprintf(fmt, @active_battler.name, Vocab::mp, target.absorbed_mp)
      Sound.play_recovery
      @message_window.add_instant_text(text)
      wait(15)
    end
    wait (30)
  end
  
  def display_recoil(target, obj = nil)
    @message_window.add_instant_text(sprintf(Vocab::RecoilText, @active_battler.name))
    wait(15)
    if target.recoil_damage_hp > 0
      if @active_battler.actor?
        text = sprintf(Vocab::ActorDamage, @active_battler.name, target.recoil_damage_hp)
        Sound.play_actor_damage
        $game_troop.screen.start_shake(5, 5, 10)
        @message_window.add_instant_text(text)
        wait(15)
      else
        text = sprintf(Vocab::EnemyDamage, @active_battler.name, target.recoil_damage_hp)
        Sound.play_enemy_damage
        @active_battler.blink = true
        @message_window.add_instant_text(text)
        wait(15)
      end
    end
    if target.recoil_damage_mp > 0
      fmt = @active_battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
      text = sprintf(fmt, @active_battler.name, Vocab::mp, target.recoil_damage_mp)
      @message_window.add_instant_text(text)
      wait(15)
    end
    wait(15)
  end
end

class Window_BattleMessage < Window_Message
  alias add_instant_text_orig_mith_SF add_instant_text
  def add_instant_text(text)
    while @lines.size >= MAX_LINE
      @lines.shift
    end
    add_instant_text_orig_mith_SF(text)
  end
end


FAQ
q. Ignore guard doesn't seem to completely ignore guard..
a. Currently, ignore guard is approximate in that the guard is applied to the base formula then later reversed. One or two damage points may be lost to rounding. With the exact damage method in, there are no plans to change this further unless I get a specific request.

q. What are function values?
a. Percentage rates for how much 'weight' a certain stat has toward the outcome of a given skill. You probably already know attack_f and spirit_f, this script just adds them for every stat. See the top of the script for further details.

q. I get an error message that says: "Oops! There seems to be an error with your damage formula. The current formula is..."
a. You will get this error by default in playtest if you dont have a value defined for res. Ingame, it will simply do nothing. To disable the error, put a # in front of this line.
:res => "res",
If you get this error for another stat, you probably did something wrong when writing it out. If you provide me with the formula you typed into the script editor and the formula in the error message, I will see if I can help.

Credit and Thanks
- Mithran
- Request for 'recoil damage', 'hp damage scale', 'hp based weapon' and 'damage both hp and mp' by JDLXYZ
- Request for 'heal on use' by flipsomel

Author's Notes
Let me know what you think, if there are any bugs, etc. Your comments are welcome. Please give credit if you plan to use it.

Future Plans
Pending bugfixes, further requests, and random ideas by myself, there are no future updates planned.

This post has been edited by Mithran: Sep 4 2009, 08:48 AM


--------------------
Go to the top of the page
 
+Quote Post
   
angelborn
post Dec 21 2008, 02:26 AM
Post #2



Group Icon


Type: Writer




I love you...this is just what I needed...I'll try it now!
Go to the top of the page
 
+Quote Post
   
JDLXYZ
post Dec 21 2008, 10:39 AM
Post #3


What goes here?
Group Icon


Type: Writer




You're awesome, man. If you need a writer or anything of the planning sort for your game, let me know! It's really the only unique talent I have when it comes to games and I feel I must repay you.

This post has been edited by JDLXYZ: Dec 21 2008, 11:09 AM
Go to the top of the page
 
+Quote Post
   
farr
post Dec 21 2008, 09:21 PM
Post #4


Chick Magnet
Group Icon


Type: Writer
Alignment: Chaotic Good




Nice! laugh.gif
It will be useful

Is there any compatible problem with KGC scripts for skills or tankentai etc...?

This post has been edited by farr: Dec 21 2008, 09:22 PM
Go to the top of the page
 
+Quote Post
   
Mithran
post Dec 23 2008, 07:12 AM
Post #5


Scripter
Group Icon


Type: Coder
Alignment: True Neutral




@farr - There are no known compatability issues at the moment. I aliased every single method I changed, so if in doubt, try placing my script lower on the list.

So, now for the reason I am really here:

*Update*

Version 2.0

Bugfixes -
Fixed a calculation error with extra function values and healing skills (extra function values weren't adding on skills with a base damage of below zero)
Fixed an error that would cause recoil damage to do more damage than intended when fighting low HP enemies (limitied the damage reflected to the reflection percent of the remaining hp rather than 100% of the remaining HP)
Fixed a compatability error with my Critical Skills script. If you use both, Critical Skills should now go below Skill Functions. Also, upgrade to the latest version of critical skills here.
Some code optomization.

New Features -
User Defined function values - set values and formulas for any stat you may have defined in another script (see customization section)
Exact Damage - set a skill to do exactly the stated amount of damage, completley bypassing guard for slighlty more accurate values than 'ignore guard'
Absorb Percent - set a skill to absorb a percent of the damage dealt, instead of 100%
Non Fatal - set a skill to always leave at least 1 HP remaining on the target
HP (inverted) weapon - sets a weapon's bonus attack to a percent of the actor's missing HP

See the original post for the script.


--------------------
Go to the top of the page
 
+Quote Post
   
Betasoft product...
post Dec 29 2008, 03:59 AM
Post #6



Group Icon


Type: Undisclosed




I get an error when I use skills:


Script "Skill Functions" Line 608:TypeError occured

nil can't be coerced into Fixnum.


How can I fix this?
Go to the top of the page
 
+Quote Post
   
Mithran
post Dec 29 2008, 09:49 AM
Post #7


Scripter
Group Icon


Type: Coder
Alignment: True Neutral




QUOTE (Betasoft productions @ Dec 28 2008, 08:17 PM) *
I get an error when I use skills:


Script "Skill Functions" Line 608:TypeError occured

nil can't be coerced into Fixnum.


How can I fix this?


I can't seem to duplicate this problem. My line 608 is

@mp_damage = damage * obj.hpmpdmg_extra / 100

If your line 608 differs from mine, let me know.

There is an issue with my script not properly initializing in battletest mode (from the database>troops menu) but it crashes far before this method. Normal playtest using the 'play' button in the main editor and normal game play both work fine. If you are running battletest from the database menu, then this is the issue, Ill try and update soon. If not, then I'll need more info to iron this out.

It would also be helpful if you could search your installed scripts for 'hpmpdmg_extra' without the quotes and let me know if any other scripts besides mine use this variable. Also, any that say 'def load_database' without the quotes and let me know if any (besides Scene_Title) use it.

The technical:

» Click to show Spoiler - click again to hide... «


--------------------
Go to the top of the page
 
+Quote Post
   
Betasoft product...
post Dec 29 2008, 08:52 PM
Post #8



Group Icon


Type: Undisclosed




You're right, it only crashes in battletest mode, the script works fine during normal playtest.


The script probably just needs a little fine tuning in some areas.
Go to the top of the page
 
+Quote Post
   
Mithran
post Jan 26 2009, 05:31 AM
Post #9


Scripter
Group Icon


Type: Coder
Alignment: True Neutral




Sorry, it slipped my mind that I hadn't posted the fix on the battletest crash issue yet.

*Update*


Version 2.0b

Bugfixes -
Fixed the crashing error with battletest mode.

Previous changes-
» Click to show Spoiler - click again to hide... «


See the original post for the script. Please let me know if you have any further issues.


--------------------
Go to the top of the page
 
+Quote Post
   
Corbeau
post Jan 26 2009, 07:58 AM
Post #10


Unconfirmed member of the church of Deb.
Group Icon


Type: Designer




Thank you, for this and all your other script.


--------------------
Questing once again for infinite bliss...

No time to work on anything, it's sad with so many ideas...
Go to the top of the page
 
+Quote Post
   
Devils With In
post Jan 27 2009, 07:35 AM
Post #11



Group Icon


Type: Designer
Alignment: Lawful Neutral




Mithran, thank you so much for this script, it allows so many unique skills...I am almost speechless. I can barely whisper thanks.


--------------------

The most intelligent win wars. The most adaptive survive them. -DWI
Go to the top of the page
 
+Quote Post
   
Zxaldien
post Jan 27 2009, 07:39 AM
Post #12


Sneaking into the night
Group Icon


Type: Designer




wow, this is such a nice script. I just wanted to say thanks for it, definitely going to be playing around with it for a bit.


--------------------

Story-90%, Event/scripts-25%, Maps-5%, Other-10%
Thanks for the userbar Zabre!



GrandmaDeb's Resource Index

GrandmaDeb's Script Index


Thanks Even Angels!

You call me arrogant because I speak the truth when I proclaim myself to be superior to you. If it wasn't the truth, then you would be calling me a liar not arrogant.

you can only get the clap so many times before it turns into applause
Go to the top of the page
 
+Quote Post
   
Chiem1000
post Jan 27 2009, 07:48 AM
Post #13



Group Icon


Type: Writer
Alignment: Lawful Evil




good and fine script :. danke,merci,thanks,dank u,gracias,hvala,děkuji ti, ありがとうございました!!
or in normel words: Thank you! biggrin.gif


<>Chiem1000
Go to the top of the page
 
+Quote Post
   
Silverstorm
post Jan 27 2009, 05:37 PM
Post #14



Group Icon


Type: Designer




Mithran, your scripts are awesome.
Thank you very much. \(^_^)/
Go to the top of the page
 
+Quote Post
   
Articorse
post Jan 30 2009, 02:10 AM
Post #15



Group Icon


Type: Musician




The script looks amazing, great job! But I can't seem to get it to work. Copied the script, read the instructions...

I made a skill, which is supposed to deal damage equal to the HP the character has missing, but when I use it, it deals no damage.

This is what I wrote in the note section of the skill:

"
<hpi_f 250>
<ignore_guard>
"

The skill has 0 base dmg, 0 variance, 0 attack f, 0 spirit f, it has no elemtents and sets no states.

I also checked the Ignore Defence box. I tried removing it and the <ignore_guard>, I tried commenting all my other scripts, it still doesn't work. I also tried switching hpi to agi, but it still dealt no damage. I'm guessing that I screwed up the syntax somehow, but I'm very new to the whole thing, plus it's like 4:00 in the morning over here. Any help would be appreciated, and thanks again for the fantastic script! Even if you can't help, I'll figure something out. smile.gif
Go to the top of the page
 
+Quote Post
   
Mithran
post Jan 30 2009, 02:27 AM
Post #16


Scripter
Group Icon


Type: Coder
Alignment: True Neutral




QUOTE (Articorse @ Jan 29 2009, 06:28 PM) *
The script looks amazing, great job! But I can't seem to get it to work. Copied the script, read the instructions...

I made a skill, which is supposed to deal damage equal to the HP the character has missing, but when I use it, it deals no damage.

This is what I wrote in the note section of the skill:

"
<hpi_f 250>
<ignore_guard>
"

The skill has 0 base dmg, 0 variance, 0 attack f, 0 spirit f, it has no elemtents and sets no states.

I also checked the Ignore Defence box. I tried removing it and the <ignore_guard>, I tried commenting all my other scripts, it still doesn't work. I also tried switching hpi to agi, but it still dealt no damage. I'm guessing that I screwed up the syntax somehow, but I'm very new to the whole thing, plus it's like 4:00 in the morning over here. Any help would be appreciated, and thanks again for the fantastic script! Even if you can't help, I'll figure something out. smile.gif


Hrm, I was having the script follow the same rules as normal skills for determining how it should do damage. I think the problem lies here - if your base damage is zero, the skill wont inflict damage. This is the way it is for unmodded skills, so I came to the decision to make it so for this script, too. Now, I'm not sure if I want to change this in the script or not, but if you want to change it manually for your copy, you can change the line (its around line 565)

Change:
CODE
if obj.base_damage > 0


to:
CODE
if obj.base_damage >= 0


Just add that little '=' symbol. If you are uncomfortable doing it, PM me and I'll send you a copy with just that line changed. This will let the script know your skill is intended to do positive damage if the base is zero, and negative only if the base is negative. It will still skip, however, normal damage calculation (spi_f and atk_f), however, but it sounds like you dont need that, here.

Let me know if it doesnt work.

I will consider making this a permanent change to this script, because I think it may be implied well enough that if base damage is NOT negative that you want the skill to do positive damage. My thinking at the time was that it should detect heals versus damage skills just like normal skills, but this is really a less than optimal method. Thanks for bringing it to my attention.

Edit: Another small note. You will still need the ignore defense check box to ignore the target's defense. <ignore_guard> changes whether or to modify the damage based on if the target is using the action "guard". If <ignore_guard> is set, nothing will modify it.

This post has been edited by Mithran: Jan 30 2009, 06:52 AM


--------------------
Go to the top of the page
 
+Quote Post
   
Articorse
post Jan 30 2009, 10:56 AM
Post #17



Group Icon


Type: Musician




Wow, thanks for the quick reply! I changed the script and it works perfectly. To be honest, I was expecting something like this, but I don't know enough about RGSS2 to have gone into the script to find the check. Actually, I thought my syntax was wrong, this was a distant second. tongue.gif

Anyway, thanks again, the script is great! smile.gif

Just a quick question. Is there any way to make the damage based on the opponent's stats? For example, I want to make a 'gravity' type attack, a la Final Fantasy, which deals damage relative to the target's current HP. And then I can make a 'gravity' element, so bosses aren't affected by it. Making it possible to base skills on the opponent's stats would give quite a new dimension to the whole thing, I think, but I'm not sure if it'll be easy to code.
Go to the top of the page
 
+Quote Post
   
Mithran
post Jan 30 2009, 03:09 PM
Post #18


Scripter
Group Icon


Type: Coder
Alignment: True Neutral




QUOTE (Articorse @ Jan 30 2009, 03:14 AM) *
Wow, thanks for the quick reply! I changed the script and it works perfectly. To be honest, I was expecting something like this, but I don't know enough about RGSS2 to have gone into the script to find the check. Actually, I thought my syntax was wrong, this was a distant second. tongue.gif

Anyway, thanks again, the script is great! smile.gif

Just a quick question. Is there any way to make the damage based on the opponent's stats? For example, I want to make a 'gravity' type attack, a la Final Fantasy, which deals damage relative to the target's current HP. And then I can make a 'gravity' element, so bosses aren't affected by it. Making it possible to base skills on the opponent's stats would give quite a new dimension to the whole thing, I think, but I'm not sure if it'll be easy to code.


There actually is, its a more advanced function of the script. I didn't add percent based damage to the script originally because KGC_RateDamage (in the KGC scripts package at the top) already had it, and I had other things to do, but I do plan to add support for it eventually. So, you could either use the KGC script, wait for my next version ( could be a while, I have other open projects ), or set up your own formula.

Heres how to set up your own:
» Click to show Spoiler - click again to hide... «


Yeah, I probably could make that more 'user friendly'. Copy paste is your friend here. Looking back at it, I could have made it clearer where you are supposed to type things, too, so I'll look into this. If/when I push out a new version of this, I'll see about adding opponent parameter function values to the list of built in features. Thanks for the feedback.

This post has been edited by Mithran: Jan 30 2009, 03:33 PM


--------------------
Go to the top of the page
 
+Quote Post
   
Articorse
post Jan 30 2009, 07:23 PM
Post #19



Group Icon


Type: Musician




I did it just like you said, and it works perfectly! I'll even change the other values to make it more sensitive to small changes, like the skill I mentioned earlier, which deals damage equal to the missing hp of the user. Right now it only deals multiples of 4.

Anyway, I'm rambling. Thank you! This script really makes a lot of things possible, perfect for what I'm doing right now. smile.gif

I'll be looking forward to updates, as well as other scripts, hopefully they'll help me start making my own. smile.gif
Go to the top of the page
 
+Quote Post
   
Blaziruku
post May 3 2009, 10:25 PM
Post #20


Back for Forgotten Legacy!
Group Icon


Type: Designer
Alignment: True Neutral




This is a great script! Though, how come when I insert something like the hpinvert xxyy thing, when I use the skill, it just does nothing?


--------------------
I'm back to remake Forgotten Legacy! Visit my blog to check for daily updates!
Visit the blog for all my updates! Updated 15/10/2011
AWESOME SIG BY EVENANGELS!
Go to the top of the page
 
+Quote Post
   

5 Pages V   1 2 3 > » 
Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 1st August 2014 - 03:03 PM

RPGMakerVX.net is an Privacy Policy, Legal.