こんばんは。
まず、「通常の被ダメージSE」を鳴らす処理を探しましょう。
スクリプトエディタのSoundにはデータベース上で設定したSEを鳴らす処理が詰め込まれています。
ここを見ると、以下のコードが見つかります。
コード: 全て選択
# 味方ダメージ
def self.play_actor_damage
$data_system.sounds[12].play
end
どうやら「play_actor_damage」という処理が味方の被ダメージSEを鳴らす処理のようですね。
「play_actor_damage」で全体検索すると、2つ候補が見つかります。
「Sound」は今見ているところなので、「Scene_Battle」の方を見ましょう。
コード: 全て選択
def display_hp_damage(target, obj = nil)
if target.hp_damage == 0 # ノーダメージ
(中略)
elsif target.absorbed # 吸収
(中略)
elsif target.hp_damage > 0 # ダメージ
if target.actor?
text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
Sound.play_actor_damage # ここ
$game_troop.screen.start_shake(5, 5, 10)
else
(中略)
end
else # 回復
(中略)
end
(中略)
end
ここに味方の被ダメージSEを鳴らす処理がありました。
つまり、ここに「ディフェンダーが発動した時、別のSEを鳴らす」処理を組み込めばいいわけです。
じゃあその「ディフェンダーが発動した時」はどう判別すればいいか探しましょう。
「ディフェンダー Ver1.02」の設定項目の直後を見ると、
「attr_reader :defender # 行動結果: ディフェンダーフラグ」というのが見つかります。
これが「ディフェンダーが発動した時」のフラグのようです。
以上を踏まえて、前回説明した時のように改造してみましょう。
コード: 全て選択
def display_hp_damage(target, obj = nil)
(中略)
elsif target.hp_damage > 0 # ダメージ
if target.actor?
text = sprintf(Vocab::ActorDamage, target.name, target.hp_damage)
if target.defender
case target.id
when 1
Audio.se_play("Audio/SE/アクター1ディフェンダー", 80, 100)
when 2
Audio.se_play("Audio/SE/アクター2ディフェンダー", 80, 100)
when 3
Audio.se_play("Audio/SE/アクター3ディフェンダー", 80, 100)
end
else
Sound.play_actor_damage
end
$game_troop.screen.start_shake(5, 5, 10)
else
(中略)
end
(中略)
end
ただし、ここに入れると「攻撃をガードした!」のメッセージが表示されて、
それから被ダメージ表示とともにSEが鳴る、というちょっと間抜けな感じになってしまいます。
そうではなくて、ディフェンダーSE→被ダメージSE と鳴らしたい場合は、先ほどの改造ではなく、
「ディフェンダー Ver1.02」内にあるScene_Battleの記述を改造します。
コード: 全て選択
if SNF::DEFENDER_DISPLAY
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● クリティカルヒットの表示
# target : 対象者
# obj : スキルまたはアイテム
#--------------------------------------------------------------------------
alias snf_defender_display_critical display_critical
def display_critical(target, obj = nil)
snf_defender_display_critical(target, obj)
# 間借り
if target.defender
if target.actor?
text = SNF::DEFENDER_WORD
case target.id
when 1
Audio.se_play("Audio/SE/アクター1ディフェンダー", 80, 100)
when 2
Audio.se_play("Audio/SE/アクター2ディフェンダー", 80, 100)
when 3
Audio.se_play("Audio/SE/アクター3ディフェンダー", 80, 100)
end
else
text = ""
end
@message_window.add_instant_text(text)
wait(20)
end
end
end
end
何か不明点等ございましたら遠慮なくどうぞ。