#============================================================================== # [ZTBS] -Zenith Tactical Battle System- タクティカルバトルシステム #  〜+B4:エネミー移動距離表示〜 by 水夜 #  ver0.90 Zenith Creation (http://zenith.ifdef.jp/) #------------------------------------------------------------------------------ # マップ上での戦略的なバトルを実現。 #============================================================================== #============================================================================== # ■ Game_Event #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_writer :name # 名前 end #============================================================================== # ■ Interpreter #============================================================================== class Interpreter #-------------------------------------------------------------------------- # ● アクターに変身 #-------------------------------------------------------------------------- def transform_to_actor(event_id, actor_id) # 消去されたイベントの場合 if $game_map.events[event_id].erased return end # エネミーの場合 if $game_system.tactics_enemies.keys.include?(event_id) $game_system.tactics_enemies.delete(event_id) end if $game_actors[actor_id].dead? event.erase # アクターをハッシュに格納 $game_system.tactics_dead_actors[event_id] = $game_actors[actor_id] else # アクターをハッシュに格納 $game_system.tactics_actors[event_id] = $game_actors[actor_id] end $game_map.events[event_id].name = "actor#{actor_id}" return true end #-------------------------------------------------------------------------- # ● エネミーに変身 #-------------------------------------------------------------------------- def transform_to_enemy(event_id, enemy_id) # 消去されたイベントの場合 if $game_map.events[event_id].erased return end # 戦闘不能アクターの場合 if $game_system.tactics_dead_actors.keys.include?(event_id) return end # アクターの場合 if $game_system.tactics_actors.keys.include?(event_id) $game_system.tactics_actors.delete(event_id) end # エネミーをハッシュに格納 $game_system.tactics_enemies[event_id] = Game_Enemy.new(0, enemy_id) $game_map.events[event_id].name = "enemy#{enemy_id}" return true end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ● フレーム更新 (アクターフェーズ ステップ 1 : アクター選択) #-------------------------------------------------------------------------- def update_phase1_step1 # カーソル位置のバトラー(イベント)取得 get_cursor_battler # カーソル位置にバトラーがいる場合 if @battler != nil # ヘルプウィンドウにアクター or エネミーをセット set_battler_info # 行動できる場合 if @battler.name =~ /actor#{@attacker.id}/ # C ボタンが押された場合 if Input.trigger?(Input::C) and !$game_player.moving? # 未行動の場合 actor = $game_system.tactics_actors[@battler.id] if !@battler.acted and !actor.restriction != 4 # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # カーソルを固定 $game_player.not_update = true # ステップ 2 へ移行 $game_system.tactics_step = 2 # コマンドウィンドウを作成 make_command_window else # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) end end # L ボタンが押された場合 if Input.trigger?(Input::L) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 前のアクターへ back_actor end # R ボタンが押された場合 if Input.trigger?(Input::R) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 次のアクターへ next_actor end # それ以外の場合 else # C ボタンが押された場合 if Input.trigger?(Input::C) and !$game_player.moving? # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # コマンドウィンドウ解放 dispose_command_window # 移動エリアをセット set_movable_area(0) # カーソル固定を解除 $game_player.not_update = false # 行動バトラー設定 @active_battler = @battler # ステップ 3 へ移行 $game_system.tactics_step = 3 end # L ボタンが押された場合 if Input.trigger?(Input::L) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 最後のアクターへ actor = $game_map.events[$game_system.tactics_actors.keys.last] $game_player.moveto(actor.x, actor.y) end # R ボタンが押された場合 if Input.trigger?(Input::R) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 最初のアクターへ actor = $game_map.events[$game_system.tactics_actors.keys[0]] $game_player.moveto(actor.x, actor.y) end end # カーソル位置にバトラーがいない場合、ヘルプウィンドウを隠す else @help_window.visible = false # L ボタンが押された場合 if Input.trigger?(Input::L) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 最後のアクターへ actor = $game_map.events[$game_system.tactics_actors.keys.last] $game_player.moveto(actor.x, actor.y) end # R ボタンが押された場合 if Input.trigger?(Input::R) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 最初のアクターへ actor = $game_map.events[$game_system.tactics_actors.keys[0]] $game_player.moveto(actor.x, actor.y) end end # B ボタンが押された場合 if Input.trigger?(Input::B) and !$game_player.moving? # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ステップ 0 へ移行 $game_system.tactics_step = 0 # コマンドウィンドウを作成 make_command_window # カーソルを固定 $game_player.not_update = true end end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターフェーズ ステップ 3 : 移動先選択) #-------------------------------------------------------------------------- def update_phase1_step3 # カーソル位置のバトラー(イベント)取得 get_cursor_battler # ヘルプウィンドウにアクター or エネミーをセット set_battler_info # C ボタンが押された場合 if Input.trigger?(Input::C) and !$game_player.moving? # 行動できる場合 if @active_battler.name =~ /actor#{@attacker.id}/ # カーソルが移動エリア内の場合 if in_area?($game_player.x, $game_player.y) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # カーソルを固定 $game_player.not_update = true # エリアを解放 dispose_area # ステップ 4 へ移行 $game_system.tactics_step = 4 # 座標を記憶 @pre_x = @active_battler.x @pre_y = @active_battler.y # 移動ルート取得 @route_list = @route[@position.index([$game_player.x, $game_player.y])] else # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) end # それ以外の場合 else # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # エリアを解放 dispose_area # カーソル位置を戻す back_cursor # ステップ 1 へ移行 $game_system.tactics_step = 1 end end # B ボタンが押された場合 if Input.trigger?(Input::B) and !$game_player.moving? # 行動できる場合 if @active_battler.name =~ /actor#{@attacker.id}/ # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # エリアを解放 dispose_area # カーソル位置を戻す back_cursor # カーソルを固定 $game_player.not_update = true # ステップ 2 へ移行 $game_system.tactics_step = 2 # コマンドウィンドウを作成 make_command_window # それ以外の場合 else # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # エリアを解放 dispose_area # カーソル位置を戻す back_cursor # ステップ 1 へ移行 $game_system.tactics_step = 1 end end end end