#==============================================================================
# 「ロングメッセージ」(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