# *****************************************************************************
# Changes to Window_Message. This is the bulk of the script
# *****************************************************************************
#==============================================================================
# ** Window_Message
#------------------------------------------------------------------------------
# This message window is used to display text.
#==============================================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# x-coordinate depends on justification
if $game_system.window_justification == RIGHT
x = 640 - self.width
elsif $game_system.window_justification == LEFT
x = 0
else # center
x = (640 - $game_system.window_width) / 2
end
# y-coordinate depends on height
y = 480 - $game_system.window_height - 16
super(x, y, $game_system.window_width, $game_system.window_height)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
self.z = 9998
@fade_in = false
@fade_out = false
@contents_showing = false
# face graphic sprite
[url=home.php?mod=space&uid=84331]@face[/url] = Sprite.new
@face.opacity = 0
@face.z = self.z + 1
@face_offset = 0
# choice window
@choice_window = Window_Choice.new([])
@choice_window.back_opacity = $game_system.back_opacity
# comic sprite
[url=home.php?mod=space&uid=97554]@comic[/url] = Sprite.new
@comic.opacity = 0
@comic.z = self.z + 1
if $game_system.comic_style == TALK1
@comic.bitmap = RPG::Cache.windowskin("talk1")
elsif $game_system.comic_style == TALK2
@comic.bitmap = RPG::Cache.windowskin("talk2")
else # thought
@comic.bitmap = RPG::Cache.windowskin("thought")
end
# window image sprite
@window_back = Sprite.new
@window_back.opacity = 0
@window_back.z = self.z - 1
if $game_system.window_image != nil
@window_back.bitmap = RPG::Cache.windowskin($game_system.window_image)
end
# name window
@name_window = Window_Name.new
@name_window.z = self.z + 1
@pause_time = 0
[url=home.php?mod=space&uid=36110]@Wait[/url] = 0
[url=home.php?mod=space&uid=32215]@show[/url] = false
@face_frame = 0
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
terminate_message
$game_temp.message_window_showing = false
if @input_number_window != nil
@input_number_window.dispose
end
@face.dispose
@choice_window.dispose
@comic.dispose
@name_window.dispose
super
end
#--------------------------------------------------------------------------
# * Terminate Message
#--------------------------------------------------------------------------
def terminate_message
[url=home.php?mod=space&uid=32215]@show[/url] = false
self.active = false
self.pause = false
self.contents.clear
# Clear showing flag
@contents_showing = false
# Call message callback
if $game_temp.message_proc != nil
$game_temp.message_proc.call
end
# Clear variables related to text, choices, and number input
$game_temp.message_text = nil
$game_temp.message_proc = nil
$game_temp.choice_start = 99
$game_temp.choice_max = 0
$game_temp.choice_cancel_type = 0
$game_temp.choice_proc = nil
$game_temp.num_input_start = 99
$game_temp.num_input_variable_id = 0
$game_temp.num_input_digits_max = 0
# Open gold window
if @gold_window != nil
@gold_window.dispose
@gold_window = nil
end
@choice_window.visible = false
@choice_window.active = false
@comic.opacity = 0
$game_system.slave_windows.each_pair {|name, window|
if window.show == true
window.dispose
$game_system.slave_windows.delete(name)
end
}
@done = false
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if $game_system.font_color.nil?
self.contents.font.color = normal_color
else
self.contents.font.color = $game_system.font_color
end
if $game_system.windowskin != ""
self.windowskin = RPG::Cache.windowskin($game_system.windowskin)
else
self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name)
end
if $game_system.comic_style == TALK1
@comic.bitmap = RPG::Cache.windowskin("talk1")
elsif $game_system.comic_style == TALK2
@comic.bitmap = RPG::Cache.windowskin("talk2")
else # thought
@comic.bitmap = RPG::Cache.windowskin("thought")
end
[url=home.php?mod=space&uid=32215]@show[/url] = true
@x = @y = 0
# If waiting for a message to be displayed
# Shaz - added $game_temp.message_text != "" to stop choice boxes
# with no message being off-center
if $game_temp.message_text != nil and $game_temp.message_text != ""
@text = $game_temp.message_text
# agf: problem. when pass code through here, it sometimes puts the number
# in the wrong place
# replace shortcuts with original code
$game_system.shortcuts.each {
|shortcut, code|
@text.gsub!(shortcut, code)
}
# VERY first thing. Check to see if this is being set up as a slave
# or independent window.
if @text.index(/\\[Ss][Ll][Vv]\[(.*?)\]/) != nil
# is this a new slave window, or a request to display it?
if !$game_system.slave_windows.has_key?($1.to_s)
# there is no such slave window yet. Set it up.
@text.gsub!(/\\[Ss][Ll][Vv]\[(.*?)\]/, "")
$game_system.slave_windows[$1.to_s] = Window_Slave.new(@text)
@text = ""
@show = false
terminate_message
return
end
end
if @text.index(/\\[Ii][Nn][Dd]\[(.*?)\]/) != nil
# is this a new independent window, or a request to display it?
if !$game_system.indy_windows.has_key?($1.to_s)
# there is no such slave window yet. Set it up.
@text.gsub!(/\\[Ii][Nn][Dd]\[(.*?)\]/, "")
$game_system.indy_windows[$1.to_s] = Window_Slave.new(@text)
@text = ""
@show = false
terminate_message
return
end
end
# Control text processing
begin
last_text = @text.clone
@text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
end until @text == last_text
@text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
end
# window mode
if @text.index(/\\[Mm]/) != nil
if $game_system.ums_mode == NORMAL_MODE
$game_system.ums_mode = FIT_WINDOW_TO_TEXT
else
$game_system.ums_mode = NORMAL_MODE
end
@text.gsub!(/\\[Mm]/) { "" }
end
# window height
@text.gsub!(/\\[Hh][Ee][Ii][Gg][Hh][Tt]\[([0-9]+)\]/) do
$game_system.window_height = $1.to_i
""
end
# window width
@text.gsub!(/\\[Ww][Ii][Dd][Tt][Hh]\[([0-9]+)\]/) do
$game_system.window_width = $1.to_i
""
end
# justification
@text.gsub!(/\\[Jj][Rr]/) do
$game_system.window_justification = RIGHT
reset_window
""
end
@text.gsub!(/\\[Jj][Cc]/) do
$game_system.window_justification = CENTER
reset_window
""
end
@text.gsub!(/\\[Jj][Ll]/) do
$game_system.window_justification = LEFT
reset_window
""
end
# face graphics #agf
@text.gsub!(/\\[Ff][Aa][Cc][Ee]\[(.*?)\]/) do
$game_system.face_graphic = $1.to_s #agf
if $1.to_s == ""
@face.opacity = 0
end
""
end
@text.gsub!(/\\[Ff][Ll]/) do
$game_system.face_graphic_justification = LEFT
""
end
@text.gsub!(/\\[Ff][Rr]/) do
$game_system.face_graphic_justification = RIGHT
""
end
# event centering
@text.gsub!(/\\[Ee]\[([0-9]+)\]/) do
$game_system.message_event = $1.to_i
""
end
# comic thingy
@text.gsub!(/\\[Tt]1/) do
$game_system.comic_style = TALK1
@comic.bitmap = RPG::Cache.windowskin("talk1.png")
""
end
@text.gsub!(/\\[Tt]2/) do
$game_system.comic_style = TALK2
@comic.bitmap = RPG::Cache.windowskin("talk2.png")
""
end
@text.gsub!(/\\[Tt][Hh]/) do
$game_system.comic_style = THOUGHT
@comic.bitmap = RPG::Cache.windowskin("thought.png")
""
end
# name window
@text.gsub!(/\\[Nn][Mm]\[(.*?)\]/) do
$game_system.name = $1.to_s
if $1.to_s == ""
@name_window.visible = false
@name_window.dummy_window.visible = false
end
""
end
# toggle pause
@text.gsub!(/\\[Pp][Tt]/) do
$game_system.show_pause = !$game_system.show_pause
""
end
# shaking
@text.gsub!(/\\[Ss][Hh][Kk]\[([0-9]+)\]/) do
$game_system.shake = $1.to_i
""
end
# back opacity
@text.gsub!(/\\[Bb][Oo][Pp][Cc]\[([0-9]+)\]/) do
$game_system.back_opacity = $1.to_i
self.back_opacity = $game_system.back_opacity
""
end
# opacity
@text.gsub!(/\\[Oo][Pp][Cc]\[([0-9]+)\]/) do
$game_system.opacity = $1.to_i
self.opacity = $game_system.opacity
""
end
# Change "\\\\" to "\000" for convenience
@text.gsub!(/\\\\/) { "\000" }
# Change "\\C" to "\001" and "\\G" to "\002"
@text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
@text.gsub!(/\\[Gg]/) { "\002" }
@text.gsub!(/\\[Cc]\[0x([0123456789abcdef]+)\]/) { "\026[#{$1}]" }
# text skip code
@text.gsub!(/\\[Ss][Kk][Ii][Pp]/) { "\003" }
# ignore code
@text.gsub!(/\\[Ii][Gg][Nn][Rr]/) { "\023" }
# slave and indy windows
@text.gsub!(/\\[Ss][Ll][Vv]\[(.*?)\]/) { "\024[#{$1}]" }
@text.gsub!(/\\[Ii][Nn][Dd]\[(.*?)\]/) { "\025[#{$1}]" }
# bold and italics
@text.gsub!(/\\[Bb]/) { "\004" }
@text.gsub!(/\\[Ii]/) { "\005" }
# shadow
@text.gsub!(/\\[Ss]/) { "\006" }
# font
@text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?)\]/) { "\007[#{$1}]" }
# pause and wait
@text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\010[#{$1}]" }
@text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\011[#{$1}]" }
# write speed
@text.gsub!(/\\[Ww][Ss]\[([0-9]+)\]/) { "\013[#{$1}]" }
# armor, items, skills, and weapons
@text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) {
item = $data_armors[$1.to_i]
"\014[#{$1}]" + " " + item.name
}
@text.gsub!(/\\[Oo][Ii]\[([0-9]+)\]/) {
item = $data_items[$1.to_i]
"\015[#{$1}]" + " " + item.name
}
@text.gsub!(/\\[Oo][Ss]\[([0-9]+)\]/) {
item = $data_skills[$1.to_i]
"\016[#{$1}]" + " " + item.name
}
@text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) {
item = $data_weapons[$1.to_i]
"\017[#{$1}]" + " " + item.name
}
# text justification
@text.gsub!(/\\[Tt][Cc]/) { "\020" }
@text.gsub!(/\\[Tt][Ll]/) { "\021" }
@text.gsub!(/\\[Tt][Rr]/) { "\022" }
# Resize the window to fit the contents?
if $game_system.ums_mode == FIT_WINDOW_TO_TEXT
width = 1
text = @text.split("\n")
height = 0
i = 0
for line in text
# don't count this line's width if it has the ignr code
if !line.include?("\023")
width = [width, self.contents.text_size(line).width].max
delta = self.contents.text_size(line).height
height += delta + (delta * 0.2).to_i
end
end
if $game_system.face_graphic != "" and ($game_system.face_graphic_position == CENTER or $game_system.face_graphic_position == BOTTOM)
width += @face.bitmap.width + 10
if height < @face.bitmap.height
height = @face.bitmap.height - 22
end
end
if height == 0
height = 1
end
self.width = width + 48
self.height = height + 48
self.contents = Bitmap.new(width + 16, height + 5)
if $game_system.font_color.nil?
self.contents.font.color = normal_color
else
self.contents.font.color = $game_system.font_color
end
else
if self.width != $game_system.window_height or self.height != $game_system.window_width
self.width = $game_system.window_width
self.height = $game_system.window_height
self.contents = Bitmap.new(self.width - 32, self.height - 32)
if $game_system.font_color.nil?
self.contents.font.color = normal_color
else
self.contents.font.color = $game_system.font_color
end
end
end
if $game_system.window_image != nil
# figure out how we're going to resize this
@window_back.zoom_x = self.width.to_f / @window_back.bitmap.width
@window_back.zoom_y = self.height.to_f / @window_back.bitmap.height
end
reset_window
# show correct sprite
party = ["123abc", "Mel", "June", "Edward", "Ulf", "Yvette", "Spook"]
if $game_system.message_event == 0 && party.include?($game_system.name)
$game_player.show_character(party.index($game_system.name))
end
get_x_value
@count = Graphics.frame_count
@pause_time = 0
@ignore = false
@ascending = true
@target_x = self.x + $game_system.shake
@done = false
@face_frame = 0
@done = false
self.oy = 0
end
end
#--------------------------------------------------------------------------
# * Set Window Position and Opacity Level
#--------------------------------------------------------------------------
def reset_window (change_opacity = true)
# x-coordinate depends on justification
if $game_system.message_event == -1
if $game_system.window_justification == RIGHT
self.x = 640 - $game_system.window_width
elsif $game_system.window_justification == LEFT
self.x = 0
else # center
self.x = (640 - self.width) / 2
end
else
if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil
# center on player
event_x = $game_player.screen_x
else
# center on the event specified
event_x = $game_map.events[$game_system.message_event].screen_x
end
self.x = event_x - self.width / 2
@comic.x = self.x + (self.width / 2) + 4
end
if $game_temp.in_battle
self.y = 16
else
if $game_system.message_event == -1
case $game_system.message_position
when 0 # up
self.y = 16
when 1 # middle
self.y = (480 - $game_system.window_height) / 2
when 2 # down
self.y = 480 - $game_system.window_height - 24
end
else
if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil
# above player
self.y = $game_player.screen_y - self.height - 48
else
# above event specified
self.y = $game_map.events[$game_system.message_event].screen_y - self.height - 48
end
# Shaz - adjust for higher character sprites
self.y -= 8
@comic.y = self.y + self.height - 2
@comic.angle = 0
end
end
if self.y < 0 + ($game_system.name == "" ? 0 : 16)
if $game_system.comic_enabled
if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil
self.y = $game_player.screen_y - 16
else
self.y = $game_map.events[$game_system.message_event].screen_y - 16
end
@comic.angle = 180
@comic.y = self.y + 2
@comic.x = self.x + (self.width / 2) - 4
else
self.y = 16 # self.y = 0 + ($game_system.name == "" ? 0 : 16)
end
elsif self.y > 480 - self.height
self.y = 480 - self.height
end
if self.x < 0
self.x = 0
elsif self.x > 680 - self.width - 48
self.x = 640 - self.width
end
if change_opacity
if $game_system.message_frame == 0 and $game_temp.message_text != ""
self.opacity = $game_system.opacity
else
self.opacity = 0
end
self.back_opacity = $game_system.back_opacity
end
# window back stuff
if $game_system.window_image != nil
@window_back.bitmap = RPG::Cache.windowskin($game_system.window_image)
@window_back.x = self.x
@window_back.y = self.y
end
# face stuff
if $game_system.face_graphic != ""
# the player has chosen to show a face graphic
if @done and $game_system.resting_face != ""
@face.bitmap = RPG::Cache.picture($game_system.face_graphic + $game_system.resting_face)
if @face_frame * $game_system.face_frame_width >= @face.bitmap.width
@face_frame = 0
end
else
@face.bitmap = RPG::Cache.picture($game_system.face_graphic)
end
# picture y-coordinate
if $game_system.face_graphic_position == ABOVE
@face.y = self.y - @face.bitmap.height
@face_offset = 0
elsif $game_system.face_graphic_position == CENTER
delta = (@face.bitmap.height - self.height) / 2
@face.y = self.y - delta
if $game_system.animated_faces
@face_offset = $game_system.face_frame_width + 16
else
@face_offset = @face.bitmap.width + 16
end
elsif $game_system.face_graphic_position == BOTTOM
@face.y = self.y + self.height - @face.bitmap.height
if $game_system.animated_faces
@face_offset = $game_system.face_frame_width + 16
else
@face_offset = @face.bitmap.width + 16
end
else # side
delta = (@face.bitmap.height - self.height) / 2
@face.y = self.y - delta
@face_offset = 0
end
# picture x-coordinate
if $game_system.face_graphic_justification == LEFT
if $game_system.face_graphic_position == SIDE
@face.x = self.x - @face.bitmap.width
else
@face.x = self.x + 10
end
else # right side
if $game_system.animated_faces
offset = @face.bitmap.width - $game_system.face_frame_width
else
offset = 0
end
if $game_system.face_graphic_position == SIDE
@face.x = self.x + self.width + offset
else
@face.x = self.x + self.width - @face.bitmap.width - 10 + offset
@face_offset = 0
end
end
if $game_system.animated_faces
@face.src_rect = Rect.new(@face_frame * $game_system.face_frame_width, 0, $game_system.face_frame_width, @face.bitmap.height)
if @done and $game_system.resting_face != ""
pause = $game_system.resting_animation_pause
else
pause = $game_system.animation_pause
end
if Graphics.frame_count % pause == 0
@animate_face = true
end
if @animate_face
if Graphics.frame_count % 3 == 0
@face_frame += 1
if @face_frame * $game_system.face_frame_width >= @face.bitmap.width
@face_frame = 0
@animate_face = false
end
end
end
end
end
# name window
if $game_system.name != ""
@name_window.x = self.x
@name_window.y = self.y - 36
@name_window.set_name($game_system.name)
end
# show correct sprite
#party = ["123abc", "Mel", "June", "Edward", "Ulf", "Yvette", "Spook"]
#if $game_system.message_event == 0 && party.include?($game_system.name)
# $game_player.show_character(party.index($game_system.name))
#end
# If choice
if $game_temp.choice_max > 0
@choice_window.set_choices($game_temp.choices)
@choice_window.x = self.x + self.width - @choice_window.width
if self.y > @choice_window.height
# draw above
@choice_window.y = self.y - @choice_window.height
else
# draw below
@choice_window.y = self.y + self.height
end
end
# If number input
if $game_temp.num_input_variable_id > 0
if @input_number_window == nil
digits_max = $game_temp.num_input_digits_max
number = $game_variables[$game_temp.num_input_variable_id]
@input_number_window = Window_InputNumber.new(digits_max)
@input_number_window.number = number
end
# determine x and y coords for number input window
if $game_system.choice_justification == LEFT
@input_number_window.x = self.x
else
@input_number_window.x = self.x + self.width - @input_number_window.width
end
if $game_system.choice_position == ABOVE
# check to make sure there is enough room above the textbox
if self.y < @input_number_window.height
# not enough room above, place below
@input_number_window.y = self.y + self.height
else
# draw above
@input_number_window.y = self.y - @choice_window.height
end
elsif $game_system.choice_position == BOTTOM
# check to make sure there is enough room below the textbox
if (480 - self.y - self.height) < @input_number_window.height
# not enough room below, place above
@input_number_window.y = self.y - @input_number_window.height
else
# draw below
@input_number_window.y = self.y + self.height
end
else # side
if $game_system.choice_justification == LEFT
# check to make sure there's room on the left side
if self.y < @input_number_window.width
# not enough room on the side, check to make sure there's room below
if (480 - self.y - self.height) < @input_number_window.height
# not enough room below, place above
@input_number_window.y = self.y - @input_number_window.height
else
# draw below
@input_number_window.y = self.y + self.height
end
else
# place on the left side
@input_number_window.y = self.y
@input_number_window.x = self.x - @choice_window.width
end
else # right
# check to make sure there's room on the right side
if (680 - (self.y + self.width)) < @input_number_window.width
# not enough room on the side, check to make sure there's room below
if (480 - self.y - self.height) < @input_number_window.height
# not enough room below, place above
@input_number_window.y = self.y - @input_number_window.height
else
# draw below
@input_number_window.y = self.y + self.height
end
else
# place on the left side
@input_number_window.y = self.y
@input_number_window.x = self.x + self.width
end
end
end
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if (@contents_showing and $game_system.message_event != -1 and $game_system.shake == 0) or $game_system.animated_faces
reset_window(false)
end
if $game_system.shake != 0 # shake the window
if @ascending
if @target_x != self.x
self.x += 1
else
@ascending = false
@target_x = self.x - ($game_system.shake * 2)
end
else
if @target_x != self.x
self.x -= 1
else
@ascending = true
@target_x = self.x + ($game_system.shake * 2)
end
end
end
@name_window.update
if @wait > 0
@wait -= 1
if @wait == 0
terminate_message
return
end
end
# If fade in
if @fade_in
if $game_temp.message_text == ""
@fade_in = false
return
end
self.contents_opacity += 24
if $game_system.face_graphic != ""
@face.opacity += 24
end
if $game_system.window_image != nil
@window_back.opacity += 24
end
if $game_system.comic_enabled and $game_system.message_event != -1
@comic.opacity = self.opacity
@comic.visible = self.visible
end
if $game_system.name != ""
@name_window.visible = true
if $game_system.name_window
@name_window.dummy_window.visible = true
end
end
if @input_number_window != nil
@input_number_window.contents_opacity += 24
end
if self.contents_opacity == 255
@fade_in = false
end
return
end
# write the text
if @text != nil and @text != ""
speed = $game_system.write_speed
if $game_system.text_mode == ALL_AT_ONCE or $game_temp.in_battle
while (c = @text.slice!(/./m)) != nil
write_char(c)
end
$game_system.slave_windows.each_value { |window| window.write_all }
return
end
if $game_system.text_skip
if $game_system.skip_mode == WRITE_FASTER and Input.press?(Input::C)
# the player is holding the action button, write faster
speed /= 3
elsif $game_system.skip_mode == WRITE_ALL and Input.trigger?(Input::C)
# the player pressed the action button, write all the text
while (c = @text.slice!(/./m)) != nil
write_char(c)
end
$game_system.slave_windows.each_value { |window| window.write_all }
return
end
end
while @ignore
c = @text.slice!(/./m)
if c != nil
write_char(c)
end
end
if @pause_time > 0
@pause_time -= 1
return
end
if Graphics.frame_count - @count >= speed
if $game_system.sound_effect != ""
Audio.se_play("Audio/SE/" + $game_system.sound_effect, 10, 100)
end
@count = Graphics.frame_count
c = @text.slice!(/./m)
if c != nil
write_char(c)
end
end
return
end
if $game_system.animated_faces and $game_system.resting_face != ""
@done = true
end
# If inputting number
if @input_number_window != nil
@input_number_window.update
# Confirm
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
$game_variables[$game_temp.num_input_variable_id] =
@input_number_window.number
$game_map.need_refresh = true
# Dispose of number input window
@input_number_window.dispose
@input_number_window = nil
terminate_message
end
return
end
if @wait != 0
return
end
# If message is being displayed and contents are all written
if @contents_showing
# if choice
if $game_temp.choice_max > 0
if !@choice_window.active
@choice_window.visible = true
@choice_window.active = true
@choice_window.index = 0
end
@choice_window.update
else
# If choice isn't being displayed, show pause sign
self.pause = $game_system.show_pause
end
# Cancel
if Input.trigger?(Input::B)
if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
$game_system.se_play($data_system.cancel_se)
$game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
terminate_message
end
end
# Confirm
if Input.trigger?(Input::C) and !(@wait > 0)
@done = true
$game_system.slave_windows.each_value { |window|
window.write_all
if !window.done
@done = false
end
}
if @done
if $game_temp.choice_max > 0
$game_system.se_play($data_system.decision_se)
$game_temp.choice_proc.call(@choice_window.index)
end
terminate_message
else
@finishing_up = true
end
end
return
end
if @finishing_up
$game_system.slave_windows.each_value { |window|
if !window.done
@done = true
break
end
}
if @done = false
terminate_message
end
end
# If display wait message or choice exists when not fading out
if @fade_out == false and $game_temp.message_text != nil
@contents_showing = true
$game_temp.message_window_showing = true
reset_window
refresh
Graphics.frame_reset
if @show
self.visible = true
end
self.contents_opacity = 0
if @input_number_window != nil
@input_number_window.contents_opacity = 0
end
@fade_in = true
return
end
# If message which should be displayed is not shown, but window is visible
if self.visible
@fade_out = true
self.opacity -= 48
@name_window.opacity -= 48
@comic.opacity -= 48
@face.opacity -= 48
@window_back.opacity -= 48
if self.opacity == 0
self.visible = false
@face.opacity = 0
@window_back.opacity = 0
@choice_window.visible = false
@choice_window.active = false
@comic.opacity = 0
@name_window.visible = false
@name_window.dummy_window.visible = false
@name_window.update
@fade_out = false
$game_temp.message_window_showing = false
end
return
end
if $game_temp.battle_calling or $game_temp.shop_calling or $game_temp.name_calling or $game_temp.menu_calling or $game_temp.save_calling or $game_temp.debug_calling
$game_system.indy_windows.each_pair {|name, window|
if window.show == true
window.dispose
$game_system.indy_windows.delete(name)
end
}
end
end
#--------------------------------------------------------------------------
# * Process and write the given character
#--------------------------------------------------------------------------
def write_char(c)
if c == "\000"
# Return to original text
c = "\\"
end
# If \C[n]
if c == "\001"
# Change text color
@text.sub!(/\[([0-9]+)\]/, "")
color = $1.to_i
if color >= 0 and color <= 7
self.contents.font.color = text_color(color)
end
# go to next text
return
end
# If \G
if c == "\002"
# Make gold window
if @gold_window == nil
@gold_window = Window_Gold.new
@gold_window.x = 560 - @gold_window.width
if $game_temp.in_battle
@gold_window.y = 192
else
@gold_window.y = self.y >= 128 ? 32 : 384
end
@gold_window.opacity = self.opacity
@gold_window.back_opacity = self.back_opacity
end
# go to next text
return
end
# If \skip
if c == "\003"
# toggle text skipping
$game_system.text_skip = !$game_system.text_skip
# go to next text
return
end
# If \b
if c == "\004"
# toggle bold
self.contents.font.bold = !self.contents.font.bold
# go to next text
return
end
# If \i
if c == "\005"
# toggle italics
self.contents.font.italic = !self.contents.font.italic
# go to next text
return
end
# If \s
if c == "\006"
# toggle shadow
$game_system.shadowed_text = !$game_system.shadowed_text
# go to next text
return
end
# If \font
if c == "\007"
# change font
@text.sub!(/\[(.*?)\]/, "")
font = $1.to_s
$game_system.font = font
if font == ""
self.contents.font.name = Font.default_name
else
self.contents.font.name = font
end
# go to next text
return
end
# If \p[n]
if c == "\010"
@text.sub!(/\[([0-9]+)\]/, "")
@pause_time = $1.to_i
# go to next text
return
end
# If \w[n]
if c == "\011"
@text.sub!(/\[([0-9]+)\]/, "")
@wait = $1.to_i
# go to next text
return
end
# If \ws[n]
if c == "\013"
@text.sub!(/\[([0-9]+)\]/, "")
$game_system.write_speed = $1.to_i
# go to next text
return
end
# If \oa[n]
if c == "\014"
@text.sub!(/\[([0-9]+)\]/, "")
index = $1.to_i
@text.sub!(" ", "")
item = $data_armors[index]
# draw the icon
icon = RPG::Cache.icon(item.icon_name)
line = self.contents.text_size("dj").height
self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
@x += 24
# go to next text
return
end
# If \oi[n]
if c == "\015"
@text.sub!(/\[([0-9]+)\]/, "")
index = $1.to_i
@text.sub!(" ", "")
item = $data_items[index]
# draw the icon
icon = RPG::Cache.icon(item.icon_name)
line = self.contents.text_size("dj").height
self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
@x += 24
# go to next text
return
end
# If \os[n]
if c == "\016"
@text.sub!(/\[([0-9]+)\]/, "")
index = $1.to_i
@text.sub!(" ", "")
item = $data_skills[index]
# draw the icon
icon = RPG::Cache.icon(item.icon_name)
line = self.contents.text_size("dj").height
self.contents.blt(@x + 2, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
@x += 24
# go to next text
return
end
# If \ow[n]
if c == "\017"
@text.sub!(/\[([0-9]+)\]/, "")
index = $1.to_i
@text.sub!(" ", "")
item = $data_weapons[index]
# draw the icon
icon = RPG::Cache.icon(item.icon_name)
line = self.contents.text_size("dj").height
self.contents.blt(@x + 2, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
@x += 24
# go to next text
return
end
# If \tc
if c == "\020"
# center justify
$game_system.text_justification = CENTER
get_x_value
# go to next text
return
end
# If \tl
if c == "\021"
# left justify
$game_system.text_justification = LEFT
get_x_value
# go to next text
return
end
# If \tr
if c == "\022"
# right justify
$game_system.text_justification = RIGHT
get_x_value
# go to next text
return
end
# If \ignr
if c == "\023"
# set ignore flage
@ignore = true
# go to next text
return
end
# if \slv
if c == "\024"
# we need to show a slave window
@text.sub!(/\[(.*?)\]/, "")
name = $1.to_s
$game_system.slave_windows[name].show = true
return
end
# if \ind
if c == "\025"
# we need to show a independent window
@text.sub!(/\[(.*?)\]/, "")
name = $1.to_s
if $game_system.indy_windows[name].show
$game_system.indy_windows[name].dispose
$game_system.indy_windows.delete(name)
else
$game_system.indy_windows[name].show = true
end
return
end
# if \c (hex color)
if c == "\026"
# convert hex color to RGB
@text.sub!(/\[([0123456789abcdef]+)\]/, "")
hex_code = $1.to_s
red = ("0x" + hex_code.slice(0..1)).hex
blue = ("0x" + hex_code.slice(2..3)).hex
green = ("0x" + hex_code.slice(4..5)).hex
self.contents.font.color = Color.new(red, blue, green)
return
end
# If new line text
if c == "\n"
# Add 1 to y
if !@ignore
@y += 1
end
if @text != ""
get_x_value
end
@ignore = false
# go to next text
return
end
if @ignore
return
end
# Draw text
line = self.contents.text_size("dj").height
if $game_system.shadowed_text
old_color = self.contents.font.color.clone
self.contents.font.color = $game_system.shadow_color
self.contents.draw_text(6 + @x, line * @y + 2, 40, 32, c) # Shaz: 26 was 32
self.contents.font.color = old_color
end
self.contents.draw_text(4 + @x, line * @y, 40, 32, c) # Shaz: 26 was 32
# Add x to drawn text width
@x += self.contents.text_size(c).width
end
def get_x_value
# text justification - offset for first line
if $game_system.text_justification == CENTER
# get the length of the current line
w = self.contents.text_size(@text.split("\n")[0]).width
@x = (self.width - w - 48) / 2
elsif $game_system.text_justification == RIGHT
# get the length of the current line
w = self.contents.text_size(@text.split("\n")[0]).width
@x = self.width - w - 48
else # left
if $game_system.face_graphic == ""
@x = 0
else
@x = @face_offset
end
end
end
end