#============================================================================== # ■ VX-RGSS2-6 サイドビュー戦闘[MotionCtrl] [Ver.1.2.0] by Claimh #------------------------------------------------------------------------------ # アクターの動作制御をする場所です。 #============================================================================== #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 戦闘開始の処理 #-------------------------------------------------------------------------- alias process_battle_start_sideview process_battle_start def process_battle_start for battler in $game_party.members + $game_troop.members battler.move_mode = SideView::M_MODE_WAIT end process_battle_start_sideview end #-------------------------------------------------------------------------- # ● 勝利の処理 #-------------------------------------------------------------------------- alias process_victory_sideview process_victory def process_victory for actor in $game_party.members actor.move_mode = SideView::M_MODE_WIN end process_victory_sideview end #-------------------------------------------------------------------------- # ● モーション制御動作が終わるまでウェイト #-------------------------------------------------------------------------- def wait_for_motion while @active_battler.motion_stop update_basic end end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : 攻撃 [再定義] #-------------------------------------------------------------------------- def execute_action_attack text = sprintf(Vocab::DoAttack, @active_battler.name) @message_window.add_instant_text(text) targets = @active_battler.action.make_targets #---エネミー攻撃サウンドを再生 if @active_battler.is_a?(Game_Enemy) Sound.play_enemy_attack wait(15, true) end #---近接(行き) SideView.set_target_point(@active_battler, targets[0]) @active_battler.move_mode = SideView::M_MODE_ATK1 @active_battler.motion_stop = true wait_for_motion #---攻撃 wait(5) @active_battler.move_mode = SideView::M_MODE_ATK2 #--- display_attack_animation(targets) wait(20) for target in targets target.attack_effect(@active_battler) display_action_effects(target) end #---近接(帰り) @active_battler.move_mode = SideView::M_MODE_ATK3 @active_battler.motion_stop = true wait_for_motion #---Wait for target in targets target.move_mode = SideView::M_MODE_WAIT end @active_battler.move_mode = SideView::M_MODE_WAIT #--- end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : スキル [再定義] #-------------------------------------------------------------------------- def execute_action_skill skill = @active_battler.action.skill text = @active_battler.name + skill.message1 @message_window.add_instant_text(text) unless skill.message2.empty? wait(10) @message_window.add_instant_text(skill.message2) end targets = @active_battler.action.make_targets #---エネミー攻撃サウンドを再生 if @active_battler.is_a?(Game_Enemy) Sound.play_enemy_attack wait(15, true) end if SideView.skill_is_direct?(skill) #---近接(行き) SideView.set_target_point(@active_battler, targets[0]) @active_battler.move_mode = SideView::M_MODE_ATK1 @active_battler.motion_stop = true wait_for_motion #---攻撃 wait(5) @active_battler.move_mode = SideView::M_MODE_ATK2 else #---遠距離攻撃 @active_battler.move_mode = SideView::M_MODE_MAGI end #--- display_animation(targets, skill.animation_id) @active_battler.mp -= @active_battler.calc_mp_cost(skill) $game_temp.common_event_id = skill.common_event_id for target in targets target.skill_effect(@active_battler, skill) display_action_effects(target, skill) end if SideView.skill_is_direct?(skill) #---近接(帰り) @active_battler.move_mode = SideView::M_MODE_ATK3 @active_battler.motion_stop = true wait_for_motion end #---Wait for target in targets target.move_mode = SideView::M_MODE_WAIT end @active_battler.move_mode = SideView::M_MODE_WAIT #--- end #-------------------------------------------------------------------------- # ● 戦闘行動の実行 : アイテム [再定義] #-------------------------------------------------------------------------- def execute_action_item item = @active_battler.action.item text = sprintf(Vocab::UseItem, @active_battler.name, item.name) @message_window.add_instant_text(text) #---エネミー攻撃サウンドを再生 if @active_battler.is_a?(Game_Enemy) Sound.play_enemy_attack wait(15, true) end #---遠距離攻撃 @active_battler.move_mode = SideView::M_MODE_MAGI #--- targets = @active_battler.action.make_targets display_animation(targets, item.animation_id) $game_party.consume_item(item) $game_temp.common_event_id = item.common_event_id for target in targets target.item_effect(@active_battler, item) display_action_effects(target, item) end #---Wait for target in targets target.move_mode = SideView::M_MODE_WAIT end @active_battler.move_mode = SideView::M_MODE_WAIT #--- end #-------------------------------------------------------------------------- # ● 攻撃アニメーションの表示 [再定義] # targets : 対象者の配列 #-------------------------------------------------------------------------- # 【変更点】 # 敵キャラの効果音は各動作フェーズにて実施するように変更。 # また、敵キャラの攻撃アニメーションを表示するように変更。 #-------------------------------------------------------------------------- def display_attack_animation(targets) display_normal_animation(targets, @active_battler.atk_animation_id, false) display_normal_animation(targets, @active_battler.atk_animation_id2, true) wait_for_animation end #-------------------------------------------------------------------------- # ● HP ダメージ表示 [再定義] # target : 対象者 # obj : スキルまたはアイテム #-------------------------------------------------------------------------- def display_hp_damage(target, obj = nil) if target.hp_damage == 0 # ノーダメージ return if obj != nil and obj.damage_to_mp return if obj != nil and obj.base_damage == 0 fmt = target.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage text = sprintf(fmt, target.name) elsif target.absorbed # 吸収 fmt = target.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain text = sprintf(fmt, target.name, Vocab::hp, target.hp_damage) 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) target.blink = true #ここのみ追加 else text = sprintf(Vocab::EnemyDamage, target.name, target.hp_damage) Sound.play_enemy_damage target.blink = true end else # 回復 fmt = target.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery text = sprintf(fmt, target.name, Vocab::hp, -target.hp_damage) Sound.play_recovery end @message_window.add_instant_text(text) wait(30) end end