Demo – Version 1.3 >
#------------------------------------------------------------------------------#
# Galv's Cover (Substitute) Functionality
#------------------------------------------------------------------------------#
# For: RPGMAKER VX ACE
# Version 1.3
# Requested by Leyla
#------------------------------------------------------------------------------#
# 2013-03-12 - Version 1.3 - added notetag to remove cover state after used
# 2013-02-17 - Version 1.2 - added option to change when cover takes effect
# 2013-02-17 - Version 1.1 - fixed a crash with attacking
# 2013-02-15 - Version 1.0 - release
#------------------------------------------------------------------------------#
# Some extra options for the substitute feature, allowing you to specify actors
# who cannot be covered and states that can only cover certain actors. Can also
# make actors/enemies unable to be covered by others.
#------------------------------------------------------------------------------#
# Notetag STATES, ACTORS or ENEMIES with:
#------------------------------------------------------------------------------#
#
# <uncoverable> # This actor/enemy can never be covered for.
#
# <cover: x,x,x> # A state, actor or enemy with this notetag AND the
# # substitute feature will only cover (substitute) for
# # friendly actors/enemies with ids listed in x's.
#
# EXAMPLE:
# <cover: 3,5,12,14,29> # Only those actor ID's can be covered.
#
# NOTE:
# If an actor has the substitute feature or state with substitute feature and
# does not have the <cover: x> tag on either the actor or the state then they
# will be able to cover anybody without restriction. If the cover tag is on
# either the actor or the state, it will use that restriction.
#
#------------------------------------------------------------------------------#
# Notetag STATES ONLY with:
#------------------------------------------------------------------------------#
#
# <cover_once> # When a battler has a STATE with the substitute feature
# # adding this tag will mean they can only substitute once
# # before the state is removed.
#
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# SCRIPT CALL:
#------------------------------------------------------------------------------#
#
# $game_actors[x].uncoverable = true/false # change if actor can be covered
#
#------------------------------------------------------------------------------#
($imported ||= {})["Galv_Sub_Functions"] = true
module Galv_Sub
#------------------------------------------------------------------------------#
# SETUP OPTIONS
#------------------------------------------------------------------------------#
SUB_HP_PERCENT = 30 # Percent of max hp a battler has remaining before
# anyone will cover them using a skill. default 25.
# Make this 0 to use default (and to potentially work
# with another script that modifies this).
#------------------------------------------------------------------------------#
# END SETUP OPTIONS
#------------------------------------------------------------------------------#
end
class Scene_Battle < Scene_Base
alias galv_cant_sub_scene_battle_apply_substitute apply_substitute
def apply_substitute(target, item)
target.actor? ? id = target.id : id = target.enemy_id
target.friends_unit.get_sub_target(id)
galv_cant_sub_scene_battle_apply_substitute(target, item)
end
alias galv_cant_sub_scene_battle_check_substitute check_substitute
def check_substitute(target, item)
return false if cannot_sub(target)
if Galv_Sub::SUB_HP_PERCENT > 0
return target.hp <= target.mhp * (Galv_Sub::SUB_HP_PERCENT.to_f / 100) &&
(!item || !item.certain?)
end
galv_cant_sub_scene_battle_check_substitute(target, item)
end
def cannot_sub(target)
return true if target.uncoverable
target.states.each {|s|
return true if s.uncoverable
}
return false
end
end # Scene_Battle < Scene_Base
class Window_BattleLog < Window_Selectable
alias galv_cant_sub_window_bl_display_substitute display_substitute
def display_substitute(substitute, target)
galv_cant_sub_window_bl_display_substitute(substitute, target)
substitute.states.each {|s|
s.features.find {|sub|
return substitute.remove_state(s.id) if sub.code == 62 &&
sub.data_id == 2 && s.cover_once
}
}
end
end # Window_BattleLog < Window_Selectable
class Game_Unit
def get_sub_target(target_id)
@subtarget = target_id
end
#------------------------------------------------------------------------------#
# OVERWRITE
#------------------------------------------------------------------------------#
def substitute_battler
members.find {|member|
target_only = []
member.cover.each {|id| target_only << id }
member.states.each {|s|
s.cover.each {|id| target_only << id}
}
member.substitute? if target_only.include?(@subtarget) || target_only.empty?
}
end
end # Game_Unit
class Game_Actor < Game_Battler
attr_accessor :uncoverable
attr_accessor :cover
alias galv_cant_sub_actor_setup setup
def setup(actor_id)
@uncoverable = $data_actors[actor_id].uncoverable
@cover = $data_actors[actor_id].cover
galv_cant_sub_actor_setup(actor_id)
end
end # Game_Actor < Game_Battler
class Game_Enemy < Game_Battler
attr_accessor :uncoverable
attr_accessor :cover
alias galv_cant_sub_enemy_initialize initialize
def initialize(index, enemy_id)
galv_cant_sub_enemy_initialize(index, enemy_id)
@uncoverable = $data_enemies[enemy_id].uncoverable
@cover = $data_enemies[enemy_id].cover
end
end # Game_Enemy < Game_Battler
module Galv_Substitute
def uncoverable
if @uncoverable.nil?
if @note =~ /<uncoverable>/i
@uncoverable = true
else
@uncoverable = false
end
end
@uncoverable
end
def cover
if @cover.nil?
if @note =~ /<cover:[ ](.*)>/i
@cover = $1.to_s.split(",").map {|i| i.to_i}
else
@cover = []
end
end
@cover
end
end # Galv_Substitute
class RPG::Actor
include Galv_Substitute
end
class RPG::Enemy
include Galv_Substitute
end
class RPG::State
include Galv_Substitute
def cover_once
if @cover_once.nil?
if @note =~ /<cover_once>/i
@cover_once = true
else
@cover_once = false
end
end
@cover_once
end
end
Sorry to bother you Galv,the demo is giving me a error in the line 44 when i use the attack command.

Excuse me for my bad English and Thanks for this excelent script,it makes me remenber the Final Fantasy 9 passive skill “My Hero”
Here is a screenshot of the error:
Thanks for letting me know, looks like I broke it haha. I have made a modification that should have fixed it now – please get v1.1