king-exit/Scripts/_.26.rb

248 lines
No EOL
9.1 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=begin
RGSS3
★ バトルリトライ ★
戦闘敗北時に、リトライするかの選択を可能にします。
ver1.00
Last Update : 2012/02/06
02/06 : 新規
ろかん   http://kaisou-ryouiki.sakura.ne.jp/
=end
#===========================================
# 設定箇所
#===========================================
module Rokan
module Retry_Battle
# リトライを許可するスイッチ番号
RETRY_ENABLE_SWITCH = 996
# コマンドに表示する文字列
RETRY_COMMAND = "Rematch!"
GIVEUP_COMMAND = "Surrender..."
end
end
#===========================================
# ここまで
#===========================================
$rsi ||= {}
$rsi["バトルリトライ"] = true
class << BattleManager
#--------------------------------------------------------------------------
# ● インクルード Rokan::Retry_Battle
#--------------------------------------------------------------------------
include Rokan::Retry_Battle
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias _retry_battle_setup setup
def setup(troop_id, can_escape = true, can_lose = false)
_retry_battle_setup(troop_id, can_escape, can_lose)
setup_retry_data
end
#--------------------------------------------------------------------------
# ● オブジェクトをディープコピーして返す
#--------------------------------------------------------------------------
def deep_cp(obj)
Marshal.load(Marshal.dump(obj))
end
#--------------------------------------------------------------------------
# ● リトライ用にデータを保持する
#--------------------------------------------------------------------------
def backup_retry_data
@retry_data = []
@retry_data << deep_cp($game_switches)
@retry_data << deep_cp($game_variables)
@retry_data << deep_cp($game_actors)
@retry_data << deep_cp($game_party)
@retry_data << deep_cp($game_troop)
end
#--------------------------------------------------------------------------
# ● リトライ用データを読み込む
#--------------------------------------------------------------------------
def restore_retry_data
$game_switches = deep_cp(@retry_data[0])
$game_variables = deep_cp(@retry_data[1])
$game_actors = deep_cp(@retry_data[2])
$game_party = deep_cp(@retry_data[3])
$game_troop = deep_cp(@retry_data[4])
end
#--------------------------------------------------------------------------
# ● リトライの為の準備を行う
#--------------------------------------------------------------------------
def setup_retry_data
backup_retry_data
end
#--------------------------------------------------------------------------
# ● リトライの是非の選択開始
#--------------------------------------------------------------------------
def start_retry_selection
SceneManager.scene.start_retry_selection
end
#--------------------------------------------------------------------------
# ● リトライの処理
#--------------------------------------------------------------------------
def process_retry
Graphics.update
Graphics.freeze
restore_retry_data
SceneManager.goto(Scene_Battle)
BattleManager.play_battle_bgm
Sound.play_battle_start
end
#--------------------------------------------------------------------------
# ● 敗北の処理
#--------------------------------------------------------------------------
alias _retry_battle_process_defeat process_defeat
def process_defeat
if $game_switches[RETRY_ENABLE_SWITCH]
start_retry_selection
else
_retry_battle_process_defeat
end
end
end
class Game_Screen
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer :brightness # 明るさ
end
class Retry_Window < Window_Command
#--------------------------------------------------------------------------
# ● インクルード Rokan::Retry_Battle
#--------------------------------------------------------------------------
include Rokan::Retry_Battle
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0)
update_placement
select_symbol(:reset_battle)
self.openness = 0
self.active = false
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return 160
end
#--------------------------------------------------------------------------
# ● ウィンドウ位置の更新
#--------------------------------------------------------------------------
def update_placement
self.x = (Graphics.width - width) / 2
self.y = (Graphics.height - height) / 2
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command(RETRY_COMMAND, :retry)
add_command(GIVEUP_COMMAND, :giveup)
end
#--------------------------------------------------------------------------
# ● ウィンドウのアクティブ化
#--------------------------------------------------------------------------
def activate
open
super
end
#--------------------------------------------------------------------------
# ● ウィンドウの非アクティブ化
#--------------------------------------------------------------------------
def deactivate
close
super
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias _retry_battle_start start
def start
_retry_battle_start
create_command_window
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
alias _retry_battle_terminate terminate
def terminate
_retry_battle_terminate
@command_window.dispose
perform_battle_transition if SceneManager.scene_is?(Scene_Battle)
end
#--------------------------------------------------------------------------
# ● 確認コマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_command_window
@command_window = Retry_Window.new
@command_window.set_handler(:retry, method(:reset_battle))
@command_window.set_handler(:giveup, method(:giveup_battle))
end
#--------------------------------------------------------------------------
# ● リトライの是非の選択開始
#--------------------------------------------------------------------------
def start_retry_selection
@command_window.activate
bgm = RPG::BGM.last
bgm.volume -= 20
bgm.play
update_basic until @command_window.open?
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias _retry_battle_update update
def update
if @command_window.active
super
else
_retry_battle_update
end
end
#--------------------------------------------------------------------------
# ● フレーム更新(基本)
#--------------------------------------------------------------------------
alias _retry_battle_update_basic update_basic
def update_basic
if @command_window && @command_window.active
$game_troop.screen.brightness = [$game_troop.screen.brightness - 8, 160].max
end
_retry_battle_update_basic
end
#--------------------------------------------------------------------------
# ● 戦闘をあきらめる
#--------------------------------------------------------------------------
def giveup_battle
@command_window.deactivate
BattleManager._retry_battle_process_defeat
end
#--------------------------------------------------------------------------
# ● 戦闘のリセット
#--------------------------------------------------------------------------
def reset_battle
@command_window.deactivate
update_basic until @command_window.close?
BattleManager.process_retry
end
#--------------------------------------------------------------------------
# ● 戦闘前トランジション実行
#--------------------------------------------------------------------------
def perform_battle_transition
Graphics.transition(60, "Graphics/System/BattleStart", 100)
Graphics.freeze
end
end