####################### マップ名表示ウィンドウの設定 ####################### # # # イベントのスクリプトを使うことでマップ名を左上に表示できます。 # # # # 「show_place」と入力すれば自動的にマップ名を取得して、表示します。 # # このとき、表示終了までのウェイトが入ります。 # # # # このウェイトを任意に設定したい場合は、「show_place(time)」と入力。 # # 例えば「show_place(20)」ならば20フレーム(0.5秒)のウェイト後、 # # 移動可能になります。 # # この場合、移動中も数秒はウィンドウが表示されたままになります。 # # # # また、マップ名を自動的に取得したもので無いものを使いたい場合は、 # # 「show_place(time, map_name)」と入力してください。 # # ウィンドウ表示時間は省略できません。 # # 例えば「show_place(80, "○○の塔二階")」とすれば、 # # マップ名をどんな名前に設定していても、「○○の塔二階」と表示されます。 # ############################################################################ # ここから設定 module Annex SCROLL_TIME = 20 # ウィンドウがスクロールするのにかける時間。 FREEZE_TIME = 60 # マップウィンドウが止まって表示される時間。 end # ここまで設定 #============================================================================== # ■ Interpreter #============================================================================== class Interpreter #-------------------------------------------------------------------------- # ◎ 追加:現在地の表示 #-------------------------------------------------------------------------- def show_place(place_wait = nil, name = $game_map.name) if $scene.is_a?(Scene_Map) $scene.make_place_window(name) # waitが指定されていない場合は合計時間を取得 if place_wait == nil @wait_count = Annex::SCROLL_TIME * 2 + Annex::FREEZE_TIME return end @wait_count = place_wait end return end end #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- alias map_name_initialize initialize def initialize map_name_initialize # マップ名を逐次取得していく (Thanks to RGSS Wiki) @data_map_names = get_map_names end #-------------------------------------------------------------------------- # ◎ 追加:マップ名の取得 #-------------------------------------------------------------------------- def name return @data_map_names[@map_id] end #-------------------------------------------------------------------------- # ◎ 追加:マップデータの取得 (Thanks to RGSS Wiki) #-------------------------------------------------------------------------- def get_map_names temp_data = load_data("Data/MapInfos.rxdata") for i in temp_data.keys temp_data[i] = temp_data[i].name end return temp_data end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map #-------------------------------------------------------------------------- # ● メイン処理 (再定義) #-------------------------------------------------------------------------- def main # スプライトセットを作成 @spriteset = Spriteset_Map.new # メッセージウィンドウを作成 @message_window = Window_Message.new # トランジション実行 Graphics.transition # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 update # 画面が切り替わったらループを中断 if $scene != self break end end # トランジション準備 Graphics.freeze # スプライトセットを解放 @spriteset.dispose # メッセージウィンドウを解放 @message_window.dispose # ☆ココから追加 # 現在地ウィンドウが存在する場合、解放する if @window_place != nil @window_place.dispose end # ☆ココまで追加 # タイトル画面に切り替え中の場合 if $scene.is_a?(Scene_Title) # 画面をフェードアウト Graphics.transition Graphics.freeze end end #-------------------------------------------------------------------------- # ● フレーム更新 (再定義) #-------------------------------------------------------------------------- def update # ループ loop do # マップ、インタプリタ、プレイヤーの順に更新 # (この更新順序は、イベントを実行する条件が満たされているときに # プレイヤーに一瞬移動する機会を与えないなどの理由で重要) $game_map.update $game_system.map_interpreter.update $game_player.update # システム (タイマー)、画面を更新 $game_system.update $game_screen.update # プレイヤーの場所移動中でなければループを中断 unless $game_temp.player_transferring break end # 場所移動を実行 transfer_player # トランジション処理中の場合、ループを中断 if $game_temp.transition_processing break end end # ☆ココから追加 # 現在置ウィンドウの変更 if @window_place != nil if @window_place.show_end? @window_place.dispose @window_place = nil end end # ☆ココまで追加 # スプライトセットを更新 @spriteset.update # メッセージウィンドウを更新 @message_window.update # ゲームオーバーの場合 if $game_temp.gameover # ゲームオーバー画面に切り替え $scene = Scene_Gameover.new return end # タイトル画面に戻す場合 if $game_temp.to_title # タイトル画面に切り替え $scene = Scene_Title.new return end # トランジション処理中の場合 if $game_temp.transition_processing # トランジション処理中フラグをクリア $game_temp.transition_processing = false # トランジション実行 if $game_temp.transition_name == "" Graphics.transition(20) else Graphics.transition(40, "Graphics/Transitions/" + $game_temp.transition_name) end end # メッセージウィンドウ表示中の場合 if $game_temp.message_window_showing return end # エンカウント カウントが 0 で、エンカウントリストが空ではない場合 if $game_player.encounter_count == 0 and $game_map.encounter_list != [] # イベント実行中かエンカウント禁止中でなければ unless $game_system.map_interpreter.running? or $game_system.encounter_disabled # トループを決定 n = rand($game_map.encounter_list.size) troop_id = $game_map.encounter_list[n] # トループが有効なら if $data_troops[troop_id] != nil # バトル呼び出しフラグをセット $game_temp.battle_calling = true $game_temp.battle_troop_id = troop_id $game_temp.battle_can_escape = true $game_temp.battle_can_lose = false $game_temp.battle_proc = nil end end end # B ボタンが押された場合 if Input.trigger?(Input::B) # イベント実行中かメニュー禁止中でなければ unless $game_system.map_interpreter.running? or $game_system.menu_disabled # メニュー呼び出しフラグと SE 演奏フラグをセット $game_temp.menu_calling = true $game_temp.menu_beep = true end end # デバッグモードが ON かつ F9 キーが押されている場合 if $DEBUG and Input.press?(Input::F9) # デバッグ呼び出しフラグをセット $game_temp.debug_calling = true end # プレイヤーの移動中ではない場合 unless $game_player.moving? # 各種画面の呼び出しを実行 if $game_temp.battle_calling call_battle elsif $game_temp.shop_calling call_shop elsif $game_temp.name_calling call_name elsif $game_temp.menu_calling call_menu elsif $game_temp.save_calling call_save elsif $game_temp.debug_calling call_debug end end end #-------------------------------------------------------------------------- # ◎ 追加:現在地ウィンドウの作成 #-------------------------------------------------------------------------- def make_place_window(name) @window_place = Window_Map.new(name) end end #============================================================================== # □ Window_Map #------------------------------------------------------------------------------ #  マップ画面で、現在地を表示するウィンドウです。(新規クラス) #============================================================================== class Window_Map < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(name) # 一時的bitmapを作成し、マップ名文字列の長さを取得。 temp_bitmap = Bitmap.new(1,1) cx = temp_bitmap.text_size(name).width + 64 # ウィンドウ作成 super(632 - cx, -64, cx, 64) self.contents = Bitmap.new(width - 32, height - 32) self.visible = true # マップ名前の表記 self.contents.font.color = normal_color self.contents.draw_text(0, 0, self.width - 32, 32, name, 1) self.back_opacity = 160 # SCROLL_TIME が 0 でない場合 if Annex::SCROLL_TIME != 0 # ウィンドウと文字を透明に設定 self.opacity = 0 self.contents_opacity = 0 # スクロール時間を設定 @count = Annex::SCROLL_TIME # 内部変数 @step = 1 # Annex::SCROLL_TIME が 0 の場合 else # ウィンドウと文字を定位置に表示 self.y = 8 self.opacity = 255 self.contents_opacity = 255 # スクロール時間を設定 @count = FREEZE_TIME # ステップ1をスキップ @step = 2 end end #-------------------------------------------------------------------------- # ● 表示完了かの確認 #-------------------------------------------------------------------------- def show_end? # updateが正常に実行された場合はfalse return update == false end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # @count減算 @count -= 1 # @countが負の数の場合false return false if @count < 0 # 初期ステップ (ウィンドウが上から降りてくる) if @step == 1 # 不透明度を上げる opacity_temp = (Annex::SCROLL_TIME - @count) * 255 / Annex::SCROLL_TIME self.opacity = opacity_temp self.contents_opacity = opacity_temp # ウィンドウのy座標を変更する self.y = 8 - (72 * @count / Annex::SCROLL_TIME) # @countが0の時次のステップへ if @count == 0 @count = Annex::FREEZE_TIME @step = 2 end return true end # 現在地表示ウィンドウの固定 if @step == 2 # @countが0の時次のステップへ if @count == 0 @count = Annex::SCROLL_TIME @step = 3 end return true end # 最終ステップ (ウィンドウが上に戻っていく) if @step == 3 # 不透明度を下げる opacity_temp = @count * 255 / Annex::SCROLL_TIME self.opacity = opacity_temp self.contents_opacity = opacity_temp # ウィンドウのy座標を変更する self.y = 8 - (72 * (Annex::SCROLL_TIME - @count) / Annex::SCROLL_TIME) return true end end end