Ccao's U.M.S. converted to MV

Aidensmercy

Veteran
Veteran
Joined
Oct 29, 2015
Messages
121
Reaction score
24
First Language
english
Basically what the title says, I really would love to have the RMXP script of Ccao's U.M.S (Universal Message System) converted over to work with MV, or at least something so that i can have message window appear over the event or player and auto fir the text that's put in it, along with the option for name box's.

here's a picture of what i need from the XP version, and of course, the actual demo of the script for XP.

Link for the Demo

http://www.mediafire.com/download/gk11f7ip5ofv8q6/UMS.rar

and the actual RGSS Script

Code:
# *****************************************************************************# *    Universal Message System# *      v1.30# *      by Ccoa# *****************************************************************************# Usage:=beginIN MESSAGE CODES  \b          - toggle bold on and off  \bopc[i]    - change the back opacity for this message to i (should be 0-255)  \c[i]       - change the text color  \c[#IIIIII] - change the text color to the hex code (temporary)  \e[i]       - place the text box over event i (0 = player, -1 no event)  \face[name] - changes the face graphic to name.png (leave empty [] for no face)  \fl         - change face justification to left  \font[name] - change the font to name, leave empty [] to return to the default font  \fr         - change face justification to right  \g          - display the gold window  \height     - height of the message window, works only in normal mode  \i          - toggle italics on and off  \ignr       - Do not write anything on this line, only process codes, must be the first thing on a line   \jc         - justify the window to the center, ignored if using \e  \jl         - justify the window to the left, ignored if using \e  \jr         - justify the window to the right, ignored if using \e  \m          - toggle mode between normal and fit window to text  \n[i]       - display the name of actor i  \nm[name]   - display the name in the name window, leave empty [] to remove the name window  \oa[i]      - display the icon and name of armor i  \oi[i]      - display the icon and name of item i  \opc[i]     - change the opacity for this message to i (should be 0-255)  \os[i]      - display the icon and name of skill i  \ow[i]      - display the icon and name of weapon i  \p[i]       - pause for i frames before writing the next character  \pt         - toggle pause display on and off  \s          - toggle shadowed text  \shk[i]     - set window shake to i, higher i is bigger shake, 0 is no shake  \skip       - toggle text skip on and off  \t1         - switch to the talk1 comic thingy  \t2         - switch to the talk2 comic thingy  \tc         - center the text, must be the first thing on a line  \th         - switch to the thought comic thingy  \tl         - left justify the text, must be the first thing on a line  \tr         - right justify the text, must be the first thing on a line  \v[i]       - display variable i  \width      - width of the message window, works only in normal mode  \w[i]       - wait for i frames after receiving this code, then close the window  \ws[i]      - change the write speed to i  \slv[name]  - set this window to be slave window name, or show slave window name  \inc        - include this window in the last  OUT OF MESSAGE CODES (use in a Script event command)$game_system.ums_mode = NORMAL_MODE - switch to normal mode$game_system.ums_mode = FIT_WINDOW_TO_TEXT - switch to fit window mode$game_system.text_skip = true - turn text skip on$game_system.text_skip = falsetrue                           - turn text skip off (true is necessary)$game_system.text_mode = WRITE_FASTER - change skip mode to write faster$game_system.text_mode = WRITE_ALL - change skip mode to write all$game_system.write_speed = i - change the delay between letters to i frames$game_system.window_height = i - change the window height to i$game_system.window_width = i - change the window width to i$game_system.window_justification = RIGHT - make the window right justified$game_system.window_justification = LEFT - make the window left justified$game_system.window_justification = CENTER - make the window center justified$game_system.face_graphic = "filename" - change the face graphic to filename.png$game_system.face_graphic = "" - change the face graphic to none$game_system.face_graphic_justification = LEFT - the face graphic is on the left side$game_system.face_graphic_justification = RIGHT - the face graphic is on the right side$game_system.face_graphic_position = TOP - face graphic appears on top of window$game_system.face_graphic_position = CENTER - face graphic appears centered in window$game_system.face_graphic_position = BOTTOM - face graphic appears on the bottom of window$game_system.shadow_text = true - turn text shadowing on$game_system.shadow_text = falsetrue                            - turn text shadowing off (true is necessary)$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                               - turn off comic thingy$game_system.comic_enabled = true  - turn on comic thingy (only works with message_event not -1)$game_system.comic_style = TALK1   - use the talk1.png comic thingy$game_system.comic_style = TALK2   - use the talk2.png comic thingy$game_system.comic_style = THOUGHT - use the thought.png comic thingy$game_system.name = "name" - change the text of the name window to name$game_system.name = "" - remove the name window$game_system.font = "name" - change the font to name$game_system.font = "" - return the font to the default$game_system.text_justification = CENTER - center justify the text$game_system.text_justification = LEFT - left justify the text$game_system.text_justification = RIGHT - right justify the text$game_system.show_pause = true - show pause icon when waiting for user input$game_system.show_pause = false - don't show pause icon when waiting for user input$game_system.shake = 0 - turn window shake off$game_system.shake = i - set shake to i, higher i is bigger shake$game_system.sound_effect = "" - turn off the letter-by-letter SE$game_system.sound_effect = "sename" - play the SE sename with each letter written$game_system.animated_faces = false - do not use animated faces$game_system.animated_faces = true - use animated faces$game_system.animation_pause = i - Wait i frames between each animation$game_system.face_frame_width = i - Each frame on the faceset is i pixels$game_system.resting_face = "" - Do not use a resting face$game_system.resting_face = "name" - Use a different animated face named facenamename when done talking$game_system.resting_animation_pause = i - Wait i frames between resting animations$game_system.text_mode = ONE_LETTER_AT_A_TIME - write text one letter at a time$game_system.text_mode = ALL_AT_ONCE - write text all at once$game_system.font_color = Color.new(R, G, B, A) - permanently change the font color to the RGBA color given here$game_system.font_color = nil - return the font color permanently to normal_color (white, by default)$game_system.windowskin = "windowskinname" - change the message box windowskin to windowskin$game_system.windowskin = "" - change the message box windowskin back to the one in the database$game_system.name_window = true - show the name window$game_system.name_window = false - hide the name window (just show the text)$game_system.opacity = i - change the message window back opacity to i (0-255)=end# *****************************************************************************#  CONSTANTS# *****************************************************************************# modesNORMAL_MODE        = 0FIT_WINDOW_TO_TEXT = 1#text modesONE_LETTER_AT_A_TIME = 0ALL_AT_ONCE          = 1# skip modesWRITE_FASTER = 0WRITE_ALL    = 1# justificationsRIGHT  = 0CENTER = 1LEFT   = 2# positions for extra objects (face graphics, choice box, etc)ABOVE  = 0  # place the object above the top of the message boxCENTER = 1  # center the object vertically inside the message boxBOTTOM = 2  # place the bottom of the object on the bottom of the message boxSIDE   = 3  # to the side of the message box (which side depends on justification)# comic typeTALK1   = 0TALK2   = 1THOUGHT = 2# *****************************************************************************#  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 :text_mode # write one letter at a time, or all at once?    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 :name_window # should the name window be visible?    attr_accessor :font # the name of the font  attr_accessor :font_color # the name of the (permanent) font color    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_accessor :animated_faces # are the faces animated?  attr_accessor :animation_pause # how long do I wait between animation loops?  attr_accessor :face_frame_width # how many pixels wide is each face frame  attr_accessor :resting_face  # postext for waiting face graphic  attr_accessor :resting_animation_pause # how long to wait for resting graphic    attr_accessor :windowskin # what windowskin to use for messages  attr_accessor :back_opacity # back opacity of windowskin  attr_accessor :opacity # opacity of windowskin    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        @text_mode = ONE_LETTER_AT_A_TIME        @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 = ""    @name_window = false        @font = "Verdana"    @font_color = nil        @text_justification = LEFT        @show_pause = true        @shake = 0        @sound_effect = ""        @slave_windows = {}    @indy_windows  = {}        @animated_faces = false    @animation_pause = 80    @face_frame_width = 100    @resting_face = ""    @resting_animation_pause = 80        @windowskin = ""    @opacity = 255    @back_opacity = 160        @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', '\inc']                       @shortcuts = {}  end    def add_shortcut(shortcut, code)    text = shortcut.downcase    if !@used_codes.include?(text)      @shortcuts[shortcut] = code    end  end    def open_window(name)    if $game_system.indy_windows.has_key?(name)      $game_system.indy_windows[name].show = true    end  end    def close_window(name)    if $game_system.indy_windows.has_key?(name)      $game_system.indy_windows[name].dispose      $game_system.indy_windows.delete(name)    end  endend#==============================================================================# ** Game_Temp#------------------------------------------------------------------------------#  This class handles temporary data that is not included with save data.#  Refer to "$game_temp" for the instance of this class.#==============================================================================class Game_Temp  attr_accessor :choicesendclass Scene_Map  alias ums_update update  def update    $game_system.slave_windows.each_value { |window| window.update }    $game_system.indy_windows.each_value { |window| window.update }    ums_update  endendclass Interpreter  #--------------------------------------------------------------------------  # * Show Text  #--------------------------------------------------------------------------  def command_101    # If other text has been set to message_text    if $game_temp.message_text != nil      # End      return false    end    # Set message end waiting flag and callback    @message_waiting = true    $game_temp.message_proc = Proc.new { @message_waiting = false }    # Set message text on first line    $game_temp.message_text = @list[@index].parameters[0] + "\n"    line_count = 1    # Loop    loop do      # If next event command text is on the second line or after      if @list[@index + 1].code == 401        # Add the second line or after to message_text        $game_temp.message_text += @list[@index + 1].parameters[0] + "\n"        line_count += 1      # If the next event command is show text      elsif @list[@index + 1].code == 101        # If the text contains the \inc code        if @list[@index + 1].parameters[0].index(/\\[Ii][Nn][Cc]/) != nil          $game_temp.message_text += @list[@index + 1].parameters[0] + "\n"          $game_temp.message_text.sub!(/\\[Ii][Nn][Cc]/) { "" }        else          return true        end      # If event command is not on the second line or after      else        # If next event command is show choices        if @list[@index + 1].code == 102          # If choices fit on screen          #if @list[@index+1].parameters[0].size <= 4 - line_count            # Advance index            @index += 1            # Choices setup            $game_temp.choice_start = line_count            setup_choices(@list[@index].parameters)          #end        # If next event command is input number        elsif @list[@index + 1].code == 103          # If number input window fits on screen          if line_count < 4            # Advance index            @index += 1            # Number input setup            $game_temp.num_input_start = line_count            $game_temp.num_input_variable_id = @list[@index].parameters[0]            $game_temp.num_input_digits_max = @list[@index].parameters[1]          end        end        # Continue        return true      end      # Advance index      @index += 1    end  end  #--------------------------------------------------------------------------  # * Setup Choices  #--------------------------------------------------------------------------  def setup_choices(parameters)    # Set choice item count to choice_max    $game_temp.choice_max = parameters[0].size    # Set choice to message_text    $game_temp.choices = parameters[0]    # Set cancel processing    $game_temp.choice_cancel_type = parameters[1]        # Set callback    current_indent = @list[@index].indent    $game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }  end    #--------------------------------------------------------------------------  # * Input Number  #--------------------------------------------------------------------------  def command_103    # If text has been set to message_text    if $game_temp.message_text != nil      # End      return false    end    # Set message end waiting flag and callback    @message_waiting = true    $game_temp.message_proc = Proc.new { @message_waiting = false }    # Number input setup    $game_temp.message_text = ""    $game_temp.num_input_start = 0    $game_temp.num_input_variable_id = @parameters[0]    $game_temp.num_input_digits_max = @parameters[1]    # Continue    return true  end    #--------------------------------------------------------------------------  # * Script  #--------------------------------------------------------------------------  def command_355    # Set first line to script    script = @list[@index].parameters[0] + "\n"    # Loop    loop do      # If next event command is second line of script or after      if @list[@index + 1].code == 655        # Add second line or after to script        script += @list[@index + 1].parameters[0] + "\n"      # If event command is not second line or after      else        # Abort loop        break      end      # Advance index      @index += 1    end    # Evaluation    result = eval(script)    # Continue    return true  endend# *****************************************************************************#  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 = self.back_opacity        # 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")    elsif $game_system.comic_style == TALK2      @comic.bitmap = RPG::Cache.windowskin("talk2")    else # thought      @comic.bitmap = RPG::Cache.windowskin("thought")    end        # name window    @name_window = Window_Name.new    @name_window.z = self.z + 1        @pause_time = 0    @wait = 0        @show = false        @face_frame = 0  end  #--------------------------------------------------------------------------  # * Dispose  #--------------------------------------------------------------------------  def dispose    terminate_message    $game_temp.message_window_showing = false    if @input_number_window != nil      @input_number_window.dispose    end    @face.dispose    @choice_window.dispose    @comic.dispose    @name_window.dispose    super  end  #--------------------------------------------------------------------------  # * Terminate Message  #--------------------------------------------------------------------------  def terminate_message    @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    }    @done = false  end  #--------------------------------------------------------------------------  # * Refresh  #--------------------------------------------------------------------------  def refresh    self.contents.clear    if $game_system.font_color.nil?      self.contents.font.color = normal_color    else      self.contents.font.color = $game_system.font_color    end    if $game_system.windowskin != ""        self.windowskin = RPG::Cache.windowskin($game_system.windowskin)    else      self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name)    end    @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      if @text.index(/\\[Ii][Nn][Dd]\[(.*?)\]/) != nil        # is this a new independent window, or a request to display it?        if !$game_system.indy_windows.has_key?($1.to_s)          # there is no such slave window yet.  Set it up.          @text.gsub!(/\\[Ii][Nn][Dd]\[(.*?)\]/, "")          $game_system.indy_windows[$1.to_s] = Window_Slave.new(@text)          @text = ""          @show = false          terminate_message          return        end      end            # Control text processing      begin        last_text = @text.clone        @text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }      end until @text == last_text      @text.gsub!(/\\[Nn]\[([0-9]+)\]/) do        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""      end            # window mode      if @text.index(/\\[Mm]/) != nil        if $game_system.ums_mode == NORMAL_MODE          $game_system.ums_mode = FIT_WINDOW_TO_TEXT        else          $game_system.ums_mode = NORMAL_MODE        end        @text.gsub!(/\\[Mm]/) { "" }      end            # window height      @text.gsub!(/\\[Hh][Ee][Ii][Gg][Hh][Tt]\[([0-9]+)\]/) do        $game_system.window_height = $1.to_i        ""      end            # window width      @text.gsub!(/\\[Ww][Ii][Dd][Tt][Hh]\[([0-9]+)\]/) do        $game_system.window_width = $1.to_i        ""      end            # justification      @text.gsub!(/\\[Jj][Rr]/) do        $game_system.window_justification = RIGHT        reset_window        ""      end      @text.gsub!(/\\[Jj][Cc]/) do        $game_system.window_justification = CENTER        reset_window        ""      end            @text.gsub!(/\\[Jj][Ll]/) do        $game_system.window_justification = LEFT        reset_window        ""      end            # face graphics      @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          @name_window.dummy_window.visible = false        end        ""      end            # toggle pause      @text.gsub!(/\\[Pp][Tt]/) do        $game_system.show_pause = !$game_system.show_pause        ""      end            # shaking      @text.gsub!(/\\[Ss][Hh][Kk]\[([0-9]+)\]/) do        $game_system.shake = $1.to_i        ""      end            # back opacity      @text.gsub!(/\\[Bb][Oo][Pp][Cc]\[([0-9]+)\]/) do        $game_system.back_opacity = $1.to_i        self.back_opacity = $game_system.back_opacity        ""      end            # opacity      @text.gsub!(/\\[Oo][Pp][Cc]\[([0-9]+)\]/) do        $game_system.opacity = $1.to_i        self.opacity = $game_system.opacity        ""      end            # Change "\\\\" to "\000" for convenience      @text.gsub!(/\\\\/) { "\000" }      # Change "\\C" to "\001" and "\\G" to "\002"      @text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }      @text.gsub!(/\\[Gg]/) { "\002" }      @text.gsub!(/\\[Cc]\[0x([0123456789abcdef]+)\]/) { "\026[#{$1}]" }            # text skip code      @text.gsub!(/\\[Ss][Kk][Ii][Pp]/) { "\003" }            # ignore code      @text.gsub!(/\\[Ii][Gg][Nn][Rr]/) { "\023" }            # slave and indy windows      @text.gsub!(/\\[Ss][Ll][Vv]\[(.*?)\]/) { "\024[#{$1}]" }      @text.gsub!(/\\[Ii][Nn][Dd]\[(.*?)\]/) { "\025[#{$1}]" }            # bold and italics      @text.gsub!(/\\[Bb]/) { "\004" }      @text.gsub!(/\\[Ii]/) { "\005" }            # shadow      @text.gsub!(/\\[Ss]/) { "\006" }            # font      @text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?)\]/) { "\007[#{$1}]" }            # pause and wait      @text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\010[#{$1}]" }      @text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\011[#{$1}]" }            # write speed      @text.gsub!(/\\[Ww][Ss]\[([0-9]+)\]/) { "\013[#{$1}]" }                  # armor, items, skills, and weapons      @text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) {         item = $data_armors[$1.to_i]        "\014[#{$1}]" + "  " + item.name      }      @text.gsub!(/\\[Oo][Ii]\[([0-9]+)\]/) {         item = $data_items[$1.to_i]        "\015[#{$1}]" + "  " + item.name      }      @text.gsub!(/\\[Oo][Ss]\[([0-9]+)\]/) {         item = $data_skills[$1.to_i]        "\016[#{$1}]" + "  " + item.name      }      @text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) {         item = $data_weapons[$1.to_i]        "\017[#{$1}]" + "  " + item.name      }            # text justification      @text.gsub!(/\\[Tt][Cc]/) { "\020" }      @text.gsub!(/\\[Tt][Ll]/) { "\021" }      @text.gsub!(/\\[Tt][Rr]/) { "\022" }            # Resize the window to fit the contents?      if $game_system.ums_mode == FIT_WINDOW_TO_TEXT        width = 1        text = @text.split("\n")        height = 0        i = 0        for line in text          # don't count this line's width if it has the ignr code          if !line.include?("\023")            width = [width, self.contents.text_size(line).width].max            delta = self.contents.text_size(line).height            height += delta + (delta * 0.2).to_i          end        end                if $game_system.face_graphic != "" and ($game_system.face_graphic_position == CENTER or $game_system.face_graphic_position == BOTTOM)          width += @face.bitmap.width          if height < @face.bitmap.height            height = @face.bitmap.height - 32          end        end                if height == 0          height = 1        end                self.width = width + 48        self.height = height + 48         self.contents = Bitmap.new(width + 16, height)        if $game_system.font_color.nil?          self.contents.font.color = normal_color        else          self.contents.font.color = $game_system.font_color        end      else        if self.width != $game_system.window_height or self.height != $game_system.window_width          self.width = $game_system.window_width          self.height = $game_system.window_height          self.contents = Bitmap.new(self.width - 32, self.height - 32)          if $game_system.font_color.nil?            self.contents.font.color = normal_color          else            self.contents.font.color = $game_system.font_color          end        end      end            reset_window            get_x_value            @count = Graphics.frame_count      @pause_time = 0      @ignore = false      @ascending = true      @target_x = self.x + $game_system.shake      @done = false      @face_frame = 0      @done = false            self.oy = 0    end          end    #--------------------------------------------------------------------------  # * Set Window Position and Opacity Level  #--------------------------------------------------------------------------  def reset_window (change_opacity = true)    # x-coordinate depends on justification    if $game_system.message_event == -1      if $game_system.window_justification == RIGHT        self.x = 640 - $game_system.window_width      elsif $game_system.window_justification == LEFT        self.x = 0      else # center        self.x = (640 - self.width) / 2      end    else      if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil        # center on player        event_x = $game_player.screen_x      else        # center on the event specified        event_x = $game_map.events[$game_system.message_event].screen_x      end      self.x = event_x - self.width / 2      @comic.x = self.x + (self.width / 2) + 4    end        if $game_temp.in_battle      self.y = 16    else      if $game_system.message_event == -1        case $game_system.message_position          when 0  # up            self.y = 16          when 1  # middle            self.y = (480 - $game_system.window_height) / 2          when 2  # down            self.y = 480 - $game_system.window_height - 24        end      else        if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil          # above player          self.y = $game_player.screen_y - self.height - 48        else          # above event specified          self.y = $game_map.events[$game_system.message_event].screen_y - self.height - 48        end        @comic.y = self.y + self.height - 2        @comic.angle = 0      end    end    if self.y < 0 + ($game_system.name == "" ? 0 : 16)      if $game_system.comic_enabled        if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil          self.y = $game_player.screen_y - 16        else          self.y = $game_map.events[$game_system.message_event].screen_y - 16        end        @comic.angle = 180        @comic.y = self.y + 2        @comic.x = self.x + (self.width / 2) - 4      else        self.y = 0 + ($game_system.name == "" ? 0 : 16)      end    elsif self.y > 480 - self.height       self.y = 480 - self.height    end    if self.x < 0       self.x = 0    elsif self.x > 680 - self.width - 48      self.x = 640 - self.width    end        if change_opacity      if $game_system.message_frame == 0 and $game_temp.message_text != ""        self.opacity = $game_system.opacity      else        self.opacity = 0      end      self.back_opacity = $game_system.back_opacity    end          # face stuff      if $game_system.face_graphic != ""          # the player has chosen to show a face graphic        if @done and $game_system.resting_face != ""          @face.bitmap = RPG::Cache.picture($game_system.face_graphic + $game_system.resting_face)          if @face_frame * $game_system.face_frame_width >= @face.bitmap.width            @face_frame = 0          end        else          @face.bitmap = RPG::Cache.picture($game_system.face_graphic)        end                # picture y-coordinate        if $game_system.face_graphic_position == ABOVE          @face.y = self.y - @face.bitmap.height          @face_offset = 0        elsif $game_system.face_graphic_position == CENTER          delta = (@face.bitmap.height - self.height) / 2          @face.y = self.y - delta          if $game_system.animated_faces            @face_offset = $game_system.face_frame_width + 16          else            @face_offset = @face.bitmap.width + 16          end        elsif $game_system.face_graphic_position == BOTTOM           @face.y = self.y + self.height - @face.bitmap.height          if $game_system.animated_faces            @face_offset = $game_system.face_frame_width + 16          else            @face_offset = @face.bitmap.width + 16          end        else # side          delta = (@face.bitmap.height - self.height) / 2          @face.y = self.y - delta          @face_offset = 0        end                # picture x-coordinate        if $game_system.face_graphic_justification == LEFT          if $game_system.face_graphic_position == SIDE            @face.x = self.x - @face.bitmap.width          else            @face.x = self.x + 10          end        else # right side          if $game_system.animated_faces            offset = @face.bitmap.width - $game_system.face_frame_width          else            offset = 0          end          if $game_system.face_graphic_position == SIDE            @face.x = self.x + self.width + offset          else            @face.x = self.x + self.width - @face.bitmap.width - 10 + offset            @face_offset = 0          end        end                if $game_system.animated_faces          @face.src_rect = Rect.new(@face_frame * $game_system.face_frame_width, 0, $game_system.face_frame_width, @face.bitmap.height)          if @done and $game_system.resting_face != ""            pause = $game_system.resting_animation_pause          else            pause = $game_system.animation_pause          end          if Graphics.frame_count % pause == 0            @animate_face = true          end          if @animate_face            if Graphics.frame_count % 3 == 0              @face_frame += 1              if @face_frame * $game_system.face_frame_width >= @face.bitmap.width                @face_frame = 0                @animate_face = false              end            end          end        end      end            # name window      if $game_system.name != ""        @name_window.x = self.x        @name_window.y = self.y - 36        @name_window.set_name($game_system.name)      end            # 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        # If number input    if $game_temp.num_input_variable_id > 0      if @input_number_window == nil        digits_max = $game_temp.num_input_digits_max        number = $game_variables[$game_temp.num_input_variable_id]        @input_number_window = Window_InputNumber.new(digits_max)        @input_number_window.number = number      end      # determine x and y coords for number input window      if $game_system.choice_justification == LEFT        @input_number_window.x = self.x      else        @input_number_window.x = self.x + self.width - @input_number_window.width      end      if $game_system.choice_position == ABOVE        # check to make sure there is enough room above the textbox        if self.y < @input_number_window.height          # not enough room above, place below          @input_number_window.y = self.y + self.height        else          # draw above          @input_number_window.y = self.y - @choice_window.height        end      elsif $game_system.choice_position == BOTTOM        # check to make sure there is enough room below the textbox        if (480 - self.y - self.height) < @input_number_window.height          # not enough room below, place above          @input_number_window.y = self.y - @input_number_window.height        else          # draw below           @input_number_window.y = self.y + self.height        end      else # side        if $game_system.choice_justification == LEFT          # check to make sure there's room on the left side          if self.y < @input_number_window.width            # not enough room on the side, check to make sure there's room below            if (480 - self.y - self.height) < @input_number_window.height              # not enough room below, place above              @input_number_window.y = self.y - @input_number_window.height            else              # draw below               @input_number_window.y = self.y + self.height            end          else            # place on the left side            @input_number_window.y = self.y            @input_number_window.x = self.x - @choice_window.width          end        else # right          # check to make sure there's room on the right side          if (680 - (self.y + self.width)) < @input_number_window.width            # not enough room on the side, check to make sure there's room below            if (480 - self.y - self.height) < @input_number_window.height              # not enough room below, place above              @input_number_window.y = self.y - @input_number_window.height            else              # draw below               @input_number_window.y = self.y + self.height            end          else            # place on the left side            @input_number_window.y = self.y            @input_number_window.x = self.x + self.width          end        end      end    end  end  #--------------------------------------------------------------------------  # * Frame Update  #--------------------------------------------------------------------------  def update    super        if (@contents_showing and $game_system.message_event != -1 and $game_system.shake == 0) or $game_system.animated_faces      reset_window(false)    end        if $game_system.shake != 0  # shake the window      if @ascending        if @target_x != self.x          self.x += 1        else          @ascending = false          @target_x = self.x - ($game_system.shake * 2)        end      else         if @target_x != self.x          self.x -= 1        else          @ascending = true          @target_x = self.x + ($game_system.shake * 2)        end      end    end        @name_window.update        if @wait > 0      @wait -= 1      if @wait == 0        terminate_message        return      end    end        # If fade in    if @fade_in      if $game_temp.message_text == ""        @fade_in = false        return      end      self.contents_opacity += 24      if $game_system.face_graphic != ""        @face.opacity += 24      end      if $game_system.comic_enabled and $game_system.message_event != -1        @comic.opacity = self.opacity        @comic.visible = self.visible      end            if $game_system.name != ""        @name_window.visible = true        if $game_system.name_window          @name_window.dummy_window.visible = true        end      end      if @input_number_window != nil        @input_number_window.contents_opacity += 24      end      if self.contents_opacity == 255        @fade_in = false      end      return    end        # write the text    if @text != nil and @text != ""      speed = $game_system.write_speed      if $game_system.text_mode == ALL_AT_ONCE or $game_temp.in_battle        while (c = @text.slice!(/./m)) != nil          write_char(c)        end        $game_system.slave_windows.each_value { |window| window.write_all }        return      end      if $game_system.text_skip        if $game_system.skip_mode == WRITE_FASTER and Input.press?(Input::C)          # the player is holding the action button, write faster          speed /= 3        elsif $game_system.skip_mode == WRITE_ALL and Input.trigger?(Input::C)          # the player pressed the action button, write all the text          while (c = @text.slice!(/./m)) != nil            write_char(c)          end          $game_system.slave_windows.each_value { |window| window.write_all }          return        end      end      while @ignore        c = @text.slice!(/./m)        if c != nil          write_char(c)        end      end      if @pause_time > 0        @pause_time -= 1        return      end      if Graphics.frame_count - @count >= speed        if $game_system.sound_effect != ""          Audio.se_play("Audio/SE/" + $game_system.sound_effect, 80, 100)        end        @count = Graphics.frame_count        c = @text.slice!(/./m)        if c != nil          write_char(c)        end      end      return    end        if $game_system.animated_faces and $game_system.resting_face != ""      @done = true    end        # If inputting number    if @input_number_window != nil      @input_number_window.update      # Confirm      if Input.trigger?(Input::C)        $game_system.se_play($data_system.decision_se)        $game_variables[$game_temp.num_input_variable_id] =          @input_number_window.number        $game_map.need_refresh = true        # Dispose of number input window        @input_number_window.dispose        @input_number_window = nil        terminate_message      end      return    end        if @wait != 0      return    end        # If message is being displayed and contents are all written    if @contents_showing      # if choice      if $game_temp.choice_max > 0        if !@choice_window.active          @choice_window.visible = true          @choice_window.active = true          @choice_window.index = 0        end        @choice_window.update      else        # If choice isn't being displayed, show pause sign        self.pause = $game_system.show_pause      end        # Cancel        if Input.trigger?(Input::          if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0            $game_system.se_play($data_system.cancel_se)            $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)            terminate_message          end        end        # Confirm        if Input.trigger?(Input::C) and !(@wait > 0)          @done = true          $game_system.slave_windows.each_value { |window|             window.write_all             if !window.done              @done = false            end          }          if @done            if $game_temp.choice_max > 0              $game_system.se_play($data_system.decision_se)              $game_temp.choice_proc.call(@choice_window.index)            end            terminate_message          else            @finishing_up = true          end        end        return      end          if @finishing_up      $game_system.slave_windows.each_value { |window|         if !window.done          @done = true          break        end      }            if @done = false        terminate_message      end    end    # If display wait message or choice exists when not fading out    if @fade_out == false and $game_temp.message_text != nil      @contents_showing = true      $game_temp.message_window_showing = true            reset_window      refresh      Graphics.frame_reset      if @show        self.visible = true      end      self.contents_opacity = 0      if @input_number_window != nil        @input_number_window.contents_opacity = 0      end      @fade_in = true      return    end    # If message which should be displayed is not shown, but window is visible    if self.visible      @fade_out = true      self.opacity -= 48      @name_window.opacity -= 48      @comic.opacity -= 48      @face.opacity -= 48      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        @name_window.dummy_window.visible = false        @name_window.update        @fade_out = false        $game_temp.message_window_showing = false      end      return    end        if $game_temp.battle_calling or $game_temp.shop_calling or $game_temp.name_calling or $game_temp.menu_calling or $game_temp.save_calling or $game_temp.debug_calling              $game_system.indy_windows.each_pair {|name, window|           if window.show == true            window.dispose            $game_system.indy_windows.delete(name)          end        }    end  end    #--------------------------------------------------------------------------  # * Process and write the given character  #--------------------------------------------------------------------------  def write_char(c)    if c == "\000"      # Return to original text      c = "\\"    end    # If \C[n]    if c == "\001"    # Change text color      @text.sub!(/\[([0-9]+)\]/, "")      color = $1.to_i      if color >= 0 and color <= 7        self.contents.font.color = text_color(color)      end      # go to next text      return    end    # If \G    if c == "\002"      # Make gold window      if @gold_window == nil        @gold_window = Window_Gold.new        @gold_window.x = 560 - @gold_window.width        if $game_temp.in_battle          @gold_window.y = 192        else          @gold_window.y = self.y >= 128 ? 32 : 384        end        @gold_window.opacity = self.opacity        @gold_window.back_opacity = self.back_opacity      end      # go to next text      return    end    # If \skip    if c == "\003"      # toggle text skipping      $game_system.text_skip = !$game_system.text_skip      # go to next text      return    end    # If \b    if c == "\004"      # toggle bold      self.contents.font.bold = !self.contents.font.bold      # go to next text      return    end    # If \i    if c == "\005"      # toggle italics      self.contents.font.italic = !self.contents.font.italic      # go to next text      return    end    # If \s    if c == "\006"      # toggle shadow      $game_system.shadowed_text = !$game_system.shadowed_text      # go to next text      return    end    # If \font    if c == "\007"      # change font      @text.sub!(/\[(.*?)\]/, "")      font = $1.to_s      $game_system.font = font      if font == ""        self.contents.font.name = Font.default_name      else        self.contents.font.name = font      end      # go to next text      return    end    # If \p[n]    if c == "\010"      @text.sub!(/\[([0-9]+)\]/, "")      @pause_time = $1.to_i      # go to next text      return    end        # If \w[n]    if c == "\011"      @text.sub!(/\[([0-9]+)\]/, "")      @wait = $1.to_i      # go to next text      return    end        # If \ws[n]    if c == "\013"      @text.sub!(/\[([0-9]+)\]/, "")      $game_system.write_speed = $1.to_i      # go to next text      return    end     # If \oa[n]    if c == "\014"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_armors[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24      # go to next text      return    end        # If \oi[n]    if c == "\015"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_items[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24      # go to next text      return    end        # If \os[n]    if c == "\016"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_skills[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24      # go to next text      return    end        # If \ow[n]    if c == "\017"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_weapons[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24            # go to next text      return    end        # If \tc    if c == "\020"      # center justify      $game_system.text_justification = CENTER      get_x_value      # go to next text      return    end        # If \tl    if c == "\021"      # left justify      $game_system.text_justification = LEFT      get_x_value      # go to next text      return    end        # If \tr    if c == "\022"      # right justify      $game_system.text_justification = RIGHT      get_x_value      # go to next text      return    end        # If \ignr    if c == "\023"      # set ignore flage      @ignore = true      # go to next text      return    end        # if \slv    if c == "\024"      # we need to show a slave window      @text.sub!(/\[(.*?)\]/, "")      name = $1.to_s      $game_system.slave_windows[name].show = true      return    end        # if \ind    if c == "\025"      # we need to show a independent window      @text.sub!(/\[(.*?)\]/, "")      name = $1.to_s      if $game_system.indy_windows[name].show        $game_system.indy_windows[name].dispose        $game_system.indy_windows.delete(name)      else        $game_system.indy_windows[name].show = true      end      return    end        # if \c (hex color)    if c == "\026"      # convert hex color to RGB      @text.sub!(/\[([0123456789abcdef]+)\]/, "")      hex_code = $1.to_s           red   = ("0x" + hex_code.slice(0..1)).hex      blue  = ("0x" + hex_code.slice(2..3)).hex      green = ("0x" + hex_code.slice(4..5)).hex            self.contents.font.color = Color.new(red, blue, green)      return    end        # If new line text    if c == "\n"      # Add 1 to y      if !@ignore        @y += 1      end      if @text != ""        get_x_value      end      @ignore = false      # go to next text      return    end    if @ignore      return    end    # Draw text    line = self.contents.text_size("j").height    if $game_system.shadowed_text      old_color = self.contents.font.color.clone      self.contents.font.color = $game_system.shadow_color           self.contents.draw_text(6 + @x, line * @y + 2, 40, 32, c)      self.contents.font.color = old_color    end    self.contents.draw_text(4 + @x, line * @y, 40, 32, c)    # Add x to drawn text width    @x += self.contents.text_size(c).width  end    def get_x_value    # text justification - offset for first line    if $game_system.text_justification == CENTER      # get the length of the current line      w = self.contents.text_size(@text.split("\n")[0]).width      @x = (self.width - w - 48) / 2    elsif $game_system.text_justification == RIGHT      # get the length of the current line      w = self.contents.text_size(@text.split("\n")[0]).width      @x = self.width - w - 48    else # left      if $game_system.face_graphic == ""        @x = 0      else        @x = @face_offset      end    end  end    end#==============================================================================# ** Window_Choice#------------------------------------------------------------------------------#  This message window is used to display choices.#==============================================================================class Window_Choice < Window_Selectable  def initialize (choices)    super(0, 0, 32, choices.size * 32)    self.visible = false    self.active = false    self.z = 9999    @index = 0    @item_max = choices.size    @choices = choices    self.contents = Bitmap.new(32, 32)  end    def refresh    # determine necessary width    width = 64    for line in @choices      width = [width, (self.contents.text_size(line).width + 48)].max    end    self.width = width    self.height = @choices.size * 32 + 32    self.contents = Bitmap.new(width - 32, height - 32)    if $game_system.font_color.nil?      self.contents.font.color = normal_color    else      self.contents.font.color = $game_system.font_color    end    if $game_system.windowskin != ""        self.windowskin = RPG::Cache.windowskin($game_system.windowskin)    else      self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name)    end        # draw choices    y = 0    for line in @choices      # Draw text      if $game_system.shadowed_text        old_color = self.contents.font.color.clone        self.contents.font.color = $game_system.shadow_color        self.contents.draw_text(6, 32 * y + 2, width, 32, line)        self.contents.font.color = old_color      end      self.contents.draw_text(4, y * 32, width, 32, line)       y += 1    end  end        def set_choices(choices)    @choices = choices    @item_max = @choices.size    for choice in @choices      choice.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }      choice.gsub!(/\\[Nn]\[([0-9]+)\]/) {         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""      }    end    refresh  endend#==============================================================================# ** Window_Name#------------------------------------------------------------------------------#  This window is used to display names above the message window.  Uncomment#   and modify the various sections to customize.#==============================================================================class Window_Name < Window_Base  attr_accessor :dummy_window    def initialize    super(0, 0, 32, 64)    self.contents = Bitmap.new(32, 32)    self.opacity = 0        @dummy_window = Window_Dummy.new        self.visible = false  end    def set_name(name)    @name = name    refresh  end    def refresh    if @name == nil      return    end    self.width = self.contents.text_size(@name).width + 48    self.contents = Bitmap.new(width - 32, height - 32)        if $game_system.name_window      @dummy_window.x = self.x      @dummy_window.y = self.y + 12      @dummy_window.set(height - 24, width - 12)    end        # uncomment this and change the font to give the name window a fancy font    #self.contents.font.name = "Ariel"    self.contents.font.color = Color.new(0, 0, 0, 255)    self.contents.draw_text(0, 0, self.width, 32, @name)    self.contents.draw_text(0, 2, self.width, 32, @name)    self.contents.draw_text(2, 0, self.width, 32, @name)    self.contents.draw_text(2, 2, self.width, 32, @name)    # change the color to give the name window a seperate color    self.contents.font.color = normal_color    self.contents.draw_text(1, 1, self.width, 32, @name)  end    def update    super    if $game_system.name_window      @dummy_window.x = self.x      @dummy_window.y = self.y + 12      @dummy_window.update    end  end    def dispose    @dummy_window.dispose    super  endendclass Window_Dummy < Window_Base  def initialize    super(0, 0, 32, 64)    self.z = 9999    self.visible = false  end    def set(height, width)    self.height = height    self.width = width  end    def update    super    if $game_system.windowskin != ""        self.windowskin = RPG::Cache.windowskin($game_system.windowskin)    else      self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name)    end  endend#==============================================================================# ** Window_Slave#------------------------------------------------------------------------------#  These are slave windows to the main message window.  They will close when #   the user terminates them.  Initial settings are identical to the main #   message window, with one exception.  When in normal mode, it will apear#   above if the main message is below, below if it is above or centered.  Use#   message codes to change the settings for this window.#==============================================================================class Window_Slave < Window_Base  attr_accessor :show  attr_reader :done    def write_all    @write_all = true  end    #--------------------------------------------------------------------------  # * Object Initialization  #--------------------------------------------------------------------------  def initialize (text)    super(0, 0, 33, 33)    @text = text        # x-coordinate depends on justification    if @justification == RIGHT      self.x = 640 - self.width    elsif @justification == LEFT      self.x = 0    else # center      self.x = (640 - self.width) / 2    end    # y-coordinate depends on height    self.y = 480 - $game_system.window_height - 16    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 = $game_system.back_opacity        @comic_style = $game_system.comic_style    @name = $game_system.name        # comic sprite    @comic = Sprite.new    @comic.opacity = 0    @comic.z = self.z + 1    if @comic_style == TALK1      @comic.bitmap = RPG::Cache.windowskin("talk1")    elsif @comic_style == TALK2      @comic.bitmap = RPG::Cache.windowskin("talk2")    else # thought      @comic.bitmap = RPG::Cache.windowskin("thought")    end                @pause_time = 0    @wait = 0        @mode = $game_system.ums_mode    self.height = $game_system.window_height    self.width = $game_system.window_width    @justification = $game_system.window_justification    @face_graphic = $game_system.face_graphic    @face_graphic_justification = $game_system.face_graphic_justification    @message_event = $game_system.message_event    if $game_system.message_position == 2 # down      @message_position = 0    else      @message_postion = 2    end    @face_graphic_position = $game_system.face_graphic_position    if $game_system.font == ""      @font = Font.default_name    else      @font = $game_system.font    end    @text_justification = $game_system.text_justification        @shake = $game_system.shake        @face_frame = 0        refresh  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    if @name_window != nil      @name_window.dispose    end    super  end  #--------------------------------------------------------------------------  # * Terminate Message  #--------------------------------------------------------------------------  def terminate_message    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  end  #--------------------------------------------------------------------------  # * Refresh  #--------------------------------------------------------------------------  def refresh        self.contents.clear    if $game_system.font_color.nil?      self.contents.font.color = normal_color    else      self.contents.font.color = $game_system.font_color    end    if $game_system.windowskin != ""        self.windowskin = RPG::Cache.windowskin($game_system.windowskin)    else      self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name)    end    @x = @y = 0    # If waiting for a message to be displayed    if @text != nil      # replace shortcuts with original code      $game_system.shortcuts.each { |shortcut, code|        @text.gsub!(shortcut, code)      }            # 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          @mode = FIT_WINDOW_TO_TEXT        else          @mode = NORMAL_MODE        end        @text.gsub!(/\\[Mm]/) { "" }      end            # window height      @text.gsub!(/\\[Hh][Ee][Ii][Gg][Hh][Tt]\[([0-9]+)\]/) do        self.height = $1.to_i        ""      end            # window width      @text.gsub!(/\\[Ww][Ii][Dd][Tt][Hh]\[([0-9]+)\]/) do        self.width = $1.to_i        ""      end            # justification      @text.gsub!(/\\[Jj][Rr]/) do        @justification = RIGHT        reset_window        ""      end      @text.gsub!(/\\[Jj][Cc]/) do        @justification = CENTER        reset_window        ""      end            @text.gsub!(/\\[Jj][Ll]/) do        @justification = LEFT        reset_window        ""      end            # face graphics      @text.gsub!(/\\[Ff][Aa][Cc][Ee]\[(.*?)\]/) do        @face_graphic = $1.to_s        if $1.to_s == ""          @face.opacity = 0        end        ""      end      @text.gsub!(/\\[Ff][Ll]/) do        @face_graphic_justification = LEFT        ""      end      @text.gsub!(/\\[Ff][Rr]/) do        @face_graphic_justification = RIGHT        ""      end            # event centering      @text.gsub!(/\\[Ee]\[([0-9]+)\]/) do        @message_event = $1.to_i        ""      end            # comic thingy      @text.gsub!(/\\[Tt]1/) do        @comic_style = TALK1        @comic.bitmap = RPG::Cache.windowskin("talk1.png")        ""      end      @text.gsub!(/\\[Tt]2/) do        @comic_style = TALK2        @comic.bitmap = RPG::Cache.windowskin("talk2.png")        ""      end      @text.gsub!(/\\[Tt][Hh]/) do        @comic_style = THOUGHT        @comic.bitmap = RPG::Cache.windowskin("thought.png")        ""      end            # name window      @text.gsub!(/\\[Nn][Mm]\[(.*?)\]/) do        @name = $1.to_s        if $1.to_s == "" and @name_window != nil          @name_window.visible = false        end        ""      end      if @name != ""        # name window        @name_window = Window_Name.new        @name_window.z = self.z + 1        @name_window.set_name(@name)      end            # shaking      @text.gsub!(/\\[Ss][Hh][Kk]\[([0-9]+)\]/) do        @shake = $1.to_i        ""      end            # back opacity      @text.gsub!(/\\[Bb][Oo][Pp][Cc]\[([0-9]+)\]/) do        self.back_opacity = $1.to_i        ""      end            # opacity      @text.gsub!(/\\[Oo][Pp][Cc]\[([0-9]+)\]/) do        self.opacity = $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.gsub!(/\\[Cc]\[0x([0123456789abcdef]+)\]/) { "\026[#{$1}]" }            # text skip code      @text.gsub!(/\\[Ss][Kk][Ii][Pp]/) { "\003" }            # ignore code      @text.gsub!(/\\[Ii][Gg][Nn][Rr]/) { "\023" }            # bold and italics      @text.gsub!(/\\[Bb]/) { "\004" }      @text.gsub!(/\\[Ii]/) { "\005" }            # shadow      @text.gsub!(/\\[Ss]/) { "\006" }            # font      @text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?)\]/) { "\007[#{$1}]" }            # pause and wait      @text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\010[#{$1}]" }      @text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\011[#{$1}]" }            # write speed      @text.gsub!(/\\[Ww][Ss]\[([0-9]+)\]/) { "\013[#{$1}]" }                  # armor, items, skills, and weapons      @text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) {         item = $data_armors[$1.to_i]        "\014[#{$1}]" + "  " + item.name      }      @text.gsub!(/\\[Oo][Ii]\[([0-9]+)\]/) {         item = $data_items[$1.to_i]        "\015[#{$1}]" + "  " + item.name      }      @text.gsub!(/\\[Oo][Ss]\[([0-9]+)\]/) {         item = $data_skills[$1.to_i]        "\016[#{$1}]" + "  " + item.name      }      @text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) {         item = $data_weapons[$1.to_i]        "\017[#{$1}]" + "  " + item.name      }            # text justification      @text.gsub!(/\\[Tt][Cc]/) { "\020" }      @text.gsub!(/\\[Tt][Ll]/) { "\021" }      @text.gsub!(/\\[Tt][Rr]/) { "\022" }            # Resize the window to fit the contents?      if @mode == FIT_WINDOW_TO_TEXT        width = 1        text = @text.split("\n")        height = 0        i = 0        for line in text          # don't count this line's width if it has the ignr code          if !line.include?("\023")            width = [width, self.contents.text_size(line).width].max            delta = self.contents.text_size(line).height            height += delta + (6 * i) + 3            if i < 3              i += 1            end          end        end                if @face_graphic != "" and ($game_system.face_graphic_position == CENTER or $game_system.face_graphic_position == BOTTOM)          width += @face.bitmap.width          if height < @face.bitmap.height            height = @face.bitmap.height - 32          end        end                if height == 0          height = 1        end                 self.width = width + 48        self.height = height + 48        self.contents = Bitmap.new(width + 16, height)        if $game_system.font_color.nil?          self.contents.font.color = normal_color        else          self.contents.font.color = $game_system.font_color        end      else        if self.width != $game_system.window_height or self.height != $game_system.window_width          self.width = $game_system.window_width          self.height = $game_system.window_height          self.contents = Bitmap.new(self.width - 32, self.height - 32)          if $game_system.font_color.nil?            self.contents.font.color = normal_color          else            self.contents.font.color = $game_system.font_color          end        end      end            reset_window            get_x_value            @count = Graphics.frame_count      @pause_time = 0      @ignore = false      @done = false      @face_frame = 0    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 @message_event == -1      if @justification == RIGHT        self.x = 640 - self.width      elsif @justification == LEFT        self.x = 0      else # center        self.x = (640 - self.width) / 2      end    else      if @message_event == 0 or $game_map.events[@message_event] == nil        # center on player        event_x = $game_player.screen_x      else        # center on the event specified        event_x = $game_map.events[@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 @message_event == -1        case @message_position          when 0  # up            self.y = 16          when 1  # middle            self.y = (480 - self.height) / 2          when 2  # down            self.y = 480 - self.height - 24        end      else        if @message_event == 0 or $game_map.events[@message_event] == nil          # above player          self.y = $game_player.screen_y - self.height - 48        else          # above event specified          self.y = $game_map.events[@message_event].screen_y - self.height - 48        end        @comic.y = self.y + self.height - 2      end    end    if self.y < 0 + (@name == "" ? 0 : 16)      self.y = 0 + (@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 = $game_system.back_opacity    end        # face stuff      if @face_graphic != ""          # the player has chosen to show a face graphic        if @done and $game_system.resting_face != ""          @face.bitmap = RPG::Cache.picture(@face_graphic + $game_system.resting_face)          if @face_frame * $game_system.face_frame_width >= @face.bitmap.width            @face_frame = 0          end        else          @face.bitmap = RPG::Cache.picture(@face_graphic)        end                # picture y-coordinate        if @face_graphic_position == ABOVE          @face.y = self.y - @face.bitmap.height          @face_offset = 0        elsif @face_graphic_position == CENTER          delta = (@face.bitmap.height - self.height) / 2          @face.y = self.y - delta          if $game_system.animated_faces            @face_offset = $game_system.face_frame_width + 16          else            @face_offset = @face.bitmap.width + 16          end        elsif @face_graphic_position == BOTTOM           @face.y = self.y + self.height - @face.bitmap.height          if $game_system.animated_faces            @face_offset = $game_system.face_frame_width + 16          else            @face_offset = @face.bitmap.width + 16          end        else # side          delta = (@face.bitmap.height - self.height) / 2          @face.y = self.y - delta          @face_offset = 0        end                # picture x-coordinate        if @face_graphic_justification == LEFT          if @face_graphic_position == SIDE            @face.x = self.x - @face.bitmap.width          else            @face.x = self.x + 10          end        else          if $game_system.animated_faces            offset = @face.bitmap.width - $game_system.face_frame_width          else            offset = 0          end          if @face_graphic_position == SIDE            @face.x = self.x + self.width + offset          else            @face.x = self.x + self.width - @face.bitmap.width - 10 + offset            @face_offset = 0          end        end                if $game_system.animated_faces          @face.src_rect = Rect.new(@face_frame * $game_system.face_frame_width, 0, $game_system.face_frame_width, @face.bitmap.height)          if @done and $game_system.resting_face != ""            pause = $game_system.resting_animation_pause          else            pause = $game_system.animation_pause          end          if Graphics.frame_count % pause == 0            @animate_face = true          end          if @animate_face            if Graphics.frame_count % 3 == 0              @face_frame += 1              if @face_frame * $game_system.face_frame_width >= @face.bitmap.width                @face_frame = 0                @animate_face = false              end            end          end        end      end            # name window      if @name != "" and @name != nil        @name_window.set_name(@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 !@show      return    else      self.visible = true      if @face_graphic != ""        @face.opacity = 255      end      if $game_system.comic_enabled and @message_event != -1        @comic.opacity = 255      end      if @name != ""        @name_window.visible = true      end      if @input_number_window != nil        @input_number_window.contents_opacity = 255      end      reset_window    end            if (@contents_showing and $game_system.message_event != -1 and @shake == 0) or $game_system.animated_faces      reset_window(false)    end        if $game_system.shake != 0  # shake the window      if @ascending        if @target_x != self.x          self.x += 1        else          @ascending = false          @target_x = self.x - ($game_system.shake * 2)        end      else         if @target_x != self.x          self.x -= 1        else          @ascending = true          @target_x = self.x + ($game_system.shake * 2)        end      end    end        if @wait > 0      @wait -= 1      if @wait == 0        terminate_message        return      end    end        # If fade in    if @fade_in      self.contents_opacity += 24      if @face_graphic != ""        @face.opacity += 24      end      if $game_system.comic_enabled and @message_event != -1        @comic.opacity += 24      end      if @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 @write_all          # the player pressed the action button, write all the text          while (c = @text.slice!(/./m)) != nil            write_char(c)          end          return        end      end      while @ignore        c = @text.slice!(/./m)        if c != nil          write_char(c)        end      end      if @pause_time > 0        @pause_time -= 1        return      end      if Graphics.frame_count - @count >= speed        if $game_system.sound_effect != ""          Audio.se_play("Audio/SE/" + $game_system.sound_effect, 80, 100)        end        @count = Graphics.frame_count        c = @text.slice!(/./m)        if c != nil          write_char(c)        end      end      return    end        @done = true        # 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 = true      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      @font = font      if font == ""        self.contents.font.name = Font.default_name      else        self.contents.font.name = font      end      # go to next text      return    end    # If \p[n]    if c == "\010"      @text.sub!(/\[([0-9]+)\]/, "")      @pause_time = $1.to_i      # go to next text      return    end        # If \w[n]    if c == "\011"      @text.sub!(/\[([0-9]+)\]/, "")      @wait = $1.to_i      # go to next text      return    end        # If \ws[n]    if c == "\013"      @text.sub!(/\[([0-9]+)\]/, "")      $game_system.write_speed = $1.to_i      # go to next text      return    end     # If \oa[n]    if c == "\014"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_armors[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24      # go to next text      return    end        # If \oi[n]    if c == "\015"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_items[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24      # go to next text      return    end        # If \os[n]    if c == "\016"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_skills[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24      # go to next text      return    end        # If \ow[n]    if c == "\017"      @text.sub!(/\[([0-9]+)\]/, "")      index = $1.to_i      @text.sub!("  ", "")      item = $data_weapons[index]      # draw the icon      icon = RPG::Cache.icon(item.icon_name)      self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24))      @x += 24            # go to next text      return    end        # If \tc    if c == "\020"      # center justify      @text_justification = CENTER      get_x_value      # go to next text      return    end        # If \tl    if c == "\021"      # left justify      @text_justification = LEFT      get_x_value      # go to next text      return    end        # If \tr    if c == "\022"      # right justify      @text_justification = RIGHT      get_x_value      # go to next text      return    end        # If \ignr    if c == "\023"      # set ignore flage      @ignore = true      # go to next text      return    end        # if \c (hex color)    if c == "\026"      # convert hex color to RGB      @text.sub!(/\[([0123456789abcdef]+)\]/, "")      hex_code = $1.to_s           red   = ("0x" + hex_code.slice(0..1)).hex      blue  = ("0x" + hex_code.slice(2..3)).hex      green = ("0x" + hex_code.slice(4..5)).hex            self.contents.font.color = Color.new(red, blue, green)      return    end        # If new line text    if c == "\n"      # Add 1 to y      if !@ignore        @y += 1      end      if @text != ""        get_x_value      end      @ignore = false      # go to next text      return    end    if @ignore      return    end    # Draw text    line = self.contents.text_size("dj").height    if $game_system.shadowed_text      old_color = self.contents.font.color.clone      self.contents.font.color = $game_system.shadow_color      self.contents.draw_text(6 + @x, line * @y + 2, 40, 32, c)      self.contents.font.color = old_color    end    self.contents.draw_text(4 + @x, line * @y, 40, 32, c)    # Add x to drawn text width    @x += self.contents.text_size(c).width  end    def get_x_value    # text justification - offset for first line    if @text_justification == CENTER      # get the length of the current line      w = self.contents.text_size(@text.split("\n")[0]).width      @x = (self.width - w - 48) / 2    elsif @text_justification == RIGHT      # get the length of the current line      w = self.contents.text_size(@text.split("\n")[0]).width      @x = self.width - w - 48    else # left      if @face_graphic == ""        @x = 0      else        @x = @face_offset      end    end  endend#==============================================================================# ** Window_InputNumber#------------------------------------------------------------------------------#  This window is for inputting numbers, and is used within the#  message window.#==============================================================================class Window_InputNumber < Window_Base  #--------------------------------------------------------------------------  # * Object Initialization  #     digits_max : digit count  #--------------------------------------------------------------------------  def initialize(digits_max)    @digits_max = digits_max    @number = 0    # Calculate cursor width from number width (0-9 equal width and postulate)    dummy_bitmap = Bitmap.new(32, 32)    @cursor_width = dummy_bitmap.text_size("0").width + 8    dummy_bitmap.dispose    super(0, 0, @cursor_width * @digits_max + 32, 64)    self.contents = Bitmap.new(width - 32, height - 32)    self.z += 9999    self.opacity = $game_system.opacity    self.back_opacity = $game_system.back_opacity    @index = 0    refresh    update_cursor_rect  end    #--------------------------------------------------------------------------  # * Refresh  #--------------------------------------------------------------------------  def refresh    self.contents.clear    if $game_system.font_color.nil?      self.contents.font.color = normal_color    else      self.contents.font.color = $game_system.font_color    end    if $game_system.windowskin != ""        self.windowskin = RPG::Cache.windowskin($game_system.windowskin)    else      self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name)    end    s = sprintf("%0*d", @digits_max, @number)    for i in 0...@digits_max      # Draw text      if $game_system.shadowed_text        old_color = self.contents.font.color.clone        self.contents.font.color = $game_system.shadow_color        self.contents.draw_text(i * @cursor_width + 6, 2, 32, 32, s[i,1])        self.contents.font.color = old_color      end      self.contents.draw_text(i * @cursor_width + 4, 0, 32, 32, s[i,1])    end  endend
 

