This script will allow you to gain HP or SP or even both if guarding, but it depends on luck or a random number to be precise.
There are several CONSTANTS embedded in the script that seemed to be repeating themselves. That is totally fine. Just go configure them at any given time to suit your guarding needs.
All values stand for percentages. Never add their % symbols!
Accepted Range of Values: 0 through 100.
Since version 1.1.0 you can also add or remove or clear Guard States!
Warning
Scene_Battle#make_basic_action_result has been overwritten.
It won't work in old saved games! You got to delete them.
# This script will allow you to gain HP or SP or even both if guarding.
# There are several CONSTANTS that seemed to be repeating themselves. That is
# totally fine. Just go configure them first to suit your guarding needs.
# All values stand for percentages. Never add their % symbols!
# Accepted Range of Values: 0 through 100.
# * Optional Script Calls * #
# - Add or Clear Guard States
# For Heroes:
# actors = $game_party.actors
# actors[ActorIndex].add_guard_states_plus(StateID1, etc.)
# actors[ActorIndex].add_guard_states_minus(StateID1, etc.)
# actors[ActorIndex].clear_guard_states_plus
# actors[ActorIndex].clear_guard_states_minus
# For Enemies in Battle:
# enemies = $game_troop.enemies
# enemies[EnemyIndex].add_guard_states_plus(StateID1, etc.)
# enemies[EnemyIndex].add_guard_states_minus(StateID1, etc.)
# enemies[EnemyIndex].clear_guard_states_plus
# enemies[EnemyIndex].clear_guard_states_minus
# * Warning * #
# Scene_Battle#make_basic_action_result has been overwritten.
module ManaGain
ACTOR_PERCENT = 7
ACTOR_CHANCE = 50
ENEMY_PERCENT = 5
ENEMY_CHANCE = 25
end
end
class Game_Battler
include KGuard
alias :kyon_kguard_rek_gm_btlr_init :initialize
alias :kyon_kguard_rek_gm_btlr_atk_fx :attack_effect
alias :kyon_kguard_rek_gm_btlr_skl_fx :skill_effect
attr_accessor :guard_life_rate, :guard_life_chance
attr_accessor :guard_mana_rate, :guard_mana_chance
def initialize
kyon_kguard_rek_gm_btlr_init
setup_guard_gain_points
setup_guard_states
end
def setup_guard_states
@guard_states_plus = []
@guard_states_minus = []
end
def guard_regain_points
guard_regain_life if guard_gain_life?
guard_regain_mana if guard_gain_mana?
end
def guard_life_gain
@guard_life_rate
end
def guard_mana_gain
@guard_mana_rate
end
def guard_gain_life?
rand(100) <= @guard_life_chance
end
def guard_gain_mana?
rand(100) <= @guard_mana_chance
end
def add_guard_states_plus(*new_states)
@guard_states_plus += new_states
@guard_states_plus = @guard_states_plus.uniq.sort
end
def add_guard_states_minus(*new_states)
@guard_states_minus += new_states
@guard_states_minus = @guard_states_minus.uniq.sort
end
def clear_guard_states_plus
@guard_states_plus.clear
end
def clear_guard_states_minus
@guard_states_minus.clear
end
def guard_trigger_states
n = rand(@guard_states_plus.size)
state_id = @guard_states_plus[n]
add_state(state_id) if state_id
n = rand(@guard_states_minus.size)
state_id = @guard_states_minus[n]
remove_state(state_id) if state_id
end
def attack_effect(attacker)
guard_trigger_states if guarding?
kyon_kguard_rek_gm_btlr_atk_fx(attacker)
end
def skill_effect(user, skill)
guard_trigger_states if guarding?
kyon_kguard_rek_gm_btlr_skl_fx(user, skill)
end
def attack?
@current_action.basic == 0
end
def wanna_escape?
@current_action.basic == 2
end
def do_nothing?
@current_action.basic == 3
end
def actor?
@actor_id != nil
end
def enemy?
@enemy_id != nil
end
end
class Game_Actor
def setup_guard_gain_points
@guard_life_rate = LifeGain::ACTOR_PERCENT
@guard_life_chance = LifeGain::ACTOR_CHANCE
@guard_mana_rate = ManaGain::ACTOR_PERCENT
@guard_mana_chance = ManaGain::ACTOR_CHANCE
end
end
class Game_Enemy
def setup_guard_gain_points
@guard_life_rate = LifeGain::ENEMY_PERCENT
@guard_life_chance = LifeGain::ENEMY_CHANCE
@guard_mana_rate = ManaGain::ENEMY_PERCENT
@guard_mana_chance = ManaGain::ENEMY_CHANCE
end
end
class Scene_Battle
def make_basic_action_result
if @active_battler.attack?
prepare_basic_attack
process_attack_action
return
end
if @active_battler.guarding?
prepare_guard_action
return
end
if @active_battler.enemy? and @active_battler.wanna_escape?
prepare_escape_action
return
end
do_nothing if @active_battler.do_nothing?
end
def prepare_basic_attack
@animation1_id = @active_battler.animation1_id
@animation2_id = @active_battler.animation2_id
if @active_battler.enemy?
if @active_battler.restriction == 3
target = $game_troop.random_target_enemy
elsif @active_battler.restriction == 2
target = $game_party.random_target_actor
else
index = @active_battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
end
if @active_battler.actor?
if @active_battler.restriction == 3
target = $game_party.random_target_actor
elsif @active_battler.restriction == 2
target = $game_troop.random_target_enemy
else
index = @active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
end
end
@target_battlers = [target].compact
end
def process_attack_action
@target_battlers.each {|target| target.attack_effect(@active_battler) }
end
def prepare_guard_action
@help_window.set_text($data_system.words.guard, 1)
@active_battler.guard_regain_points
end
def prepare_escape_action
@help_window.set_text("Escape", 1)
@active_battler.escape
end
def do_nothing
$game_temp.forcing_battler = nil
@active_battler.guard_regain_points if @active_battler.enemy?
@phase4_step = 1
end
end