Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

UMS Help

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?
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
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top