Ghost of Christmas Kloe

The Icecream Princess
Veteran
Joined
Nov 15, 2015
Messages
1,548
Reaction score
957
First Language
English
Primarily Uses
RMMZ
Thats pretty cool looking if you ask me! I would love to see this made for mv as well!
 
Joined
Apr 30, 2012
Messages
216
Reaction score
35
First Language
Spanish
Primarily Uses
There is a problem with that... If i dont bad remember,Ccoa doesnt want people to convert his works to other engines.

Found the information in other rpg maker site a few years ago.
 
Last edited by a moderator:

Milena

The woman of many questions
Veteran
Joined
Jan 26, 2014
Messages
1,281
Reaction score
106
First Language
Irish
Primarily Uses
N/A
There is a problem with that... If i dont bad remember,Ccoa doesnt want people to convert his works to other engines.

Found the information in other rpg maker site a few years ago.
Yes, especially if he is not informed.
 

Aidensmercy

Veteran
Veteran
Joined
Oct 29, 2015
Messages
121
Reaction score
24
First Language
english
There is a problem with that... If i dont bad remember,Ccoa doesnt want people to convert his works to other engines.

Found the information in other rpg maker site a few years ago.
Basically what the title says, I really would love to have the RMXP script of Ccao's U.M.S (Universal Message System) converted over to work with MV, or at least something so that i can have message window appear over the event or player and auto fir the text that's put in it, along with the option for name box's.
That's fine if we cannot convert it over, then maybe we could use the script as a reference and make something new based on it.

