#============================================================================== # 「ロングメッセージ」(ACE) ver.3.0 by奈々 # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # その他、詳しい利用規約はブログを参照して下さい。 # #------------------------------------------------------------------------------ # # デフォルトでは4行で固定の「文章の表示」を好きな行に可変させます。 # (ロングメッセージと言いつつ、ショートメッセージも作れます) # また「文章のスクロール表示」を使って長いテキストを1回で入力できます。 # # ・可変行 # まず初期設定でゲーム開始時の行数を指定します。 # ゲーム中に変更したい場合はイベントコマンドの「スクリプト」に # change_message_row(行数) # と入力します。 # # ・長文入力 # イベントコマンド「文章の表示」に1行「header」とだけ入れて # その直後に「文章のスクロール表示」を置くことで # スクロール表示ではなく、通常の文章の表示として使用できます。 # (顔グラや表示位置などの設定はheaderのものが適用されます) # 可変行で5行以上のメッセージを入力したい場合や # 4行ずつ入力するのが面倒な場合に活用して下さい。 # # ・メッセージウィンドウの位置設定 # イベントコマンド「スクリプト」で # set_mesbox(x座標, y座標, 横幅) # と入力することでゲーム中にこれらを変更できます。 # デフォルト設定に戻す(変更しない)場合は、数値の変わりに「nil」を指定します。 # #============================================================================== # ◇初期設定 module NanaSeven START_TEXT_ROW = 4 # 表示行数の初期値 end #============================================================================== #============================================================================== # ■ Game_System #------------------------------------------------------------------------------ # システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存 # します。このクラスのインスタンスは $game_system で参照されます。 #============================================================================== class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数(追加) #-------------------------------------------------------------------------- attr_accessor :nana_message_row # メッセージ行数 attr_accessor :mesbox_x # メッセージウィンドウX座標(nilで自動) attr_accessor :mesbox_y # メッセージウィンドウY座標(nilで自動) attr_accessor :mesbox_width # メッセージウィンドウ横幅(nilで通常) #-------------------------------------------------------------------------- # ● オブジェクト初期化(alias再定義) #-------------------------------------------------------------------------- alias long_text_initialize initialize def initialize long_text_initialize @nana_message_row = NanaSeven::START_TEXT_ROW end end #============================================================================== # ■ Window_Message #------------------------------------------------------------------------------ # 文章表示に使うメッセージウィンドウです。 #============================================================================== class Window_Message < Window_Base #-------------------------------------------------------------------------- # ● 表示行数の取得 #-------------------------------------------------------------------------- def visible_line_number return $game_system.nana_message_row end #-------------------------------------------------------------------------- # ● ウィンドウ幅の取得 #-------------------------------------------------------------------------- def window_width $game_system.mesbox_width ? $game_system.mesbox_width : Graphics.width end #-------------------------------------------------------------------------- # ● ウィンドウ位置の更新 #-------------------------------------------------------------------------- def update_placement self.x = ($game_system.mesbox_x ? $game_system.mesbox_x : 0) if $game_system.mesbox_y self.y = $game_system.mesbox_y else @position = $game_message.position self.y = @position * (Graphics.height - height) / 2 end @gold_window.y = y > 0 ? 0 : Graphics.height - @gold_window.height end end #選択肢などのウィンドウが画面外に吹き飛ぶのを防止 #============================================================================== # ■ Window_ChoiceList #------------------------------------------------------------------------------ # イベントコマンド[選択肢の表示]に使用するウィンドウです。 #============================================================================== class Window_ChoiceList < Window_Command #-------------------------------------------------------------------------- # ● ウィンドウ位置の更新 #-------------------------------------------------------------------------- def update_placement self.width = [max_choice_width + 12, 96].max + padding * 2 self.width = [width, Graphics.width].min self.height = fitting_height($game_message.choices.size) self.x = Graphics.width - width #ウィンドウ位置が下 if $game_message.position == 2 self.y = @message_window.y - height #ウィンドウ位置が上か中 else self.y = @message_window.y + @message_window.height end end end #============================================================================== # ■ Window_NumberInput #------------------------------------------------------------------------------ # イベントコマンド[数値入力の処理]に使用するウィンドウです。 #============================================================================== class Window_NumberInput < Window_Base #-------------------------------------------------------------------------- # ● ウィンドウ位置の更新 #-------------------------------------------------------------------------- def update_placement self.width = @digits_max * 20 + padding * 2 self.height = fitting_height(1) self.x = (Graphics.width - width) / 2 if $game_message.position == 2 self.y = @message_window.y - height - 8 else self.y = @message_window.y + @message_window.height + 8 end end end #============================================================================== # ■ Window_KeyItem #------------------------------------------------------------------------------ # イベントコマンド[アイテム選択の処理]に使用するウィンドウです。 #============================================================================== class Window_KeyItem < Window_ItemList #-------------------------------------------------------------------------- # ● ウィンドウ位置の更新 #-------------------------------------------------------------------------- def update_placement if $game_message.position == 2 self.y = 0 else self.y = Graphics.height - height end end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ # イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 文章の表示(再定義) #-------------------------------------------------------------------------- def command_101 wait_for_message $game_message.face_name = @params[0] $game_message.face_index = @params[1] $game_message.background = @params[2] $game_message.position = @params[3] while next_event_code == 401 # 文章データ @index += 1 header = (@list[@index].parameters[0] == "header") $game_message.add(@list[@index].parameters[0]) unless header end while next_event_code == 105 && header @index += 1 end while next_event_code == 405 && header @index += 1 $game_message.add(@list[@index].parameters[0]) end case next_event_code when 102 # 選択肢の表示 @index += 1 setup_choices(@list[@index].parameters) when 103 # 数値入力の処理 @index += 1 setup_num_input(@list[@index].parameters) when 104 # アイテム選択の処理 @index += 1 setup_item_choice(@list[@index].parameters) end wait_for_message end #-------------------------------------------------------------------------- # ● メッセージ行数の変更 #-------------------------------------------------------------------------- def change_message_row(value) $game_system.nana_message_row = value Fiber.yield while $game_message.visible if SceneManager.scene_is?(Scene_Map) || SceneManager.scene_is?(Scene_Battle) SceneManager.scene.create_message_window end end #-------------------------------------------------------------------------- # ● メッセージウィンドウの位置設定 #-------------------------------------------------------------------------- def set_mesbox(x, y, width) $game_system.mesbox_x = x $game_system.mesbox_y = y $game_system.mesbox_width = width Fiber.yield while $game_message.visible if SceneManager.scene_is?(Scene_Map) || SceneManager.scene_is?(Scene_Battle) SceneManager.scene.create_message_window end end end