# XRXS57. #◆◇◆◇◆-------- セーブ&ロード・アレンジメント No.3 ------◇◆◇◆◇ #   ★( エディタ修正必要.ver )★ # by 刻宮 # # ★ この素材は「Scene_Title」を再定義しています。 # 詳しくはこの素材の"831行目"を参照してください。 # 変更箇所は「Scene_Title」のこの点のみです。 # # #  「ディフォルト機能 & 仕様」 # # ・ この素材は再定義タイプです。『Scene_Load』を再定義しています。 # ・『Scene_Load』をエイリアスで追加処理している素材より上にしてください。 # ・ "@icon_on = false" とすることで、バトラー表示に切り替えられますが、 # このとき表示されるバトラーは、幅と高さが3/4に圧縮されています。 # #  [使用したエイリアス名] # 『Scene_Save』 … xrxs57_initialize #◆◇◆◇◆---------------------------------------------------◇◆◇◆◇ #----------------------------------------------------------------------- # □ カスタマイズポイント #----------------------------------------------------------------------- SAVE_MAX = 12 # セーブできるファイルの最大数です。 class Tokimiya_Data_No3 def initialize @icon_on = false # アイコン表示機能をONにする場合は true にしてください。 # false にした場合、バトラーが表示されます。 @arrang = [] @arrang[0] = 16 # アイコン及びバトラー表示をはじめるX座標の原点です。 @arrang[1] = 32 # アイコン及びバトラー表示をはじめるY座標の原点です。 @arrang[2] = 70 # パラメーター表示のx座標を、キャラからどれだけずらすか? @arrang[3] = -16 # パラメーター表示のy座標を、キャラからどれだけずらすか? @arrang[4] = 200 # アイコン同士のX座標の間隔を指定してください。 @arrang[5] = 114 # アイコン同士のY座標の間隔を指定してください。 @arrang[6] = 190 # バトラー同士のX座標の間隔を指定してください。 @arrang[7] = 128 # バトラー同士のY座標の間隔を指定してください。 @arrang[8] = 16 # パラメーターの文字の大きさです。 @arrang[12]= 16 # パラメーターの行間となる文字の高さです。 @opacity = 225 # 表示されるキャラの不透明度です。 # 大きいアイコンやバトラーを表示する際にどうぞ。 #----------------------------------------------------------------------- # □ 表示項目の設定 # # ★キャラクターのパラメーター下に表示される項目の設定です。。 #  偶数番号がシステム色で「項目のタイトル」として左に表示されます。 #  奇数番号は白文字で「項目の内容」として右に表示されます。 # # ★また、「項目の内容」には " $game_system.write_text[(配列のID)] " という # 配列を使用することが出来ます。配列のIDは自由です。 # 『変数』と同じような感覚で使ってもらえれば問題ありません。 #  この配列の内容を表示するには、カスタマイズポイントで0以上の整数を # 指定してください。その数字が配列のIDに対応しています。 # # 詳しい使い方は以下の☆の通りです。 # # ☆イベントスクリプトで、この配列に文字列を代入できます。 #  この場合は変更の都度、$game_system.write_textに代入し直す必要があります。 #  主に「現在の任務」や「第〜章の題名」などに使います。 # # 例1) # ◆スクリプト:$game_system.write_text[1] = "『第23話.戦場の舞姫』" # # (補足:"" で囲まれた部分が表示されます。) # # ☆また、表示したい変数のIDを指定することもできます。 #  この場合は変更しても代入をしなおす必要はありません。自動更新されます。 # ゲーム開始時に設定して置いてください。以降はその変数の値を表示します。 # # 例2) # ◆スクリプト:$game_system.write_text[1] = 30 # # (補足:セーブされた時点の変数30番の値が表示されます。) #(イベントスクリプト使用における注意!) #------------------------------------------------------ #◆スクリプト:$game_system.write_text[1] = $game_switc #       hes[30] #------------------------------------------------------ # ↑のように、代入する文字が切れてしまうとエラーの原因になります。 # 以下の紹介する手段のように、代入する文字が切れないようにしてください。 # #( 正しい記述例 ) #------------------------------------------------------ #◆スクリプト:$game_system.write_text[1] = #       $game_switches[30] #------------------------------------------------------ #------------------------------------------------------ #◆スクリプト:a = $game_switches[30] #       $game_system.write_text[1] = a #------------------------------------------------------ #----------------------------------------------------------------------- @write=[] # 以下を設定。 # 偶数項は項目のタイトル。奇数項は表示内容です。 # 偶数項は nil を指定することで文字を非表示にできます。 # また、奇数項では以下のコードが使えます。 # [nil :何も表示しない] # [-1  :現在の所持金] # [-2  :セーブしたマップ名] # [-3  :更新日時] # [0以上:$game_system.write_textのID] @write[0] = "目的" @write[1] = 0 @write[2] = "熟練度" @write[3] = 5 @write[4] = "所持金" @write[5] = -1 @write[6] = "セーブ場所" @write[7] = -2 @write[8] = "最終更新日" @write[9] = -3 @arrang[9] = 244 # この高さから順に描画を開始します。 @arrang[10] = 32 # この高さから順に描画を開始します。 @arrang[11] = 22 # 全項目の文字の大きさです。 @arrang[14] = 4 # 項目のタイトルを表示するX座標です。初期は4です。 @text_x = 130 # 項目の内容を揃える位置を決定します。初期は130です。 @arrang[13] = false # 項目の内容を右揃えにする場合はtrueにしてください。 # ただし右揃えにする場合、@text_x = 0 にする # 必要があります。 # なお、falseだと@text_xの位置からの描画です。 #----------------------------------------------------------------------- # □アイコンの登録 # カスタマイズポイントで "ICON_ON = true" にした場合、セーブ画面に # 歩行グラフィックではなく、ここで指定した画像ファイルを表示します。 # 使用する画像は必ず「ピクチャとしてインポート」しておいてください。 # また、画像ファイル名に拡張子は不要です。 # なお、ある程度の画像の大きさには対応させてありますが、基本的には # 「64x64」の大きさを推奨します。 # # [記述方法] ICON[ (アクターID) ] = "(画像ファイル名)" # # (例) ★ IDが2のアクターには"icon_2"という画像ファイルを使う。 # → ICON[2] = "icon_2" #----------------------------------------------------------------------- @icon = [] # ここから下を設定。("ICON = []" 自体は変形しないこと。) @icon[1] = "ULTI-1" @icon[2] = "ULTI-2" @icon[3] = "ULTI-3" @icon[4] = "ULTI-4" end #-------------------------------------------------------------------------- # ● 設定データの呼び出しメソッド(ここから下は改変不可) #-------------------------------------------------------------------------- def text_laod return @write end def icon_load return @icon end def icon_on_load return @icon_on end def text_x_load return @text_x end def opacity_load return @opacity end def arrang_load return @arrang end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Window_SaveFile_Arrangement(刻宮オリジナル) #------------------------------------------------------------------------------ #  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。 #============================================================================== class Window_SaveFile_Arrangement < Window_Selectable #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_reader :data # 全セーブデータの情報配列 attr_accessor :before_index # 最新の状態より1つ以前のindex #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize # ☆--------------------- 必要なデータの生成 ------------------------☆ # ウィンドウの高さを算出。 point = (SAVE_MAX * 32) + 32 # 320pxよりも長ければ、320pxに合わせる。 if point >= 320 height = 320 end # 存在する全セーブデータの配列を作成。 @data = [] data_call # ☆-------------------------------------------------------------------☆ super(0, 0, 192, height) self.contents = Bitmap.new(width - 32, point - 32) @item_max = SAVE_MAX # ←アイテム数 # リフレッシュ for i in 0..SAVE_MAX refresh(i) end end #-------------------------------------------------------------------------- # ● ファイル名の取得 #-------------------------------------------------------------------------- def make_filename(file_index) return "Save#{file_index + 1}.rxdata" end #-------------------------------------------------------------------------- # ● 【指定した項目の】リフレッシュ #-------------------------------------------------------------------------- def refresh(index) # Y座標の設定。 y = index * 32 # 対応する項目の描画を消去。 color = Color.new(0, 0, 0, 0) rect = Rect.new(0, y, width - 32, 32) self.contents.fill_rect(rect, color) # ファイル番号を描画 self.contents.font.color = system_color name = "No.#{index + 1}" self.contents.draw_text(4, y, width - 32, 32, name) # セーブファイルがあるか? if FileTest.exist?(make_filename(index)) # プレイ時間を描画 self.contents.font.color = normal_color total_sec = @data[index]["total_sec"] hour = total_sec / 60 / 60 min = total_sec / 60 % 60 sec = total_sec % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) self.contents.font.color = normal_color self.contents.draw_text(70, y, width - 32, 32, time_string) end end #-------------------------------------------------------------------------- # ● セーブ内容の配列生成 #-------------------------------------------------------------------------- def data_call hash = {} @time_stamp = Time.at(0) # 存在する全てのセーブデータの内容を配列に保存。 for i in 0..SAVE_MAX filename = make_filename(i) # セーブファイルがあるか無いか? if FileTest.exist?(filename) # ファイルを読み込みモードでオープン。 file = File.open(filename, "r") # 必要データのロード。 time_stamp = file.mtime characters = Marshal.load(file) frame_count = Marshal.load(file) game_system = Marshal.load(file) game_switches = Marshal.load(file) game_variables = Marshal.load(file) game_self_switches = Marshal.load(file) game_screen = Marshal.load(file) game_actors = Marshal.load(file) game_party = Marshal.load(file) game_troop = Marshal.load(file) game_map = Marshal.load(file) game_player = Marshal.load(file) total_sec = frame_count / Graphics.frame_rate # ハッシュに保存。 hash["time_stamp"] = time_stamp hash["characters"] = characters hash["frame_count"] = frame_count hash["game_system"] = game_system hash["game_switches"] = game_switches hash["game_variables"] = game_variables hash["game_self_switches"] = game_self_switches hash["game_screen"] = game_screen hash["game_actors"] = game_actors hash["game_party"] = game_party hash["game_troop"] = game_troop hash["game_map"] = game_map hash["game_player"] = game_player hash["total_sec"] = total_sec # ハッシュを配列に保存。 @data[i] = hash.dup # ファイルを閉じる。 file.close end end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help if @before_index != index @before_index = index self.help_window.refresh(index) end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Window_SaveFile_Data(刻宮オリジナル) #------------------------------------------------------------------------------ #  セーブ画面およびロード画面で表示する、セーブファイルのウィンドウです。 #============================================================================== class Window_SaveFile_Data < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(save_data) super(192, 0, 448, 448) @data = save_data self.contents = Bitmap.new(width - 32, height - 32) # カスタマイズデータのロード @setting_data = Tokimiya_Data_No3.new @setting_text = @setting_data.text_laod @setting_icon = @setting_data.icon_load @setting_icon_on = @setting_data.icon_on_load @setting_icon_text_x = @setting_data.text_x_load @setting_opacity = @setting_data.opacity_load @setting_arrang = @setting_data.arrang_load end #-------------------------------------------------------------------------- # ● ファイル名の取得 #-------------------------------------------------------------------------- def make_filename(file_index) return "Save#{file_index + 1}.rxdata" end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(index) # まずは描画内容の全消去。 self.contents.clear # セーブデータが無ければ、処理はそこで終了。 unless FileTest.exist?(make_filename(index)) return end # 設定された機能に応じて画像を描画。 # (キャラクターの描画) self.contents.font.size = @setting_arrang[8] if @setting_icon_on drow_icon(index) else drow_character(index) end # (各項目の描画) self.contents.font.size = @setting_arrang[11] data_write(index) end #-------------------------------------------------------------------------- # ● リフレッシュ [★アイコンバージョン] #-------------------------------------------------------------------------- def drow_icon(index) # キャラクターデータのロード。 game_party = @data[index]["game_party"] # 指定された画像の描画。 for i in 0...game_party.actors.size # アイコンの描画 id = game_party.actors[i].id graphics = @setting_icon[id] picture = RPG::Cache.picture(graphics) rect = Rect.new(0, 0, picture.width, picture.height) x = i / 2 * @setting_arrang[4] + @setting_arrang[0] y = i % 2 * @setting_arrang[5] + @setting_arrang[1] self.contents.blt(x, y, picture, rect, @setting_opacity) # パラメーターの描画 x += @setting_arrang[2] y += @setting_arrang[3] draw_actor_level(game_party.actors[i], x, y) y += @setting_arrang[12] self.contents.draw_text(x, y, 600, 32, game_party.actors[i].name) y += @setting_arrang[12] draw_actor_class(game_party.actors[i], x, y) y += @setting_arrang[12] draw_actor_hp_custom(game_party.actors[i], x, y, width = 144) y += @setting_arrang[12] draw_actor_sp_custom(game_party.actors[i], x, y, width = 144) end end #-------------------------------------------------------------------------- # ● リフレッシュ [★バトラーバージョン] #-------------------------------------------------------------------------- def drow_character(index) game_party = @data[index]["game_party"] # 指定された画像の描画。 for i in 0...game_party.actors.size # バトラーの描画 graphics = game_party.actors[i].battler_name hue = game_party.actors[i].battler_hue bitmap = RPG::Cache.battler(graphics, hue) x = i / 2 * @setting_arrang[4] + @setting_arrang[0] y = i % 2 * @setting_arrang[5] + @setting_arrang[1] cw = bitmap.rect.width ch = bitmap.rect.height src_rect = Rect.new(0, 0, cw, ch) dest_rect = Rect.new(x, y, cw / 1.5, ch / 1.5) self.contents.stretch_blt(dest_rect, bitmap, src_rect, @setting_opacity) # パラメーターの描画 x += @setting_arrang[2] y += @setting_arrang[3] draw_actor_level(game_party.actors[i], x, y) y += @setting_arrang[12] self.contents.draw_text(x, y, 600, 32, game_party.actors[i].name) y += @setting_arrang[12] draw_actor_class(game_party.actors[i], x, y) y += @setting_arrang[12] draw_actor_hp_custom(game_party.actors[i], x, y, width = 144) y += @setting_arrang[12] draw_actor_sp_custom(game_party.actors[i], x, y, width = 144) end end #-------------------------------------------------------------------------- # ● 補足説明の描画 #-------------------------------------------------------------------------- def data_write(index) # 必要なデータのロード。 game_variables = @data[index]["game_variables"] game_party = @data[index]["game_party"] time_stamp = @data[index]["time_stamp"] game_system = @data[index]["game_system"] game_map = @data[index]["game_map"] # システム色の文字の描画 self.contents.font.color = system_color title_x = @setting_arrang[14] for i in 0..4 # 描画内容の呼び出し。 text = @setting_text[i * 2] # nilクラスの回避。 if text == nil next end # undefinedエラーの回避。 unless defined? game_system.write_text next end # 文字列の描画 if text != nil y = i * @setting_arrang[10] + @setting_arrang[9] self.contents.draw_text(title_x, y, 600, 32, text) end end # 通常色の文字の描画 x = @setting_icon_text_x w = width - 32 self.contents.font.color = normal_color for i in 0..4 # 描画内容の呼び出し。 text = @setting_text[i * 2 + 1] # nilクラスの回避。 if text == nil next end # undefinedエラーの回避。 unless defined? game_system.write_text next end # 特殊IDの判別 y = i * @setting_arrang[10] + @setting_arrang[9] if text == -1 # 所持金の場合。 cx = contents.text_size(game_party.gold.to_s).width cx_2 = contents.text_size($data_system.words.gold).width # 左揃え unless @setting_arrang[13] self.contents.font.color = normal_color self.contents.draw_text(x, y, cx, 32, game_party.gold.to_s) self.contents.font.color = system_color self.contents.draw_text(x + cx + 6, y, cx_2, 32, $data_system.words.gold) # 右揃え else self.contents.font.color = normal_color self.contents.draw_text(x, y, w - 20, 32, game_party.gold.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(x, y, w, 32, $data_system.words.gold, 2) end # 色を元に戻す self.contents.font.color = normal_color next elsif text == -2 # セーブした場所のマップ名の場合。 text = game_map.map_name elsif text == -3 # タイムスタンプの場合。 text = time_stamp.strftime("%Y/%m/%d %H:%M") elsif text >= 0 # システムオブジェクトからのロードの場合。 id = text text = game_system.write_text[id] # 変数のロードの場合。 if text.is_a?(Integer) id = text text = game_variables[id].to_s end end # 文字列の描画 if text != nil # 左揃え unless @setting_arrang[13] self.contents.draw_text(x, y, 600, 32, text) # 右揃え else self.contents.draw_text(x, y, w, 32, text, 2) end end end end #-------------------------------------------------------------------------- # ● HP の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 描画先の幅 #-------------------------------------------------------------------------- def draw_actor_hp_custom(actor, x, y, width = 144) # 文字列 "HP" を描画 self.contents.font.color = system_color self.contents.draw_text(x, y, 32, 32, $data_system.words.hp) # MaxHP を描画するスペースがあるか計算 if width - 32 >= 108 hp_x = x + width - 108 flag = true elsif width - 32 >= 48 hp_x = x + width - 48 flag = false end # HP を描画 self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color self.contents.draw_text(hp_x - 20, y, 48, 32, actor.hp.to_s, 2) # MaxHP を描画 if flag self.contents.font.color = normal_color self.contents.draw_text(hp_x + 48 - 20, y, 12, 32, "/", 1) self.contents.draw_text(hp_x + 60 - 20, y, 48, 32, actor.maxhp.to_s) end end #-------------------------------------------------------------------------- # ● SP の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # width : 描画先の幅 #-------------------------------------------------------------------------- def draw_actor_sp_custom(actor, x, y, width = 144) # 文字列 "SP" を描画 self.contents.font.color = system_color self.contents.draw_text(x, y, 32, 32, $data_system.words.sp) # MaxSP を描画するスペースがあるか計算 if width - 32 >= 108 sp_x = x + width - 108 flag = true elsif width - 32 >= 48 sp_x = x + width - 48 flag = false end # SP を描画 self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color self.contents.draw_text(sp_x - 20, y, 48, 32, actor.sp.to_s, 2) # MaxSP を描画 if flag self.contents.font.color = normal_color self.contents.draw_text(sp_x + 48 - 20, y, 12, 32, "/", 1) self.contents.draw_text(sp_x + 60 - 20, y, 48, 32, actor.maxsp.to_s) end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_File #------------------------------------------------------------------------------ #  セーブ画面およびロード画面のスーパークラスです。 #============================================================================== class Scene_File #-------------------------------------------------------------------------- # ● オブジェクト初期化 # help_text : ヘルプウィンドウに表示する文字列 #-------------------------------------------------------------------------- def initialize(help_text) @help_text = help_text end #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def main # セーブファイルウィンドウを作成 @menu_windows = Window_SaveFile_Arrangement.new # ウィンドウの関連付け save_data = @menu_windows.data @menu_windows.help_window = Window_SaveFile_Data.new(save_data) # 最後に操作したファイルを選択 @file_index = $game_temp.last_file_index @menu_windows.index = @file_index # before_indexに記憶 @menu_windows.before_index = @file_index # セーブかロードかの文章表示 src_1 = Sprite.new @src_2 = Sprite.new src_1.x = 32 @src_2.x = 354 src_1.y = 418 @src_2.y = 450 src_1.bitmap = Bitmap.new(96,32) @src_2.bitmap = Bitmap.new(300,32) src_1.bitmap.font.size = 32 @src_2.bitmap.font.size = 20 if @seav_or_load == 0 src_1.bitmap.draw_text(0, 0, 120, 32, "セーブ") @src_2.bitmap.draw_text(0, 0, 300, 32, "セーブするファイルを選んでください") else src_1.bitmap.draw_text(0, 0, 120, 32, "ロード") @src_2.bitmap.draw_text(0, 0, 300, 32, "ロードするファイルを選んでください") end # トランジション実行 Graphics.transition # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 update help_move # 画面が切り替わったらループを中断 if $scene != self break end end # トランジション準備 Graphics.freeze # ウィンドウとスプライトを解放 @menu_windows.dispose @menu_windows.help_window.dispose src_1.dispose @src_2.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # ウィンドウを更新 @menu_windows.update # C ボタンが押された場合 if Input.trigger?(Input::C) file_index = @menu_windows.index # メソッド on_decision (継承先で定義) を呼ぶ on_decision(make_filename(file_index)) $game_temp.last_file_index = file_index return end # B ボタンが押された場合 if Input.trigger?(Input::B) # メソッド on_cancel (継承先で定義) を呼ぶ on_cancel return end end #-------------------------------------------------------------------------- # ○ ボトムヘルプの流動の管理 #-------------------------------------------------------------------------- def help_move @src_2.x -= 3 if @src_2.x < -288 @src_2.x = 640 end end end #============================================================================== # ■ Game_Map #------------------------------------------------------------------------------ #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。 # このクラスのインスタンスは $game_map で参照されます。 #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● マップ名取得 #-------------------------------------------------------------------------- def map_name # MapInfo.rxdata をロード mapinfo = load_data("Data/MapInfos.rxdata") # マップ名を返す return mapinfo[@map_id].name end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Save #============================================================================== class Scene_Save < Scene_File #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias xrxs57_initialize initialize def initialize @seav_or_load = 0 xrxs57_initialize end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Load [再定義] #------------------------------------------------------------------------------ #  セーブ画面の処理を行うクラスです。 #============================================================================== class Scene_Load < Scene_File #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize # テンポラリオブジェクトを再作成 $game_temp = Game_Temp.new # タイムスタンプが最新のファイルを選択 $game_temp.last_file_index = 0 latest_time = Time.at(0) for i in 0..SAVE_MAX filename = make_filename(i) if FileTest.exist?(filename) file = File.open(filename, "r") if file.mtime > latest_time latest_time = file.mtime $game_temp.last_file_index = i end file.close end end super("どのファイルをロードしますか?") end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Game_System #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :write_text # テキスト書き込み用 def write_text @write_text = [] if @write_text.nil? return @write_text end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Title #------------------------------------------------------------------------------ #  タイトル画面の処理を行うクラスです。 #============================================================================== class Scene_Title #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def main # 戦闘テストの場合 if $BTEST battle_test return end # データベースをロード $data_actors = load_data("Data/Actors.rxdata") $data_classes = load_data("Data/Classes.rxdata") $data_skills = load_data("Data/Skills.rxdata") $data_items = load_data("Data/Items.rxdata") $data_weapons = load_data("Data/Weapons.rxdata") $data_armors = load_data("Data/Armors.rxdata") $data_enemies = load_data("Data/Enemies.rxdata") $data_troops = load_data("Data/Troops.rxdata") $data_states = load_data("Data/States.rxdata") $data_animations = load_data("Data/Animations.rxdata") $data_tilesets = load_data("Data/Tilesets.rxdata") $data_common_events = load_data("Data/CommonEvents.rxdata") $data_system = load_data("Data/System.rxdata") # システムオブジェクトを作成 $game_system = Game_System.new # タイトルグラフィックを作成 @sprite = Sprite.new @sprite.bitmap = RPG::Cache.title($data_system.title_name) # コマンドウィンドウを作成 s1 = "ニューゲーム" s2 = "コンティニュー" s3 = "シャットダウン" @command_window = Window_Command.new(192, [s1, s2, s3]) @command_window.back_opacity = 160 @command_window.x = 320 - @command_window.width / 2 @command_window.y = 288 # コンティニュー有効判定 # セーブファイルがひとつでも存在するかどうかを調べる # 有効なら @continue_enabled を true、無効なら false にする @continue_enabled = false for i in 0..SAVE_MAX # ←この点のみ修正 (本来は:for i in 0..3) if FileTest.exist?("Save#{i+1}.rxdata") @continue_enabled = true end end # コンティニューが有効な場合、カーソルをコンティニューに合わせる # 無効な場合、コンティニューの文字をグレー表示にする if @continue_enabled @command_window.index = 1 else @command_window.disable_item(1) end # タイトル BGM を演奏 $game_system.bgm_play($data_system.title_bgm) # ME、BGS の演奏を停止 Audio.me_stop Audio.bgs_stop # トランジション実行 Graphics.transition # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 update # 画面が切り替わったらループを中断 if $scene != self break end end # トランジション準備 Graphics.freeze # コマンドウィンドウを解放 @command_window.dispose # タイトルグラフィックを解放 @sprite.bitmap.dispose @sprite.dispose end end