#============================================================================== # ★ メニュー並列コモン ver1.0 by USK #------------------------------------------------------------------------------ # ・メニュー画面の間並列で実行されるコモンイベントを設定できます。 #============================================================================== =begin 20行目のCommonEventIdで設定した番号のコモンイベントがメニュー画面を開いている間 並列で実行されます。ピクチャの表示やメッセージウィンドウの表示等が使用可能です。 コモンイベントは一度しか実行されないので、ボタン入力等で分岐を使うときはループ やラベルジャンプを使ってください。 21行目のTerminateEventIdで設定した番号のコモンイベントがメニュー画面から別の画面 に遷移するときに実行されます。別の画面はアイテム選択画面なども含まれます。 =end #============================================================================== # ■ Scene_Menu #============================================================================== class Scene_Menu CommonEventId = 10 #メニュー中コモンイベントID TerminateEventId = 9 #メニュー終了時コモンイベントID #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- alias :usk_mc_start :start def start usk_mc_start create_event end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def create_event @common = Game_Interpreter.new @common.setup($data_common_events[CommonEventId].list) @message_window = Window_Message.new @picture_sprites = [] @screen = Game_Screen.new @refresh = false end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def refresh=(bool) @refresh = bool end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def refresh instance_variables.each do |varname| ivar = instance_variable_get(varname) ivar.refresh if ivar.is_a?(Window) && ivar.respond_to?(:refresh) end if @refresh @refresh = false end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def screen @screen end #-------------------------------------------------------------------------- # ● ピクチャスプライトの更新 #-------------------------------------------------------------------------- def update_pictures screen.update screen.pictures.each do |pic| @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport, pic) @picture_sprites[pic.number].update end @viewport.tone.set(screen.tone) @viewport.ox = screen.shake @viewport.color.set(screen.flash_color) @viewport.color.set(0, 0, 0, 255 - screen.brightness) end #-------------------------------------------------------------------------- # ● ピクチャスプライトの解放 #-------------------------------------------------------------------------- def dispose_pictures @picture_sprites.compact.each {|sprite| sprite.dispose } end #-------------------------------------------------------------------------- # ● 終了前処理 #-------------------------------------------------------------------------- alias :usk_mc_pre_terminate :pre_terminate def pre_terminate @common.setup($data_common_events[TerminateEventId].list) while @common.running? usk_mc_update @common.update end dispose_pictures usk_mc_pre_terminate end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias :usk_mc_update :update def update if $game_message.busy? @message_window.update Graphics.update Input.update else usk_mc_update end @common.update unless scene_changing? update_pictures refresh end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 画面系コマンドの対象を取得 #-------------------------------------------------------------------------- alias :usk_mc_screen :screen def screen SceneManager.scene_is?(Scene_Menu) ? SceneManager.scene.screen : usk_mc_screen end #-------------------------------------------------------------------------- # ● イベントコマンドの実行 #-------------------------------------------------------------------------- alias :usk_mc_execute_command :execute_command RefreshCode = [125, 129, 311, 312, 313, 314, 316, 317, 322, 324] def execute_command usk_mc_execute_command if SceneManager.scene_is?(Scene_Menu) SceneManager.scene.refresh = true if RefreshCode.include?(@list[@index].code) end end end