#============================================================================== # ■ VX-RGSS2-2 タイトルカスタマイズ [Ver.2.1.0] by Claimh #------------------------------------------------------------------------------ # タイトル表示時の付属機能の詰め合わせ #<機能> # ★ロゴ表示 # タイトル前にロゴ(絵or文字)の表示をします。 # ★タイトル名表示 # タイトル名(メインタイトル/サブタイトル)の表示をします。 # ★フェードイン # タイトル名、タイトルコマンドのフェードイン # ★タイムアウト # タイトル表示中に一定時間なにも操作にないとタイトル表示をやり直します。 # ★エフェクト # ニューゲームなどのタイトルコマンドを選択したときのちょっとした演出効果。 # ★テキストデモ # 文字のみのデモを表示します。 # 自動で進みます(スキップも可能) # ★イベントデモ # イベントによって組まれたデモを表示します。 # イベントの組み方は自由。ただし、自動実行にする必要有り # メッセージの自動送りなどの機能は入ってません。 # ★アナザーオープニング(イベントデモ) # 特定条件がそろった時のみ表示されるイベントデモです。 # ★Extraメニュー # CGモード、Musicモードが使えるようになります # ★Loadモード # コンティニューからタイトルに戻るときにデモ表示しないモードが使えます # (Scene_Load/FileでScene_Title.new(true)にしても似た効果が可能) # また、タイトル背景を表示したまま、ロード画面に遷移できます。 #============================================================================== module Title_Custom DISP_W = 544 # 画面幅 DISP_H = 416 # 画面高さ #---------------------------------------------------------------------------- # カスタマイズSTART #---------------------------------------------------------------------------- #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# # タイトルスキップ(デバッグ用) # #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# # いつもニューゲームから始める TITLE_SKIP_ALL = false # セーブファイルがあればコンティニュー、なければニューゲームから始める TITLE_SKIP_CONTINUE = false #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# # 機能選択(true:有効、false:無効) # #-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# # ロゴ表示 LOGO = false # テキストデモ機能 TEXT_DEMO = false # イベントデモ機能 EVENT_DEMO = false # アナザーオープニング機能 AOP_DEMO = false # Extraメニュー USE_EXTRA = false # Loadモード USE_LOAD = false #-*-*-*-*-*-*-*-*-*-*-*-*-*-# # 参考値 # #-*-*-*-*-*-*-*-*-*-*-*-*-*-# # セーブファイル最大数(セーブファイルの有無をチェック用) SAVE_FILE_MAX = 4 #-*-*-*-*-*-*-*-*-*-*-*-*-*-# # デモ表示順序設定 # #-*-*-*-*-*-*-*-*-*-*-*-*-*-# # 0: テキストデモ → イベントデモ ※タイムアウト時:ロゴ # 1: イベントデモ → テキストデモ ※タイムアウト時:ロゴ # 2: 通常:テキストデモ、タイムアウト時:イベントデモ(ロゴなし) # 3: 通常:イベントデモ、タイムアウト時:テキストデモ(ロゴなし) DEMO_PATTERN = 0 #-*-*-*-*-*-*-*-*-*-*-*-*-*-# # 各種機能別設定 # #-*-*-*-*-*-*-*-*-*-*-*-*-*-# #-------------------------------------------------------------------------- # ● タイトル表示 #-------------------------------------------------------------------------- # タイトル表示前のトランジションファイル名(nil:不要) TITLE_TRN = "cc_transition2" # タイトル背景のファイル名(Graphics/System) TITLE_BACK = "Title2" # 天候エフェクト # 0:なし(晴れ) 1:雨 2:嵐 3:雪 WEATHER_TYPE = 0 # 天候エフェクトの量(0..40) WEATHER_MAX = 10 # タイトル表示時のBGS(nil:不要) BGS = nil #RPG::BGS.new("Rain", 100, 100) #-=-=-=-=-=-=-=-=-=-=-=-=-# # メインタイトル設定 # #-=-=-=-=-=-=-=-=-=-=-=-=-# # メインタイトル表示有効?(true:有効 false:無効) TM = true # 表示位置(X軸方向) TM_X = 140 # 表示位置(Y軸方向) TM_Y = 40 # メインタイトル表示タイプ(true:テキスト false:画像) TM_TYPE = true #--<テキストタイトル設定>--# TMT_NAME = "Main Title" # タイトル名(改行不可) TMT_EDGE = true # 縁文字(true:有効、false:無効) TMT_FONT = ["UmePlus Gothic", "MS ゴシック", "Courier New"] # 表示フォント [第1Font,第2Font・・・] TMT_SIZE = 32 # フォントサイズ TMT_ITALIC = false # イタリック(true:有効、false:無効) TMT_BOLD = true # ボールド(true:有効、false:無効) TMT_COLOR = Color.new(255,100,85,255) # 色:Color.new(red,green,blue,alpha) #--<グラフィックタイトル設定>--# # タイトル画像名(Graphics/System) TMG_FILE = "main_title" #-=-=-=-=-=-=-=-=-=-=-=-# # サブタイトル設定 # #-=-=-=-=-=-=-=-=-=-=-=-# # サブタイトル表示有効?(true:有効 false:無効) TS = false # 表示位置(X軸方向) TS_X = 350 # 表示位置(Y軸方向) TS_Y = 80 # サブタイトル表示タイプ(true:テキスト false:画像) TS_TYPE = true #--<テキストタイトル設定>--# TST_NAME = "〜sub title〜" # タイトル名(改行不可) TST_EDGE = true # 縁文字(true:有効、false:無効) TST_FONT = ["UmePlus Gothic", "MS ゴシック", "Courier New"] # 表示フォント [第1Font,第2Font・・・] TST_SIZE = 24 # フォントサイズ TST_ITALIC = false # イタリック(true:有効、false:無効) TST_BOLD = false # ボールド(true:有効、false:無効) TST_COLOR = Color.new(75,235,210,255) # 色:Color.new(red,green,blue,alpha) #--<グラフィックタイトル設定>--# # タイトル画像名(Graphics/System) TSG_FILE = "sub_title" #-=-=-=-=-=-=-=-=-=-=-=-=-# # タイトルコマンド設定 # #-=-=-=-=-=-=-=-=-=-=-=-=-# # 表示順定義 # 0: ニューゲーム # 1: コンティニュー # 2: シャットダウン # 3: Extra(Extra有効時しか表示されない) CMD_BOX = [0, 1, 2, 3] # 表示位置(X軸方向) CT_WIN_X = 420 # 表示位置(Y軸方向) CT_WIN_Y = 240 # 各コマンドの横ずれ値 CT_WIN_SLIDE = 30 # コマンドタイプ(true:テキスト false:画像) CMD_TYPE = true #--<テキストコマンド設定>--# CT_NEWGAME = "ニューゲーム" # ニューゲーム CT_CONTINUE = "コンティニュー" # コンティニュー CT_SHUTDOWN = "シャットダウン" # シャットダウン CT_EXTRA = "エクストラ" # Extra CT_EDGE = true # 縁取り文字(true:有効、false:無効) CT_FONT = ["UmePlus Gothic", "MS ゴシック", "Courier New"] # 表示フォント [第1Font,第2Font・・・] CT_SIZE = 22 # フォントサイズ CT_ITALIC = false # イタリック(true:有効、false:無効) CT_BOLD = false # ボールド(true:有効、false:無効) CT_COLOR = Color.new(255,255,255,255) # 色:Color.new(red,green,blue,alpha) CT_ALIGN = 0 # 0=左揃え 1=中央 2=右揃え CT_WIN_OPACITY = 0 # ウィンドウ透明度 CT_WIN_BACKOPACITY = 160 # ウィンドウ背景透明度 CT_CUR_FIT = false # カーソル幅を文字幅にフィットさせる #--<画像コマンド設定>--# #-**注意事項**-# # コマンド用の画像は全て同じサイズ(幅、高さ)にしてください。 # 画像は全てGraphics/Systemにおいてください CG_NEWGAME = "newgame" # ニューゲーム CG_CONTINUE = "continue" # コンティニュー CG_SHUTDOWN = "shutdown" # シャットダウン CG_EXTRA = "extra" # Extra # カーゾルが当たってるときに画像チェンジ(true:有効+カーソル消 false:無効) CG_CHANGE = false CGS_NEWGAME = "newgame_s" # ニューゲーム CGS_CONTINUE = "continue_s" # コンティニュー CGS_SHUTDOWN = "shutdown_s" # シャットダウン CGS_EXTRA = "extra_s" # Extra #-=-=-=-=-=-=-=-=-=-=-=-=-# # フェードイン設定 # #-=-=-=-=-=-=-=-=-=-=-=-=-# # フェードイン機能 FADEIN = true # フェードインパターン # 0:メインタイトル+サブタイトル+コマンド # 1:メインタイトル+サブタイトル → コマンド # 2:メインタイトル → サブタイトル+コマンド # 3:メインタイトル → サブタイトル → コマンド FADEIN_PATTERN = 1 # フェードイン時間(フレーム数) # (例1)60に設定した場合 # パターン0 => 60 # パターン1 => 60 + 60 # パターン3 => 60 + 60 + 60 FADEIN_TIME = 60 #-=-=-=-=-=-=-=-=-=-=-=-=-# # タイムアウト設定 # #-=-=-=-=-=-=-=-=-=-=-=-=-# # タイムアウト機能 TIME_OUT = true # タイムアウト発生フレーム数 TIME_OUT_CNT = 800 #-=-=-=-=-=-=-=-=-=-=-=-=-=-# # タイトルグラフィック操作 # #-=-=-=-=-=-=-=-=-=-=-=-=-=-# # タイトルグラフィックをスクロールさせる SCROLL_TG = false # スクロール方向 # 0, 5 : 変更なし # 7(左上) | 8(上) | 9(右上) # 4(左) | 5(―) | 6(右) # 1(左下) | 2(下) | 3(右下) SCROLL_DIR = 6 # スクロール速さ(1frame単位で移動させる位置) SCROLL_SPD = 1 #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-# # タイトルエフェクト設定 # #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-# # エフェクトは # # ニューゲーム、コンティニュー、シャットダウン # # ごとに別々の設定になります。 # # 全て同形式の配列での設定で下のようになります。 # # [ ニューゲーム選択時の動作, # # コンティニュー選択時の動作, # # シャットダウン選択時の動作, # # Extra選択時の動作     ] # #-----------------------------------------------------# # また、エフェクト処理は毎フレームごとに # # 加算していく形になりますので、 # # あまり大きな値は設定はお勧めできません。 # #-----------------------------------------------------# # タイトルエフェクト機能(true:有効 false:無効) EFFECT = [false, true, true, true] # エフェクト時間(フレーム数) EF_TIME_CNT= [ 20, 20, 20, 20] #--<メインタイトル用エフェクト設定>--# TME_X = [ 0, 0, 0, 0] # X軸方向のスライド TME_Y = [ 0, 0, 2, 0] # Y軸方向のスライド TME_ZOOM_X = [ 0.0, 0.0, 0.0, 0.0] # X軸方向のズーム TME_ZOOM_Y = [ 0.0, 0.0, 0.0, 0.0] # Y軸方向のズーム #--<サブタイトル用エフェクト設定>--# TSE_X = [ 0, 0, 0, 0] # X軸方向のスライド TSE_Y = [ 0, 0, 2, 0] # Y軸方向のスライド TSE_ZOOM_X = [ 0.0, 0.0, 0.0, 0.0] # X軸方向のズーム TSE_ZOOM_Y = [ 0.0, 0.0, 0.0, 0.0] # Y軸方向のズーム #--<コマンド用エフェクト設定>--# CME_X = [ 0, 0, 0, 0] # X軸方向のスライド CME_Y = [ 0, 0, -2, 0] # Y軸方向のスライド # ※ズームは出来ません(Windowの仕様) #--<タイトルバック用エフェクト設定>--# TBE_X = [ 0, 0, 0, 0] # X軸方向のスライド TBE_Y = [ 0, 0, 0, 0] # Y軸方向のスライド TBE_ZOOM_X = [ 0.1, 0.0, 0.0, 0.0] # X軸方向のズーム TBE_ZOOM_Y = [ 0.1, 0.0, 0.0, 0.0] # Y軸方向のズーム TBE_TONE_R = [ 1, 0, 0, 0] # 色調変更(赤) TBE_TONE_G = [ 0, 0, 0, 0] # 色調変更(緑) TBE_TONE_B = [ 0, 0, 1, 0] # 色調変更(青) TBE_TONE_S = [ 0, 0, 10, 0] # 色調変更(グレースケール) TBE_FADE = [ true,false, true,false] # フェードアウトの有無 # スクロール有り時はスライド、ズームのエフェクトしない(0)を推奨 # LOAD、Extraを使用する場合はタイトルバックのエフェクトはしない(全て0)を推奨 TBE_SCROLL = [false, true,false, true] # タイトルバックのスクロール状態を継続 # スクロール有り時にLOAD、Extraを使用する場合はスクロール継続を推奨 # スクロールを保持する場合、タイトルバックのエフェクトはしない(全て0)を推奨 end #============================================================================== # ■ タイトルカスタマイズ[Scene_Title] #------------------------------------------------------------------------------ #  タイトルカスタマイズ用にScene_Titleを再構築。 #--< 再定義箇所 >-------------------------------------------------------------- # Scene_Title内のほぼ全メソッド #============================================================================== class Scene_Title < Scene_Base # 各フェーズの定義(メンテの容易化) PHASE_LOGO = 1 PHASE_TEXT_DEMO = 2 PHASE_EVENT_DEMO = 3 PHASE_TITLE = 4 PHASE_EXTRA = 5 PHASE_LOAD = 6 #-------------------------------------------------------------------------- # ● 音楽:全停止 #-------------------------------------------------------------------------- def all_music_stop RPG::BGM.stop RPG::BGS.stop RPG::ME.stop end #-------------------------------------------------------------------------- # ● 音楽:全フェードアウト #-------------------------------------------------------------------------- def all_music_fade(msec) RPG::BGM.fade(msec) RPG::BGS.fade(msec) RPG::ME.fade(msec) end #-------------------------------------------------------------------------- # ● オブジェクト初期化 # ev : イベントデモからの復帰 #-------------------------------------------------------------------------- def initialize(ev=false) @ev_demo = ev # 音楽系停止(BGM、BGS、ME) all_music_stop load_database # データベースをロード end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start create_game_objects # ゲームオブジェクトを作成 # # 汎用スプライトを用意 @sprite = Sprite.new(Viewport.new(0, 0, Title_Custom::DISP_W, Title_Custom::DISP_H)) @sprite.bitmap = Bitmap.new(Title_Custom::DISP_W,Title_Custom::DISP_H) # タイトルバック用プレーンを用意 @plane = Plane.new(Viewport.new(0, 0, Title_Custom::DISP_W, Title_Custom::DISP_H)) @plane.bitmap = Bitmap.new(Title_Custom::DISP_W,Title_Custom::DISP_H) @plane.bitmap.draw_title_file(Title_Custom::TITLE_BACK, 0, 0) @plane.visible = false # 非表示にしておく @back_title = false @back_index = 0 # @phase = PHASE_LOGO # ロゴに仮決め save_file_check # セーブファイルチェック return if debug_check # デバッグ実行モードチェック extra_check # Extraモードチェック # タイトルフェーズの選定 if (Title_Custom::EVENT_DEMO or Title_Custom::AOP_DEMO) and @ev_demo @phase = PHASE_EVENT_DEMO # イベントデモ表示フェーズ @local_phase = 1 # ローカルフェーズ:イベントデモ表示終了 else change_phase unless can_use?(@phase) # フェーズを決める @local_phase = 0 # ローカルフェーズ初期化 end @frame_count = 0 # フレームカウント初期化 end #-------------------------------------------------------------------------- # ● 開始後処理 #-------------------------------------------------------------------------- def post_start end #-------------------------------------------------------------------------- # ● トランジション実行 #-------------------------------------------------------------------------- def perform_transition # トランジションが有効か? next_phase_transition?(@phase) ? Graphics.transition : Graphics.freeze end #-------------------------------------------------------------------------- # ● 終了前処理 #-------------------------------------------------------------------------- def pre_terminate end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate @sprite.dispose # スプライト消去 @plane.dispose # プレーン消去 end #-------------------------------------------------------------------------- # ● セーブファイルチェック #-------------------------------------------------------------------------- def save_file_check @continue_enabled = false # セーブファイルの有無をチェック for i in 0...Title_Custom::SAVE_FILE_MAX @continue_enabled = true if FileTest.exist?(save_file(i)) end @another_op = AnotherOpening.enable? if defined?(AnotherOpening) end #-------------------------------------------------------------------------- # ● ファイル名 # file_index : セーブファイルのインデックス #-------------------------------------------------------------------------- def save_file(file_index) return "Save#{file_index + 1}.rvdata" end #-------------------------------------------------------------------------- # ● デバッグモードチェック #-------------------------------------------------------------------------- def debug_check # タイトルスキップ(ニューゲーム) if Title_Custom::TITLE_SKIP_ALL command_new_game return true # タイトルスキップ(コンティニュー) elsif Title_Custom::TITLE_SKIP_CONTINUE # セーブファイルが存在すればつづきから if @continue_enabled command_continue return !Title_Custom::USE_LOAD else command_new_game return true end end return false end #-------------------------------------------------------------------------- # ● Extraモードチェック #-------------------------------------------------------------------------- def extra_check @enable_extra = false return unless Title_Custom::USE_EXTRA return unless defined?(Extra) Extra.initialize extra = Extra.load @enable_extra = extra.visible end #-------------------------------------------------------------------------- # ● 汎用スプライトのリセット #-------------------------------------------------------------------------- def reset_sprite @sprite.bitmap.dispose @sprite.bitmap = Bitmap.new(Title_Custom::DISP_W, Title_Custom::DISP_H) @sprite.x = 0 @sprite.y = 0 @sprite.zoom_x = 1.0 @sprite.zoom_y = 1.0 @sprite.tone.red = 0 @sprite.tone.green = 0 @sprite.tone.blue = 0 @sprite.tone.gray = 0 @sprite.opacity = 255 end #-------------------------------------------------------------------------- # ● タイトルバックのリセット #-------------------------------------------------------------------------- def reset_title_back @plane.ox = 0 @plane.oy = 0 reset_title_effect end def reset_title_effect @plane.zoom_x = 1.0 @plane.zoom_y = 1.0 @plane.tone.red = 0 @plane.tone.green = 0 @plane.tone.blue = 0 @plane.tone.gray = 0 @plane.opacity = 255 end #-------------------------------------------------------------------------- # ● 移動フェーズの選択 #-------------------------------------------------------------------------- def next_phase(now_phase) # ExtraならTitleへ return PHASE_TITLE if now_phase == PHASE_EXTRA return PHASE_TITLE if now_phase == PHASE_LOAD # 現在のフェーズから遷移するフェーズを決定する case Title_Custom::DEMO_PATTERN when 0 # テキストデモ → イベントデモ ※タイムアウト時:ロゴ case now_phase when PHASE_LOGO; return PHASE_TEXT_DEMO when PHASE_TEXT_DEMO; return PHASE_EVENT_DEMO when PHASE_EVENT_DEMO; return PHASE_TITLE when PHASE_TITLE # タイトル表示中(タイムアウト) if Title_Custom::LOGO or Title_Custom::TEXT_DEMO or Title_Custom::EVENT_DEMO return PHASE_LOGO # ロゴ表示 else return PHASE_TITLE # 更新なし end end when 1 # イベントデモ → テキストデモ ※タイムアウト時:ロゴ case now_phase when PHASE_LOGO; return PHASE_EVENT_DEMO when PHASE_TEXT_DEMO; return PHASE_TITLE when PHASE_EVENT_DEMO; return PHASE_TEXT_DEMO when PHASE_TITLE # タイトル表示中(タイムアウト) if Title_Custom::LOGO or Title_Custom::TEXT_DEMO or Title_Custom::EVENT_DEMO return PHASE_LOGO # ロゴ表示 else return PHASE_TITLE # 更新なし end end when 2 # 通常:テキストデモ、タイムアウト時:イベントデモ(ロゴなし) case now_phase when PHASE_LOGO; return PHASE_TEXT_DEMO when PHASE_TEXT_DEMO; return PHASE_TITLE when PHASE_EVENT_DEMO; return PHASE_TITLE when PHASE_TITLE # タイトル表示中(タイムアウト) if Title_Custom::EVENT_DEMO return PHASE_EVENT_DEMO # イベントデモ else return PHASE_TITLE # 更新なし end end when 3 # 通常:イベントデモ、タイムアウト時:テキストデモ(ロゴなし) case now_phase when PHASE_LOGO; return PHASE_EVENT_DEMO when PHASE_TEXT_DEMO; return PHASE_TITLE when PHASE_EVENT_DEMO; return PHASE_TITLE when PHASE_TITLE # タイトル表示中(タイムアウト) if Title_Custom::TEXT_DEMO return PHASE_TEXT_DEMO # テキストデモ else return PHASE_TITLE # 更新なし end end else p "Error:DEMO_PATTERN" exit end end #-------------------------------------------------------------------------- # ● 最初のPhaseを決める #-------------------------------------------------------------------------- def change_phase loop do @phase = next_phase(@phase) break if can_use?(@phase) end end #-------------------------------------------------------------------------- # ● 指定フェーズが有効か? #-------------------------------------------------------------------------- def can_use?(phase) ok = false case phase when PHASE_LOGO; ok = Title_Custom::LOGO when PHASE_TEXT_DEMO; ok = Title_Custom::TEXT_DEMO when PHASE_EVENT_DEMO; ok = (Title_Custom::EVENT_DEMO or Title_Custom::AOP_DEMO) when PHASE_TITLE; ok = true when PHASE_EXTRA; ok = Title_Custom::EXTRA when PHASE_LOAD; ok = Title_Custom::USE_LOAD end return ok end #-------------------------------------------------------------------------- # ● 次のフェーズ実行前にトランジションがあるか? # true:なし false:あり #-------------------------------------------------------------------------- def next_phase_transition?(next_phase) return true unless can_use?(next_phase) case next_phase when PHASE_LOGO; return Title_Custom::LOGO_TRN.nil? when PHASE_TEXT_DEMO; return Title_Custom::TD_TRN.nil? when PHASE_EVENT_DEMO; return false # Scene_Mapはトランジションあり when PHASE_TITLE; return (@back_title or Title_Custom::TITLE_TRN.nil?) when PHASE_EXTRA; return true when PHASE_LOAD; return true end return true end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # フェーズによって分岐 case @phase when PHASE_LOGO; update_phase_logo # ロゴ表示フェーズ when PHASE_TEXT_DEMO; update_phase_text_demo # テキストデモ表示フェーズ when PHASE_EVENT_DEMO; update_phase_event_demo # イベントデモ表示フェーズ when PHASE_TITLE; update_phase_title # タイトル表示フェーズ when PHASE_EXTRA; update_phase_extra # Extraメニュー表示フェーズ when PHASE_LOAD; update_phase_load # ロードフェーズ end end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:総合フレーム更新 #-------------------------------------------------------------------------- def update_phase_title case @local_phase when 0; title_phase_startup # 表示準備 when 1; title_phase_fadein # フェードイン when 2; title_phase_update # 表示待機 when 3; title_phase_effect # エフェクト when 4; title_phase_end(true) # 表示終了 end end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示準備 #-------------------------------------------------------------------------- def title_phase_startup @plane.visible = true # 背景絵の表示 # タイトル用ビューポート定義 @viewport = Viewport.new(0, 0, Title_Custom::DISP_W, Title_Custom::DISP_H) @viewport.z = 1000 # タイトル BGM を演奏 $data_system.title_bgm.play Title_Custom::BGS.play unless Title_Custom::BGS.nil? # 天候エフェクト @weather = Spriteset_Weather.new(@viewport) @weather.type = Title_Custom::WEATHER_TYPE @weather.max = Title_Custom::WEATHER_MAX # メインタイトルの表示準備 if Title_Custom::TM @main_sprite = Sprite.new(@viewport) @main_sprite.z = 100 main_title_startup end # サブタイトルの表示準備 if Title_Custom::TS @sub_sprite = Sprite.new(@viewport) @sub_sprite.z = 50 sub_title_startup end # コマンドの表示準備 @cmd_window = Window_TitleCmd.new(@continue_enabled, @enable_extra, @back_index) if Title_Custom::FADEIN @cmd_window.opacity = 0 @cmd_window.back_opacity = 0 @cmd_window.contents_opacity = 0 else @cmd_window.opacity = Title_Custom::CT_WIN_OPACITY @cmd_window.back_opacity = Title_Custom::CT_WIN_BACKOPACITY @cmd_window.contents_opacity = 255 end # フレームカウント初期化 @frame_count = 0 # FadeInフェーズに移動 @local_phase = 1 @fade_in_phase = 0 title_time_out_update_cancel # トランジションの実行 unless Title_Custom::TITLE_TRN.nil? # トランジション実行 Graphics.transition(40, "Graphics/System/" + Title_Custom::TITLE_TRN) end @back_title = false end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示準備 [ メインタイトル ] #-------------------------------------------------------------------------- def main_title_startup # テキスト if Title_Custom::TM_TYPE # ビットマップ定義 @main_sprite.bitmap = Bitmap.new(Title_Custom::DISP_W, Title_Custom::DISP_H) # フォント定義 font = Title_Custom::TMT_FONT font.push(Font.default_name) @main_sprite.bitmap.font.name = font # フォントサイズ @main_sprite.bitmap.font.size = Title_Custom::TMT_SIZE # イタリック @main_sprite.bitmap.font.italic = Title_Custom::TMT_ITALIC # ボールド @main_sprite.bitmap.font.bold = Title_Custom::TMT_BOLD # フォント色 @main_sprite.bitmap.font.color = Title_Custom::TMT_COLOR # 表示位置定義 text = Title_Custom::TMT_NAME.dup rect = @main_sprite.bitmap.text_size(text) width = rect.width + rect.height / 2 height = rect.height # 文字表示タイプ if Title_Custom::TMT_EDGE # 縁文字 @main_sprite.bitmap.draw_enter_edging_text(0, 0, width, height, text) else # 通常文字 @main_sprite.bitmap.draw_enter_text(0, 0, width, height, text) end # グラフィック else # ビットマップ定義 @main_sprite.bitmap = Bitmap.new(Title_Custom::DISP_W, Title_Custom::DISP_H) # グラフィック描画 @main_sprite.bitmap.draw_title_file(Title_Custom::TMG_FILE, 0, 0) end # 表示位置 @main_sprite.x = Title_Custom::TM_X @main_sprite.y = Title_Custom::TM_Y # フェードイン前処理 @main_sprite.opacity = 0 if Title_Custom::FADEIN end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示準備 [ サブタイトル ] #-------------------------------------------------------------------------- def sub_title_startup # テキスト if Title_Custom::TS_TYPE # ビットマップ定義 @sub_sprite.bitmap = Bitmap.new(Title_Custom::DISP_W, Title_Custom::DISP_H) # フォント定義 font = Title_Custom::TST_FONT.dup font.push(Font.default_name) @sub_sprite.bitmap.font.name = font # フォントサイズ @sub_sprite.bitmap.font.size = Title_Custom::TST_SIZE # イタリック @sub_sprite.bitmap.font.italic = Title_Custom::TST_ITALIC # ボールド @sub_sprite.bitmap.font.bold = Title_Custom::TST_BOLD # フォント色 @sub_sprite.bitmap.font.color = Title_Custom::TST_COLOR # 表示位置定義 text = Title_Custom::TST_NAME rect = @sub_sprite.bitmap.text_size(text) width = rect.width + rect.height / 2 height = rect.height # 文字表示タイプ if Title_Custom::TST_EDGE # 縁文字 @sub_sprite.bitmap.draw_enter_edging_text(0, 0, width, height, text) else # 通常文字 @sub_sprite.bitmap.draw_enter_text(0, 0, width, height, text) end # グラフィック else # ビットマップ定義 @sub_sprite.bitmap = Bitmap.new(Title_Custom::DISP_W, Title_Custom::DISP_H) # グラフィック描画 @sub_sprite.bitmap.draw_title_file(Title_Custom::TSG_FILE, 0, 0) end # 表示位置 @sub_sprite.x = Title_Custom::TS_X @sub_sprite.y = Title_Custom::TS_Y # フェードイン前処理 @sub_sprite.opacity = 0 if Title_Custom::FADEIN end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:フェードインフェーズ #-------------------------------------------------------------------------- def title_phase_fadein if Title_Custom::FADEIN # フェードイン有効 case @fade_in_phase when 0; fade_in_setup # フェードイン準備 when 1; fade_in_update # フェードイン実行 end else @local_phase = 2 # 表示待機フェーズに移動 end end #----<フェードイン実行メソッドの定義>----# FADEIN_MAIN = 0 FADEIN_SUB = 1 FADEIN_CMD = 2 #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:フェードイン [ 準備 ] #-------------------------------------------------------------------------- def fade_in_setup # 実行するメソッドを配列化して動作を制御する case Title_Custom::FADEIN_PATTERN when 0 # メインタイトル+サブタイトル+コマンド @fadein_struct = [[]] @fadein_max = 1 @fadein_struct[0].push(FADEIN_MAIN) if Title_Custom::TM @fadein_struct[0].push(FADEIN_SUB) if Title_Custom::TS @fadein_struct[0].push(FADEIN_CMD) when 1 # メインタイトル+サブタイトル → コマンド @fadein_struct = [[], []] @fadein_max = 2 @fadein_struct[0].push(FADEIN_MAIN) if Title_Custom::TM @fadein_struct[0].push(FADEIN_SUB) if Title_Custom::TS @fadein_struct[1].push(FADEIN_CMD) when 2 # メインタイトル → サブタイトル+コマンド @fadein_struct = [[], []] @fadein_max = 2 @fadein_struct[0].push(FADEIN_MAIN) if Title_Custom::TM @fadein_struct[1].push(FADEIN_SUB) if Title_Custom::TS @fadein_struct[1].push(FADEIN_CMD) when 3 # メインタイトル → サブタイトル → コマンド @fadein_struct = [[], [], []] @fadein_max = 3 @fadein_struct[0].push(FADEIN_MAIN) if Title_Custom::TM @fadein_struct[1].push(FADEIN_SUB) if Title_Custom::TS @fadein_struct[2].push(FADEIN_CMD) end # フェードイン実行フェーズへ移動 @fade_in_phase = 1 @frame_count = 0 @fade_in_index = 0 end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:フェードイン [ メインタイトル ] #-------------------------------------------------------------------------- def main_title_fadein @main_sprite.opacity += 255 / Title_Custom::FADEIN_TIME end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:フェードイン [ サブタイトル ] #-------------------------------------------------------------------------- def sub_title_fadein @sub_sprite.opacity += 255 / Title_Custom::FADEIN_TIME end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:フェードイン [ コマンド ] #-------------------------------------------------------------------------- def command_fadein if Title_Custom::CMD_TYPE @cmd_window.opacity += Title_Custom::CT_WIN_OPACITY / Title_Custom::FADEIN_TIME @cmd_window.back_opacity += Title_Custom::CT_WIN_BACKOPACITY / Title_Custom::FADEIN_TIME end @cmd_window.contents_opacity += 255 / Title_Custom::FADEIN_TIME end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:フェードイン [ 実行 ] #-------------------------------------------------------------------------- def fade_in_update @weather.update title_phase_update_titleback # 配列化したフェードインメソッドを実行 for i in 0...@fadein_struct[@fade_in_index].size case @fadein_struct[@fade_in_index][i] when FADEIN_MAIN; main_title_fadein when FADEIN_SUB; sub_title_fadein when FADEIN_CMD; command_fadein end end @frame_count += 1 # 次のフェードインを開始する if @frame_count > Title_Custom::FADEIN_TIME @fade_in_index += 1 @frame_count = 0 # フェードインのオワリ if @fade_in_index == @fadein_max @fade_in_phase = 2 @local_phase = 2 # 表示待機フェーズに移動 title_time_out_update_cancel # タイムアウトの初期化 end end # ボタンが押されたらフェードイン終了 if Input.trigger?(Input::B) or Input.trigger?(Input::C) or Input.dir8 != 0 @main_sprite.opacity = 255 if Title_Custom::TM @sub_sprite.opacity = 255 if Title_Custom::TS @cmd_window.opacity = Title_Custom::CT_WIN_OPACITY @cmd_window.back_opacity = Title_Custom::CT_WIN_BACKOPACITY @cmd_window.contents_opacity = 255 @fade_in_phase = 2 @local_phase = 2 # 表示待機フェーズに移動 title_time_out_update_cancel # タイムアウトの初期化 end end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示待機 #-------------------------------------------------------------------------- def title_phase_update @cmd_window.update @weather.update # C ボタンが押された if Input.trigger?(Input::C) case Title_Custom::CMD_BOX[@cmd_window.index] when 1 # Continue unless @continue_enabled # セーブファイルがあるか? Sound.play_buzzer return end end Sound.play_decision title_phase_update_next return end title_phase_update_titleback # タイトルバックのupdate title_time_out_update # タイムアウトを見張る # カーソル移動時にカーソル音を鳴らす if Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN) # カーソル SE を演奏 Sound.play_cursor # タイムアウトの初期化 title_time_out_update_cancel end end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示待機 [ 次のフェーズに移動 ] #-------------------------------------------------------------------------- def title_phase_update_next # エフェクトフェーズに移動 @local_phase = 3 # フレームカウント初期化 @frame_count = 0 @title_timeout_cnt = 0 end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示待機 [ タイムアウトの見張り ] #-------------------------------------------------------------------------- def title_phase_update_titleback if Title_Custom::SCROLL_TG case Title_Custom::SCROLL_DIR when 1: tg_left; tg_down when 2: tg_down when 3; tg_right; tg_down when 4; tg_left when 6; tg_right when 7; tg_left; tg_up when 8; tg_up when 9; tg_right; tg_up end end end def tg_scroll(x, y, spd=Title_Custom::SCROLL_SPD) tg_scroll_x(x*spd) tg_scroll_y(y*spd) end def tg_scroll_x(spd=Title_Custom::SCROLL_SPD) return if spd == 0 spd > 0 ? (tg_left(spd.abs)) : (tg_right(spd.abs)) end def tg_scroll_y(spd=Title_Custom::SCROLL_SPD) return if spd == 0 spd > 0 ? (tg_down(spd.abs)) : (tg_up(spd.abs)) end def tg_left(spd=Title_Custom::SCROLL_SPD) @plane.ox = (@plane.ox + spd) % Title_Custom::DISP_W end def tg_right(spd=Title_Custom::SCROLL_SPD) @plane.ox = (@plane.ox - spd + Title_Custom::DISP_W) % Title_Custom::DISP_W end def tg_up(spd=Title_Custom::SCROLL_SPD) @plane.oy = (@plane.oy + spd) % Title_Custom::DISP_H end def tg_down(spd=Title_Custom::SCROLL_SPD) @plane.oy = (@plane.oy - spd + Title_Custom::DISP_H) % Title_Custom::DISP_H end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示待機 [ タイムアウトの見張り ] #-------------------------------------------------------------------------- def title_time_out_update if Title_Custom::TIME_OUT @title_timeout_cnt += 1 # タイムアウト発生 if @title_timeout_cnt > Title_Custom::TIME_OUT_CNT if @phase != next_phase(@phase) # タイトル表示終了処理を先駆け実行 title_phase_end(false) else # 同フェーズに移行する場合はタイムアウトなし title_time_out_update_cancel end end end end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示待機 [ タイムアウトの初期化 ] #-------------------------------------------------------------------------- def title_time_out_update_cancel @title_timeout_cnt = 0 end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:エフェクト #-------------------------------------------------------------------------- def title_phase_effect index = Title_Custom::CMD_BOX[@cmd_window.index] if Title_Custom::EFFECT[index] # エフェクト処理を実行 main_effect_ex(index) if Title_Custom::TM sub_effect_ex(index) if Title_Custom::TS command_effect_ex(index) titleback_effect_ex(index) # フレームカウント @frame_count += 1 # エフェクト処理の終了 if @frame_count > Title_Custom::EF_TIME_CNT[index] # タイトル表示終了フェーズに移動 @local_phase = 4 end else # タイトル表示終了フェーズに移動 @local_phase = 4 end end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:メインタイトルエフェクト処理 # type: 0=NewGame 1:Continue 2:Shutdown #-------------------------------------------------------------------------- def main_effect_ex(type) @main_sprite.x += Title_Custom::TME_X[type] @main_sprite.y += Title_Custom::TME_Y[type] @main_sprite.zoom_x += Title_Custom::TME_ZOOM_X[type] @main_sprite.zoom_y += Title_Custom::TME_ZOOM_Y[type] @main_sprite.opacity -= 255 / Title_Custom::EF_TIME_CNT[type] end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:サブタイトルエフェクト処理 # type: 0=NewGame 1=Continue 2=Shutdown #-------------------------------------------------------------------------- def sub_effect_ex(type) @sub_sprite.x += Title_Custom::TSE_X[type] @sub_sprite.y += Title_Custom::TSE_Y[type] @sub_sprite.zoom_x += Title_Custom::TSE_ZOOM_X[type] @sub_sprite.zoom_y += Title_Custom::TSE_ZOOM_Y[type] @sub_sprite.opacity -= 255 / Title_Custom::EF_TIME_CNT[type] end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:コマンドエフェクト処理 # type: 0=NewGame 1=Continue 2=Shutdown #-------------------------------------------------------------------------- def command_effect_ex(type) @cmd_window.x += Title_Custom::CME_X[type] @cmd_window.y += Title_Custom::CME_Y[type] @cmd_window.contents_opacity -= 255 / Title_Custom::EF_TIME_CNT[type] @cmd_window.opacity -= Title_Custom::CT_WIN_OPACITY / Title_Custom::EF_TIME_CNT[type] end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:タイトルバックエフェクト処理 # type: 0=NewGame 1=Continue 2=Shutdown #-------------------------------------------------------------------------- def titleback_effect_ex(type) tg_scroll_x(Title_Custom::TBE_X[type]) tg_scroll_y(Title_Custom::TBE_Y[type]) @plane.zoom_x += Title_Custom::TBE_ZOOM_X[type] @plane.zoom_y += Title_Custom::TBE_ZOOM_Y[type] @plane.tone.red += Title_Custom::TBE_TONE_R[type] @plane.tone.green += Title_Custom::TBE_TONE_G[type] @plane.tone.blue += Title_Custom::TBE_TONE_B[type] @plane.tone.gray += Title_Custom::TBE_TONE_S[type] @plane.opacity -= 255 / Title_Custom::EF_TIME_CNT[type] if Title_Custom::TBE_FADE[type] title_phase_update_titleback if Title_Custom::TBE_SCROLL[type] end #-------------------------------------------------------------------------- # ● タイトル表示フェーズ:表示終了 # pattern_flag: true=通常 false=タイムアウト #-------------------------------------------------------------------------- def title_phase_end(pattern_flag) # 終了パターンによって分岐 if pattern_flag == false # タイムアウト all_music_fade(1000) # 音楽フェードアウト change_phase # 次のフェーズに移動 Graphics.freeze unless next_phase_transition?(@phase) # トランジション準備 @plane.visible = false @back_index = 0 else # 通常終了 # フェーズ終了 @phase = 0 # コマンド選択結果の実行 case Title_Custom::CMD_BOX[@cmd_window.index] when 0; command_new_game # New Game when 1; command_continue # Continue when 2; command_shutdown # Shut Donw when 3; command_extra # Extra end @back_index = @cmd_window.index end @main_sprite.dispose if Title_Custom::TM # メインタイトル消去 @sub_sprite.dispose if Title_Custom::TS # サブタイトル消去 @weather.dispose @viewport.dispose @cmd_window.dispose # コマンドウィンドウ消去 @frame_count = 0 # フレームカウント初期化 @local_phase = 0 # ローカルフェーズ初期化 @fade_in_phase = 0 # フェードインフェーズ初期化 end #-------------------------------------------------------------------------- # ● コマンド : ニューゲーム #-------------------------------------------------------------------------- def command_new_game all_music_fade(800) $game_system = Game_System.new create_game_objects confirm_player_location $game_party.setup_starting_members # 初期パーティ $game_map.setup($data_system.start_map_id) # 初期位置のマップ $game_player.moveto($data_system.start_x, $data_system.start_y) $game_player.refresh $scene = Scene_Map.new $game_map.autoplay end #-------------------------------------------------------------------------- # ● コマンド : コンティニュー #-------------------------------------------------------------------------- def command_continue if Title_Custom::USE_LOAD @back_title = true reset_title_effect @phase = PHASE_LOAD else $scene = Scene_File.new(false, true, false) end end #-------------------------------------------------------------------------- # ● コマンド : シャットダウン #-------------------------------------------------------------------------- def command_shutdown all_music_fade(800) $scene = nil # シャットダウン end #-------------------------------------------------------------------------- # ● コマンド : Extra #-------------------------------------------------------------------------- def command_extra if defined?(Extra) @back_title = true reset_title_effect @phase = PHASE_EXTRA else p "can't use extra !" end end end #============================================================================== # ■ タイトルカスタマイズ[Window_TitleCmd] #------------------------------------------------------------------------------ #  タイトルカスタマイズ用のタイトルコマンド選択を行うウィンドウです。 # フォントサイズに応じたWindow SizeやRectの設定に対応しています。 #============================================================================== class Window_TitleCmd < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 # load_flg : ロード色有効? # extra_flg : Extra有効? # back_index : 戻り位置 #-------------------------------------------------------------------------- def initialize(load_flg, extra_flg, back_index) @load_flg = load_flg @type = Title_Custom::CMD_TYPE @commands = Title_Custom::CMD_BOX.dup @commands.delete(3) unless extra_flg # Extra無効なら消す @w_width = 0 @w_height = 0 # テキストコマンド if @type @font_size = Title_Custom::CT_SIZE # コマンド配置決定 for i in 0...@commands.size case @commands[i] when 0; @commands[i] = Title_Custom::CT_NEWGAME # ニューゲーム when 1; @commands[i] = Title_Custom::CT_CONTINUE # コンティニュー when 2; @commands[i] = Title_Custom::CT_SHUTDOWN # シャットダウン when 3; @commands[i] = Title_Custom::CT_EXTRA # Extra end end # ウィンドウ幅の自動調整 bitmap = Bitmap.new(10, 10) bitmap.font.name = Title_Custom::CT_FONT + [Font.default_name] bitmap.font.size = Title_Custom::CT_SIZE bitmap.font.italic = Title_Custom::CT_ITALIC bitmap.font.bold = Title_Custom::CT_BOLD for i in 0...@commands.size size = bitmap.text_size(@commands[i]).width + 16 @w_width = size if @w_width < size size = bitmap.text_size(@commands[i]).height + 10 @w_height = size if @w_height < size end bitmap.dispose @w_width += @commands.size * Title_Custom::CT_WIN_SLIDE.abs # 画像コマンド else @font_size = Cache.system(Title_Custom::CG_NEWGAME).height + 8 @serect_commands = @commands.dup # コマンド配置決定 for i in 0...@commands.size case @commands[i] when 0; @commands[i] = Title_Custom::CG_NEWGAME # ニューゲーム when 1; @commands[i] = Title_Custom::CG_CONTINUE # コンティニュー when 2; @commands[i] = Title_Custom::CG_SHUTDOWN # シャットダウン when 3; @commands[i] = Title_Custom::CG_EXTRA # Extra end end # コマンド配置決定 if Title_Custom::CG_CHANGE for i in 0...@serect_commands.size case @serect_commands[i] when 0; @serect_commands[i] = Title_Custom::CGS_NEWGAME # ニューゲーム when 1; @serect_commands[i] = Title_Custom::CGS_CONTINUE # コンティニュー when 2; @serect_commands[i] = Title_Custom::CGS_SHUTDOWN # シャットダウン when 3; @serect_commands[i] = Title_Custom::CGS_EXTRA # Extra end end end # ウィンドウ幅の自動調整 @w_width = Cache.system(Title_Custom::CG_NEWGAME).width @w_width += @commands.size * Title_Custom::CT_WIN_SLIDE.abs @w_height = Cache.system(Title_Custom::CG_NEWGAME).height + 8 end # コマンドの個数からウィンドウの高さを算出 x = Title_Custom::CT_WIN_X - (@w_width+32) / 2 y = Title_Custom::CT_WIN_Y super(x, y, @w_width+32, @w_height*@commands.size+32) @item_max = @commands.size self.contents = Bitmap.new(@w_width, @w_height*@commands.size) # テキストコマンド if @type # フォント定義 font = Title_Custom::CT_FONT font.push(Font.default_name) self.contents.font.name = font self.contents.font.size = @font_size self.contents.font.italic = Title_Custom::CT_ITALIC self.contents.font.bold = Title_Custom::CT_BOLD # 画像コマンド else font_size = Cache.system(Title_Custom::CG_NEWGAME).height self.opacity = 0 self.back_opacity = 0 #self.contents_opacity = 0 end # インデックスの決定 # セーブファイルがあればIndexはコンティニューにおく # セーブファイルがない場合はIndexはニューゲームにおく if back_index != 0 self.index = back_index else iindex = @load_flg ? 1 : 0 for i in 0...Title_Custom::CMD_BOX.size if Title_Custom::CMD_BOX[i] == iindex self.index = i end end end @local_index = self.index refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 項目の描画 # index : 項目番号 #-------------------------------------------------------------------------- def draw_item(index) # 開始位置の決定 slide = Title_Custom::CT_WIN_SLIDE.abs if Title_Custom::CT_WIN_SLIDE > 0 x = 4 + index * slide else x = 4 + (@commands.size - 1 - index) * slide end if @type # 文字色の決定 if !@load_flg and Title_Custom::CMD_BOX[index] == 1 self.contents.font.color = normal_color self.contents.font.color.alpha = 128 else self.contents.font.color = Title_Custom::CT_COLOR end r = Rect.new(x, @w_height * index, @w_width-8, @w_height) # テキスト描画 if Title_Custom::CT_EDGE self.contents.draw_edging_text(r.x, r.y, r.width, r.height, @commands[index], Title_Custom::CT_ALIGN) else self.contents.draw_text(r, @commands[index], Title_Custom::CT_ALIGN) end else # 透明度の決定 if !@load_flg and Title_Custom::CMD_BOX[index] == 1 opacity = 80 else opacity = 255 end y = @w_height * index + 4 # 画像描画 if Title_Custom::CG_CHANGE and index == @local_index self.contents.draw_title_file(@serect_commands[index], x, y, opacity) else self.contents.draw_title_file(@commands[index], x, y, opacity) end end end #-------------------------------------------------------------------------- # ● カーソルの矩形更新 #-------------------------------------------------------------------------- def update_cursor # カーソル移動があった場合のみ動作させる if @local_index != @index @local_index = @index # 画像チェンジ if Title_Custom::CG_CHANGE and !@type refresh return end # カーソルの矩形更新 if @index < 0 self.cursor_rect.empty else x = 0 slide = Title_Custom::CT_WIN_SLIDE.abs fit = Title_Custom::CT_CUR_FIT if @type and fit # カーソルフィット rect = self.contents.text_size(@commands[@index]) case Title_Custom::CT_ALIGN when 0; x = 0 when 1; x = (self.contents.width - rect.width) / 2 - 4 when 2; x = (self.contents.width - rect.width) - 8 end end if Title_Custom::CT_WIN_SLIDE > 0 x += index * slide else x += (@commands.size - 1 - index) * slide end if @type w = fit ? (self.contents.text_size(@commands[@index]).width+8) : @w_width - slide.abs * @commands.size else w = Cache.system(Title_Custom::CG_NEWGAME).width + 8 end self.cursor_rect.set(x, @w_height * index, w, @w_height) end end end end #============================================================================== # ■ Bitmap拡張 #============================================================================== class Bitmap #-------------------------------------------------------------------------- # ● 縁文字 #-------------------------------------------------------------------------- def draw_edging_text(x, y, width, height, text, align=0) # 色を保持 old_color = font.color.dup # 縁取り部分の描写(デフォルト:黒縁) font.color = Color.new(0, 0, 0) draw_text(x-1, y-1, width, height, text, align) draw_text(x-1, y+1, width, height, text, align) draw_text(x+1, y-1, width, height, text, align) draw_text(x+1, y+1, width, height, text, align) # 通常色に戻す font.color = old_color # 通常の文字を上か書きつぶす draw_text(x, y, width, height, text, align) end #-------------------------------------------------------------------------- # ● 改行認識テキスト表示 #-------------------------------------------------------------------------- def draw_enter_text(x, y, width, height, text, align=0) rect = text_size(text) info_box = text.split(/\n/) for i in 0...info_box.size draw_text( x, y+i*rect.height, width, height, info_box[i], align) break if (y+i*rect.height) > self.height end end #-------------------------------------------------------------------------- # ● 改行認識テキスト表示(縁文字) #-------------------------------------------------------------------------- def draw_enter_edging_text(x, y, width, height, text, align=0) rect = text_size(text) info_box = text.split(/\n/) for i in 0...info_box.size draw_edging_text( x, y+i*height, width, height, info_box[i], align) break if (y+i*rect.height) > self.height end end #-------------------------------------------------------------------------- # ● タイトルファイル表示(中央表示) #-------------------------------------------------------------------------- def draw_title(file_name, x, y) bit = Cache.system(file_name) cw = bit.width ch = bit.height src_rect = Rect.new(0, 0, cw, ch) blt(x-cw/2, y-ch/2, bit, src_rect) end #-------------------------------------------------------------------------- # ● タイトルファイル表示(コマンド表示用) #-------------------------------------------------------------------------- def draw_title_file(file_name, x, y, opacity=255) bit = Cache.system(file_name) cw = bit.width ch = bit.height src_rect = Rect.new(0, 0, cw, ch) blt(x, y, bit, src_rect, opacity) end end