#============================================================================== # タイトルデモエディター # (シーンタイトル type B ver1.60) #   by 水夜 #  http://zenith.ifdef.jp/ #------------------------------------------------------------------------------ # タイトル画面にデモ演出を加えてちょっと豪華にしてみたり(設定がめんどい) #============================================================================== 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 # コンティニュー有効判定 # セーブファイルがひとつでも存在するかどうかを調べる # 有効なら @continue_enabled を true、無効なら false にする @continue_enabled = false for i in 0..3 if FileTest.exist?("Save#{i+1}.rxdata") @continue_enabled = true end end # ME、BGS の演奏を停止 Audio.me_stop Audio.bgs_stop # ロード画面から戻ってきた際はロゴ表示をスキップ(オプション導入時) if $skip == nil if TITLE::LOGO_APPEAR # ロゴグラフィック作成 @logo = Sprite.new @logo.bitmap = RPG::Cache.title(TITLE::LOGO) @logo.ox = @logo.bitmap.width / 2 @logo.oy = @logo.bitmap.height / 2 @logo.x = 320 @logo.y = 240 @logo.opacity = 0 # タイムカウントリセット @time = 0 # ロゴ SE を演奏 Audio.se_play("Audio/SE/" + TITLE::LOGO_SE) if TITLE::LOGO_SE != "" # トランジション実行 Graphics.transition(0) # ロゴ表示ループ loop do # ゲーム画面を更新 Graphics.update # フレーム更新 update_logo # ロゴ表示時間経過後ループ中断 break if @time == TITLE::LOGO_DURATION + 510 / TITLE::LOGO_FADE end # ロゴグラフィックを解放 @logo.bitmap.dispose @logo.dispose end end # タイムカウントリセット @time = 0 @stop = false $skip = nil # デモ背景を作成 if TITLE::DEMO_BACK != "" @demo_back = Plane.new @demo_back.bitmap = RPG::Cache.title(TITLE::DEMO_BACK) end @back_sx = TITLE::DEMO_BACK_SCR[0] / 8.0 @back_sy = TITLE::DEMO_BACK_SCR[1] / 8.0 @back_ox = 0 @back_oy = 0 # デモスプライト格納用配列を作成 @demo = Array.new if TITLE::DEMO_BGM != "" # デモ BGM を演奏 Audio.bgm_play("Audio/BGM/" + TITLE::DEMO_BGM) end # コマンドウィンドウを作成 make_command # トランジション実行 Graphics.transition(10) # デモ表示ループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update update if @command_window.active # デモ終了またはデモスキップでコマンドウィンドウ表示 if update_demo and !@command_window.active and !@command_window.visible command_appear end # 画面が切り替わったらループを中断 if $scene != self break end end # トランジション準備 Graphics.freeze # デモグラフィックを解放 if defined? @demo_back @demo_back.bitmap.dispose @demo_back.dispose end @demo.each{|i|i.dispose} # コマンドウィンドウを解放 @command_window.dispose end #-------------------------------------------------------------------------- # ● コマンド作成 #-------------------------------------------------------------------------- def make_command s1 = TITLE::NEW_GAME s2 = TITLE::CONTINUE s3 = TITLE::SHUT_DOWN @command_window = Window_Command.new(192, [s1, s2, s3]) @command_window.opacity = TITLE::COMMAND_OPACITY if TITLE::COMMAND_CDN == nil @command_window.x = 320 - @command_window.width / 2 @command_window.y = 288 else @command_window.x = TITLE::COMMAND_CDN[0] @command_window.y = TITLE::COMMAND_CDN[1] end @command_window.z = 500 @command_window.active = false @command_window.visible = false # コンティニューが有効な場合、カーソルをコンティニューに合わせる # 無効な場合、コンティニューの文字をグレー表示にする if @continue_enabled @command_window.index = 1 else @command_window.disable_item(1) end end #-------------------------------------------------------------------------- # ● コマンド表示 #-------------------------------------------------------------------------- def command_appear @command_window.active = true @command_window.visible = true end #-------------------------------------------------------------------------- # ● ロゴフレーム更新 #-------------------------------------------------------------------------- def update_logo # スプライト更新 @logo.opacity += TITLE::LOGO_FADE if @time < 255 / TITLE::LOGO_FADE @logo.opacity -= TITLE::LOGO_FADE if @time > TITLE::LOGO_DURATION + 255 / TITLE::LOGO_FADE # タイムカウントアップ @time += 1 end #-------------------------------------------------------------------------- # ● デモフレーム更新 #-------------------------------------------------------------------------- def update_demo if !@stop for i in 0...TITLE::DEMO.size next if @time != TITLE::DEMO[i][2] @demo.push Sprite_Demo.new(i) end @demo.each{|i|i.demo_update if @time == i.end_time i.dispose @demo.delete(i) end } # タイムカウントアップ @time += 1 end if defined? @demo_back @back_ox -= @back_sx @back_oy -= @back_sy @demo_back.ox = @back_ox @demo_back.oy = @back_oy end # C ボタンが押された場合 unless TITLE::DEMO_NO_SKIP and !@continue_enabled if Input.trigger?(Input::C) and !@command_window.active # デモスキップ SE を演奏 Audio.se_play("Audio/SE/" + TITLE::DEMO_SKIP_SE) if TITLE::DEMO_SKIP_SE != "" return true end end # デモ終了時間に達した場合 if @time == TITLE::DEMO_END command_appear # デモをループさせる場合 if TITLE::DEMO_LOOP # デモグラフィックを解放 @demo.each{|i|i.dispose} @demo = [] # タイムカウントリセット @time = TITLE::DEMO_LOOP_FRAME else # タイムカウント停止 @stop = true end end end end