speedolphins
Member
I searched all over the forums for ccoa's UMS, and I found one. But its Spanish. :-\
Can anyone find me the English one or translate this?
Can anyone find me the English one or translate this?
Code:
# *****************************************************************************
# * Universal Message System
# * v1.1
# * by Ccoa
# *****************************************************************************
# Manual de Comandos (Traducido por xXDarkDragonXx de VoidZone 4.7):
=begin
EN MENSAJE (CODIGOS) >>>>:
\b - Activa / Desactiva texto en negrita
\c[i] - Cambia el color del texto (por defecto del RPG Maker)
\e[i] - Pone caja de texto sobre evento i (0 = jugador, -1 no evento)
\face[name] - Cambia el gráfico de "face" a name.png (dejar en blanco [] para
no poner "face")
\fl - Pone la "face" a la izquierda
\font[name] - Cambia la fuente usada, dejar en blanco [] para regresar a fuen-
te por defecto
\fr - Pone la "face" a la derecha
\g - Muestra caja que te dice el dinero que tienes
\height - Alto de la caja de texto, solo funciona en Modo Normal
\i - Activa / Desactica texto en itÃÂlico
\ignr - No escribir nada en la lÃÂnea en ques escribes este comando, solo
procesa los códigos, debe ser lo primero en la lÃÂnea
\jc - AlÃÂnea la caja de texto al centro, ignorado si usas \e
\jl - AlÃÂnea la caja de texto a la izquierda, ignorado si usas \e
\jr - AlÃÂnea la caja de texto a la derecha, ignorado si usas \e
\m - toggle mode between normal and fit window to text
\n[i] - Muestra el nombre del personaje i (i = ID del personaje en Base
de Datos > Personajes)
\nm[name] - Muestra nombre / texto en la caja de nombre, dejar en blanco []
para remover la caja de nombre
\oa[i] - Muestra el icono y nombre de la armadura i (i = ID de armadura
en Base de Datos > Protectores)
\oi[i] - Muestra el icono y nombre de un objeto i (i = ID de objeto
en Base de Datos > Objeto)
\os[i] - Muestra el icono y nombre de la habilidad i (i = ID de habilidad
en Base de Datos > Habilidades)
\ow[i] - Muestra el icono y nombre de la arma i (i = ID de arma
en Base de Datos > Armas)
\p[i] - Pausa por i frames antes de escribir la letra siguiente (i = #
de frames)
\pt - Activa / Desactiva el sÃÂmbolo de "pausa" en la caja de texto
\s - Activa / Desactiva texto con sombra
\shk[i] - Pone la caja de texto a temblar, mientras más alto sea el número
reemplazado por i, mayor será el temblor
\skip - Activa / Desactiva el "salto" de texto
\t1 - Cambia un poco la caja de texto a una de comic de como si estu-
viera hablando normal (usa imagen talk1)
\t2 - Cambia un poco la caja de texto a una de comic de como si estu-
viera gritando (usa imagen talk2)
\tc - AlÃÂnea el texto al centro, este comando debe ponerse al
principio de una lÃÂnea en el mensaje
\th - Cambia un poco la caja de texto a una de comic de como si estu-
viera pensando algo (usa imagen thought.png)
\tl - AlÃÂnea el texto a la izquierda, este comando debe ponerse al
principio de una lÃÂnea en el mensaje
\tr - AlÃÂnea el texto a la derecha, este comando debe ponerse al prin-
cipio de una lÃÂnea en el mensaje
\v[i] - Muestra variable (el valor), reemplazar i por el mismo
\width - Ancho de la caja de texto, solo funciona en Modo Normal
\w[i] - Espera por los frames indicados, y luego cierra ventana
\ws[i] - Cambia la velocidad a la que sale el texto, reemplaza i por la
misma
\slv[name] - Pone esta ventana el nombre de la "ventana esclava", o muestra
el nombre de la misma
COMANDOS QUE NO SON CODIGOS EN MENSAJES (usar comando 'Llamar script...' para
estos):
$game_system.ums_mode = NORMAL_MODE - Cambia a Modo Normal
$game_system.ums_mode = FIT_WINDOW_TO_TEXT - Cambia al modo que el texto automá-
ticamente encaje en la caja de tex-
to
$game_system.text_skip = true - Activa el "salto" de texto
$game_system.text_skip = false
true - Desactiva el "salto" de texto (true es necesa-
rio ponerlo)
$game_system.text_mode = WRITE_FASTER - Cambia la velocidad en que el texto sale
a r?pido
$game_system.text_mode = WRITE_ALL - Cambia el modo de salto a que escriba todo
el texto
$game_system.write_speed = i - Cambia la velocidad a la que sale el texto, reem-
plaza i por la misma
$game_system.window_height = i - Cambia el alto de la ventana de texto a i (i =
el alto)
$game_system.window_width = i - Cambia el ancho de la ventana de texto a i (i =
el ancho)
$game_system.window_justification = RIGHT - AlÃÂnea la caja de texto a la derecha
$game_system.window_justification = LEFT - AlÃÂnea la caja de texto a la izquier-
da
$game_system.window_justification = CENTER - AlÃÂnea la caja de texto al centro
$game_system.face_graphic = "filename" - Cambia el gráfico de "face" a
filename.png (puedes cambiar nombre de
archivo, obiviamente, y puedes usar más
de una "face")
$game_system.face_graphic = "" - Cambia el gráfico de "face" a ninguno
$game_system.face_graphic_justification = LEFT - Pone la "face" a la izquierda
$game_system.face_graphic_justification = RIGHT - Pone la "face" a la derecha
$game_system.face_graphic_position = TOP - Pone la "face" arriba de la ventana
$game_system.face_graphic_position = CENTER - Pone la "face" centrada en la ven-
tana
$game_system.face_graphic_position = BOTTOM - Pone la "face" a lo más bajo de la
ventana de texto
$game_system.shadow_text = true - Activa texto con sombra
$game_system.shadow_text = false
true - Desactiva texto con sombra (true es necesario)
$game_system.shadow_color = Color.new(red, blue, green, alpha) - change shadow color
$game_system.message_event = what event to put the message over (0 = player, -1 = no event)
$game_system.comic_enabled = false
true - Desactiva lo del comic (true es necesario)
$game_system.comic_enabled = true - turn on comic thingy (only works with message_event not -1)
$game_system.comic_style = TALK1 - Cambia un poco la caja de texto a una de
comic de como si estuviera hablando normal
(usa imagen talk1)
$game_system.comic_style = TALK2 - Cambia un poco la caja de texto a una de
comic de como si estuviera gritando
(usa imagen talk2)
$game_system.comic_style = THOUGHT - Cambia un poco la caja de texto a una de
comic de como si estuviera pensando algo
(usa imagen thought.png)
$game_system.name = "name" - Cambia el nombre escrito en la ventana de nombre a
lo que escribas entre " "
$game_system.name = "" - Desactiva ventana de nombre
$game_system.font = "name" - Cambia nombre de fuente (obivamente reemplazar
"name" por nombre de fuente)
$game_system.font = "" - Cambia la fuente a por defecto
$game_system.text_justification = CENTER - AlÃÂnea texto al centro
$game_system.text_justification = LEFT - AlÃÂnea texto a la izquierda
$game_system.text_justification = RIGHT - AlÃÂnea texto a la derecha
$game_system.show_pause = true - Activa el sÃÂmbolo de "pausa" en la caja de tex-
to
$game_system.show_pause = false - Desactiva el sÃÂmbolo de "pausa" en la caja de
texto
$game_system.shake = 0 - Desactiva el temblor
$game_system.shake = i - Pone la caja de texto a temblar, mientras más alto sea
el número reemplazado por i, mayor será el temblor
$game_system.sound_effect = "" - Desactiva el sonido de letra-por-letra (sonido
es un SE)
$game_system.sound_effect = "sename" - Nombre de archivo del sonido a escuchar
en el letra-por-letra
$game_system.choice_position = ABOVE - Pone la caja de elecciones arriba
$game_system.choice_position = BOTTOM - Pone la caja de elecciones abajo
$game_system.choice_position = LEFT - Pone la caja de elecciones a la izquierda
$game_system.choice_position = RIGHT - Pone la caja de elecciones a la derecha
=end
# *****************************************************************************
# CONSTANTS
# *****************************************************************************
# Modos
NORMAL_MODE = 0 #Modo Normal, su ID
FIT_WINDOW_TO_TEXT = 1 #Modo de Encajar Texto a Caja de Texto, su ID
# Modos de "Salto" de Texto
WRITE_FASTER = 0
WRITE_ALL = 1
# Alineacions
RIGHT = 0
CENTER = 1
LEFT = 2
# Posiciones para las "faces", la caja de elecciones, etc.
ABOVE = 0 # Pone el objeto / lo deseado arriba, su ID
CENTER = 1 # Pone el objeto / lo deseado en el centro, su ID
BOTTOM = 2 # Pone el objeto / lo deseado a lo más bajo de la ventana de texto,
# su ID
SIDE = 3 # Pone el objeto / lo deseado a los lados (que lado depende de ali-
# neación, su ID
# Modo Comic
TALK1 = 0 # Hablando Normal
TALK2 = 1 # Gritando
THOUGHT = 2 # Pensativo
# *****************************************************************************
# Changes to Game_System. This allows any changes made to be saved when the
# game is saved.
# *****************************************************************************
class Game_System
attr_accessor :ums_mode # what mode the UMS is in
attr_accessor :text_skip # whether or not text skip is activated
attr_accessor :skip_mode # write the text faster while C is pressed, or just skip to the end
attr_accessor :write_speed # frame delay between characters
attr_accessor :window_height # default height of message window
attr_accessor :window_width # default width of message window
attr_accessor :window_justification # default justification of window
attr_accessor :face_graphic # current face graphic
attr_accessor :face_graphic_justification # justification of face graphic
attr_accessor :face_graphic_position # position of face graphic
attr_accessor :shadowed_text # whether or not to draw a shadow behind the text
attr_accessor :shadow_color # the shadow color
attr_accessor :choice_justification # where the choice window is located
attr_accessor :choice_position # prefered position of choice window
attr_accessor :message_event # what event to center the text over (0 player, -1 to not)
attr_accessor :comic_enabled # using "talk" icons?
attr_accessor :comic_style # what type of comic image to use
attr_accessor :name # the text for the name window
attr_accessor :font # the name of the font
attr_accessor :text_justification # the justification of the window text
attr_accessor :show_pause # whether or not to show the pause icon
attr_accessor :shake # the amount of shake for the window
attr_accessor :sound_effect # SE to play with each letter
attr_accessor :slave_windows # hash of slave windows
attr_accessor :indy_windows # hash of independent windows
attr_reader :shortcuts # user-defined shortcuts
alias ums_initialize initialize
def initialize
ums_initialize
@ums_mode = NORMAL_MODE
@skip_mode = WRITE_ALL
@text_skip = true
@write_speed = 2
@window_height = 128
@window_width = 480
@window_justification = CENTER
@face_graphic = ""
@face_graphic_justification = LEFT
@face_graphic_position = CENTER
@shadowed_text = false
@shadow_color = Color.new(0, 0, 0, 100)
@choice_justification = RIGHT
@choice_position = SIDE
@message_event = -1
@comic_enabled = false
@comic_style = TALK1
@name = ""
@font = ""
@text_justification = LEFT
@show_pause = true
@shake = 0
@sound_effect = ""
@slave_windows = {}
@indy_windows = {}
@used_codes = ['\v', '\n', '\c', '\g', '\skip', '\m', '\height', '\width',
'\jr', '\jc', '\jl', '\face', '\fl', '\fr', '\b', '\i', '\s',
'\e', '\t1', '\t2', '\th', '\nm', '\font', '\p', '\w', '\ws',
'\oa', '\oi', '\os', '\ow', '\tl', '\tr', '\tc', '\ignr',
'\shk', '\slv', '\ind']
@shortcuts = {}
end
def add_shortcut(shortcut, code)
text = shortcut.downcase
if !@used_codes.include?(text)
@shortcuts[shortcut] = code
end
end
end
# *****************************************************************************
# 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_Base
#--------------------------------------------------------------------------
# * 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
@face = Sprite.new
@face.opacity = 0
@face.z = self.z + 1
@face_offset = 0
# choice window
@choice_window = Window_Choice.new([])
@choice_window.back_opacity = 160
# comic sprite
@comic = Sprite.new
@comic.opacity = 0
@comic.z = self.z + 1
if $game_system.comic_style == TALK1
@comic.bitmap = RPG::Cache.windowskin("talk1")
# talk1 es el nombre del archivo en Graphics\Pictures que se usará para el
# modo comic que habla normal
elsif $game_system.comic_style == TALK2
@comic.bitmap = RPG::Cache.windowskin("talk2")
# talk2 es el nombre del archivo en Graphics\Pictures que se usará para el
# modo comic que grita
else # thought
@comic.bitmap = RPG::Cache.windowskin("thought")
# thought es el nombre del archivo en Graphics\Pictures que se usará para
# el modo comic que es pensativo
end
# name window
@name_window = Window_Name.new
@name_window.z = self.z + 1
@pause = 0
@wait = 0
@show = false
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
@show = 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
}
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = normal_color
@show = true
@x = @y = 0
# If waiting for a message to be displayed
if $game_temp.message_text != nil
@text = $game_temp.message_text
# 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
# 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
@text.gsub!(/\\[Ff][Aa][Cc][Ee]\[(.*?)\]/) do
$game_system.face_graphic = $1.to_s
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
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
# 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 skip code
@text.gsub!(/\\[Ss][Kk][Ii][Pp]/) { "\003" }
# ignore code
@text.gsub!(/\\[Ii][Gg][Nn][Rr]/) { "\023" }
# bold and italics
@text.gsub!(/\\[Bb]/) { "\004" }
@text.gsub!(/\\[Ii]/) { "\005" }
# slave and indy windows
@text.gsub!(/\\[Ss][Ll][Vv]\[(.*?)\]/) { "\024[#{$1}]" }
# 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
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
height += self.contents.text_size(line).height + 6
end
end
self.width = width + 48
self.height = height + 46
self.contents = Bitmap.new(width + 16, height + 16)
self.contents.font.color = normal_color
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)
self.contents.font.color = normal_color
end
end
reset_window
get_x_value
@count = Graphics.frame_count
@pause = 0
@ignore = false
@ascending = true
@target_x = self.x + $game_system.shake
end
# If number input
if $game_temp.num_input_variable_id > 0
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
@input_number_window.x = self.x + 8
@input_number_window.y = self.y + $game_temp.num_input_start * 32
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
@comic.y = self.y + self.height - 2
end
end
if self.y < 0 + ($game_system.name == "" ? 0 : 16)
self.y = 0 + ($game_system.name == "" ? 0 : 16)
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
self.opacity = 255
else
self.opacity = 0
end
self.back_opacity = 160
end
# face stuff
if $game_system.face_graphic != ""
# the player has chosen to show a face graphic
@face.bitmap = RPG::Cache.picture($game_system.face_graphic)
# 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
@x = @face_offset = @face.bitmap.width + 16
elsif $game_system.face_graphic_position == BOTTOM
@face.y = self.y + self.height - @face.bitmap.height
@x = @face_offset = @face.bitmap.width + 16
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
if $game_system.face_graphic_position == SIDE
@face.x = self.x + self.width
else
@face.x = self.x + self.width - @face.bitmap.width - 10
@x = @face_offset = 0
end
end
end
# name window
if $game_system.name != ""
@name_window.set_name($game_system.name)
@name_window.x = self.x
@name_window.y = self.y - 36
end
# If choice
if $game_temp.choice_max > 0
@choice_window.set_choices($game_temp.choices)
# determine x and y coords for choice window
if $game_system.choice_justification == LEFT
@choice_window.x = self.x
else
@choice_window.x = self.x + self.width - @choice_window.width
end
if $game_system.choice_position == ABOVE
# check to make sure there is enough room above the textbox
if self.y < @choice_window.height
# not enough room above, place below
@choice_window.y = self.y + self.height
else
# draw above
@choice_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) < @choice_window.height
# not enough room below, place above
@choice_window.y = self.y - @choice_window.height
else
# draw below
@choice_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 < @choice_window.width
# not enough room on the side, check to make sure there's room below
if (480 - self.y - self.height) < @choice_window.height
# not enough room below, place above
@choice_window.y = self.y - @choice_window.height
else
# draw below
@choice_window.y = self.y + self.height
end
else
# place on the left side
@choice_window.y = self.y
@choice_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)) < @choice_window.width
# not enough room on the side, check to make sure there's room below
if (480 - self.y - self.height) < @choice_window.height
# not enough room below, place above
@choice_window.y = self.y - @choice_window.height
else
# draw below
@choice_window.y = self.y + self.height
end
else
# place on the left side
@choice_window.y = self.y
@choice_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
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
if @wait > 0
@wait -= 1
if @wait == 0
terminate_message
return
end
end
# If fade in
if @fade_in
self.contents_opacity += 24
if $game_system.face_graphic != ""
@face.opacity += 24
end
if $game_system.comic_enabled and $game_system.message_event != -1
@comic.opacity += 24
end
if $game_system.name != ""
@name_window.visible = true
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_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 > 0
@pause -= 1
return
end
if Graphics.frame_count - @count >= speed
if $game_system.sound_effect != ""
Audio.se_play("Audio/SE/" + $game_system.sound_effect, 80, 100)
end
@count = Graphics.frame_count
c = @text.slice!(/./m)
if c != nil
write_char(c)
end
end
return
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)
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
end
return
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
if self.opacity == 0
self.visible = false
@face.opacity = 0
@choice_window.visible = false
@choice_window.active = false
@comic.opacity = 0
@name_window.visible = false
@fade_out = false
$game_temp.message_window_showing = false
end
return
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 = $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]+)\]/, "")
&nb