#============================================================================== # # ▼ Yanfly Engine Ace - Ace Message System v1.04 # -- Last Updated: 2012.01.13 # -- Level: Normal # -- Requires: n/a # # -- Traducido por: Sigmund_vx #============================================================================== $imported = {} if $imported.nil? $imported["YEA-MessageSystem"] = true
#================================================================== # ▼ Updates # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 2012.01.13 - Bug Fixed: Negative tags didn't display other party members. # 2012.01.12 - Compatibility Update: Message Actor Codes # 2012.01.10 - Added Feature: \pic[x] text code. # 2012.01.04 - Bug Fixed: \ic tag was \ii. No longer the case. # - Added: Scroll Text window now uses message window font. # 2011.12.31 - Started Script and Finished. # #============================================================================== # ▼ Introducción # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # Es de notarse que el RPG Maker VX Ace mejoró significativamente el sistema de # mensajes pero, con certeza, no le hace mal a nadie agregar más detalles al # mismo como ventanas de nombre, códigos de texto para agregar íconos, nombre de # items/armas y armaduras en los mensajes de un modo dinânimo y bello. # Este script también permite al usuario, ajustar el tamaño de la ventana de # mensaje durante el juego. agregar o modificar la fuente, y dar la # posibilidad de acelerar el texto. # #============================================================================== # ▼ Instrucciones # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # Para instalar este script abra el editor, copie el código y pegue por encima # del main y abajo de (scripts adicionales). # # ----------------------------------------------------------------------------- # Message Window text Codes - Para ser colocados en la ventana de mensaje. # ----------------------------------------------------------------------------- # Default: Efecto: # \v[x] - Escribe el valor de la variable de Id [x] , # \n[x] - Escribe el nombre del personaje (Actor) de Id [x] # \p[x] - Escribe el nombre del miembro de ID X del grupo. # \g - Escribe el nombre de la moneda corriente. # \c[x] - Cambia el color del texto a x. # \i[x] - Dibuja el ícono de id x en la ventana de mensajes. # \{ - Aumenta el tamaño del texto por 8 puntos. # \} - Disminuye el tamaño del texto por 8 puntos. # \$ - Abre la ventana del dinero. # \. - Espera 15 frames (1/4 de segundo). # \| - Espera 60 frames (1 segundo). # \! - Espera hasta que alguna tecla sea presionada. # \> - El siguiente texto va a surgir instantáneamente. # \< - El siguiente texto no surge más instantáneamente. # \^ - Omite el siguiente mensaje. # \\ - Escribe "\" en la ventana. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Wait: Efecto: # \w[x] - Espera x frames (60 frames = 1 segundo). # Sólo en la ventana de mensajes. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # NameWindow: Efecto: # \n<x> - Crea una ventana de nombre, donde x es el texto exhibido. # Lado izquierdo. *Nota # \nc<x> - Crea una ventana de nombre, donde x es el texto exhibido. # Centrado. *Nota # \nr<x> - Crea una ventana de nombre, donde x es el texto exhibido. # Lado Derecho. *Nota # # *Nota: Funciona sólo en las ventanas de mensaje. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Position: Efecto: # \px[x] - Cambiar la coordenada X del texto a el valor de x. # \py[x] - Cambiar la coordenada Y del texto a el valor de y. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Picture: Efecto: # \pic[x] - Dibuja la imagen x de la carpeta Graphics\Pictures. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Outline: Efecto: # \oc[x] - Cambiar el color de los bordes a x. # \oo[x] - Cambiar la opacidad de los bordes a x. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Font: Efecto: # \fr - Reseta todos los cambios de fuente. # \fz[x] - Cambia el tamaño de la fuente a el valor x. # \fn[x] - Cambia el nombre de la fuente a x # (X = nombre de la fuente referente la sustitución.). # \fb - Cambia la letra a negrita # \fi - Cambia la letra a Itálico # \fo - Cambia el contorno o borde de la fuente # \fs - Le agrega sombra a la fuente # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Actor: Efecto: # \af[x] - Muestra el rostro del actor de Id x. *Nota # \ac[x] - Muestra el nombre de la clase del Actor de id x. *Nota # \as[x] - Muestra el nombre de la subclasse del Actor de id X. # Requiere: Class System. *Nota # \an[x] - Muestra el apelido (nickname) del actor de id X. *Nota # # *Nota: Si x es 0 o negativo, Mostrará el rostro referente a:. # 0 - Líder # -1 - 1º Miembro no líder. # -2 - 2º Miembro no líder. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Names: Efecto: # \nc[x] - Muestra el nombre de la clase de Id x. # \ni[x] - Muestra el nombre del Item de id x. # \nw[x] - Muestra el nombre de la Arma de Id . # \na[x] - Muestra el nombre de la Armadura de Id x # \ns[x] - Muestra el nombre de la Habilidad de Id x. # \nt[x] - Muestra el nombre del Estado de Id x. # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Icon Names: Efecto: # \ic[x] - Muestra el nombre de la Clase de Id x incluyendo Ícono.* # \ii[x] - Muestra el nombre del item de Id x incluyendo Ícone. # \iw[x] - Muestra el nombre de la arma de Id x incluyendo Ícone. # \ia[x] - Muestra el nombre armadura de Id x incluyendo Ícone. # \is[x] - Muestra el nombre de la Habilidad de Id x incluyendo Ícone. # \it[x] - Muestra el nombre del Estado de Id x incluyendo Ícone. # # *Nota: Requiere YEA - Class System # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # # Y estos son los códigos de texto agregados con el uso del script. # Recuerde que algunos de estos códigos sólo funcionarán en las Ventana de Mensajes # De cualquier forma, estos son muy útiles para textos de "Ayuda" para # Descripciones, Biografía de los personajes y Etc. # #============================================================================== # ▼ Compatibilidad # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # Este script es sólo para RPG Maker VX Ace . No es compatíble con cualquier otra # Engine sin ajustes. # #==============================================================================
module YEA module MESSAGE #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Configuraciones Generales de la Ventana de Mensaje #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # A continuación puedes modificar las configuraçiones básicas, logrando # personalizar algunas funciones a su gusto. Ajustelos como desee. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # Este botón se presiona para mover el texto hacia adelante. # Debe ser presionado para que ocurra el efecto. Cuando se pulsa, acelera # los mensajes, pero si hay algun código que haga una pausa seguirá esperando. # Cuando se pulsa de nuevo, pasará automáticamente a la siguiente página. TEXT_SKIP = :A # Input::A Botón Shift del Teclado. # Esta variable ajusta el número de líneas visibles en la ventana de mensajes. # Si no deseas utilizar este recurso, cambie el valor de la constante a 0. # Si el valor de la línea es 0 o menor, el valor será automáticamente cambiado # a el standar de 4 líneas. VARIABLE_ROWS = 21 # Esta variable ajusta la anchura de la caja de mensajes mostrada. # Si no deseas utilizar este recurso cambie la constante a 0. # Si el valor de la anchura es 0 o menor, se ajustará la anchura estandar de # la ventana. VARIABLE_WIDTH = 22 # Esta es la cantidad de espacio que la ventana de mensaje utilizara cada # vez que el rostro de un personaje se utiliza. Estandar: 112 FACE_INDENT_X = 112 #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Configuración de la Ventana de Nombre - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # La Ventana de nombre es la pequeña caja que aparece por encima de la # ventana estandar. # Es utilizada para mostrar cualquier texto por encima de la ventana de # mensajes. como el propio titulo lo dice, un nombre. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- NAME_WINDOW_X_BUFFER = -20 # Buffer x | Posición X de la ventana de nombre. NAME_WINDOW_Y_BUFFER = 0 # Buffer y | Posición Y de la ventana de nombre. NAME_WINDOW_PADDING = 20 # Espacio añadido a la posición horizontal. NAME_WINDOW_OPACITY = 255 # Opacidad de la ventana de nombre. NAME_WINDOW_COLOUR = 6 # Color del texto usado para nombres. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Configuración de las Fuentes - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # El Sistema de mensaje de Ace separa las fuentes de manera diferenciada # para el uso in-game. Ajusta las configuraciones, y defina sus fuentes de # juego. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # Estas constantes definen que fuente es usada. Si la primera fuente no # existe en el ordenador del jugador, automáticamente la próxima fuente # será utilizada en lugar de la anterior. MESSAGE_WINDOW_FONT_NAME = ["Comic Sans MS", "Arial", "Courier New"] # Aquí se ajusta la configuración de la manera con la que las fuentes se # mostraran. Incluyendo el tamaño de letra por defecto, si el texto está # en negrita por defecto, itálico, tienen bordes o sombreado por defecto,etc. MESSAGE_WINDOW_FONT_SIZE = 24 # Tamaño de la fuente. MESSAGE_WINDOW_FONT_BOLD = false # Negrita por defecto? MESSAGE_WINDOW_FONT_ITALIC = false # Italico por defecto? MESSAGE_WINDOW_FONT_OUTLINE = true # Borde por defecto? MESSAGE_WINDOW_FONT_SHADOW = false # Sombreado por defecto? end # MESSAGE end # YEA
#============================================================================== # Editar cualquier cosa a partir desde este punto puede causar, daño al # computador, desesperacion del usuario, coma, muerte, mal aliento. # A continuación, edite bajo su propio riesgo. #==============================================================================
#============================================================================== # ■ Variable #==============================================================================
module Variable #-------------------------------------------------------------------------- # self.message_rows #-------------------------------------------------------------------------- def self.message_rows return 4 if YEA::MESSAGE::VARIABLE_ROWS <= 0 return 4 if $game_variables[YEA::MESSAGE::VARIABLE_ROWS] <= 0 return $game_variables[YEA::MESSAGE::VARIABLE_ROWS] end #-------------------------------------------------------------------------- # self.message_width #-------------------------------------------------------------------------- def self.message_width return Graphics.width if YEA::MESSAGE::VARIABLE_WIDTH <= 0 return Graphics.width if $game_variables[YEA::MESSAGE::VARIABLE_WIDTH] <= 0 return $game_variables[YEA::MESSAGE::VARIABLE_WIDTH] end end # Variable
#============================================================================== # ■ Game_Interpreter #==============================================================================
class Game_Interpreter #-------------------------------------------------------------------------- # overwrite method: command_101 #-------------------------------------------------------------------------- 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 continue_message_string? @index += 1 if @list[@index].code == 401 $game_message.add(@list[@index].parameters[0]) end break if $game_message.texts.size >= Variable.message_rows 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 #-------------------------------------------------------------------------- # new method: continue_message_string? #-------------------------------------------------------------------------- def continue_message_string? return true if next_event_code == 101 && Variable.message_rows > 4 return next_event_code == 401 end end # Game_Interpreter
#============================================================================== # ■ Window_Base #==============================================================================
class Window_Base < Window #-------------------------------------------------------------------------- # new method: setup_message_font #-------------------------------------------------------------------------- def setup_message_font @message_font = true change_color(normal_color) contents.font.out_color = Font.default_out_color contents.font.name = YEA::MESSAGE::MESSAGE_WINDOW_FONT_NAME contents.font.size = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SIZE contents.font.bold = YEA::MESSAGE::MESSAGE_WINDOW_FONT_BOLD contents.font.italic = YEA::MESSAGE::MESSAGE_WINDOW_FONT_ITALIC contents.font.outline = YEA::MESSAGE::MESSAGE_WINDOW_FONT_OUTLINE contents.font.shadow = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SHADOW end #-------------------------------------------------------------------------- # alias method: reset_font_settings #-------------------------------------------------------------------------- alias window_base_reset_font_settings_ams reset_font_settings def reset_font_settings if @message_font setup_message_font else window_base_reset_font_settings_ams contents.font.out_color = Font.default_out_color contents.font.outline = Font.default_outline contents.font.shadow = Font.default_shadow end end #-------------------------------------------------------------------------- # alias method: convert_escape_characters #-------------------------------------------------------------------------- alias window_base_convert_escape_characters_ams convert_escape_characters def convert_escape_characters(text) result = window_base_convert_escape_characters_ams(text) result = convert_ace_message_system_new_escape_characters(result) return result end #-------------------------------------------------------------------------- # new method: convert_ace_message_system_new_escape_characters #-------------------------------------------------------------------------- def convert_ace_message_system_new_escape_characters(result) #--- result.gsub!(/\eFR/i) { "\eAMSF[0]" } result.gsub!(/\eFB/i) { "\eAMSF[1]" } result.gsub!(/\eFI/i) { "\eAMSF[2]" } result.gsub!(/\eFO/i) { "\eAMSF[3]" } result.gsub!(/\eFS/i) { "\eAMSF[4]" } #--- result.gsub!(/\eAC\[([-+]?\d+)\]/i) { escape_actor_class_name($1.to_i) } result.gsub!(/\eAS\[([-+]?\d+)\]/i) { escape_actor_subclass_name($1.to_i) } result.gsub!(/\eAN\[([-+]?\d+)\]/i) { escape_actor_nickname($1.to_i) } #--- result.gsub!(/\eNC\[(\d+)\]/i) { $data_classes[$1.to_i].name } result.gsub!(/\eNI\[(\d+)\]/i) { $data_items[$1.to_i].name } result.gsub!(/\eNW\[(\d+)\]/i) { $data_weapons[$1.to_i].name } result.gsub!(/\eNA\[(\d+)\]/i) { $data_armors[$1.to_i].name } result.gsub!(/\eNS\[(\d+)\]/i) { $data_skills[$1.to_i].name } result.gsub!(/\eNT\[(\d+)\]/i) { $data_states[$1.to_i].name } #--- result.gsub!(/\eIC\[(\d+)\]/i) { escape_icon_item($1.to_i, :class) } result.gsub!(/\eII\[(\d+)\]/i) { escape_icon_item($1.to_i, :item) } result.gsub!(/\eIW\[(\d+)\]/i) { escape_icon_item($1.to_i, :weapon) } result.gsub!(/\eIA\[(\d+)\]/i) { escape_icon_item($1.to_i, :armour) } result.gsub!(/\eIS\[(\d+)\]/i) { escape_icon_item($1.to_i, :skill) } result.gsub!(/\eIT\[(\d+)\]/i) { escape_icon_item($1.to_i, :state) } #--- return result end #-------------------------------------------------------------------------- # new method: escape_actor_class_name #-------------------------------------------------------------------------- def escape_actor_class_name(actor_id) actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? return actor.class.name end #-------------------------------------------------------------------------- # new method: actor_subclass_name #-------------------------------------------------------------------------- def escape_actor_subclass_name(actor_id) return "" unless $imported["YEA-ClassSystem"] actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? return "" if actor.subclass.nil? return actor.subclass.name end #-------------------------------------------------------------------------- # new method: escape_actor_nickname #-------------------------------------------------------------------------- def escape_actor_nickname(actor_id) actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? return actor.nickname end #-------------------------------------------------------------------------- # new method: escape_icon_item #-------------------------------------------------------------------------- def escape_icon_item(data_id, type) case type when :class return "" unless $imported["YEA-ClassSystem"] icon = $data_classes[data_id].icon_index name = $data_items[data_id].name when :item icon = $data_items[data_id].icon_index name = $data_items[data_id].name when :weapon icon = $data_weapons[data_id].icon_index name = $data_weapons[data_id].name when :armour icon = $data_armors[data_id].icon_index name = $data_armors[data_id].name when :skill icon = $data_skills[data_id].icon_index name = $data_skills[data_id].name when :state icon = $data_states[data_id].icon_index name = $data_states[data_id].name else; return "" end text = "\eI[#{icon}]" + name return text end #-------------------------------------------------------------------------- # alias method: process_escape_character #-------------------------------------------------------------------------- alias window_base_process_escape_character_ams process_escape_character def process_escape_character(code, text, pos) case code.upcase #--- when 'FZ' contents.font.size = obtain_escape_param(text) when 'FN' text.sub!(/\[(.*?)\]/, "") font_name = $1.to_s font_name = Font.default_name if font_name.nil? contents.font.name = font_name.to_s #--- when 'OC' colour = text_color(obtain_escape_param(text)) contents.font.out_color = colour when 'OO' contents.font.out_color.alpha = obtain_escape_param(text) #--- when 'AMSF' case obtain_escape_param(text) when 0; reset_font_settings when 1; contents.font.bold = !contents.font.bold when 2; contents.font.italic = !contents.font.italic when 3; contents.font.outline = !contents.font.outline when 4; contents.font.shadow = !contents.font.shadow end #--- when 'PX' pos[:x] = obtain_escape_param(text) when 'PY' pos[:y] = obtain_escape_param(text) #--- when 'PIC' text.sub!(/\[(.*?)\]/, "") bmp = Cache.picture($1.to_s) rect = Rect.new(0, 0, bmp.width, bmp.height) contents.blt(pos[:x], pos[:y], bmp, rect) #--- else window_base_process_escape_character_ams(code, text, pos) end end end # Window_Base
#============================================================================== # ■ Window_ChoiceList #==============================================================================
class Window_ChoiceList < Window_Command #-------------------------------------------------------------------------- # alias method: initialize #-------------------------------------------------------------------------- alias window_choicelist_initialize_ams initialize def initialize(message_window) window_choicelist_initialize_ams(message_window) setup_message_font end end # Window_ChoiceList
#============================================================================== # ■ Window_ScrollText #==============================================================================
class Window_ScrollText < Window_Base #-------------------------------------------------------------------------- # alias method: initialize #-------------------------------------------------------------------------- alias window_scrolltext_initialize_ams initialize def initialize window_scrolltext_initialize_ams setup_message_font end end # Window_ScrollText
#============================================================================== # ■ Window_NameMessage #==============================================================================
class Window_NameMessage < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(message_window) @message_window = message_window super(0, 0, Graphics.width, fitting_height(1)) self.opacity = YEA::MESSAGE::NAME_WINDOW_OPACITY self.z = @message_window.z + 1 self.openness = 0 setup_message_font @close_counter = 0 deactivate end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super return if self.active return if self.openness == 0 return if @closing @close_counter -= 1 return if @close_counter > 0 close end #-------------------------------------------------------------------------- # start_close #-------------------------------------------------------------------------- def start_close @close_counter = 4 deactivate end #-------------------------------------------------------------------------- # force_close #-------------------------------------------------------------------------- def force_close @close_counter = 0 deactivate close end #-------------------------------------------------------------------------- # start #-------------------------------------------------------------------------- def start(text, x_position) @text = text.clone set_width create_contents set_x_position(x_position) set_y_position refresh activate open end #-------------------------------------------------------------------------- # set_width #-------------------------------------------------------------------------- def set_width text = @text.clone dw = standard_padding * 2 + text_size(text).width dw += YEA::MESSAGE::NAME_WINDOW_PADDING * 2 dw += calculate_size(text.slice!(0, 1), text) until text.empty? self.width = dw end #-------------------------------------------------------------------------- # calculate_size #-------------------------------------------------------------------------- def calculate_size(code, text) case code when "\e" return calculate_escape_code_width(obtain_escape_code(text), text) else return 0 end end #-------------------------------------------------------------------------- # calculate_escape_code_width #-------------------------------------------------------------------------- def calculate_escape_code_width(code, text) dw = -text_size("\e").width - text_size(code).width case code.upcase when 'C', 'OC', 'OO' dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width return dw when 'I' dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width dw += 24 return dw when '{' make_font_bigger when '}' make_font_smaller when 'FZ' contents.font.size = obtain_escape_param(text) when 'FN' text.sub!(/\[(.*?)\]/, "") font_name = $1.to_s font_name = Font.default_name if font_name.nil? contents.font.name = font_name.to_s when 'AMSF' case obtain_escape_param(text) when 0; reset_font_settings when 1; contents.font.bold = !contents.font.bold when 2; contents.font.italic = !contents.font.italic when 3; contents.font.outline = !contents.font.outline when 4; contents.font.shadow = !contents.font.shadow end else return dw end end #-------------------------------------------------------------------------- # set_y_position #-------------------------------------------------------------------------- def set_x_position(x_position) case x_position when 1 # Left self.x = @message_window.x self.x += YEA::MESSAGE::NAME_WINDOW_X_BUFFER when 2 # 3/10 self.x = @message_window.x self.x += @message_window.width * 3 / 10 self.x -= self.width / 2 when 3 # Center self.x = @message_window.x self.x += @message_window.width / 2 self.x -= self.width / 2 when 4 # 7/10 self.x = @message_window.x self.x += @message_window.width * 7 / 10 self.x -= self.width / 2 when 5 # Right self.x = @message_window.x + @message_window.width self.x -= self.width self.x -= YEA::MESSAGE::NAME_WINDOW_X_BUFFER end self.x = [[self.x, Graphics.width - self.width].min, 0].max end #-------------------------------------------------------------------------- # set_y_position #-------------------------------------------------------------------------- def set_y_position case $game_message.position when 0 self.y = @message_window.height self.y -= YEA::MESSAGE::NAME_WINDOW_Y_BUFFER else self.y = @message_window.y - self.height self.y += YEA::MESSAGE::NAME_WINDOW_Y_BUFFER end end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh contents.clear reset_font_settings @text = sprintf("\eC[%d]%s", YEA::MESSAGE::NAME_WINDOW_COLOUR, @text) draw_text_ex(YEA::MESSAGE::NAME_WINDOW_PADDING, 0, @text) end end # Window_NameMessage
#============================================================================== # ■ Window_Message #==============================================================================
class Window_Message < Window_Base #-------------------------------------------------------------------------- # alias method: initialize #-------------------------------------------------------------------------- alias window_message_initialize_ams initialize def initialize window_message_initialize_ams setup_message_font end #-------------------------------------------------------------------------- # overwrite method: window_width #-------------------------------------------------------------------------- def window_width return Variable.message_width end #-------------------------------------------------------------------------- # overwrite method: window_height #-------------------------------------------------------------------------- def window_height return fitting_height(Variable.message_rows) end #-------------------------------------------------------------------------- # alias method: create_all_windows #-------------------------------------------------------------------------- alias window_message_create_all_windows_ams create_all_windows def create_all_windows window_message_create_all_windows_ams @name_window = Window_NameMessage.new(self) end #-------------------------------------------------------------------------- # overwrite method: create_back_bitmap #-------------------------------------------------------------------------- def create_back_bitmap @back_bitmap = Bitmap.new(width, height) rect1 = Rect.new(0, 0, Graphics.width, 12) rect2 = Rect.new(0, 12, Graphics.width, fitting_height(4) - 24) rect3 = Rect.new(0, fitting_height(4) - 12, Graphics.width, 12) @back_bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true) @back_bitmap.fill_rect(rect2, back_color1) @back_bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true) end #-------------------------------------------------------------------------- # alias method: dispose_all_windows #-------------------------------------------------------------------------- alias window_message_dispose_all_windows_ams dispose_all_windows def dispose_all_windows window_message_dispose_all_windows_ams @name_window.dispose end #-------------------------------------------------------------------------- # alias method: update_all_windows #-------------------------------------------------------------------------- alias window_message_update_all_windows_ams update_all_windows def update_all_windows window_message_update_all_windows_ams @name_window.update @name_window.back_opacity = self.back_opacity @name_window.opacity = self.opacity end #-------------------------------------------------------------------------- # alias method: update_show_fast #-------------------------------------------------------------------------- alias window_message_update_show_fast_ams update_show_fast def update_show_fast @show_fast = true if Input.press?(YEA::MESSAGE::TEXT_SKIP) window_message_update_show_fast_ams end #-------------------------------------------------------------------------- # overwrite method: input_pause #-------------------------------------------------------------------------- def input_pause self.pause = true wait(10) Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) || Input.press?(YEA::MESSAGE::TEXT_SKIP) Input.update self.pause = false end #-------------------------------------------------------------------------- # overwrite method: convert_escape_characters #-------------------------------------------------------------------------- def convert_escape_characters(text) result = super(text.to_s.clone) result = namebox_escape_characters(result) result = message_escape_characters(result) return result end #-------------------------------------------------------------------------- # new method: namebox_escape_characters #-------------------------------------------------------------------------- def namebox_escape_characters(result) result.gsub!(/\eN\<(.+?)\>/i) { namewindow($1, 1) } result.gsub!(/\eN1\<(.+?)\>/i) { namewindow($1, 1) } result.gsub!(/\eN2\<(.+?)\>/i) { namewindow($1, 2) } result.gsub!(/\eNC\<(.+?)\>/i) { namewindow($1, 3) } result.gsub!(/\eN3\<(.+?)\>/i) { namewindow($1, 3) } result.gsub!(/\eN4\<(.+?)\>/i) { namewindow($1, 4) } result.gsub!(/\eN5\<(.+?)\>/i) { namewindow($1, 5) } result.gsub!(/\eNR\<(.+?)\>/i) { namewindow($1, 5) } return result end #-------------------------------------------------------------------------- # new method: namebox #-------------------------------------------------------------------------- def namewindow(text, position) @name_text = text @name_position = position return "" end #-------------------------------------------------------------------------- # new method: message_escape_characters #-------------------------------------------------------------------------- def message_escape_characters(result) result.gsub!(/\eAF\[(\d+)\]/i) { change_face($1.to_i) } return result end #-------------------------------------------------------------------------- # new method: change_face #-------------------------------------------------------------------------- def change_face(actor_id) actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0 actor = $game_actors[actor_id] return "" if actor.nil? $game_message.face_name = actor.face_name $game_message.face_index = actor.face_index return "" end #-------------------------------------------------------------------------- # alias method: new_page #-------------------------------------------------------------------------- alias window_message_new_page_ams new_page def new_page(text, pos) adjust_message_window_size window_message_new_page_ams(text, pos) end #-------------------------------------------------------------------------- # overwrite method: new_line_x #-------------------------------------------------------------------------- def new_line_x return $game_message.face_name.empty? ? 0 : YEA::MESSAGE::FACE_INDENT_X end #-------------------------------------------------------------------------- # new method: adjust_message_window_size #-------------------------------------------------------------------------- def adjust_message_window_size self.height = window_height self.width = window_width create_contents update_placement self.x = (Graphics.width - self.width) / 2 start_name_window end #-------------------------------------------------------------------------- # new method: clear_name_window #-------------------------------------------------------------------------- def clear_name_window @name_text = "" @name_position = 0 end #-------------------------------------------------------------------------- # new method: start_name_window #-------------------------------------------------------------------------- def start_name_window return if @name_text == "" @name_window.start(@name_text, @name_position) end #-------------------------------------------------------------------------- # overwrite method: fiber_main #-------------------------------------------------------------------------- def fiber_main $game_message.visible = true update_background update_placement loop do process_all_text if $game_message.has_text? process_input $game_message.clear @gold_window.close @name_window.start_close Fiber.yield break unless text_continue? end close_and_wait $game_message.visible = false @fiber = nil end #-------------------------------------------------------------------------- # alias method: open_and_wait #-------------------------------------------------------------------------- alias window_message_open_and_wait_ams open_and_wait def open_and_wait clear_name_window adjust_message_window_size window_message_open_and_wait_ams end #-------------------------------------------------------------------------- # alias method: close_and_wait #-------------------------------------------------------------------------- alias window_message_close_and_wait_ams close_and_wait def close_and_wait @name_window.force_close window_message_close_and_wait_ams end #-------------------------------------------------------------------------- # alias method: all_close? #-------------------------------------------------------------------------- alias window_message_all_close_ams all_close? def all_close? return window_message_all_close_ams && @name_window.close? end #-------------------------------------------------------------------------- # alias method: process_escape_character #-------------------------------------------------------------------------- alias window_message_process_escape_character_ams process_escape_character def process_escape_character(code, text, pos) case code.upcase when 'W' # Wait wait(obtain_escape_param(text)) else window_message_process_escape_character_ams(code, text, pos) end end end # Window_Message
#============================================================================== # # ▼ End of File # #============================================================================== |