#============================================================================== # RGSS3_テストプレー高速化Ace ver1.03 # 2012/05/21公開 # 2014/05/05アクターコマンドからも全滅キー可能 通常プレイでも文章早送り可能 # 敵全滅後に決定ボタンを押すと攻撃対象選択でエラーになるのを修正 # 2014/06/19操作キーを変更可能 プレイ時間の表示に早送りを適用しない # 2014/06/30ニューゲーム時に現実経過時間がリセットされず引き継がれたのを修正 # C Winter (http://ccwinter.blog.fc2.com/) # # 歯車の城(http://members.jcom.home.ne.jp/cogwheel/)様で公開されている # ショウ様のRGSS2スクリプト素材の移植スクリプトです。 #============================================================================== module SpeedUp #-------------------------------------------------------------------------- # ● 設定項目 #-------------------------------------------------------------------------- # 倍速スピード SPEED_RATE = 3 # falseにするとテストプレイ時でも通常プレイ時と同様の早送り形式になる # (falseでもバトル中の敵全滅キーは使用可能)true TEST = true # オンの時にグラフィック高速化するスイッチ番号 0なら無効 SWITCH_A = 1005 # オンの時に「INPUT_SWITCH_Aのボタンを押すとSWITCH_A切替」を # 可能にするスイッチ番号 0なら無効 SWITCH_B = 992 # trueなら使用する falseなら使用しない # 通常プレイ時 文章のスキップ MESSAGE_BUTTON = false # Xボタン入力中 MESSAGE_SWITCH = false # SWITCH_AがONの間 # 通常プレイ時 グラフィック高速化 NOBATTLE_BUTTON = false # バトル中以外 Xボタン入力中 NOBATTLE_SWITCH = false # バトル中以外 SWITCH_AがONの間 INBATTLE_BUTTON = false # バトル中   Xボタン入力中 INBATTLE_SWITCH = false # バトル中   SWITCH_AがONの間 # 操作に使用するキー # 「Qキー = :L」「Wキー = :R」 # 「Aキー = :X」「Sキー = :Y」「Dキー = :Z」 # 「Shiftキー = :A」「Ctrlキー = :CTRL」 INPUT_SPEED = :X # グラフィック高速化 INPUT_BATTLE_WIN = :Y # 敵全滅 INPUT_SWITCH_A = :Z # SWITCH_A切替 # 「セーブデータに表示するプレイ時間」には早送りを適用しないようにするか # true: 早送りしていないプレイ時間(現実での経過時間)を表示 # false: 早送りしたプレイ時間(ゲーム内経過時間)を表示 ver1.01以前と同じ # # 「早送りしていないプレイ時間」のカウントはver1.02を導入してから開始する # # 途中からver1.02に変更した場合、 # 「ver1.01以前のスクリプトを使っていたセーブデータ」をロードしても # それまでに早送りしていた分の時間は「早送りしたプレイ時間」のままとなる # 最初から「ver1.02を導入してからニューゲーム」で開始した場合は # 正しい「早送りしていないプレイ時間」が表示される TIME_NO_SPD = true end #============================================================================== # ■ SpeedUp #============================================================================== module SpeedUp def self.xp_style? return ($lnx_include != nil and $lnx_include[:lnx11a] != nil) end end #============================================================================== # ■ DataManager #============================================================================== class << DataManager #-------------------------------------------------------------------------- # ● ニューゲームのセットアップ #-------------------------------------------------------------------------- alias :setup_new_game_spd :setup_new_game def setup_new_game setup_new_game_spd Graphics.spd_frame_count = 0 end end #============================================================================== # ■ Game_System #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● セーブ前の処理 #-------------------------------------------------------------------------- alias :on_before_save_spd :on_before_save def on_before_save @spd_frames_on_save = Graphics.spd_frame_count on_before_save_spd show_spd_playtime end #-------------------------------------------------------------------------- # ● ロード後の処理 #-------------------------------------------------------------------------- alias :on_after_load_spd :on_after_load def on_after_load Graphics.spd_frame_count = @spd_frames_on_save on_after_load_spd show_spd_playtime end #-------------------------------------------------------------------------- # ● プレイ時間を秒数で取得 #-------------------------------------------------------------------------- def playtime_count(count) count / Graphics.frame_rate end #-------------------------------------------------------------------------- # ● プレイ時間を文字列で取得 #-------------------------------------------------------------------------- def playtime_s_count(count) hour = playtime_count(count) / 60 / 60 min = playtime_count(count) / 60 % 60 sec = playtime_count(count) % 60 sprintf("%02d:%02d:%02d", hour, min, sec) end #-------------------------------------------------------------------------- # ● プレイ時間を文字列で取得 #-------------------------------------------------------------------------- def playtime_s count = SpeedUp::TIME_NO_SPD ? Graphics.spd_frame_count : Graphics.frame_count playtime_s_count(count) end #-------------------------------------------------------------------------- # ● プレイ時間を表示 #-------------------------------------------------------------------------- def show_spd_playtime text = sprintf("(テストプレー高速化) プレイ時間 早送り込み[%s] 早送り抜き[%s]", playtime_s_count(Graphics.frame_count), playtime_s_count(Graphics.spd_frame_count)) p text end end #============================================================================== # ■ Scene_Base #============================================================================== class Scene_Base #-------------------------------------------------------------------------- # ● Zボタン入力時のSWITCH_Aの切替 #-------------------------------------------------------------------------- def change_switch_a return false if SpeedUp::SWITCH_A == 0 return false if SpeedUp::SWITCH_B == 0 return false if $game_switches[SpeedUp::SWITCH_B] == false if SceneManager.scene_is?(Scene_Battle) return (Graphics.test? || SpeedUp::INBATTLE_SWITCH) else return (Graphics.test? || SpeedUp::NOBATTLE_SWITCH) end end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias :update_basic_spd :update_basic def update_basic if Input.trigger?(SpeedUp::INPUT_SWITCH_A) && change_switch_a $game_switches[SpeedUp::SWITCH_A] = !$game_switches[SpeedUp::SWITCH_A] end update_basic_spd end end #============================================================================== # ■ Graphics #============================================================================== class << Graphics def spd_frame_count @spd_frame_count = Graphics.frame_count if @spd_frame_count == nil return @spd_frame_count end def spd_frame_count=(count) @spd_frame_count = count end #-------------------------------------------------------------------------- # ● 早送り用のテスト判定 #-------------------------------------------------------------------------- def test? ($TEST || $game_party.in_battle) && SpeedUp::TEST end #-------------------------------------------------------------------------- # ● グラフィックの早送りが可能かどうか #-------------------------------------------------------------------------- def speedup_on? if SceneManager.scene_is?(Scene_Battle) return can_battle_speedup? else return can_normal_speedup? end end #-------------------------------------------------------------------------- # ● バトル中以外でのグラフィックの早送りが可能かどうか #-------------------------------------------------------------------------- def can_normal_speedup? a = (test? || SpeedUp::NOBATTLE_BUTTON) && Input.press?(SpeedUp::INPUT_SPEED) b = (test? || SpeedUp::NOBATTLE_SWITCH) && $game_switches[SpeedUp::SWITCH_A] return a ^ b # Xボタン入力とスイッチが両方オンなら早送りしない end #-------------------------------------------------------------------------- # ● バトル中のグラフィックの早送りが可能かどうか #-------------------------------------------------------------------------- def can_battle_speedup? a = (test? || SpeedUp::INBATTLE_BUTTON) && Input.press?(SpeedUp::INPUT_SPEED) b = (test? || SpeedUp::INBATTLE_SWITCH) && $game_switches[SpeedUp::SWITCH_A] return a ^ b # Xボタン入力とスイッチが両方オンなら早送りしない end #-------------------------------------------------------------------------- # ● 文章の「1文字ごとのウェイトを無視」が可能かどうか #-------------------------------------------------------------------------- def can_message_no_wait? a = (test? || SpeedUp::MESSAGE_BUTTON) && Input.press?(SpeedUp::INPUT_SPEED) b = (test? || SpeedUp::MESSAGE_SWITCH) && $game_switches[SpeedUp::SWITCH_A] return a ^ b # Xボタン入力とスイッチが両方オンなら早送りしない end #-------------------------------------------------------------------------- # ● 文章の「決定ボタンの入力が無くても文章送り」が可能かどうか #-------------------------------------------------------------------------- def can_message_skip_input? a = (test? || SpeedUp::MESSAGE_BUTTON) && Input.press?(SpeedUp::INPUT_SPEED) b = (test? || SpeedUp::MESSAGE_SWITCH) && $game_switches[SpeedUp::SWITCH_A] return a ^ b # Xボタン入力とスイッチが両方オンなら早送りしない end #-------------------------------------------------------------------------- # ● 敵全滅コマンドが可能かどうか #-------------------------------------------------------------------------- def can_all_enemy_kill? $TEST && Input.trigger?(SpeedUp::INPUT_BATTLE_WIN) && !$game_troop.all_dead? end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias :update_spd :update def update # フレームカウントが SPEED の倍数でない時 if Graphics.frame_count % SpeedUp::SPEED_RATE > 0 && speedup_on? # グラフィックの更新をせず、カウントだけ加算する Graphics.frame_count += 1 else # フレームカウントが SPEED の倍数の時 # グラフィックの更新を行う Graphics.spd_frame_count += 1 update_spd end end #-------------------------------------------------------------------------- # ● ウェイト処理 #-------------------------------------------------------------------------- alias :wait_spd :wait def wait(duration) if speedup_on? duration /= SpeedUp::SPEED_RATE end wait_spd(duration) end #-------------------------------------------------------------------------- # ● フェードイン処理 #-------------------------------------------------------------------------- alias :fadein_spd :fadein def fadein(duration) if speedup_on? duration /= SpeedUp::SPEED_RATE end fadein_spd(duration) end #-------------------------------------------------------------------------- # ● フェードアウト処理 #-------------------------------------------------------------------------- alias :fadeout_spd :fadeout def fadeout(duration) if speedup_on? duration /= SpeedUp::SPEED_RATE end fadeout_spd(duration) end #-------------------------------------------------------------------------- # ● トランジション処理 #-------------------------------------------------------------------------- alias :transition_spd :transition def transition(duration = 10, filename = "", vague = 40) if speedup_on? duration /= SpeedUp::SPEED_RATE end transition_spd(duration, filename, vague) end end #============================================================================== # ■ Window_Message #============================================================================== class Window_Message < Window_Base #-------------------------------------------------------------------------- # ● 一文字出力後のウェイト #-------------------------------------------------------------------------- def wait_for_one_character update_show_fast Fiber.yield unless @show_fast || @line_show_fast || Graphics.can_message_no_wait? end #-------------------------------------------------------------------------- # ● 入力待ち処理 #-------------------------------------------------------------------------- def input_pause self.pause = true wait(10) Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) || Graphics.can_message_skip_input? Input.update self.pause = false end end #============================================================================== # ■ Window_PartyCommand #============================================================================== class Window_PartyCommand < Window_Command #-------------------------------------------------------------------------- # ● 決定やキャンセルなどのハンドリング処理 #-------------------------------------------------------------------------- alias :process_handling_spd :process_handling def process_handling if active && $game_troop.all_dead? close deactivate end process_handling_spd SceneManager.scene.all_enemy_kill if self.active && Graphics.can_all_enemy_kill? end end #============================================================================== # ■ Window_ActorCommand #============================================================================== class Window_ActorCommand < Window_Command #-------------------------------------------------------------------------- # ● 決定やキャンセルなどのハンドリング処理 #-------------------------------------------------------------------------- alias :process_handling_spd :process_handling def process_handling if active && $game_troop.all_dead? close deactivate end process_handling_spd SceneManager.scene.all_enemy_kill if self.active && Graphics.can_all_enemy_kill? end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ● 早送り判定 #-------------------------------------------------------------------------- def show_fast? Input.press?(:A) || Input.press?(:C) || Graphics.speedup_on? end #-------------------------------------------------------------------------- # ● 勝利コマンド #-------------------------------------------------------------------------- def all_enemy_kill Sound.play_ok for enemy in $game_troop.members enemy.hp -= 999999 enemy.perform_collapse_effect end end end