Not sure if Ccao is even in the scene anymore.
 

Milena

The woman of many questions
Veteran
Joined
Jan 26, 2014
Messages
1,281
Reaction score
106
First Language
Irish
Primarily Uses
N/A
We can wait if someone can do the same thing. I've seen his weather system redone in MV already, so this messaging system may come in later.
 

Emmych

forever rotting in the shamecube, floating eternal
Veteran
Joined
Mar 1, 2012
Messages
1,009
Reaction score
210
First Language
Anglais~
Primarily Uses
I think someone was developing something like this already, actually!  I remember seeing a few things in the forums yesterday.

Redspark is developing a plugin called Comic Bubbles!  This one doesn't have a release yet, but it's basically what you're looking for.  One to watch!

There's also Fogomax's TTK Message Plus.  This one does have a release, but isn't yet compatible with Yanfly's Message core.  Once that's ready, this'll be A+++, imo.

Finally, we've got Nelderson's N.A.S.T.Y. Text Pop Over Events, which could be used for this purpose, I'm sure.

Hope you find something that works out!  
 
Joined
Apr 30, 2012
Messages
216
Reaction score
35
First Language
Spanish
Primarily Uses
i'm agree with Shaz... Anyway you can try the message plus plugin made by Fogomax as Emmych says,its under development but looks very promising.
 

