#============================================================================== # ■ XP-RGSS-44 サイドビュー戦闘[CmdControl]  by Claimh #------------------------------------------------------------------------------ # コマンドの選択制御とアクター/エネミーのステータス表示をする場所です。 #------------------------------------------------------------------------------ #【再定義】 # Scene_Battle : main # phase3_setup_command_window # start_skill_select # start_item_select # Window_Base : draw_actor_state # Window_PartyCommand : 全て # Window_BattleStatus : 全て #============================================================================== #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● メイン処理 [再定義] #-------------------------------------------------------------------------- def main # 戦闘用の各種一時データを初期化 $game_temp.in_battle = true $game_temp.battle_turn = 0 $game_temp.battle_event_flags.clear $game_temp.battle_abort = false $game_temp.battle_main_phase = false $game_temp.battleback_name = $game_map.battleback_name $game_temp.forcing_battler = nil # バトルイベント用インタプリタを初期化 $game_system.battle_interpreter.setup(nil, 0) # トループを準備 @troop_id = $game_temp.battle_troop_id $game_troop.setup(@troop_id) # トループウィンドウを作成 @troop_window = Window_EnemyList.new # アクターコマンドウィンドウを作成 s1 = $data_system.words.attack s2 = $data_system.words.skill s3 = $data_system.words.guard s4 = $data_system.words.item @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4]) #@actor_command_window.y = 160 #@actor_command_window.back_opacity = 160 # アクターコマンドウィンドウの位置を設定 @actor_command_window.x = 0 @actor_command_window.y = 320 @actor_command_window.active = false @actor_command_window.visible = false # その他のウィンドウを作成 @party_command_window = Window_PartyCommand.new @help_window = Window_Help.new @help_window.back_opacity = 160 @help_window.visible = false @status_window = Window_BattleStatus.new @message_window = Window_Message.new # スプライトセットを作成 @spriteset = Spriteset_Battle.new # ウェイトカウントを初期化 @wait_count = 0 # トランジション実行 if $data_system.battle_transition == "" Graphics.transition(20) else Graphics.transition(40, "Graphics/Transitions/" + $data_system.battle_transition) end # プレバトルフェーズ開始 start_phase1 # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 update # 画面が切り替わったらループを中断 if $scene != self break end end # マップをリフレッシュ $game_map.refresh # トランジション準備 Graphics.freeze # ウィンドウを解放 @troop_window.dispose @actor_command_window.dispose @party_command_window.dispose @help_window.dispose @status_window.dispose @message_window.dispose if @skill_window != nil @skill_window.dispose end if @item_window != nil @item_window.dispose end if @result_window != nil @result_window.dispose end # スプライトセットを解放 @spriteset.dispose # タイトル画面に切り替え中の場合 if $scene.is_a?(Scene_Title) # 画面をフェードアウト Graphics.transition Graphics.freeze end # 戦闘テストからゲームオーバー画面以外に切り替え中の場合 if $BTEST and not $scene.is_a?(Scene_Gameover) $scene = nil end end #-------------------------------------------------------------------------- # ● アクターコマンドウィンドウのセットアップ [再定義] #-------------------------------------------------------------------------- def phase3_setup_command_window # パーティコマンドウィンドウを無効化 @party_command_window.active = false @party_command_window.visible = false # アクターコマンドウィンドウを有効化 @actor_command_window.active = true @actor_command_window.visible = true # インデックスを 0 に設定 @actor_command_window.index = 0 end #-------------------------------------------------------------------------- # ● スキル選択開始 [再定義] #-------------------------------------------------------------------------- def start_skill_select # スキルウィンドウを作成 @skill_window = Window_Skill.new(@active_battler) @skill_window.z = 110 # ヘルプウィンドウを関連付け @skill_window.help_window = @help_window # アクターコマンドウィンドウを無効化 @actor_command_window.active = false @actor_command_window.visible = false end #-------------------------------------------------------------------------- # ● アイテム選択開始 [再定義] #-------------------------------------------------------------------------- def start_item_select # アイテムウィンドウを作成 @item_window = Window_Item.new @item_window.z = 110 # ヘルプウィンドウを関連付け @item_window.help_window = @help_window # アクターコマンドウィンドウを無効化 @actor_command_window.active = false @actor_command_window.visible = false end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ) #-------------------------------------------------------------------------- alias troop_up_4_6 update_phase4_step6 def update_phase4_step6 troop_up_4_6 @troop_window.refresh end end #============================================================================== # ■ Window_BattleStatus [再構築] #------------------------------------------------------------------------------ #  バトル画面でパーティメンバーのステータスを表示するウィンドウです。 #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(160, 320, 480, 160) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # ● レベルアップフラグの設定 # actor_index : アクターインデックス #-------------------------------------------------------------------------- def level_up(actor_index) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size actor = $game_party.actors[i] actor_y = i * 32 draw_actor_name(actor, 0, actor_y) draw_actor_state(actor, 120, actor_y) draw_actor_hp(actor, 240, actor_y, 80) draw_actor_sp(actor, 360, actor_y, 80) end end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base #-------------------------------------------------------------------------- # ● ステートの描画 [再定義] # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 描画先の幅 #-------------------------------------------------------------------------- def draw_actor_state(actor, x, y, width = 120) text = make_battler_state_text(actor, width, true) self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color self.contents.draw_text(x, y, width, 32, text, 1) end end #============================================================================== # ■ Window_PartyCommand [再構築] #------------------------------------------------------------------------------ #  バトル画面で、戦うか逃げるかを選択するウィンドウです。 #============================================================================== class Window_PartyCommand < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 320, 160, 160) self.contents = Bitmap.new(width - 32, height - 32) @commands = ["戦う", "逃げる"] @item_max = 2 @column_max = 1 draw_item(0, normal_color) draw_item(1, $game_temp.battle_can_escape ? normal_color : disabled_color) self.active = false self.visible = false self.index = 0 end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 # color : 文字色 #-------------------------------------------------------------------------- def draw_item(index, color) self.contents.font.color = color rect = Rect.new(4, 32 * index, 128 - 10, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) self.contents.draw_text(rect, @commands[index]) end #-------------------------------------------------------------------------- # ● カーソルの矩形更新 #-------------------------------------------------------------------------- def update_cursor_rect self.cursor_rect.set(0, 32 * index, 128, 32) end end #============================================================================== # ■ Window_EnemyList #------------------------------------------------------------------------------ #  バトル画面で、エネミー一覧を表示 #============================================================================== class Window_EnemyList < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 320, 160, 160) self.contents = Bitmap.new(width - 32, height - 32) self.z = -1 @troop_enemy = [] refresh end #-------------------------------------------------------------------------- # ● トループ更新 #-------------------------------------------------------------------------- def troop_update? trooper = [] for enemy in $game_troop.enemies if enemy.exist? trooper.push(enemy.name) end end # 更新あり? if @troop_enemy == trooper return false end @troop_enemy = trooper.dup return true end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh # 更新あり? unless troop_update? return end self.contents.clear for i in 0...@troop_enemy.size self.contents.draw_text(4, i * 32, 128, 32, @troop_enemy[i]) end end end