#============================================================================== # ■ XP-RGSS44-V3 サイドビュー戦闘[MotionCtrl]  by Claimh #------------------------------------------------------------------------------ # バトルシーンでのバトラーモーション制御 #============================================================================== #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler attr_accessor :dead_delay # 戦闘不能効果遅延フラグ attr_accessor :revive_delay # 蘇生効果遅延フラグ attr_accessor :mt_mode # 動作モード attr_accessor :motion_stop # 動作停止フラグ(移動中フラグ) attr_accessor :target_x # 移動先位置(x) attr_accessor :target_y # 移動先位置(y) attr_accessor :target # ターゲットバトラー #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_sdva_corpse initialize def initialize initialize_sdva_corpse @dead_delay = false @revive_delay = false @mt_mode = 0 @target = nil end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle include MT_MODE #-------------------------------------------------------------------------- # ● プレバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase1_sidew start_phase1 def start_phase1 for battler in $game_party.actors + $game_troop.enemies battler.mt_mode = battler.dead? ? MT_DEAD : MT_STAY end start_phase1_sidew end #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- alias start_phase5_sidew start_phase5 def start_phase5 for actor in $game_party.actors actor.mt_mode = MT_WIN if actor.inputable? end start_phase5_sidew end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始) #-------------------------------------------------------------------------- alias update_phase4_step2_sidew update_phase4_step2 def update_phase4_step2 @motion_flag = false @active_battler.motion_stop = false unless @active_battler.dead? @active_battler.mt_mode = MT_STAY end @active_battler.target = nil update_phase4_step2_sidew end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション) #-------------------------------------------------------------------------- alias update_phase4_step3_sidew update_phase4_step3 def update_phase4_step3 if @motion_flag unless @active_battler.motion_stop @motion_flag = false @phase4_step = 4 return end case @active_battler.current_action.kind when 0 # 通常攻撃 @active_battler.mt_mode = MT_ATK1 when 1 # スキル @active_battler.mt_mode = MT_DIM1 end return end update_phase4_step3_sidew # 通常攻撃 case @active_battler.current_action.kind when 0 # 通常攻撃 if @active_battler.current_action.basic == 0 @active_battler.target = @target_battlers[0] set_target_point(@active_battler, @target_battlers[0]) @active_battler.motion_stop = true @motion_flag = true @phase4_step = 3 end when 1 # スキル if @skill.is_direct? case @skill.type when SkillDefine::S_DIRECT @active_battler.target = @target_battlers[0] set_target_point(@active_battler, @target_battlers[0]) when SkillDefine::S_ST_JUMP set_jump_point(@active_battler, @skill.jump_height) end @active_battler.motion_stop = true @motion_flag = true @phase4_step = 3 else @active_battler.mt_mode = MT_MAGI end when 2 # アイテム @active_battler.mt_mode = MT_ITEM end end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション) #-------------------------------------------------------------------------- alias update_phase4_step4_sidew update_phase4_step4 def update_phase4_step4 update_phase4_step4_sidew # 「アニメーションの長さにかかわらず、最低 8 フレーム待つ」はしない @wait_count = 0 case @active_battler.current_action.kind when 0 # 通常攻撃 if @active_battler.current_action.basic == 0 @active_battler.mt_mode = MT_ATK2 end when 1 # スキル if @skill.is_direct? @active_battler.mt_mode = MT_DIM2 end end for target in @target_battlers if (target.damage.is_a?(Numeric) and target.damage >= 0) target.mt_mode = MT_DMG elsif target.damage.is_a?(Numeric) and target.damage < 0 target.mt_mode = MT_RECOV elsif target.damage == "Miss" target.mt_mode = MT_MISS end end # ステップ 5 に移行 @phase4_step = 5 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias update_phase4_step5_sdva_corpse update_phase4_step5 def update_phase4_step5 update_phase4_step5_sdva_corpse for target in @target_battlers if target.dead? target.dead_delay = true target.revive_delay = false elsif !target.revive_delay and !target.dead? # 蘇生効果遅延 target.revive_delay = true end end case @active_battler.mt_mode when MT_ATK2 @active_battler.mt_mode = MT_ATK3 when MT_DIM2 @active_battler.mt_mode = MT_DIM3 else @active_battler.mt_mode = MT_STAY end if @active_battler.mt_mode == MT_MAGI or @active_battler.mt_mode == MT_ITEM @active_battler.mt_mode = MT_STAY end # ステップ 6 に移行 @phase4_step = 6 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ) #-------------------------------------------------------------------------- alias update_phase4_step6_sidew update_phase4_step6 def update_phase4_step6 @active_battler.mt_mode = MT_STAY for target in @target_battlers target.mt_mode = target.dead? ? MT_DEAD : MT_STAY end update_phase4_step6_sidew end end