Victor Sant

Veteran
Veteran
Joined
Mar 17, 2012
Messages
1,694
Reaction score
1,452
First Language
Portuguese
Primarily Uses
It's not like CCOA script is the only one that provides such functionallity. And it doesn't need to be a conversion.

Someone can simply do it's own code or convert someone else script that provide similar functionality.

CCOA owns the code, but not the concept of adding code to the message box for extra functionality (it's been on the maker since the begin) CCOA wasn't even the first one to expand it, although it was the one who expanded it most.
 

Milena

The woman of many questions
Veteran
Joined
Jan 26, 2014
Messages
1,281
Reaction score
106
First Language
Irish
Primarily Uses
N/A
It's not like CCOA script is the only one that provides such functionallity. And it doesn't need to be a conversion.

Someone can simply do it's own code or convert someone else script that provide similar functionality.

CCOA owns the code, but not the concept of adding code to the message box for extra functionality (it's been on the maker since the begin) CCOA wasn't even the first one to expand it, although it was the one who expanded it most.
I like your ideology. 
 

Aidensmercy

Veteran
Veteran
Joined
Oct 29, 2015
Messages
121
Reaction score
24
First Language
english
That doesn't matter. Her requests still need to be respected.
I don't mean to not respect her requests, just stating that it might be pretty hard to get her permission anymore.

This can all be done starting all over from scratch.

I also have some more inspiration for who ever wants to take a look at doing this plugin, at least for some more extras that could/should be added to this plugin.

This RGSS script is AMS (Advanced Message System) Remade by Dubealex.

here's some pics and the script.

#===================================================# ■ AMS - Advanced Message Script - R4 [update #2]

#Edited by jimme reashu for bubble effect

#===================================================

# For more infos and update, visit:

# www.dubealex.com (Creation Asylum)

#

# Edited, Fixed and Enhanced by: Dubealex

# Original Script Core by: XRXS Scripter (Jap Dudes)

# HTML Hexadecimal color feature from: Phylomorphis

#

# Special Thanks:

# Rabu: For enabling the Show Face feature in an encrypted project

#

# To found all my new features, search the following: #NEW

# To configure the button to skip  the dialog, search: #SKIP_TEXT_CODE

#

# May 18, 2005

 

#Added arrows to the \p[x] function, and fixed a

#bug with faces using the same.

#/Februari 12, 2006

#Jimme

#===================================================

 

#------------------------------------------------------------------------------

# * SDK Log Script

#------------------------------------------------------------------------------

SDK.log("AMS + Speech Bubbles", "Alexandre Dubé feat Jimme Reashu", 1, "12.02.06")

#------------------------------------------------------------------------------

# * Begin SDK Enable Test

#------------------------------------------------------------------------------

if SDK.state("AMS + Speech Bubbles") == true

LETTER_BY_LETTER_MODE = true #Set the letter by letter mode ON/OFF 

#===================================================

# ▼ CLASS AMS Begins

#===================================================

class AMS

#--------------------------------------------------------------------------

attr_accessor :name_box_x_offset

attr_accessor :name_box_y_offset

attr_accessor :font_type

attr_accessor :name_font_type

attr_accessor :font_size

attr_accessor :name_font_size

attr_accessor :message_box_opacity

attr_accessor :name_box_skin

attr_accessor :name_box_text_color

attr_accessor :message_box_text_color

attr_accessor :message_box_skin

attr_accessor :name_box_width

attr_accessor :name_box_height

attr_accessor :message_width

attr_accessor :message_height

attr_accessor :message_x

attr_accessor :message_y_bottom

attr_accessor :message_y_middle

attr_accessor :message_y_top

attr_accessor :event_message_x_ofset

attr_accessor :event_message_y_ofset

#--------------------------------------------------------------------------

def initialize

@name_box_x_offset = 30 #Choose the X axis offset of the name bos. default= 0

@name_box_y_offset = -10 #Choose the Y axis offset of the name bos. default= -10

@name_box_width = 15 #Choose the width of the Name Box. default= 8 

@name_box_height = 26 #Choose the height of the Name Box. default= 26

 

@font_type = "Arial" #Choose the Font Name (Case Sensitive) for message box

@name_font_type = "Monotype Corsiva" #Choose the Font Name (Case Sensitive) for Name Box

@font_size = 22 #Choose the default Font Size for message box text

@name_font_size = 22 #Choose the deafault Font Size for Name Box text

@name_box_text_color=0 #Choose the Text Color of the Name Box

@message_box_text_color=0 #Choose the Text Color of the Message Box

 

@message_box_opacity = 160 #Choose the opacity of the message window. Default=160

@message_box_skin = "ws1" #Choose the WindowSkin for the Message Box

@name_box_skin = "ws1" #Choose the WindowSkin for the Name Box

 

@message_width = 480 #Choose the width size of the message box. Default=480

@message_height = 160 #Choose the height size of the message box. Default=160

@message_x = 80 #Choose the X position of the message box. Default=80

@message_y_bottom = 304 #Choose the Y bottom position of the message box. Default=304

@message_y_middle = 160 #Choose the Y middle position of the message box. Default=160

@message_y_top = 16 #Choose the Y top position of the message box. Default=16

 

@event_message_x_ofset = 0 #Choose the X position offset of the event message. Default=0

@event_message_y_ofset = 0#48 #Choose the Y position offset of the event message. Default=48

end

end

#===================================================

# ▲ CLASS AMS Ends

#===================================================

 

 

#===================================================

# ▼ Class Window_Message Begins

#===================================================

class Window_Message < Window_Selectable 

#--------------------------------------------------------------------------

alias xrxs9_initialize initialize

alias xrxs9_terminate_message terminate_message

#--------------------------------------------------------------------------

def initialize

 

@alex_skip = false

 

xrxs9_initialize

 

if $soundname_on_speak == nil then

$soundname_on_speak = ""

end

 

$gaiji_file = "./Graphics/Gaiji/sample.png"

 

if FileTest.exist?($gaiji_file)

@gaiji_cache = Bitmap.new($gaiji_file)

else

@gaigi_cache = nil

end

@opacity_text_buf = Bitmap.new(32, 32)

end

 

#--------------------------------------------------------------------------

 

def terminate_message

if @name_window_frame != nil

@name_window_frame.dispose

@name_window_frame = nil

end

 

if @name_window_text != nil

@name_window_text.dispose

@name_window_text = nil

end

 

unless @arrsprite == nil

@arrsprite.dispose

@arrsprite=nil

end

xrxs9_terminate_message

end

 

#--------------------------------------------------------------------------

 

def refresh

 

self.contents.clear

self.contents.font.color = text_color($ams.message_box_text_color)

self.contents.font.name = $ams.font_type

self.contents.font.size = $ams.font_size

self.windowskin = RPG::Cache.windowskin($ams.message_box_skin)

@x = @y = @max_x = @max_y = @indent = @lines = 0

@face_indent = 0

@opacity = 255

@cursor_width = 0

@write_speed = 0

@write_wait = 0

@mid_stop = false

@face_file = nil

@popchar = -2

 

if $game_temp.choice_start == 0

@x = 8

end

 

if $game_temp.message_text != nil

@now_text = $game_temp.message_text

if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then

@face_file = $1 + ".png"

@x = @face_indent = 128

if FileTest.exist?("Graphics/Pictures/" + $1 + ".png")

self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))

