#============================================================================== # ■ Game_System #------------------------------------------------------------------------------ #  システム周りのデータを扱うクラスです。乗り物や BGM などの管理も行います。 # このクラスのインスタンスは $game_system で参照されます。 #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :revive_position attr_accessor :revive_gameover attr_accessor :all_apply_revive attr_accessor :stop_timer_gameover #-------------------------------------------------------------------------- # ● インスタンスの複製 #-------------------------------------------------------------------------- alias revive_game_over_initialize initialize #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize # 通常の処理を実行 revive_game_over_initialize # 都合で(!)システム情報を取得 data = load_data("Data/System.rvdata2") # ゲームオーバーから復活する際のマップIDと座標を初期化 @revive_position = [data.start_map_id, data.start_x, data.start_y, 2] # ゲームオーバー時の復活フラグを立てる @revive_gameover = true # 復活時、『透明化OFF』と『不透明度=255』を実行する設定にする @all_apply_revive = false # 全滅時タイマーをストップさせる? @stop_timer_gameover = UMSSS_Setting::ReviveGameOverTimerStop end end #============================================================================== # ■ Game_Character #------------------------------------------------------------------------------ #  キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event # クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ● 透明化OFF&不透明度=255を実行 #-------------------------------------------------------------------------- def all_apply_character # 透明化OFF @transparent = false # 不透明度=255 @opacity = 255 end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ #  イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 復活しないゲームオーバーを実行 #-------------------------------------------------------------------------- def no_revive_gameover # ゲームオーバー時の復活フラグを下ろす $game_system.revive_gameover = false # ゲームオーバー処理 command_353 end #-------------------------------------------------------------------------- # ● 復活時、『透明化OFF』と『不透明度=255』の実行フラグを変更 #-------------------------------------------------------------------------- def all_apply_revive(value = true) # フラグを変更 $game_system.all_apply_revive = value end #-------------------------------------------------------------------------- # ● ゲームオーバー時、復活の可否を設定 #-------------------------------------------------------------------------- def revive_gameover_set(value = true) # ゲームオーバー時の復活フラグを変更 $game_system.revive_gameover = value end #-------------------------------------------------------------------------- # ● ゲームオーバー時の復活位置を現在の場所に設定 #-------------------------------------------------------------------------- def revive_point_here(d = $game_player.direction) # 現在のマップID、X座標、Y座標を記憶 $game_system.revive_position[0] = $game_map.map_id $game_system.revive_position[1] = $game_player.x $game_system.revive_position[2] = $game_player.y $game_system.revive_position[3] = d end #-------------------------------------------------------------------------- # ● ゲームオーバー時の復活位置を手動設定 #-------------------------------------------------------------------------- def revive_point_manual(map, px, py, d = $game_player.direction) # マップID、X座標、Y座標を記憶 $game_system.revive_position[0] = map $game_system.revive_position[1] = px $game_system.revive_position[2] = py $game_system.revive_position[3] = d end #-------------------------------------------------------------------------- # ● ゲームオーバー時、タイマーを停止させる? #-------------------------------------------------------------------------- def stop_timer_gameover(value) $game_system.stop_timer_gameover = value end end #============================================================================== # ■ Scene_Gameover #------------------------------------------------------------------------------ #  ゲームオーバー画面の処理を行うクラスです。 #============================================================================== class Scene_Gameover < Scene_Base #-------------------------------------------------------------------------- # ● インスタンスの複製 #-------------------------------------------------------------------------- alias revive_game_over_goto_title goto_title #-------------------------------------------------------------------------- # ● タイトル画面へ遷移 #-------------------------------------------------------------------------- def goto_title return execute_revive if $game_system.revive_gameover # 通常の処理 revive_game_over_goto_title end #-------------------------------------------------------------------------- # ● 復活処理 #-------------------------------------------------------------------------- def execute_revive # MEをフェードアウト RPG::ME.fade(1000) # MEをフェード中に少しウェイト Graphics.wait(30) # 復活処理 revive_player # マップのBGM、BGSを再生 $game_map.autoplay # 画面をフェードアウトさせる Graphics.fadeout(60) # MEを停止(※一応) RPG::ME.stop end #-------------------------------------------------------------------------- # ● 復活処理 #-------------------------------------------------------------------------- def revive_player # 経験値を調整 revive_setting_exp # パーティの状態を調整 revive_setting_party # 所持金を調整 revive_setting_money # 復活位置を取得 pn = $game_system.revive_position # 指定されたマップ&座標を復活位置に設定 $game_player.reserve_transfer(pn[0], pn[1], pn[2], pn[3]) $game_player.perform_transfer # スイッチ操作が存在する場合 if UMSSS_Setting::ReviveGameOverMemorizeSwitch > 0 # スイッチをONにする $game_switches[UMSSS_Setting::ReviveGameOverMemorizeSwitch] = true end # 全滅回数を記憶する場合 if UMSSS_Setting::ReviveGameOverCountMemorizeVariable > 0 # 変数に +1 する。 $game_variables[UMSSS_Setting::ReviveGameOverCountMemorizeVariable] += 1 end # 『透明化OFF』と『不透明度=255』を実行する場合 if $game_system.all_apply_revive # プレイヤーを表示 $game_player.all_apply_character end # タイマーを停止させる設定の場合、停止。 $game_timer.stop if $game_system.stop_timer_gameover # 『イベントの処理を中断』を強制実行 #$game_map.interpreter.command_115 # マップ画面呼び出し SceneManager.goto(Scene_Map) end #-------------------------------------------------------------------------- # ● 経験値を調整 #-------------------------------------------------------------------------- def revive_setting_exp # パーティを全員チェック for actor in $game_party.members now = actor.class.exp_for_level(actor.level) pre = actor.class.exp_for_level([actor.level - 1, 1].max) aft = actor.class.exp_for_level([actor.level + 1, actor.max_level].min) last_level = actor.level # 設定で分岐 case UMSSS_Setting::ReviveGameOverPenaltyForExpSetting when 0 # 特になし when 1 n = (now - pre) / actor.level # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 2 n = (now - pre) / actor.level n *= 2 # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 3 n = (aft - now) / (actor.level + 1) # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 4 n = (aft - now) / (actor.level + 1) n *= 2 # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 5 n = actor.exp / (actor.level + 1) # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 6 # 失う経験値を計算 n = actor.exp / (actor.level + 1) # 倍化 n *= 2 # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 7 n = actor.exp / 10 # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) when 8 n = actor.exp / 5 # 経験値を減らす actor.change_exp([actor.exp - n, 0].max, false) else # マイナスの数値の場合 if UMSSS_Setting::ReviveGameOverPenaltyForExpSetting < 0 # ペナルティを受けた後のレベルを算出 lv = actor.level - UMSSS_Setting::ReviveGameOverPenaltyForExpSetting.abs # アクターのレベルを下げる actor.change_level(lv, false) end end # レベルダウンメッセージがある場合 if UMSSS_Setting::ReviveGameOverPenaltyForExpMessage != "" # レベルが下がっている場合 if actor.level < last_level # メッセージウィンドウを作成 @message_window = Window_Message.new # ウィンドウの背景を設定 $game_message.background = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowType # ウィンドウの表示位置を設定 $game_message.position = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowPosition # メッセージを準備 text = sprintf(UMSSS_Setting::ReviveGameOverPenaltyForExpMessage, actor.name, Vocab::level, actor.level) # メッセージを表示 $game_message.add(text) # メッセージウィンドウがビジーの間、ループ while $game_message.busy? @message_window.update Graphics.update Input.update end @message_window.dispose @message_window = nil end end end end #-------------------------------------------------------------------------- # ● パーティの状態を調整 #-------------------------------------------------------------------------- def revive_setting_party # 復活時の設定で分岐 case UMSSS_Setting::ReviveGameOverPartyStatusSetting when 0 # 先頭のアクターのHPを 1 に設定 $game_party.members[0].hp = 1 when 1 # パーティ全員をチェック for actor in $game_party.members # HPを 1 に設定 actor.hp = 1 end when 2 # パーティ全員をチェック for actor in $game_party.members # 全回復処理 actor.recover_all end when 3 # 先頭のアクターのHPを 1 に設定 $game_party.members[0].hp = 1 # パーティ全員をチェック for actor in $game_party.members # MPを 0 に設定 actor.mp = 0 end when 4 # パーティ全員をチェック for actor in $game_party.members # HPを 1 に設定 actor.hp = 1 # MPを 0 に設定 actor.mp = 0 end when 5 # 先頭のアクターのHPを 1 に設定 $game_party.members[0].hp = 1 # パーティ全員をチェック for actor in $game_party.members # MPを全回復 actor.mp += 9999 end when 6 # パーティ全員をチェック for actor in $game_party.members # HPを 1 に設定 actor.hp = 1 # MPを全回復 actor.mp += 9999 end when 7 # 先頭のアクターだけ全回復 $game_party.members[0].recover_all when 8 # 先頭のアクターだけ全回復 $game_party.members[0].recover_all # 戦闘不能のアクターをチェック for actor in $game_party.dead_members # MPを 0 に設定 actor.mp = 0 end end end #-------------------------------------------------------------------------- # ● 所持金を調整 #-------------------------------------------------------------------------- def revive_setting_money # 現在の所持金を取得 g = $game_party.gold n = 0 # 設定で分岐 case UMSSS_Setting::ReviveGameOverPenaltyForMoneySetting when 0 # 特になし。 when 1 # 所持金の半分を取得 n = g / 2 # 所持金を減らす $game_party.lose_gold(n) when 2 # 所持金の4分の1を取得 n = g / 4 # 所持金を減らす $game_party.lose_gold(n) when 3 # 所持金の3分の1を取得 n = g / 3 # 所持金を減らす $game_party.lose_gold(n) when 4 # 所持金の4分の3を取得 n = g * 3 / 4 # 所持金を減らす $game_party.lose_gold(n) when 5 # 所持金の3分の2を取得 n = g * 2 / 3 # 所持金を減らす $game_party.lose_gold(n) when 6 # 所持金を取得 n = g # 所持金をゼロにする $game_party.lose_gold(n) end # メッセージがある場合 if UMSSS_Setting::ReviveGameOverPenaltyForMoneyMessage != "" # 所持金が減っている場合 if n > 0 # メッセージウィンドウを作成 @message_window = Window_Message.new if @message_window.nil? # ウィンドウの背景を設定 $game_message.background = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowType # ウィンドウの表示位置を設定 $game_message.position = UMSSS_Setting::ReviveGameOverPenaltyMessageWindowPosition # メッセージを準備 text = sprintf(UMSSS_Setting::ReviveGameOverPenaltyForMoneyMessage, n, Vocab::currency_unit) # メッセージを表示 $game_message.texts.push(text) # メッセージウィンドウがビジーの間、ループ while $game_message.busy? @message_window.update Graphics.update Input.update end end end # メッセージウィンドウが nil ではない場合 unless @message_window.nil? # メッセージウィンドウを解放 @message_window.dispose @message_window = nil end end end