#============================================================================== # 霧雨式スキン変更画面対応メニュー02 # 作成者:misty_rain (http://page.freett.com/misty_rain/) # 2006/04/23。RGSS改造スクリプト。二個目。 # ウィンドウスキン変更画面への対応版。 # Xiderowg's Multi Space(http://xms.rdy.jp/)の【XRXS. マップ名取得機構】を # このスクリプトより上に入れておかないと動作しません。 # 参考URL:http://xms.rdy.jp/ # 2006/04/28。背景が横スクロール出来るようになりました。 # しかし、スキン変更画面がスクロールに未対応です。 #============================================================================== #メニューコマンド:ステータス StatusName = "Status" #メニューコマンド:セーブ SaveName = "Save" #メニューコマンド:ゲーム終了 GameEndName = "GameEnd" #メニュー背景に使用する画像のパスと名前(拡張子要らないみたい) BackGroundFile = "Graphics/Panoramas/004-CloudySky01" #現在いるマップ名 PlaceName = "Place:" #プレイ時間の呼び名 PlaytimeName = "PlayTime" #ウィンドウスキン変更の項目名 SkinChangeName = "SkinChange" #メニュー背景横スクロールするならTRUEしないならFALSE ScrollXSW = TRUE #スクロールスピード 正数で右、負数で左にスクロール 絶対値の大きいほど速い #-80以下、80以上にするとそれぞれ-80,80に調整されます。 ScrollSP = 5 #============================================================================== # ■ Window_Gold #------------------------------------------------------------------------------ #  ゴールドを表示するウィンドウです。 #============================================================================== class Window_Gold < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 180, 64) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear cx = contents.text_size($data_system.words.gold).width self.contents.font.color = normal_color self.contents.draw_text(4, 0, 140-cx-2, 32, $game_party.gold.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(144-cx, 0, cx, 32, $data_system.words.gold, 2) end end #============================================================================== # ■ Window_PlayTime #------------------------------------------------------------------------------ #  メニュー画面でプレイ時間を表示するウィンドウです。 #============================================================================== class Window_PlayTime < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 180, 64) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = system_color self.contents.draw_text(4, 0, 60, 32, "#{PlaytimeName}") @total_sec = Graphics.frame_count / Graphics.frame_rate hour = @total_sec / 60 / 60 min = @total_sec / 60 % 60 sec = @total_sec % 60 text = sprintf("%02d:%02d:%02d", hour, min, sec) self.contents.font.color = normal_color self.contents.draw_text(4, 0, 140, 32, text, 2) end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if Graphics.frame_count / Graphics.frame_rate != @total_sec refresh end end end #============================================================================== # ■ Window_MenuStatus #------------------------------------------------------------------------------ #  メニュー画面でパーティメンバーのステータスを表示するウィンドウです。 #============================================================================== class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 180, 480) self.contents = Bitmap.new(width - 32, height - 32) refresh self.active = false self.index = -1 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 0 y = i * 117 actor = $game_party.actors[i] draw_actor_name(actor, x, y) draw_actor_level(actor, x, y + 24) draw_actor_state(actor, x + 72, y + 24) draw_actor_hp(actor, x, y + 48) draw_actor_sp(actor, x, y + 72) end end #-------------------------------------------------------------------------- # ● カーソルの矩形更新 #-------------------------------------------------------------------------- def update_cursor_rect if @index < 0 self.cursor_rect.empty else self.cursor_rect.set(0, @index * 117, self.width - 32, 96) end end end #============================================================================== # ■ Window_MenuMapName #------------------------------------------------------------------------------ #  メニュー画面でマップ名を表示するウィンドウです。 #============================================================================== class Window_MenuMapName < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 0, 320, 64) self.contents = Bitmap.new(width - 32, height - 32) refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear cx = contents.text_size($data_system.words.gold).width self.contents.font.color = normal_color self.contents.draw_text(16, 0, 280-cx, 32, $game_map.name, 2) self.contents.font.color = system_color self.contents.draw_text(0, 0, cx+32, 32, "#{PlaceName}", 2) end end #============================================================================== # ■ Scene_Menu #------------------------------------------------------------------------------ #  メニュー画面の処理を行うクラスです。 #============================================================================== class Scene_Menu #-------------------------------------------------------------------------- # ● オブジェクト初期化 # menu_index : コマンドのカーソル初期位置 #-------------------------------------------------------------------------- def initialize(menu_index = 0) @menu_index = menu_index end #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- def main # コマンドウィンドウを作成 s1 = $data_system.words.item s2 = $data_system.words.skill s3 = $data_system.words.equip s4 = "#{StatusName}" s5 = "#{SaveName}" s7 = "#{SkinChangeName}" s6 = "#{GameEndName}" scrollXsp = ScrollSP @command_window = Window_Command.new(180, [s1, s2, s3, s4, s5,s7, s6]) @command_window.index = @menu_index @command_window.x = 230 @command_window.y = 128 # パーティ人数が 0 人の場合 if $game_party.actors.size == 0 # アイテム、スキル、装備、ステータスを無効化 @command_window.disable_item(0) @command_window.disable_item(1) @command_window.disable_item(2) @command_window.disable_item(3) end # セーブ禁止の場合 if $game_system.save_disabled # セーブを無効にする @command_window.disable_item(4) end # プレイ時間ウィンドウを作成 @playtime_window = Window_PlayTime.new @playtime_window.x = 460 @playtime_window.y = 416 # マップ名ウィンドウを作成 @mapname_window = Window_MenuMapName.new @mapname_window.x = 320 @mapname_window.y = 0 # ゴールドウィンドウを作成 @gold_window = Window_Gold.new @gold_window.x = 460 @gold_window.y = 352 # ステータスウィンドウを作成 @status_window = Window_MenuStatus.new @status_window.x = 0 @status_window.y = 0 #背景画面を付ける処理 @spriteset_bgmap = Sprite.new @spriteset_bgmap.bitmap = Bitmap.new("#{BackGroundFile}") ; @spriteset_bgmap.x = 0 @spriteset_bgmap2 = Sprite.new @spriteset_bgmap2.bitmap = Bitmap.new("#{BackGroundFile}") ; if scrollXsp > 0 @spriteset_bgmap2.x = -640 else @spriteset_bgmap2.x = 640 end #-80〜80に直す if scrollXsp > 80 scrollXsp = 80 end if scrollXsp < -80 scrollXsp = -80 end # トランジション実行 Graphics.transition # メインループ loop do if ScrollXSW == TRUE # 背景の移動(横) @spriteset_bgmap.x = @spriteset_bgmap.x + scrollXsp @spriteset_bgmap2.x = @spriteset_bgmap2.x + scrollXsp if @spriteset_bgmap.x >= 640 @spriteset_bgmap.x = -640 elsif @spriteset_bgmap.x <= -640 @spriteset_bgmap.x = 640 end if @spriteset_bgmap2.x >= 640 @spriteset_bgmap2.x = -640 elsif @spriteset_bgmap2.x <= -640 @spriteset_bgmap2.x = 640 end end # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 update # 画面が切り替わったらループを中断 if $scene != self break end end # トランジション準備 Graphics.freeze # ウィンドウを解放 @command_window.dispose @playtime_window.dispose @mapname_window.dispose @gold_window.dispose @status_window.dispose @spriteset_bgmap.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # ウィンドウを更新 @command_window.update @playtime_window.update @mapname_window.update @gold_window.update @status_window.update # コマンドウィンドウがアクティブの場合: update_command を呼ぶ if @command_window.active update_command return end # ステータスウィンドウがアクティブの場合: update_status を呼ぶ if @status_window.active update_status return end end #-------------------------------------------------------------------------- # ● フレーム更新 (コマンドウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_command # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # マップ画面に切り替え $scene = Scene_Map.new return end # C ボタンが押された場合 if Input.trigger?(Input::C) # パーティ人数が 0 人で、セーブ、ゲーム終了以外のコマンドの場合 if $game_party.actors.size == 0 and @command_window.index < 4 # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # コマンドウィンドウのカーソル位置で分岐 case @command_window.index when 0 # アイテム # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # アイテム画面に切り替え $scene = Scene_Item.new when 1 # スキル # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ステータスウィンドウをアクティブにする @command_window.active = false @status_window.active = true @status_window.index = 0 when 2 # 装備 # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ステータスウィンドウをアクティブにする @command_window.active = false @status_window.active = true @status_window.index = 0 when 3 # ステータス # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ステータスウィンドウをアクティブにする @command_window.active = false @status_window.active = true @status_window.index = 0 when 4 # セーブ # セーブ禁止の場合 if $game_system.save_disabled # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # セーブ画面に切り替え $scene = Scene_Save.new when 5 # スキン変更 # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ウィンドウスキン変更画面に切り替え $scene = Scene_WindowChange.new when 6 # ゲーム終了 # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ゲーム終了画面に切り替え $scene = Scene_End.new end return end end #-------------------------------------------------------------------------- # ● フレーム更新 (ステータスウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_status # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # コマンドウィンドウをアクティブにする @command_window.active = true @status_window.active = false @status_window.index = -1 return end # C ボタンが押された場合 if Input.trigger?(Input::C) # コマンドウィンドウのカーソル位置で分岐 case @command_window.index when 1 # スキル # このアクターの行動制限が 2 以上の場合 if $game_party.actors[@status_window.index].restriction >= 2 # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # スキル画面に切り替え $scene = Scene_Skill.new(@status_window.index) when 2 # 装備 # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 装備画面に切り替え $scene = Scene_Equip.new(@status_window.index) when 3 # ステータス # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ステータス画面に切り替え $scene = Scene_Status.new(@status_window.index) end return end end end