end

@now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }

end

 

begin

last_text = @now_text.clone

@now_text.gsub!(/\\[Vv]\[([iiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }

end until @now_text == last_text

@now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do

$game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""

end

 

#NEW

#Dubealex's Stop Skip Text ON-OFF

@now_text.gsub!(/\\[%]/) { "\100" }

#End new command

 

#NEW

#Dubealex's Show Monster Name Feature

@now_text.gsub!(/\\[Mm]\[([0-9]+)\]/) do

$data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""

end

#End new command

 

#NEW

#Dubealex's Show Item Price Feature

@now_text.gsub!(/\\[Pp]rice\[([0-9]+)\]/) do

$data_items[$1.to_i] != nil ? $data_items[$1.to_i].price : ""

end

#End new command

 

#NEW

#Dubealex's Show Hero Class Name Feature

@now_text.gsub!(/\\[Cc]lass\[([0-9]+)\]/) do

$data_classes[$data_actors[$1.to_i].class_id] != nil ? $data_classes[$data_actors[$1.to_i].class_id].name : ""

end

#End new command

 

#NEW

#Dubealex's Show Current Map Name Feature

@now_text.gsub!(/\\[Mm]ap/) do

$game_map.name != nil ? $game_map.name : ""

end

#End new command

 

#NEW

#Dubealex's Choose Name Box Text Color

@now_text.gsub!(/\\[Zz]\[([0-9]+)\]/) do

$ams.name_box_text_color=$1.to_i

@now_text.sub!(/\\[Zz]\[([0-9]+)\]/) { "" }

end

#End new command

 

name_window_set = false

if (/\\[Nn]ame\[(.+?)\]/.match(@now_text)) != nil

name_window_set = true

name_text = $1

@now_text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }

end

 

if (/\\[Pp]\[([-1,0-9,C,c]+)\]/.match(@now_text))!=nil then

@popchar = $1#.to_i

@noarrow = @popchar.downcase == "c"

@popchar = @popchar.to_i

 

if @popchar == -1

@x = @indent = 48

@y = 4

end

@now_text.gsub!(/\\[Pp]\[([-1,0-9,C,c]+)\]/) { "" }

end

 

@max_choice_x = 0

if @popchar >= 0

@text_save = @now_text.clone

@max_x = 0

@max_y = 4

for i in 0..3

line = @now_text.split(/\n/)[3-i]

@max_y -= 1 if line == nil and @max_y <= 4-i

next if line == nil

line.gsub!(/\\\w\[(\w+)\]/) { "" }

cx = contents.text_size(line).width

@max_x = cx if cx > @max_x

if i >= $game_temp.choice_start

@max_choice_x = cx if cx > @max_choice_x

end

end

if @face_file == nil

self.width = @max_x + 32

self.height = (@max_y - 1) * 32 + 64

else

self.width = @max_x + 32 + @face_indent

self.height = [(@max_y - 1) * 32 + 64,128].max

end

@max_choice_x -= 68

@max_choice_x -= @face_indent*216/128

else

@max_x = self.width - 32 - @face_indent

for i in 0..3

holder = i

line = @now_text.split(/\n/)[holder]

next if line == nil

line.gsub!(/\\\w\[(\w+)\]/) { "" }

cx = contents.text_size(line).width

if i >= $game_temp.choice_start

@max_choice_x = cx if cx > @max_choice_x

end

end

@max_choice_x += 8

end

@cursor_width = 0

@now_text.gsub!(/\\\\/) { "\000" }

@now_text.gsub!(/\\[Cc]\[([0123456789ABCDEF#]+)\]/) { "\001[#{$1}]" }

@now_text.gsub!(/\\[Gg]/) { "\002" }

@now_text.gsub!(/\\[ss]\[([0-9]+)\]/) { "\003[#{$1}]" }

@now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }

 

#NEW

#Dubealex's Permanent Color Change

@now_text.gsub!(/\\[Cc]olor\[([0-9]+)\]/) do

$ams.message_box_text_color= $1.to_i

@now_text.sub!(/\\[Cc]\[([0-9]+)\]/) { "" }

end

#End of new command

 

#NEW

#Dubealex's Font Change Feature

@now_text.gsub(/\\[Tt]\[(.*?)\]/) do

buftxt = $1.to_s

$ams.font_type = buftxt

@now_text.sub!(/\\[Tt]\[(.*?)\]/) { "" }

end

#End of new command

 

@now_text.gsub!(/\\[.]/) { "\005" }

@now_text.gsub!(/\\[|]/) { "\006" }

@now_text.gsub!(/\\[>]/) { "\016" }

@now_text.gsub!(/\\[<]/) { "\017" }

@now_text.gsub!(/\\[!]/) { "\020" }

@now_text.gsub!(/\\[~]/) { "\021" }

@now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" }

@now_text.gsub!(/\\[ii]/) { "\023" }

@now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }

@now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }

@now_text.gsub!(/\\[bb]\[([0-9]+)\]/) { "\026[#{$1}]" }

@now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "\027[#{$1}]" }

 

reset_window

 

if name_window_set

color=$ams.name_box_text_color

off_x = $ams.name_box_x_offset

off_y = $ams.name_box_y_offset

space = 2

x = self.x + off_x - space / 2

y = self.y + off_y - space / 2

w = self.contents.text_size(name_text).width + $ams.name_box_width + space

h = $ams.name_box_height + space

@name_window_frame = Window_Frame.new(x, y, w, h)

@name_window_frame.z = self.z + 1

x = self.x + off_x + 4

y = self.y + off_y

@name_window_text = Air_Text.new(x, y, name_text, color)

@name_window_text.z = self.z + 2

end

end

 

reset_window

 

if $game_temp.choice_max > 0

@item_max = $game_temp.choice_max

self.active = true

self.index = 0

end

 

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

 

#--------------------------------------------------------------------------

 

def update

 

super

if @fade_in

self.contents_opacity += 24

if @input_number_window != nil

@input_number_window.contents_opacity += 24

end

if self.contents_opacity == 255

@fade_in = false

end

return

end

@now_text = nil if @now_text == ""

 

if @now_text != nil and @mid_stop == false

if @write_wait > 0

@write_wait -= 1

return

end

text_not_skip = LETTER_BY_LETTER_MODE

while true

@max_x = @x if @max_x < @x

@max_y = @y if @max_y < @y

if (c = @now_text.slice!(/./m)) != nil

if c == "\000"

c = "\\"

end

 

if c == "\001"

@now_text.sub!(/\[([0123456789ABCDEF#]+)\]/, "")

temp_color = $1

color = temp_color.to_i

leading_x = temp_color.to_s.slice!(/./m)

if leading_x == "#"

self.contents.font.color = hex_color(temp_color)

next

end

if color >= 0 and color <= 7

self.contents.font.color = text_color(color)

end

next

end

 

if c == "\002"

if @gold_window == nil and @popchar <= 0

@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

c = ""

end

 

if c == "\003"

@now_text.sub!(/\[([0-9]+)\]/, "")

speed = $1.to_i

if speed >= 0 and speed <= 19

@write_speed = speed

end

c = ""

end

 

if c == "\004"

@now_text.sub!(/\[(.*?)\]/, "")

buftxt = $1.dup.to_s

if buftxt.match(/\//) == nil and buftxt != "" then

$soundname_on_speak = "Audio/SE/" + buftxt

else

$soundname_on_speak = buftxt.dup

end

c = ""

elsif c == "\004"

c = ""

end

 

if c == "\005"

@write_wait += 5

c = ""

end

 

if c == "\006"

@write_wait += 20

c = ""

end

 

if c == "\016"

text_not_skip = false

c = ""

end

 

if c == "\017"

text_not_skip = true

c = ""

end

 

if c == "\020"

@mid_stop = true

c = ""

end

 

if c == "\021"

terminate_message

return

end

 

if c == "\023"

@indent = @x

c = ""

end

 

if c == "\024"

@now_text.sub!(/\[([0-9]+)\]/, "")

@opacity = $1.to_i

color = self.contents.font.color

self.contents.font.name = $ams.font_type

self.contents.font.size = $ams.font_size

self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)

c = ""

end

 

if c == "\025"

@now_text.sub!(/\[([0-9]+)\]/, "")

self.contents.font.size = [[$1.to_i, 6].max, 32].min

c = ""

end

 

if c == "\026"

@now_text.sub!(/\[([0-9]+)\]/, "")

@x += $1.to_i

c = ""

end

 

if c == "\027"

@now_text.sub!(/\[(.*?)\]/, "")

@x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity)

if $soundname_on_speak != ""

Audio.se_play($soundname_on_speak)

end

c = ""

end

 

if c == "\030"

@now_text.sub!(/\[(.*?)\]/, "")

self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))

if $soundname_on_speak != ""

Audio.se_play($soundname_on_speak)

end

@x += 24

c = ""

end

 

if c == "\n"

@lines += 1

@y += 1

@x = 0 + @indent + @face_indent

if @lines >= $game_temp.choice_start

@x = 8 + @indent + @face_indent

@cursor_width = @max_choice_x

end

c = ""

end

 

if c == "\022"

@now_text.sub!(/\[([0-9]+)\]/, "")

@x += gaiji_draw(4 + @x, @y * line_height + (line_height - self.contents.font.size), $1.to_i)

c = ""

end

 

#NEW

#Dubealex's Text Skip On/OFF Command

if c == "\100"

if @alex_skip==false

@alex_skip=true

else

@alex_skip=false

end

c = ""

end 

#end of new command

 

if c != ""

self.contents.draw_text(0+@x, 32 * @y, 40, 32, c)

@x += self.contents.text_size( c ).width

if $soundname_on_speak != "" then

Audio.se_play($soundname_on_speak)

end

end

 

#SKIP_TEXT_CODE

 

# B = Escape, 0 (On The NumPad), X

# C = Enter, Space Bar and C

# A = Shift, Z

 

if Input.press?(Input::C) # <-- Change the value on that line

if @alex_skip==false 

text_not_skip = false

end

end

else

text_not_skip = true

break

end

 

if text_not_skip

break

end

end

@write_wait += @write_speed

return

end

 

if @input_number_window != nil

@input_number_window.update

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

@input_number_window.dispose

@input_number_window = nil

terminate_message

end

return

end

 

if @contents_showing

if $game_temp.choice_max == 0

self.pause = true

end

 

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

 

if Input.trigger?(Input::C)

if $game_temp.choice_max > 0

$game_system.se_play($data_system.decision_se)

$game_temp.choice_proc.call(self.index)

end

if @mid_stop

@mid_stop = false

return

else

terminate_message

end

end

return

end

 

if @fade_out == false and $game_temp.message_text != nil

@contents_showing = true

$game_temp.message_window_showing = true

refresh

Graphics.frame_reset

self.visible = true

self.contents_opacity = 0

if @input_number_window != nil

@input_number_window.contents_opacity = 0

end

@fade_in = true

return

end

 

if self.visible

@fade_out = true

self.opacity -= 48

if self.opacity == 0

self.visible = false

@fade_out = false

$game_temp.message_window_showing = false

end

return

end

end

 

#--------------------------------------------------------------------------

 

def get_character(parameter)

 

case parameter

when 0 

return $game_player

else

events = $game_map.events

return events == nil ? nil : events[parameter]

end

end

 

#--------------------------------------------------------------------------

 

def reset_window

 

if @popchar >= 0

events = $game_map.events

if events != nil

character = get_character(@popchar)

x = [[character.screen_x - self.width / 2, 4].max, 636 - self.width].min

if @face_file != nil and @face == nil

@face = true

if self.height <= 144

self.height = 144

end

else

@face = nil

end

y =[character.screen_y - self.height - 48, 476 - self.height].min

 

if y < 0

y = character.screen_y 

ay=y

else

ay=y + self.height

end

ax=[character.screen_x,8].max

ax=[ax,628].min

 

ay=[ay,480].min

if @noarrow != true

@arrsprite=Sprite.new if @arrsprite==nil

if ax<(640-self.width/2) and ay>y

ay -= 1

@arrsprite.bitmap=RPG::Cache.picture("arrowl.png")

elsif ay>y

@arrsprite.bitmap=RPG::Cache.picture("arrowr.png")

ay-=1

ax-=18

elsif ax<(640-self.width/2)

ay -= 32

y -= 16

@arrsprite.bitmap=RPG::Cache.picture("arrowdl.png")

else

ay-=32

y -= 16

ax-=18

@arrsprite.bitmap=RPG::Cache.picture("arrowdr.png")

end

@arrsprite.x=ax

@arrsprite.y=ay

@arrsprite.z=50001

end

self.x = x

self.y = y

end

elsif @popchar == -1

self.x = -4

self.y = -4

self.width = 648

self.height = 488

else

if $game_temp.in_battle

self.y = 16

else

case $game_system.message_position

when 0 

self.y = $ams.message_y_top

when 1 

self.y = $ams.message_y_middle

when 2 

self.y = $ams.message_y_bottom

end

self.x = $ams.message_x

if @face_file == nil

self.width = $ams.message_width

self.x = $ams.message_x

self.height = $ams.message_height

else

if self.width <= 600

self.width = 600

self.x -=60

end

end

 

end

end

self.contents = Bitmap.new(self.width - 32, self.height - 32)

    self.contents.font.name = $defaultfontface

self.contents.font.color = text_color($ams.message_box_text_color)

self.contents.font.name = $ams.font_type

self.contents.font.size = $ams.font_size

if @face_file != nil

self.contents.blt(8, 8, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))

end

if @popchar == -1

self.opacity = 255

self.back_opacity = 0

elsif $game_system.message_frame == 0

self.opacity = 255

self.back_opacity = $ams.message_box_opacity

else

self.opacity = 0

self.back_opacity = $ams.message_box_opacity

end

end

 

#--------------------------------------------------------------------------

 

def gaiji_draw(x, y, num)

 

if @gaiji_cache == nil

return 0

else

if @gaiji_cache.width < num * 24

return 0

end

 

if self.contents.font.size >= 20 and self.contents.font.size <= 24

size = 24

else

size = self.contents.font.size * 100 * 24 / 2200

end

 

self.contents.stretch_blt(Rect.new(x, y, size, size), @gaiji_cache, Rect.new(num * 24, 0, 24, 24))

 

if $soundname_on_speak != "" then

Audio.se_play($soundname_on_speak)

end

return size

end

end

 

#--------------------------------------------------------------------------

 

def line_height

#return 32

if self.contents.font.size >= 20 and self.contents.font.size <= 24

return 32

else

return self.contents.font.size * 15 / 10

end

end

 

#--------------------------------------------------------------------------

 

def ruby_draw_text(target, x, y, str,opacity)

 

sizeback = target.font.size

target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2

rubysize = [rubysize, 6].max

opacity = [[opacity, 0].max, 255].min

split_s = str.split(/,/)

split_s[0] == nil ? split_s[0] = "" : nil

split_s[1] == nil ? split_s[1] = "" : nil

 

height = sizeback + rubysize

width = target.text_size(split_s[0]).width

 

target.font.size = rubysize

ruby_width = target.text_size(split_s[1]).width

target.font.size = sizeback

 

buf_width = [target.text_size(split_s[0]).width, ruby_width].max

 

width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0

 

if opacity == 255

target.font.size = rubysize

target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1])

