FF2처럼, 스테이터스 성장은 전투중의 행동에 따라 결정됩니다.(가령, 전투중 대미지를 입었을 때는 최대 HP가 증가하고, 물리공격을 많이하면 그만큼 Str이 올라가고 등등) 경험치는 있지만 통상의 레벨업이 없으므로 경험치 부분은 사실상 더미입니다(대신 스킬을 익힌다든가 하는 다른 용도로 사용가능).
#==============================================================================
# Custom Stat Growing System (CSGS) by Blizzard
# version 1.0
# Date: 20.5.2006
#
# Special Thanks:
# Viviatus - for requesting this script =D
#
# IMPORTANT NOTE:
# This script will disable the feature of leveling up. Please be sure to use
# a Custom Skill Learning System or have an appropriate script.
#
# SDK compatibilty:
# This script was NOT tested with SDK, altough there is only a 5% chance, that
# it will not work with SDK.
#
# Description:
# This script disables the ability to gain levels, altough EXP are still being
# received and can be used for another purpose. It also will allow to raise
# the character stats by other meanings than level ups.
#
# Explanation:
# - max HP will be raised if the character loses an ammount of HP, that is
# equal to a specific (and configurable) percentage of the max HP
# - max SP will be raised if the character uses an ammount of SP, that is
# equal to a specific (and configurable) percentage of the max SP
# - also it is possible to set up the succes chance of raising max HP and/or SP
# - STR will be raised if the character attacks often.
# - DEX will be raised if the character lands a critical hit or evade a status
# change.
# - INT will be raised if the character uses magic based skills, but not if
# skills are only STR, DEX and/or AGI based!
# - AGI will be raised if the character manages to evades a physical attack or
# is the very first character to act during a round.
#
# This script has a preconfiguration, but I highly recommend to configure it to
# your suits. Press CTRL+F and type CONFIGURATION to find the part, that may be
# configured.
#
#==============================================================================
#==============================================================================
# Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
attr_reader :dmghp
attr_reader :usesp
attr_reader :xstr
attr_reader :xdex
attr_reader :xint
attr_reader :xagi
alias setup_later setup
def setup(actor_id)
setup_later(actor_id)
@dmghp = 0
@usesp = 0
@xstr = 0
@xdex = 0
@xint = 0
@xagi = 0
end
def dmghp=(hp)
@dmghp = hp
end
def usesp=(sp)
@usesp = sp
end
def xstr=(str)
@xstr = str
end
def xdex=(dex)
@xdex = dex
end
def xint=(int)
@xint = int
end
def xagi=(agi)
@xagi = agi
end
def exp=(exp) # disabling level up
@exp = [[exp, 9999999].min, 0].max
# Correction if exceeding current max HP and max SP
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
end
#==============================================================================
# Game_Battler
#==============================================================================
class Game_Battler
alias attack_effect_later attack_effect
def attack_effect(attacker)
# saving old ammount of HP
last_hp = self.hp
saving = attack_effect_later(attacker)
# Is the actor the one being attacked?
if self.is_a?(Game_Actor)
# Has the actor taken damage?
if last_hp > self.hp
self.dmghp += (last_hp - self.hp)
end
if self.damage == "Miss"
self.xagi += 1
end
end
# Is the actor the attacker?
if attacker.is_a?(Game_Actor)
# Has the actor dealt damage?
if last_hp > self.hp
attacker.xstr += 1
end
# Is the damage dealt by the actor critical?
if self.critical == true
attacker.xdex += 1
end
end
return saving
end
alias skill_effect_later skill_effect
def skill_effect(user, skill)
# saving old ammount of HP and SP
last_hp = self.hp
last_sp = user.sp
saving = skill_effect_later(user, skill)
if self.is_a?(Game_Actor)
# Has the actor taken damage?
if last_hp > self.hp
self.dmghp += (last_hp - self.hp)
end
if @state_changed == false
self.xdex += 1
end
end
if user.is_a?(Game_Actor)
# Has the actor used skill points?
if last_sp > user.sp
user.usesp += (last_sp - user.sp)
end
# Is the skill magical?
if skill.int_f != 0
user.xint += 1
end
end
return saving
end
alias slip_damage_effect_later slip_damage_effect
def slip_damage_effect
# saving old ammount of HP
last_hp = self.hp
saving = slip_damage_effect_later
if self.is_a?(Game_Actor)
# Has the actor taken damage?
if last_hp > self.hp
self.dmghp += (last_hp - self.hp)
end
end
return saving
end
end
#==============================================================================
# Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor_x = i * 160 + 4
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "STATS UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
end
#==============================================================================
# Scene_Battle
#==============================================================================
class Scene_Battle
alias main_later main
def main
#---------------------#
# BEGIN CONFIGURATION #
#---------------------#
@hpchance = 50 # % chance of HP raising if 50% of max HP value were lost
@spchance = 50 # % chance of SP raising if 50% of max SP value were used
@hplost = 50 # how much % of max HP must be lost, that max HP increase
@spused = 50 # how much % of max SP must be used, that max SP increase
@hprate = 100 # how much additional HP
@sprate = 100 # how much additional SP
@strchance = 70 # % chance of STR raising
@dexchance = 70 # % chance of DEX raising
@intchance = 70 # % chance of INT raising
@agichance = 70 # % chance of AGI raising
@strrate = 7 # how much additional STR points
@dexrate = 7 # how much additional DEX points
@intrate = 7 # how much additional INT points
@agirate = 7 # how much additional AGI points
@strrate_min = 10 # min xstr needed to raise STR
@dexrate_min = 10 # min xstr needed to raise DEX
@intrate_min = 10 # min xstr needed to raise INT
@agirate_min = 10 # min xstr needed to raise AGI
# In the part below you can activate or deactivate the RBB - "Reset Before
# Battle" feature, that will reset the "counters", that are counting how
# many times a stat was stimulated. Only activate this if you want that
# counters ARE RESETED TO ZERO before every fight. This will have the
# effect, that not MANY battles will raise the stats, but LONG battles.
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.dmghp = 0
actor.usesp = 0
#actor.xstr = 0 # remove the # at the beginning to activate "RBB" for STR
#actor.xdex = 0 # remove the # at the beginning to activate "RBB" for DEX
#actor.xint = 0 # remove the # at the beginning to activate "RBB" for INT
#actor.xagi = 0 # remove the # at the beginning to activate "RBB" for AGI
end
#-------------------#
# END CONFIGURATION #
#-------------------#
main_later
# Raising stats
end
alias start_phase5_later start_phase5
def start_phase5
for i in 0...$game_party.actors.size
# Lost enough HP to raise?
actor = $game_party.actors[i]
if actor.dmghp >= actor.maxhp * @hplost / 100
if rand(100) > @hpchance
actor.maxhp += @hprate
@status_window.level_up(i)
end
end
# Lost enough SP to raise?
if actor.usesp >= actor.maxsp * @spused / 100
if rand(100) > @spchance
actor.maxsp += @sprate
@status_window.level_up(i)
end
end
# Enough xstr gained to raise str?
if actor.xstr >= @strrate_min
if rand(100) > @strchance
actor.str += @strrate
actor.xstr = 0
@status_window.level_up(i)
end
end
# Enough xdex gained to raise dex?
if actor.xdex >= @dexrate_min
if rand(100) > @dexchance
actor.dex += @dexrate
actor.xdex = 0
@status_window.level_up(i)
end
end
# Enough xint gained to raise int?
if actor.xint >= @intrate_min
if rand(100) > @intchance
actor.int += @intrate
actor.xint = 0
@status_window.level_up(i)
end
end
# Enough xagi gained to raise agi?
if actor.xagi >= @agirate_min
if rand(100) > @agichance
actor.agi += @agirate
actor.xagi = 0
@status_window.level_up(i)
end
end
end
start_phase5_later
end
alias make_action_orders_later make_action_orders
def make_action_orders
make_action_orders_later
if @action_battlers[0].is_a?(Game_Actor)
@action_battlers[0].xagi += 1
end
end
end
#==============================================================================
# Custom Stat Growing System (CSGS) by Blizzard
# version 1.0
# Date: 20.5.2006
#
# Special Thanks:
# Viviatus - for requesting this script =D
#
# IMPORTANT NOTE:
# This script will disable the feature of leveling up. Please be sure to use
# a Custom Skill Learning System or have an appropriate script.
#
# SDK compatibilty:
# This script was NOT tested with SDK, altough there is only a 5% chance, that
# it will not work with SDK.
#
# Description:
# This script disables the ability to gain levels, altough EXP are still being
# received and can be used for another purpose. It also will allow to raise
# the character stats by other meanings than level ups.
#
# Explanation:
# - max HP will be raised if the character loses an ammount of HP, that is
# equal to a specific (and configurable) percentage of the max HP
# - max SP will be raised if the character uses an ammount of SP, that is
# equal to a specific (and configurable) percentage of the max SP
# - also it is possible to set up the succes chance of raising max HP and/or SP
# - STR will be raised if the character attacks often.
# - DEX will be raised if the character lands a critical hit or evade a status
# change.
# - INT will be raised if the character uses magic based skills, but not if
# skills are only STR, DEX and/or AGI based!
# - AGI will be raised if the character manages to evades a physical attack or
# is the very first character to act during a round.
#
# This script has a preconfiguration, but I highly recommend to configure it to
# your suits. Press CTRL+F and type CONFIGURATION to find the part, that may be
# configured.
#
#==============================================================================
#==============================================================================
# Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
attr_reader :dmghp
attr_reader :usesp
attr_reader :xstr
attr_reader :xdex
attr_reader :xint
attr_reader :xagi
alias setup_later setup
def setup(actor_id)
setup_later(actor_id)
@dmghp = 0
@usesp = 0
@xstr = 0
@xdex = 0
@xint = 0
@xagi = 0
end
def dmghp=(hp)
@dmghp = hp
end
def usesp=(sp)
@usesp = sp
end
def xstr=(str)
@xstr = str
end
def xdex=(dex)
@xdex = dex
end
def xint=(int)
@xint = int
end
def xagi=(agi)
@xagi = agi
end
def exp=(exp) # disabling level up
@exp = [[exp, 9999999].min, 0].max
# Correction if exceeding current max HP and max SP
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
end
#==============================================================================
# Game_Battler
#==============================================================================
class Game_Battler
alias attack_effect_later attack_effect
def attack_effect(attacker)
# saving old ammount of HP
last_hp = self.hp
saving = attack_effect_later(attacker)
# Is the actor the one being attacked?
if self.is_a?(Game_Actor)
# Has the actor taken damage?
if last_hp > self.hp
self.dmghp += (last_hp - self.hp)
end
if self.damage == "Miss"
self.xagi += 1
end
end
# Is the actor the attacker?
if attacker.is_a?(Game_Actor)
# Has the actor dealt damage?
if last_hp > self.hp
attacker.xstr += 1
end
# Is the damage dealt by the actor critical?
if self.critical == true
attacker.xdex += 1
end
end
return saving
end
alias skill_effect_later skill_effect
def skill_effect(user, skill)
# saving old ammount of HP and SP
last_hp = self.hp
last_sp = user.sp
saving = skill_effect_later(user, skill)
if self.is_a?(Game_Actor)
# Has the actor taken damage?
if last_hp > self.hp
self.dmghp += (last_hp - self.hp)
end
if @state_changed == false
self.xdex += 1
end
end
if user.is_a?(Game_Actor)
# Has the actor used skill points?
if last_sp > user.sp
user.usesp += (last_sp - user.sp)
end
# Is the skill magical?
if skill.int_f != 0
user.xint += 1
end
end
return saving
end
alias slip_damage_effect_later slip_damage_effect
def slip_damage_effect
# saving old ammount of HP
last_hp = self.hp
saving = slip_damage_effect_later
if self.is_a?(Game_Actor)
# Has the actor taken damage?
if last_hp > self.hp
self.dmghp += (last_hp - self.hp)
end
end
return saving
end
end
#==============================================================================
# Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor_x = i * 160 + 4
draw_actor_name(actor, actor_x, 0)
draw_actor_hp(actor, actor_x, 32, 120)
draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "STATS UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
end
#==============================================================================
# Scene_Battle
#==============================================================================
class Scene_Battle
alias main_later main
def main
#---------------------#
# BEGIN CONFIGURATION #
#---------------------#
@hpchance = 50 # % chance of HP raising if 50% of max HP value were lost
@spchance = 50 # % chance of SP raising if 50% of max SP value were used
@hplost = 50 # how much % of max HP must be lost, that max HP increase
@spused = 50 # how much % of max SP must be used, that max SP increase
@hprate = 100 # how much additional HP
@sprate = 100 # how much additional SP
@strchance = 70 # % chance of STR raising
@dexchance = 70 # % chance of DEX raising
@intchance = 70 # % chance of INT raising
@agichance = 70 # % chance of AGI raising
@strrate = 7 # how much additional STR points
@dexrate = 7 # how much additional DEX points
@intrate = 7 # how much additional INT points
@agirate = 7 # how much additional AGI points
@strrate_min = 10 # min xstr needed to raise STR
@dexrate_min = 10 # min xstr needed to raise DEX
@intrate_min = 10 # min xstr needed to raise INT
@agirate_min = 10 # min xstr needed to raise AGI
# In the part below you can activate or deactivate the RBB - "Reset Before
# Battle" feature, that will reset the "counters", that are counting how
# many times a stat was stimulated. Only activate this if you want that
# counters ARE RESETED TO ZERO before every fight. This will have the
# effect, that not MANY battles will raise the stats, but LONG battles.
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor.dmghp = 0
actor.usesp = 0
#actor.xstr = 0 # remove the # at the beginning to activate "RBB" for STR
#actor.xdex = 0 # remove the # at the beginning to activate "RBB" for DEX
#actor.xint = 0 # remove the # at the beginning to activate "RBB" for INT
#actor.xagi = 0 # remove the # at the beginning to activate "RBB" for AGI
end
#-------------------#
# END CONFIGURATION #
#-------------------#
main_later
# Raising stats
end
alias start_phase5_later start_phase5
def start_phase5
for i in 0...$game_party.actors.size
# Lost enough HP to raise?
actor = $game_party.actors[i]
if actor.dmghp >= actor.maxhp * @hplost / 100
if rand(100) > @hpchance
actor.maxhp += @hprate
@status_window.level_up(i)
end
end
# Lost enough SP to raise?
if actor.usesp >= actor.maxsp * @spused / 100
if rand(100) > @spchance
actor.maxsp += @sprate
@status_window.level_up(i)
end
end
# Enough xstr gained to raise str?
if actor.xstr >= @strrate_min
if rand(100) > @strchance
actor.str += @strrate
actor.xstr = 0
@status_window.level_up(i)
end
end
# Enough xdex gained to raise dex?
if actor.xdex >= @dexrate_min
if rand(100) > @dexchance
actor.dex += @dexrate
actor.xdex = 0
@status_window.level_up(i)
end
end
# Enough xint gained to raise int?
if actor.xint >= @intrate_min
if rand(100) > @intchance
actor.int += @intrate
actor.xint = 0
@status_window.level_up(i)
end
end
# Enough xagi gained to raise agi?
if actor.xagi >= @agirate_min
if rand(100) > @agichance
actor.agi += @agirate
actor.xagi = 0
@status_window.level_up(i)
end
end
end
start_phase5_later
end
alias make_action_orders_later make_action_orders
def make_action_orders
make_action_orders_later
if @action_battlers[0].is_a?(Game_Actor)
@action_battlers[0].xagi += 1
end
end
end