# # バトルのリトライ(RGSS2) #  (C)2007,2011 TYPE74RX-T # # ★ カスタマイズポイント:9~10行目 module RX_T BATTLE_RETRY_COMMAND1 = "もう一度挑戦する" # リトライする場合のコマンド名 BATTLE_RETRY_COMMAND2 = "ギブアップする" # ギブアップする場合のコマンド名 end def deep_copy(obj) Marshal.load(Marshal.dump(obj)) end #============================================================================== # ■ Game_Temp #------------------------------------------------------------------------------ #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン # スタンスは $game_temp で参照されます。 #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias rx_rgss2b1_initialize initialize def initialize # メソッドを呼び戻す rx_rgss2b1_initialize # ★ バトルのリトライフラグ(デフォルト:ON) @rx_battle_retry = true end #-------------------------------------------------------------------------- # ★ バトルのリトライのフラグ状態 #-------------------------------------------------------------------------- def rx_battle_retry return @rx_battle_retry end #-------------------------------------------------------------------------- # ★ バトルのリトライフラグをオン #-------------------------------------------------------------------------- def rx_battle_retry_on @rx_battle_retry = true end #-------------------------------------------------------------------------- # ★ バトルのリトライのフラグをオフ #-------------------------------------------------------------------------- def rx_battle_retry_off @rx_battle_retry = false end end #============================================================================== # ■ Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_System クラ # スや Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ★ 注釈 #-------------------------------------------------------------------------- alias rx_rgss2b1_command_108 command_108 def command_108 # バトルのリトライを可能にする if @parameters[0].include?("バトルリトライON") # バトルのリトライフラグをオン $game_temp.rx_battle_retry_on # 継続(競合対策) return true end # バトルのリトライを不可能にする if @parameters[0].include?("バトルリトライOFF") # バトルのリトライフラグをオフ $game_temp.rx_battle_retry_off # 継続(競合対策) return true end # メソッドを呼び戻す rx_rgss2b1_command_108 end end #============================================================================== # ■ Scene_Base #------------------------------------------------------------------------------ #  ゲーム中のすべてのシーンのスーパークラスです。 #============================================================================== class Scene_Base #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias rx_rgss2b1_start start def start if $scene.kind_of?(Scene_Battle) and $game_temp.rx_battle_retry # 戦闘開始時の状態を一時変数に保存 write_retry_data end # メソッドを呼び戻す rx_rgss2b1_start end end #============================================================================== # ■ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 戦闘終了 # result : 結果 (0:勝利 1:逃走 2:敗北) #-------------------------------------------------------------------------- alias rx_rgss2b1_battle_end battle_end def battle_end(result) rx_g_o_judge = 0 # ゲームオーバー判定を初期化 # 敗北してゲームオーバーになる状況且つ、リトライ可能な場合 if result == 2 and not $game_troop.can_lose and $game_temp.rx_battle_retry rx_g_o_judge = go_game_over # ゲームオーバーコマンド選択IDが 0 (リトライする)の時 if rx_g_o_judge == 0 $scene = Scene_Battle.new return end end # メソッドを呼び戻す rx_rgss2b1_battle_end(result) end #-------------------------------------------------------------------------- # ★ バトルのリトライ用一時変数の書き込み #-------------------------------------------------------------------------- def write_retry_data # 各種ゲームオブジェクトを書き込む @rx2_retry = [] @rx2_retry[0] = deep_copy($game_switches) @rx2_retry[1] = deep_copy($game_variables) @rx2_retry[2] = deep_copy($game_self_switches) @rx2_retry[3] = deep_copy($game_actors) @rx2_retry[4] = deep_copy($game_party) @rx2_retry[5] = deep_copy($game_troop) end #-------------------------------------------------------------------------- # ★ バトルのリトライ用一時変数の読み込み #-------------------------------------------------------------------------- def read_retry_data # 各種ゲームオブジェクトを読み込む $game_switches = deep_copy(@rx2_retry[0]) $game_variables = deep_copy(@rx2_retry[1]) $game_self_switches = deep_copy(@rx2_retry[2]) $game_actors = deep_copy(@rx2_retry[3]) $game_party = deep_copy(@rx2_retry[4]) $game_troop = deep_copy(@rx2_retry[5]) end #-------------------------------------------------------------------------- # ★ バトルのリトライ用メイン処理 #-------------------------------------------------------------------------- def go_game_over # コマンドウィンドウを作成 s1 = RX_T::BATTLE_RETRY_COMMAND1 s2 = RX_T::BATTLE_RETRY_COMMAND2 @g_over_window = Window_Command.new(192, [s1, s2]) @g_over_window.x = (Graphics.width / 2) - @g_over_window.width / 2 @g_over_window.y = (Graphics.height / 2) - @g_over_window.height / 2 # トランジション実行 Graphics.transition # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 input_judge = go_update # 特定のキーが押されていたらループを中断 if input_judge break end end # トランジション準備 Graphics.freeze # ウィンドウを解放 index = @g_over_window.index @g_over_window.dispose return index end #-------------------------------------------------------------------------- # ★ バトルのリトライ用フレーム更新 #-------------------------------------------------------------------------- def go_update # コマンドウィンドウを更新 @g_over_window.update # B ボタンが押された場合 if Input.trigger?(Input::B) @g_over_window.index = 1 return true end # C ボタンが押された場合 if Input.trigger?(Input::C) if @g_over_window.index == 0 command_retry end return true end end #-------------------------------------------------------------------------- # ★ コマンド [もう一度挑戦する] 選択時の処理 #-------------------------------------------------------------------------- def command_retry # 決定 SE を演奏 Sound.play_decision # 戦闘開始時の状態を一時変数から読み込む read_retry_data end end