target.font.size = sizeback

target.draw_text(x, y, width, target.font.size, split_s[0])

return width

else

if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height

@opacity_text_buf.dispose

@opacity_text_buf = Bitmap.new(buf_width, height)

else

@opacity_text_buf.clear

end

@opacity_text_buf.font.size = rubysize

@opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1)

@opacity_text_buf.font.size = sizeback

@opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1)

if sub_x >= 0

target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)

else

target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)

end

return width

end

end

 

#--------------------------------------------------------------------------

 

def convart_value(option, index)

option == nil ? option = "" : nil

option.downcase!

 

case option

when "i"

unless $data_items[index].name == nil

r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name)

end

when "w"

unless $data_weapons[index].name == nil

r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)

end

when "a"

unless $data_armors[index].name == nil

r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)

end

when "s"

unless $data_skills[index].name == nil

r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)

end

else

r = $game_variables[index]

end

 

r == nil ? r = "" : nil

return r

end

 

#--------------------------------------------------------------------------

 

def dispose

terminate_message

 

if @gaiji_cache != nil

unless @gaiji_cache.disposed?

@gaiji_cache.dispose

end

end

 

unless @opacity_text_buf.disposed?

@opacity_text_buf.dispose

end

 

$game_temp.message_window_showing = false

if @input_number_window != nil

