#============================================================================== # ■ RGSS3 クイックセーブ&ロード Ver1.02 by 星潟 #------------------------------------------------------------------------------ # マップ・メニュー画面上のクイックセーブ・クイックロードと # タイトル画面でのクイックロードを実装します。 #============================================================================== # マップ上での処理はイベントコマンドのスクリプトで行います。 # なお、戦闘中に実行しても無視されます。 #============================================================================== # quick_save # # クイックセーブを行います。 #------------------------------------------------------------------------------ # quick_load # # クイックロードを行います。 #============================================================================== # Ver1.01 # クイックセーブ後、通常セーブファイル選択時にも # 最終セーブファイルがクイックセーブデータになってしまう不具合を修正。 # また、最終セーブデータがクイックセーブの場合 # タイトル画面でクイックセーブにカーソルが合うようにする機能を追加。 #------------------------------------------------------------------------------ # Ver1.02 # セーブファイルがない状態でクイックセーブを行うと # 以降ファイル不足によってエラー落ちしてしまう不具合等を修正。 #============================================================================== module QuickSL #タイトル画面でのクイックロードコマンド表示フラグ、 #メニュー画面でのクイックセーブコマンド表示フラグ、 #メニュー画面でのクイックロードコマンド表示フラグの順に指定。 #trueで表示、falseで非表示。 CF = [true,true,true] #タイトル画面でのクイックロードコマンドの名前、 #メニュー画面でのクイックセーブコマンドの名前、 #メニュー画面でのクイックロードコマンドの名前の順に指定。 CN1 = ["Q・ロード","Q・セーブ","Q・ロード"] #メニュー画面でのクイックセーブコマンドの確認有効フラグ、 #メニュー画面でのクイックロードコマンドの確認有効フラグの順に指定。 CC = [true,true] #メニュー画面でのクイックセーブ/ロードコマンドの確認ウィンドウを表示する際の #ウィンドウのZ座標補整値を指定。 CCZ = 100 #メニュー画面でのクイックセーブ・ロード実行時の確認コマンド名を指定。 #許可する場合、許可しない場合の順。 CN2 = ["はい","いいえ"] #クイックロードコマンドがタイトルコマンドの何番目に来るかを指定。 #(一番上を0として扱う) CO = 2 #メニュー画面でのクイックセーブ・ロード実行時の警告メッセージを指定。 #クイックセーブ、クイックロードの順。 TXT = ["クイックセーブを行いますか?","クイックロードを行いますか?"] #クイックセーブファイルの名前を指定。 FN = "QuickSave.rvdata2" #クイックセーブデータが最新の場合 #コンティニューではなくクイックロードにカーソルを合わせるかを指定。 #trueで合わせる。falseで合わせない。 TQL = true end class << DataManager #-------------------------------------------------------------------------- # ファイル名の作成 #-------------------------------------------------------------------------- alias make_filename_quicksl make_filename def make_filename(index) index == -1 ? QuickSL::FN : make_filename_quicksl(index) end #-------------------------------------------------------------------------- # クイックセーブ #-------------------------------------------------------------------------- def quick_save i = @last_savefile_index.to_i save_game(-1) @last_savefile_index = i end #-------------------------------------------------------------------------- # クイックロード #-------------------------------------------------------------------------- def quick_load SceneManager.scene.fadeout_all init i = @last_savefile_index.to_i load_game(-1) @last_savefile_index = i $game_system.on_after_load SceneManager.goto(Scene_Map) end #-------------------------------------------------------------------------- # クイックセーブファイルが存在するか? #-------------------------------------------------------------------------- def qsfile_exist? !Dir.glob(QuickSL::FN).empty? end end class Game_Interpreter #-------------------------------------------------------------------------- # クイックセーブ #-------------------------------------------------------------------------- def quick_save return if $game_party.in_battle DataManager.quick_save Fiber.yield end #-------------------------------------------------------------------------- # クイックロード #-------------------------------------------------------------------------- def quick_load return if $game_party.in_battle DataManager.quick_load Fiber.yield end end class Scene_Title < Scene_Base #-------------------------------------------------------------------------- # コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias create_command_window_quicksl create_command_window def create_command_window create_command_window_quicksl @command_window.set_handler(:quick_load, method(:command_quick_load)) end #-------------------------------------------------------------------------- # コマンド[ニューゲーム] #-------------------------------------------------------------------------- def command_quick_load close_command_window DataManager.quick_load end end class Window_TitleCommand < Window_Command #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_quicksl initialize def initialize initialize_quicksl select_symbol(:quick_load) if qs_continue_last end #-------------------------------------------------------------------------- # コマンドリストの作成 #-------------------------------------------------------------------------- alias make_command_list_quicksl make_command_list def make_command_list make_command_list_quicksl return unless QuickSL::CF[0] add_command(QuickSL::CN1[0], :quick_load, DataManager.qsfile_exist?) c = @list.pop @list.insert(QuickSL::CO,c) end def qs_continue_last return false unless QuickSL::TQL return false unless @list.any? {|k| k[:symbol] == :quick_load && k[:enabled]} return true if @list.any? {|k| k[:symbol] == :continue && !k[:enabled]} t1 = File.mtime(DataManager.make_filename(DataManager.latest_savefile_index)) t2 = File.mtime(QuickSL::FN) t2 > t1 end end class Scene_Menu < Scene_MenuBase #-------------------------------------------------------------------------- # コマンドウィンドウの作成 #-------------------------------------------------------------------------- alias create_command_window_quicksl create_command_window def create_command_window create_command_window_quicksl @command_window.set_handler(:quick_save, method(:quick_save)) @command_window.set_handler(:quick_load, method(:quick_load)) create_mcqsl_windows end #-------------------------------------------------------------------------- # クイックセーブ&ロード関連ウィンドウ作成 #-------------------------------------------------------------------------- def create_mcqsl_windows @mcqsl_dummy_window = Window_MC_QSL_Dummy.new @mcqsl_window = Window_MC_QSL.new(@mcqsl_dummy_window) @mcqsl_window.set_handler(:quick_qsl1, method(:quick_qsl1)) @mcqsl_window.set_handler(:quick_qsl2, method(:quick_qsl2)) @mcqsl_window.set_handler(:cancel, method(:quick_qsl2)) end #-------------------------------------------------------------------------- # クイックセーブ実行 #-------------------------------------------------------------------------- def quick_save_execute Sound.play_save DataManager.quick_save @mcqsl_dummy_window.close @mcqsl_window.close @command_window.activate end #-------------------------------------------------------------------------- # クイックロード実行 #-------------------------------------------------------------------------- def quick_load_execute Sound.play_load DataManager.quick_load end #-------------------------------------------------------------------------- # クイックセーブコマンド #-------------------------------------------------------------------------- def quick_save QuickSL::CC[0] ? mcqsl_refresh(0) : quick_save_execute end #-------------------------------------------------------------------------- # クイックロードコマンド #-------------------------------------------------------------------------- def quick_load QuickSL::CC[1] ? mcqsl_refresh(1) : quick_load_execute end #-------------------------------------------------------------------------- # クイックセーブ&ロードリフレッシュ #-------------------------------------------------------------------------- def mcqsl_refresh(type) @mcqsl_flag = type @mcqsl_dummy_window.refresh(type) @mcqsl_window.refresh @mcqsl_dummy_window.open @mcqsl_window.open @mcqsl_window.activate end #-------------------------------------------------------------------------- # クイックセーブ&ロードコマンド1 #-------------------------------------------------------------------------- def quick_qsl1 @mcqsl_flag == 0 ? quick_save_execute : quick_load_execute end #-------------------------------------------------------------------------- # クイックセーブ&ロードコマンド2 #-------------------------------------------------------------------------- def quick_qsl2 @mcqsl_dummy_window.close @mcqsl_window.close @command_window.activate end end class Window_MenuCommand < Window_Command #-------------------------------------------------------------------------- # 独自コマンドの追加用 #-------------------------------------------------------------------------- def add_original_commands add_command(QuickSL::CN1[1],:quick_save, !$game_system.save_disabled) if QuickSL::CF[1] add_command(QuickSL::CN1[2],:quick_load, DataManager.qsfile_exist?) if QuickSL::CF[2] end end class Window_MC_QSL_Dummy < Window_Base #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- def initialize super(0,0,32,32) self.openness = 0 self.z += QuickSL::CCZ end #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- def refresh(type = nil) return create_contents unless type r = contents.text_size(QuickSL::TXT[type]) w = r.width + standard_padding * 3 h = r.height + line_height + standard_padding * 2 x = (Graphics.width - w) / 2 y = (Graphics.height - h) / 2 move(x,y,w,h) create_contents draw_text(0,0,contents_width,line_height,QuickSL::TXT[type],1) end end class Window_MC_QSL < Window_HorzCommand #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- def initialize(dummy_window) @dummy_window = dummy_window @width_data = 32 @height_data = 32 super(0,0) self.z += QuickSL::CCZ self.openness = 0 self.opacity = 0 self.contents_opacity = 255 deactivate end #-------------------------------------------------------------------------- # コマンドリストの作成 #-------------------------------------------------------------------------- def make_command_list add_command(QuickSL::CN2[0], :quick_qsl1) add_command(QuickSL::CN2[1], :quick_qsl2) end #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- def refresh @width_data = @dummy_window.width @height_data = @dummy_window.height# - line_height self.x = @dummy_window.x self.y = @dummy_window.y + line_height move(@dummy_window.x,@dummy_window.y + line_height,@width_data,@height_data) super end #-------------------------------------------------------------------------- # 幅 #-------------------------------------------------------------------------- def width @width_data end #-------------------------------------------------------------------------- # 高さ #-------------------------------------------------------------------------- def height @height_data end #-------------------------------------------------------------------------- # 桁数 #-------------------------------------------------------------------------- def col_max 2 end end