sacred-ritual-academy/Scripts/Game_BattlerBase.rb
2025-03-18 19:45:34 -05:00

730 lines
33 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  バトラーを扱う基本のクラスです。主に能力値計算のメソッドを含んでいます。こ
# のクラスは Game_Battler クラスのスーパークラスとして使用されます。
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# ● 定数(特徴)
#--------------------------------------------------------------------------
FEATURE_ELEMENT_RATE = 11 # 属性有効度
FEATURE_DEBUFF_RATE = 12 # 弱体有効度
FEATURE_STATE_RATE = 13 # ステート有効度
FEATURE_STATE_RESIST = 14 # ステート無効化
FEATURE_PARAM = 21 # 通常能力値
FEATURE_XPARAM = 22 # 追加能力値
FEATURE_SPARAM = 23 # 特殊能力値
FEATURE_ATK_ELEMENT = 31 # 攻撃時属性
FEATURE_ATK_STATE = 32 # 攻撃時ステート
FEATURE_ATK_SPEED = 33 # 攻撃速度補正
FEATURE_ATK_TIMES = 34 # 攻撃追加回数
FEATURE_STYPE_ADD = 41 # スキルタイプ追加
FEATURE_STYPE_SEAL = 42 # スキルタイプ封印
FEATURE_SKILL_ADD = 43 # スキル追加
FEATURE_SKILL_SEAL = 44 # スキル封印
FEATURE_EQUIP_WTYPE = 51 # 武器タイプ装備
FEATURE_EQUIP_ATYPE = 52 # 防具タイプ装備
FEATURE_EQUIP_FIX = 53 # 装備固定
FEATURE_EQUIP_SEAL = 54 # 装備封印
FEATURE_SLOT_TYPE = 55 # スロットタイプ
FEATURE_ACTION_PLUS = 61 # 行動回数追加
FEATURE_SPECIAL_FLAG = 62 # 特殊フラグ
FEATURE_COLLAPSE_TYPE = 63 # 消滅エフェクト
FEATURE_PARTY_ABILITY = 64 # パーティ能力
#--------------------------------------------------------------------------
# ● 定数(特殊フラグ)
#--------------------------------------------------------------------------
FLAG_ID_AUTO_BATTLE = 0 # 自動戦闘
FLAG_ID_GUARD = 1 # 防御
FLAG_ID_SUBSTITUTE = 2 # 身代わり
FLAG_ID_PRESERVE_TP = 3 # TP持ち越し
#--------------------------------------------------------------------------
# ● 定数(能力強化/弱体アイコンの開始番号)
#--------------------------------------------------------------------------
ICON_BUFF_START = 64 # 強化16 個)
ICON_DEBUFF_START = 80 # 弱体16 個)
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :hp # HP
attr_reader :mp # MP
attr_reader :tp # TP
#--------------------------------------------------------------------------
# ● 各種能力値の略称によるアクセスメソッド
#--------------------------------------------------------------------------
def mhp; param(0); end # 最大HP Maximum Hit Point
def mmp; param(1); end # 最大MP Maximum Magic Point
def atk; param(2); end # 攻撃力 ATtacK power
def def; param(3); end # 防御力 DEFense power
def mat; param(4); end # 魔法力 Magic ATtack power
def mdf; param(5); end # 魔法防御 Magic DeFense power
def agi; param(6); end # 敏捷性 AGIlity
def luk; param(7); end # 運 LUcK
def hit; xparam(0); end # 命中率 HIT rate
def eva; xparam(1); end # 回避率 EVAsion rate
def cri; xparam(2); end # 会心率 CRItical rate
def cev; xparam(3); end # 会心回避率 Critical EVasion rate
def mev; xparam(4); end # 魔法回避率 Magic EVasion rate
def mrf; xparam(5); end # 魔法反射率 Magic ReFlection rate
def cnt; xparam(6); end # 反撃率 CouNTer attack rate
def hrg; xparam(7); end # HP再生率 Hp ReGeneration rate
def mrg; xparam(8); end # MP再生率 Mp ReGeneration rate
def trg; xparam(9); end # TP再生率 Tp ReGeneration rate
def tgr; sparam(0); end # 狙われ率 TarGet Rate
def grd; sparam(1); end # 防御効果率 GuaRD effect rate
def rec; sparam(2); end # 回復効果率 RECovery effect rate
def pha; sparam(3); end # 薬の知識 PHArmacology
def mcr; sparam(4); end # MP消費率 Mp Cost Rate
def tcr; sparam(5); end # TPチャージ率 Tp Charge Rate
def pdr; sparam(6); end # 物理ダメージ率 Physical Damage Rate
def mdr; sparam(7); end # 魔法ダメージ率 Magical Damage Rate
def fdr; sparam(8); end # 床ダメージ率 Floor Damage Rate
def exr; sparam(9); end # 経験獲得率 EXperience Rate
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
@hp = @mp = @tp = 0
@hidden = false
clear_param_plus
clear_states
clear_buffs
end
#--------------------------------------------------------------------------
# ● 能力値に加算する値をクリア
#--------------------------------------------------------------------------
def clear_param_plus
@param_plus = [0] * 8
end
#--------------------------------------------------------------------------
# ● ステート情報をクリア
#--------------------------------------------------------------------------
def clear_states
@states = []
@state_turns = {}
@state_steps = {}
end
#--------------------------------------------------------------------------
# ● ステートの消去
#--------------------------------------------------------------------------
def erase_state(state_id)
@states.delete(state_id)
@state_turns.delete(state_id)
@state_steps.delete(state_id)
end
#--------------------------------------------------------------------------
# ● 能力強化情報をクリア
#--------------------------------------------------------------------------
def clear_buffs
@buffs = Array.new(8) { 0 }
@buff_turns = {}
end
#--------------------------------------------------------------------------
# ● ステートの検査
#--------------------------------------------------------------------------
def state?(state_id)
@states.include?(state_id)
end
#--------------------------------------------------------------------------
# ● 戦闘不能ステートの検査
#--------------------------------------------------------------------------
def death_state?
state?(death_state_id)
end
#--------------------------------------------------------------------------
# ● 戦闘不能のステート ID を取得
#--------------------------------------------------------------------------
def death_state_id
return 1
end
#--------------------------------------------------------------------------
# ● 現在のステートをオブジェクトの配列で取得
#--------------------------------------------------------------------------
def states
@states.collect {|id| $data_states[id] }
end
#--------------------------------------------------------------------------
# ● 現在のステートをアイコン番号の配列で取得
#--------------------------------------------------------------------------
def state_icons
icons = states.collect {|state| state.icon_index }
icons.delete(0)
icons
end
#--------------------------------------------------------------------------
# ● 現在の強化/弱体をアイコン番号の配列で取得
#--------------------------------------------------------------------------
def buff_icons
icons = []
@buffs.each_with_index {|lv, i| icons.push(buff_icon_index(lv, i)) }
icons.delete(0)
icons
end
#--------------------------------------------------------------------------
# ● 強化/弱体に対応するアイコン番号を取得
#--------------------------------------------------------------------------
def buff_icon_index(buff_level, param_id)
if buff_level > 0
return ICON_BUFF_START + (buff_level - 1) * 8 + param_id
elsif buff_level < 0
return ICON_DEBUFF_START + (-buff_level - 1) * 8 + param_id
else
return 0
end
end
#--------------------------------------------------------------------------
# ● 特徴を保持する全オブジェクトの配列取得
#--------------------------------------------------------------------------
def feature_objects
states
end
#--------------------------------------------------------------------------
# ● 全ての特徴オブジェクトの配列取得
#--------------------------------------------------------------------------
def all_features
feature_objects.inject([]) {|r, obj| r + obj.features }
end
#--------------------------------------------------------------------------
# ● 特徴オブジェクトの配列取得(特徴コードを限定)
#--------------------------------------------------------------------------
def features(code)
all_features.select {|ft| ft.code == code }
end
#--------------------------------------------------------------------------
# ● 特徴オブジェクトの配列取得(特徴コードとデータ ID を限定)
#--------------------------------------------------------------------------
def features_with_id(code, id)
all_features.select {|ft| ft.code == code && ft.data_id == id }
end
#--------------------------------------------------------------------------
# ● 特徴値の総乗計算
#--------------------------------------------------------------------------
def features_pi(code, id)
features_with_id(code, id).inject(1.0) {|r, ft| r *= ft.value }
end
#--------------------------------------------------------------------------
# ● 特徴値の総和計算(データ ID を指定)
#--------------------------------------------------------------------------
def features_sum(code, id)
features_with_id(code, id).inject(0.0) {|r, ft| r += ft.value }
end
#--------------------------------------------------------------------------
# ● 特徴値の総和計算(データ ID は非指定)
#--------------------------------------------------------------------------
def features_sum_all(code)
features(code).inject(0.0) {|r, ft| r += ft.value }
end
#--------------------------------------------------------------------------
# ● 特徴の集合和計算
#--------------------------------------------------------------------------
def features_set(code)
features(code).inject([]) {|r, ft| r |= [ft.data_id] }
end
#--------------------------------------------------------------------------
# ● 通常能力値の基本値取得
#--------------------------------------------------------------------------
def param_base(param_id)
return 0
end
#--------------------------------------------------------------------------
# ● 通常能力値の加算値取得
#--------------------------------------------------------------------------
def param_plus(param_id)
@param_plus[param_id]
end
#--------------------------------------------------------------------------
# ● 通常能力値の最小値取得
#--------------------------------------------------------------------------
def param_min(param_id)
return 0 if param_id == 1 # MMP
return 1
end
#--------------------------------------------------------------------------
# ● 通常能力値の最大値取得
#--------------------------------------------------------------------------
def param_max(param_id)
return 999999 if param_id == 0 # MHP
return 9999 if param_id == 1 # MMP
return 999
end
#--------------------------------------------------------------------------
# ● 通常能力値の変化率取得
#--------------------------------------------------------------------------
def param_rate(param_id)
features_pi(FEATURE_PARAM, param_id)
end
#--------------------------------------------------------------------------
# ● 通常能力値の強化/弱体による変化率取得
#--------------------------------------------------------------------------
def param_buff_rate(param_id)
@buffs[param_id] * 0.25 + 1.0
end
#--------------------------------------------------------------------------
# ● 通常能力値の取得
#--------------------------------------------------------------------------
def param(param_id)
value = param_base(param_id) + param_plus(param_id)
value *= param_rate(param_id) * param_buff_rate(param_id)
[[value, param_max(param_id)].min, param_min(param_id)].max.to_i
end
#--------------------------------------------------------------------------
# ● 追加能力値の取得
#--------------------------------------------------------------------------
def xparam(xparam_id)
features_sum(FEATURE_XPARAM, xparam_id)
end
#--------------------------------------------------------------------------
# ● 特殊能力値の取得
#--------------------------------------------------------------------------
def sparam(sparam_id)
features_pi(FEATURE_SPARAM, sparam_id)
end
#--------------------------------------------------------------------------
# ● 属性有効度の取得
#--------------------------------------------------------------------------
def element_rate(element_id)
features_pi(FEATURE_ELEMENT_RATE, element_id)
end
#--------------------------------------------------------------------------
# ● 弱体有効度の取得
#--------------------------------------------------------------------------
def debuff_rate(param_id)
features_pi(FEATURE_DEBUFF_RATE, param_id)
end
#--------------------------------------------------------------------------
# ● ステート有効度の取得
#--------------------------------------------------------------------------
def state_rate(state_id)
features_pi(FEATURE_STATE_RATE, state_id)
end
#--------------------------------------------------------------------------
# ● 無効化するステートの配列を取得
#--------------------------------------------------------------------------
def state_resist_set
features_set(FEATURE_STATE_RESIST)
end
#--------------------------------------------------------------------------
# ● 無効化されているステートの判定
#--------------------------------------------------------------------------
def state_resist?(state_id)
state_resist_set.include?(state_id)
end
#--------------------------------------------------------------------------
# ● 攻撃時属性の取得
#--------------------------------------------------------------------------
def atk_elements
features_set(FEATURE_ATK_ELEMENT)
end
#--------------------------------------------------------------------------
# ● 攻撃時ステートの取得
#--------------------------------------------------------------------------
def atk_states
features_set(FEATURE_ATK_STATE)
end
#--------------------------------------------------------------------------
# ● 攻撃時ステートの発動率取得
#--------------------------------------------------------------------------
def atk_states_rate(state_id)
features_sum(FEATURE_ATK_STATE, state_id)
end
#--------------------------------------------------------------------------
# ● 攻撃速度補正の取得
#--------------------------------------------------------------------------
def atk_speed
features_sum_all(FEATURE_ATK_SPEED)
end
#--------------------------------------------------------------------------
# ● 攻撃追加回数の取得
#--------------------------------------------------------------------------
def atk_times_add
[features_sum_all(FEATURE_ATK_TIMES), 0].max
end
#--------------------------------------------------------------------------
# ● 追加スキルタイプの取得
#--------------------------------------------------------------------------
def added_skill_types
features_set(FEATURE_STYPE_ADD)
end
#--------------------------------------------------------------------------
# ● スキルタイプ封印の判定
#--------------------------------------------------------------------------
def skill_type_sealed?(stype_id)
features_set(FEATURE_STYPE_SEAL).include?(stype_id)
end
#--------------------------------------------------------------------------
# ● 追加スキルの取得
#--------------------------------------------------------------------------
def added_skills
features_set(FEATURE_SKILL_ADD)
end
#--------------------------------------------------------------------------
# ● スキル封印の判定
#--------------------------------------------------------------------------
def skill_sealed?(skill_id)
features_set(FEATURE_SKILL_SEAL).include?(skill_id)
end
#--------------------------------------------------------------------------
# ● 武器装備可能の判定
#--------------------------------------------------------------------------
def equip_wtype_ok?(wtype_id)
features_set(FEATURE_EQUIP_WTYPE).include?(wtype_id)
end
#--------------------------------------------------------------------------
# ● 防具装備可能の判定
#--------------------------------------------------------------------------
def equip_atype_ok?(atype_id)
features_set(FEATURE_EQUIP_ATYPE).include?(atype_id)
end
#--------------------------------------------------------------------------
# ● 装備固定の判定
#--------------------------------------------------------------------------
def equip_type_fixed?(etype_id)
features_set(FEATURE_EQUIP_FIX).include?(etype_id)
end
#--------------------------------------------------------------------------
# ● 装備封印の判定
#--------------------------------------------------------------------------
def equip_type_sealed?(etype_id)
features_set(FEATURE_EQUIP_SEAL).include?(etype_id)
end
#--------------------------------------------------------------------------
# ● スロットタイプの取得
#--------------------------------------------------------------------------
def slot_type
features_set(FEATURE_SLOT_TYPE).max || 0
end
#--------------------------------------------------------------------------
# ● 二刀流の判定
#--------------------------------------------------------------------------
def dual_wield?
slot_type == 1
end
#--------------------------------------------------------------------------
# ● 行動回数追加確率の配列を取得
#--------------------------------------------------------------------------
def action_plus_set
features(FEATURE_ACTION_PLUS).collect {|ft| ft.value }
end
#--------------------------------------------------------------------------
# ● 特殊フラグ判定
#--------------------------------------------------------------------------
def special_flag(flag_id)
features(FEATURE_SPECIAL_FLAG).any? {|ft| ft.data_id == flag_id }
end
#--------------------------------------------------------------------------
# ● 消滅エフェクトの取得
#--------------------------------------------------------------------------
def collapse_type
features_set(FEATURE_COLLAPSE_TYPE).max || 0
end
#--------------------------------------------------------------------------
# ● パーティ能力判定
#--------------------------------------------------------------------------
def party_ability(ability_id)
features(FEATURE_PARTY_ABILITY).any? {|ft| ft.data_id == ability_id }
end
#--------------------------------------------------------------------------
# ● 自動戦闘の判定
#--------------------------------------------------------------------------
def auto_battle?
special_flag(FLAG_ID_AUTO_BATTLE)
end
#--------------------------------------------------------------------------
# ● 防御の判定
#--------------------------------------------------------------------------
def guard?
special_flag(FLAG_ID_GUARD) && movable?
end
#--------------------------------------------------------------------------
# ● 身代わりの判定
#--------------------------------------------------------------------------
def substitute?
special_flag(FLAG_ID_SUBSTITUTE) && movable?
end
#--------------------------------------------------------------------------
# ● TP持ち越しの判定
#--------------------------------------------------------------------------
def preserve_tp?
special_flag(FLAG_ID_PRESERVE_TP)
end
#--------------------------------------------------------------------------
# ● 能力値の加算
#--------------------------------------------------------------------------
def add_param(param_id, value)
@param_plus[param_id] += value
refresh
end
#--------------------------------------------------------------------------
# ● HP の変更
#--------------------------------------------------------------------------
def hp=(hp)
@hp = hp
refresh
end
#--------------------------------------------------------------------------
# ● MP の変更
#--------------------------------------------------------------------------
def mp=(mp)
@mp = mp
refresh
end
#--------------------------------------------------------------------------
# ● HP の増減(イベント用)
# value : 増減値
# enable_death : 戦闘不能を許可
#--------------------------------------------------------------------------
def change_hp(value, enable_death)
if !enable_death && @hp + value <= 0
self.hp = 1
else
self.hp += value
end
end
#--------------------------------------------------------------------------
# ● TP の変更
#--------------------------------------------------------------------------
def tp=(tp)
@tp = [[tp, max_tp].min, 0].max
end
#--------------------------------------------------------------------------
# ● TP の最大値を取得
#--------------------------------------------------------------------------
def max_tp
return 100
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
state_resist_set.each {|state_id| erase_state(state_id) }
@hp = [[@hp, mhp].min, 0].max
@mp = [[@mp, mmp].min, 0].max
@hp == 0 ? add_state(death_state_id) : remove_state(death_state_id)
end
#--------------------------------------------------------------------------
# ● 全回復
#--------------------------------------------------------------------------
def recover_all
clear_states
@hp = mhp
@mp = mmp
end
#--------------------------------------------------------------------------
# ● HP の割合を取得
#--------------------------------------------------------------------------
def hp_rate
@hp.to_f / mhp
end
#--------------------------------------------------------------------------
# ● MP の割合を取得
#--------------------------------------------------------------------------
def mp_rate
mmp > 0 ? @mp.to_f / mmp : 0
end
#--------------------------------------------------------------------------
# ● TP の割合を取得
#--------------------------------------------------------------------------
def tp_rate
@tp.to_f / 100
end
#--------------------------------------------------------------------------
# ● 隠れる
#--------------------------------------------------------------------------
def hide
@hidden = true
end
#--------------------------------------------------------------------------
# ● 現れる
#--------------------------------------------------------------------------
def appear
@hidden = false
end
#--------------------------------------------------------------------------
# ● 隠れ状態取得
#--------------------------------------------------------------------------
def hidden?
@hidden
end
#--------------------------------------------------------------------------
# ● 存在判定
#--------------------------------------------------------------------------
def exist?
!hidden?
end
#--------------------------------------------------------------------------
# ● 戦闘不能判定
#--------------------------------------------------------------------------
def dead?
exist? && death_state?
end
#--------------------------------------------------------------------------
# ● 生存判定
#--------------------------------------------------------------------------
def alive?
exist? && !death_state?
end
#--------------------------------------------------------------------------
# ● 正常判定
#--------------------------------------------------------------------------
def normal?
exist? && restriction == 0
end
#--------------------------------------------------------------------------
# ● コマンド入力可能判定
#--------------------------------------------------------------------------
def inputable?
normal? && !auto_battle?
end
#--------------------------------------------------------------------------
# ● 行動可能判定
#--------------------------------------------------------------------------
def movable?
exist? && restriction < 4
end
#--------------------------------------------------------------------------
# ● 混乱状態判定
#--------------------------------------------------------------------------
def confusion?
exist? && restriction >= 1 && restriction <= 3
end
#--------------------------------------------------------------------------
# ● 混乱レベル取得
#--------------------------------------------------------------------------
def confusion_level
confusion? ? restriction : 0
end
#--------------------------------------------------------------------------
# ● アクターか否かの判定
#--------------------------------------------------------------------------
def actor?
return false
end
#--------------------------------------------------------------------------
# ● 敵キャラか否かの判定
#--------------------------------------------------------------------------
def enemy?
return false
end
#--------------------------------------------------------------------------
# ● ステートの並び替え
# 配列 @states の内容を表示優先度の大きい順に並び替える。
#--------------------------------------------------------------------------
def sort_states
@states = @states.sort_by {|id| [-$data_states[id].priority, id] }
end
#--------------------------------------------------------------------------
# ● 制約の取得
# 現在付加されているステートから最大の restriction を取得する。
#--------------------------------------------------------------------------
def restriction
states.collect {|state| state.restriction }.push(0).max
end
#--------------------------------------------------------------------------
# ● 最重要のステート継続メッセージを取得
#--------------------------------------------------------------------------
def most_important_state_text
states.each {|state| return state.message3 unless state.message3.empty? }
return ""
end
#--------------------------------------------------------------------------
# ● スキルの必要武器を装備しているか
#--------------------------------------------------------------------------
def skill_wtype_ok?(skill)
return true
end
#--------------------------------------------------------------------------
# ● スキルの消費 MP 計算
#--------------------------------------------------------------------------
def skill_mp_cost(skill)
(skill.mp_cost * mcr).to_i
end
#--------------------------------------------------------------------------
# ● スキルの消費 TP 計算
#--------------------------------------------------------------------------
def skill_tp_cost(skill)
skill.tp_cost
end
#--------------------------------------------------------------------------
# ● スキル使用コストの支払い可能判定
#--------------------------------------------------------------------------
def skill_cost_payable?(skill)
tp >= skill_tp_cost(skill) && mp >= skill_mp_cost(skill)
end
#--------------------------------------------------------------------------
# ● スキル使用コストの支払い
#--------------------------------------------------------------------------
def pay_skill_cost(skill)
self.mp -= skill_mp_cost(skill)
self.tp -= skill_tp_cost(skill)
end
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用可能時チェック
#--------------------------------------------------------------------------
def occasion_ok?(item)
$game_party.in_battle ? item.battle_ok? : item.menu_ok?
end
#--------------------------------------------------------------------------
# ● スキル/アイテムの共通使用可能条件チェック
#--------------------------------------------------------------------------
def usable_item_conditions_met?(item)
movable? && occasion_ok?(item)
end
#--------------------------------------------------------------------------
# ● スキルの使用可能条件チェック
#--------------------------------------------------------------------------
def skill_conditions_met?(skill)
usable_item_conditions_met?(skill) &&
skill_wtype_ok?(skill) && skill_cost_payable?(skill) &&
!skill_sealed?(skill.id) && !skill_type_sealed?(skill.stype_id)
end
#--------------------------------------------------------------------------
# ● アイテムの使用可能条件チェック
#--------------------------------------------------------------------------
def item_conditions_met?(item)
usable_item_conditions_met?(item) && $game_party.has_item?(item)
end
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用可能判定
#--------------------------------------------------------------------------
def usable?(item)
return skill_conditions_met?(item) if item.is_a?(RPG::Skill)
return item_conditions_met?(item) if item.is_a?(RPG::Item)
return false
end
#--------------------------------------------------------------------------
# ● 装備可能判定
#--------------------------------------------------------------------------
def equippable?(item)
return false unless item.is_a?(RPG::EquipItem)
return false if equip_type_sealed?(item.etype_id)
return equip_wtype_ok?(item.wtype_id) if item.is_a?(RPG::Weapon)
return equip_atype_ok?(item.atype_id) if item.is_a?(RPG::Armor)
return false
end
#--------------------------------------------------------------------------
# ● 通常攻撃のスキル ID を取得
#--------------------------------------------------------------------------
def attack_skill_id
return 1
end
#--------------------------------------------------------------------------
# ● 防御のスキル ID を取得
#--------------------------------------------------------------------------
def guard_skill_id
return 2
end
#--------------------------------------------------------------------------
# ● 通常攻撃の使用可能判定
#--------------------------------------------------------------------------
def attack_usable?
usable?($data_skills[attack_skill_id])
end
#--------------------------------------------------------------------------
# ● 防御の使用可能判定
#--------------------------------------------------------------------------
def guard_usable?
usable?($data_skills[guard_skill_id])
end
end