@input_number_window.dispose

end

super

end

 

#--------------------------------------------------------------------------

 

def update_cursor_rect

if @index >= 0

n = $game_temp.choice_start + @index

self.cursor_rect.set(8 + @indent + @face_indent, n * 32, @cursor_width, 32)

else

self.cursor_rect.empty

end

end

end

#=========================================

# ▲ CLASS Window_Message Ends

#=========================================

 

#=========================================

# ▼ Class Window_Frame Begins

#=========================================

class Window_Frame < Window_Base

 

def initialize(x, y, width, height)

super(x, y, width, height)

self.windowskin = RPG::Cache.windowskin($ams.name_box_skin)

self.contents = nil

end

#--------------------------------------------------------------------------

def dispose

super

end

end

#=========================================

# ▲ CLASS Window_Frame Ends

#=========================================

 

#=========================================

# ▼ CLASS Game_Map Additional Code Begins

#=========================================

class Game_Map

 

#Dubealex's Addition (from XRXS) to show Map Name on screen

def name

$map_infos[@map_id]

end

end

#=========================================

# ▲ CLASS Game_Map Additional Code Ends

#=========================================

 

#=========================================

# ▼ CLASS Scene_Title Additional Code Begins

#=========================================

class Scene_Title

 

#Dubealex's Addition (from XRXS) to show Map Name on screen

