This script retruns a function that was in old rpgmakers and in games like dragon quest: the option to reduce or sum battlers atributes temporally in combat based in a fixed number and not using %.
You can ask for bugs, suggerences, compatibilitzations and any other things.
You can get the code in this simple web. Im going to use it on now because it saves alot of time updating posts and other things.
http://usuarios.multimania.es/kisap/english_list.html#==============================================================================
# Buff/Debuff dragon quest style skills
# By gerkrt/gerrtunk
# Version: 1.1
# License: GPL, credits
# Date: 23/12/2010
# IMPORTANT NOTE: to acces the more actualitzed or corrected version of this
# script check here: http://usuarios.multimania.es/kisap/english_list.html
#==============================================================================
=begin
--------Introduction-----------
This script returns a function that was in old rpgmakers and in games like dragon
quest: the option to reduce or sum battlers atributes temporally in combat based
in a fixed number and not using %.
You can ask for bugs, suggerences, compatibilitzations and any other things.
-------In the future------------
-The option to use fixed values with very small variance and not traditional skill
formula
-A max uses for each skill. In this way, a skill can lose its effects after a
number of uses. In this way you can control overbuffering.
-A max % of buffering for atributes. Another way of dealing with extreme buffs.
------Instructions-------------
skill_id1 effect type skillid2 effect type, etc
Atribute_mod_skills = { 7=> [-777, 'maxhp'], 8=> [777, 'maxhp']}
For selecting buf or debuf you only need to put a positive or negative number.
Tags for the type(like in database ones)
maxhp
maxsp
str
dex
agi
int
atk
pdef
mdef
eva
---------Syntax notes--------------
'' delimites words in ruby
You can divide long linges like this:
Atribute_mod_skills = { 7=> [-777, 'maxhp'],
8=> [777, 'maxhp'],
9=> [777, 'maxhp']}
See that the new line have to be after a , and that the final one dont put a
final ,.
---------Other notes-----------------
-Is applied the skill variance, and force and intelligence influences
that you normally select in the database. It uses the same formula.
-The effects are acumulative.
-The effects are reset after combat.
=end
module Wep
Atribute_mod_skills = { 7=> [-777, 'maxhp'], 8=> [777, 'maxhp']}
end
class Scene_Battle
#--------------------------------------------------------------------------
# * Battle Ends
# result : results (0:win 1:lose 2:escape)
# moded to reset actors atributes
#--------------------------------------------------------------------------
def battle_end(result)
# Reset actors atributes modifiers
for actor in $game_party.actors
actor.reset_atr_mod_list
end
# Clear in battle flag
$game_temp.in_battle = false
# Clear entire party actions flag
$game_party.clear_actions
# Remove battle states
for actor in $game_party.actors
actor.remove_states_battle
end
# Clear enemies
$game_troop.enemies.clear
# Call battle callback
if $game_temp.battle_proc != nil
$game_temp.battle_proc.call(result)
$game_temp.battle_proc = nil
end
# Switch to map screen
$scene = Scene_Map.new
end
end
class Game_Battler
#--------------------------------------------------------------------------
# * 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
# First hit detection
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# Set effective flag if skill is uncertain
effective |= hit < 100
# If hit occurs
if hit_result == true
# Check for atribute modifier
if Wep::Atribute_mod_skills[skill.id] != nil
# Extract and calculate effect
# Calculate power
ef = Wep::Atribute_mod_skills[skill.id][0] + user.atk * skill.atk_f / 100
ef -= self.pdef * skill.pdef_f / 200
ef -= self.mdef * skill.mdef_f / 200
# Calculate rate
ra = 20
ra += (user.str * skill.str_f / 100)
ra += (user.dex * skill.dex_f / 100)
ra += (user.agi * skill.agi_f / 100)
ra += (user.int * skill.int_f / 100)
# Calculate total effect
total_ef = ef * ra / 20
# Apply dispersion
if skill.variance > 0
amp = [total_ef * skill.variance / 100, 1].max
total_ef += rand(amp+1) + rand(amp+1) - amp
end
# Apply if exist
case Wep::Atribute_mod_skills[skill.id][1]
when 'maxhp':
self.atr_mod_list.maxhp += total_ef
when 'maxsp':
self.atr_mod_list.maxsp += total_ef
when 'str':
self.atr_mod_list.str += total_ef
when 'dex':
self.atr_mod_list.dex += total_ef
when 'int':
self.atr_mod_list.int += total_ef
when 'agi':
self.atr_mod_list.agi += total_ef
when 'atk':
self.atr_mod_list.atk += total_ef
when 'pdef':
self.atr_mod_list.pdef += total_ef
when 'mdef':
self.atr_mod_list.mdef += total_ef
when 'eva':
self.atr_mod_list.eva += total_ef
end
end
# Calculate power
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# Calculate rate
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# Calculate basic damage
self.damage = power * rate / 20
# 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 /= 2
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
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# Set effective flag if skill is uncertain
effective |= hit < 100
end
# 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
# 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
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
end
# Struct used to save the atributes modifiers for each actor
AtrList = Struct.new( :maxhp, :maxsp, :str, :dex, :int, :agi, :atk, :pdef,
:mdef, :eva )
#==============================================================================
# ** Game_Battler (part 1)
#------------------------------------------------------------------------------
# This class deals with battlers. It's used as a superclass for the Game_Actor
# and Game_Enemy classes.
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :atr_mod_list
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias gb_wep_dq_init initialize
def initialize
@atr_mod_list = AtrList.new(0,0,0,0,0,0,0,0,0,0)
return gb_wep_dq_init
end
#--------------------------------------------------------------------------
# * Reset atr mod list (for when combat ends)
#--------------------------------------------------------------------------
def reset_atr_mod_list
@atr_mod_list = AtrList.new(0,0,0,0,0,0,0,0,0,0)
end
end
#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# * Get Basic Maximum HP
#--------------------------------------------------------------------------
alias wep_dq_base_maxhp base_maxhp
def base_maxhp
# Max is 9999 and min is 0
if wep_dq_base_maxhp + @atr_mod_list.maxhp > 9999
return 9999
elsif wep_dq_base_maxhp + @atr_mod_list.maxhp <= 0
return 1
else
return wep_dq_base_maxhp + @atr_mod_list.maxhp
end
end
#--------------------------------------------------------------------------
# * Get Basic Maximum SP
#--------------------------------------------------------------------------
alias wep_dq_base_maxsp base_maxsp
def base_maxsp
# Max is 9999 and min is 0
if wep_dq_base_maxsp + @atr_mod_list.maxsp > 9999
return 9999
elsif wep_dq_base_maxsp + @atr_mod_list.maxsp <= 0
return 1
else
return wep_dq_base_maxsp + @atr_mod_list.maxsp
end
end
#--------------------------------------------------------------------------
# * Get Basic Strength
#--------------------------------------------------------------------------
alias wep_dq_base_str base_str
def base_str
# Max is 999 and min is 0
if wep_dq_base_str + @atr_mod_list.str > 999
return 999
elsif wep_dq_base_str + @atr_mod_list.str <= 0
return 1
else
return wep_dq_base_str + @atr_mod_list.str
end
end
#--------------------------------------------------------------------------
# * Get Basic Dexterity
#--------------------------------------------------------------------------
alias wep_dq_base_dex base_dex
def base_dex
# Max is 999 and min is 0
if wep_dq_base_dex + @atr_mod_list.dex > 999
return 999
elsif wep_dq_base_dex + @atr_mod_list.dex <= 0
return 1
else
return wep_dq_base_dex + @atr_mod_list.dex
end
end
#--------------------------------------------------------------------------
# * Get Basic Agility
#--------------------------------------------------------------------------
alias wep_dq_base_agi base_agi
def base_agi
# Max is 999 and min is 0
if wep_dq_base_agi + @atr_mod_list.agi > 999
return 999
elsif wep_dq_base_agi + @atr_mod_list.agi <= 0
return 1
else
return wep_dq_base_agi + @atr_mod_list.agi
end
end
#--------------------------------------------------------------------------
# * Get Basic Intelligence
#--------------------------------------------------------------------------
alias wep_dq_base_int base_int
def base_int
# Max is 999 and min is 0
if wep_dq_base_int + @atr_mod_list.int > 999
return 999
elsif wep_dq_base_int + @atr_mod_list.int <= 0
return 1
else
return wep_dq_base_int + @atr_mod_list.int
end
end
#--------------------------------------------------------------------------
# * Get Basic Attack Power
#--------------------------------------------------------------------------
alias wep_dq_base_atk base_atk
def base_atk
# Max is 999 and min is 0
if wep_dq_base_atk + @atr_mod_list.atk > 999
return 999
elsif wep_dq_base_atk + @atr_mod_list.atk <= 0
return 1
else
return wep_dq_base_atk + @atr_mod_list.atk
end
end
#--------------------------------------------------------------------------
# * Get Basic Physical Defense
#--------------------------------------------------------------------------
alias wep_dq_base_pdef base_pdef
def base_pdef
# Max is 999 and min is 0
if wep_dq_base_pdef + @atr_mod_list.pdef > 999
return 999
elsif wep_dq_base_pdef + @atr_mod_list.pdef <= 0
return 1
else
return wep_dq_base_pdef + @atr_mod_list.pdef
end
end
#--------------------------------------------------------------------------
# * Get Basic Magic Defense
#--------------------------------------------------------------------------
alias wep_dq_base_mdef base_mdef
def base_mdef
# Max is 999 and min is 0
if wep_dq_base_mdef + @atr_mod_list.mdef > 999
return 999
elsif wep_dq_base_mdef + @atr_mod_list.mdef <= 0
return 1
else
return wep_dq_base_mdef + @atr_mod_list.mdef
end
end
#--------------------------------------------------------------------------
# * Get Basic Evasion Correction
#--------------------------------------------------------------------------
alias wep_dq_base_eva base_eva
def base_eva
# Max is 999 and min is 0
if wep_dq_base_eva + @atr_mod_list.eva > 999
return 999
elsif wep_dq_base_eva + @atr_mod_list.eva <= 0
return 1
else
return wep_dq_base_eva + @atr_mod_list.eva
end
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles the actor. It's used within the Game_Actors class
# ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Get Basic Maximum HP
#--------------------------------------------------------------------------
alias wep_dq_base_maxhp base_maxhp
def base_maxhp
# Max is 9999 and min is 0
if wep_dq_base_maxhp + @atr_mod_list.maxhp > 9999
return 9999
elsif wep_dq_base_maxhp + @atr_mod_list.maxhp <= 0
return 1
else
return wep_dq_base_maxhp + @atr_mod_list.maxhp
end
end
#--------------------------------------------------------------------------
# * Get Basic Maximum SP
#--------------------------------------------------------------------------
alias wep_dq_base_maxsp base_maxsp
def base_maxsp
# Max is 9999 and min is 0
if wep_dq_base_maxsp + @atr_mod_list.maxsp > 9999
return 9999
elsif wep_dq_base_maxsp + @atr_mod_list.maxsp <= 0
return 1
else
return wep_dq_base_maxsp + @atr_mod_list.maxsp
end
end
#--------------------------------------------------------------------------
# * Get Basic Strength
#--------------------------------------------------------------------------
alias wep_dq_base_str base_str
def base_str
# Max is 999 and min is 0
if wep_dq_base_str + @atr_mod_list.str > 999
return 999
elsif wep_dq_base_str + @atr_mod_list.str <= 0
return 1
else
return wep_dq_base_str + @atr_mod_list.str
end
end
#--------------------------------------------------------------------------
# * Get Basic Dexterity
#--------------------------------------------------------------------------
alias wep_dq_base_dex base_dex
def base_dex
# Max is 999 and min is 0
if wep_dq_base_dex + @atr_mod_list.dex > 999
return 999
elsif wep_dq_base_dex + @atr_mod_list.dex <= 0
return 1
else
return wep_dq_base_dex + @atr_mod_list.dex
end
end
#--------------------------------------------------------------------------
# * Get Basic Agility
#--------------------------------------------------------------------------
alias wep_dq_base_agi base_agi
def base_agi
# Max is 999 and min is 0
if wep_dq_base_agi + @atr_mod_list.agi > 999
return 999
elsif wep_dq_base_agi + @atr_mod_list.agi <= 0
return 1
else
return wep_dq_base_agi + @atr_mod_list.agi
end
end
#--------------------------------------------------------------------------
# * Get Basic Intelligence
#--------------------------------------------------------------------------
alias wep_dq_base_int base_int
def base_int
# Max is 999 and min is 0
if wep_dq_base_int + @atr_mod_list.int > 999
return 999
elsif wep_dq_base_int + @atr_mod_list.int <= 0
return 1
else
return wep_dq_base_int + @atr_mod_list.int
end
end
#--------------------------------------------------------------------------
# * Get Basic Attack Power
#--------------------------------------------------------------------------
alias wep_dq_base_atk base_atk
def base_atk
# Max is 999 and min is 0
if wep_dq_base_atk + @atr_mod_list.atk > 999
return 999
elsif wep_dq_base_atk + @atr_mod_list.atk <= 0
return 1
else
return wep_dq_base_atk + @atr_mod_list.atk
end
end
#--------------------------------------------------------------------------
# * Get Basic Physical Defense
#--------------------------------------------------------------------------
alias wep_dq_base_pdef base_pdef
def base_pdef
# Max is 999 and min is 0
if wep_dq_base_pdef + @atr_mod_list.pdef > 999
return 999
elsif wep_dq_base_pdef + @atr_mod_list.pdef <= 0
return 1
else
return wep_dq_base_pdef + @atr_mod_list.pdef
end
end
#--------------------------------------------------------------------------
# * Get Basic Magic Defense
#--------------------------------------------------------------------------
alias wep_dq_base_mdef base_mdef
def base_mdef
# Max is 999 and min is 0
if wep_dq_base_mdef + @atr_mod_list.mdef > 999
return 999
elsif wep_dq_base_mdef + @atr_mod_list.mdef <= 0
return 1
else
return wep_dq_base_mdef + @atr_mod_list.mdef
end
end
#--------------------------------------------------------------------------
# * Get Basic Evasion Correction
#--------------------------------------------------------------------------
alias wep_dq_base_eva base_eva
def base_eva
# Max is 999 and min is 0
if wep_dq_base_eva + @atr_mod_list.eva > 999
return 999
elsif wep_dq_base_eva + @atr_mod_list.eva <= 0
return 1
else
return wep_dq_base_eva + @atr_mod_list.eva
end
end
end