$map_infos = load_data("Data/MapInfos.rxdata")

for key in $map_infos.keys

$map_infos[key] = $map_infos[key].name

end

 

#Dubealex's addition to save data from the AMS in the save files

$ams = AMS.new

 

end

#=========================================

# ▲ CLASS Scene_Title Additional Code Ends

#=========================================

 

#=========================================

# ▼ CLASS Window_Base Additional Code Begins

#=========================================

class Window_Base < Window

 

#Dubealex Addition (from Phylomorphis) to use HTML Hex Code Colors

def hex_color(string)

red = 0

green = 0

blue = 0

if string.size != 6

print("Hex strings must be six characters long.")

print("White text will be used.")

return Color.new(255, 255, 255, 255)

end

for i in 1..6

s = string.slice!(/./m)

if s == "#"

print("Hex color string may not contain the \"#\" character.")

print("White text will be used.")

return Color.new(255, 255, 255, 255)

end

value = hex_convert(s)

if value == -1

print("Error converting hex value.")

print("White text will be used.")

return Color.new(255, 255, 255, 255)

end

case i

when 1

red += value * 16

when 2

red += value

when 3

green += value * 16

when 4

green += value

when 5

blue += value * 16

when 6

blue += value

end

end

return Color.new(red, green, blue, 255)

end

 

#--------------------------------------------------------------------------

 

def hex_convert(character)

case character

when "0"

return 0

when "1"

return 1

when "2"

return 2

when "3"

return 3

when "4"

return 4

when "5"

return 5

when "6"

return 6

when "7"

return 7

when "8"

return 8

when "9"

return 9

when "A"

return 10

when "B"

return 11

when "C"

return 12

when "D"

return 13

when "E"

return 14

when "F"

return 15

end

return -1

end

end

#=========================================

# ▲ CLASS Window_Base Additional Code Ends

#=========================================

 

#=========================================

# ▼ Class Air_Text Begins

#=========================================

class Air_Text < Window_Base

 

def initialize(x, y, designate_text, color=0)

 

super(x-16, y-16, 32 + designate_text.size * 12, 56)

self.opacity = 0

self.back_opacity = 0

self.contents = Bitmap.new(self.width - 32, self.height - 32)

    self.contents.font.name = $defaultfontface

w = self.contents.width

h = self.contents.height

self.contents.font.name = $ams.name_font_type

self.contents.font.size = $ams.name_font_size

self.contents.font.color = text_color(color)

self.contents.draw_text(0, 0, w, h, designate_text)

end

 

#--------------------------------------------------------------------------

 

def dispose

self.contents.clear

super

end

end

#==========================================

# ▲ CLASS Air_Text Ends

#==========================================

 

#===================================================

# ▼ CLASS Scene_Save Additional Code Begins

#===================================================

class Scene_Save < Scene_File

#--------------------------------------------------------------------------

alias ams_original_write_save_data write_save_data

#--------------------------------------------------------------------------

def write_save_data(file)

ams_original_write_save_data(file)

Marshal.dump($ams, file)

end

 

end

#===================================================

# ▲ CLASS Scene_Save Additional Code Ends

#===================================================

 

#===================================================

# ▼ CLASS Scene_Load Additional Code Begins

#===================================================

class Scene_Load < Scene_File

#--------------------------------------------------------------------------

alias ams_original_read_save_data read_save_data

#--------------------------------------------------------------------------

def read_save_data(file)

ams_original_read_save_data(file)

$ams = Marshal.load(file)

end

 

end

#===================================================

# ▲ CLASS Scene_Load Additional Code Ends

#===================================================

#------------------------------------------------------------------------------

# * End SDK Enable Test

#------------------------------------------------------------------------------

end
script requires these put in the pictures folder


and this in the windowskin folder

 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)

Latest Threads

Latest Posts

Latest Profile Posts

Our latest feature is an interview with... me?!

People4_2 (Capelet off and on) added!

Just beat the last of us 2 last night and starting jedi: fallen order right now, both use unreal engine & when I say i knew 80% of jedi's buttons right away because they were the same buttons as TLOU2 its ridiculous, even the same narrow hallway crawl and barely-made-it jump they do. Unreal Engine is just big budget RPG Maker the way they make games nearly identical at its core lol.
Can someone recommend some fun story-heavy RPGs to me? Coming up with good gameplay is a nightmare! I was thinking of making some gameplay platforming-based, but that doesn't work well in RPG form*. I also was thinking of removing battles, but that would be too much like OneShot. I don't even know how to make good puzzles!
one bad plugin combo later and one of my followers is moonwalking off the screen on his own... I didn't even more yet on the new map lol.

Forum statistics

Threads
106,035
Messages
1,018,455
Members
137,821
Latest member
Capterson
Top