Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- #
- # ▼ Yanfly Engine Ace - Ace Message System v1.05
- # -- Last Updated: 2012.01.13
- # -- Level: Normal
- # -- Requires: n/a
- #
- #==============================================================================
- $imported = {} if $imported.nil?
- $imported["YEA-MessageSystem"] = true
- #==============================================================================
- # ▼ Updates
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # 2012.07.21 - Fixed REGEXP error at line 824
- # 2012.01.13 - Bug Fixed: Negative tags didn't display other party members.
- # 2012.01.12 - Compatibility Update: Message Actor Codes
- # 2012.01.10 - Added Feature: \pic[x] text code.
- # 2012.01.04 - Bug Fixed: \ic tag was \ii. No longer the case.
- # - Added: Scroll Text window now uses message window font.
- # 2011.12.31 - Started Script and Finished.
- #
- #==============================================================================
- # ▼ Introduction
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # While RPG Maker VX Ace certainly improved the message system a whole lot, it
- # wouldn't hurt to add in a few more features, such as name windows, converting
- # textcodes to write out the icons and/or names of items, weapons, armours, and
- # more in quicker fashion. This script also gives the developer the ability to
- # adjust the size of the message window during the game, give it a separate
- # font, and to give the player a text fast-forward feature.
- #
- #==============================================================================
- # ▼ Instructions
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # To install this script, open up your script editor and copy/paste this script
- # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
- #
- # -----------------------------------------------------------------------------
- # Message Window text Codes - These go inside of your message window.
- # -----------------------------------------------------------------------------
- # Default: Effect:
- # \v[x] - Writes variable x's value.
- # \n[x] - Writes actor x's name.
- # \p[x] - Writes party member x's name.
- # \g - Writes gold currency name.
- # \c[x] - Changes the colour of the text to x.
- # \i[x] - Draws icon x at position of the text.
- # \{ - Makes text bigger by 8 points.
- # \} - Makes text smaller by 8 points.
- # \$ - Opens gold window.
- # \. - Waits 15 frames (quarter second).
- # \| - Waits 60 frames (a full second).
- # \! - Waits until key is pressed.
- # \> - Following text is instant.
- # \< - Following text is no longer instant.
- # \^ - Skips to the next message.
- # \\ - Writes a "\" in the window.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Wait: Effect:
- # \w[x] - Waits x frames (60 frames = 1 second). Message window only.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # NameWindow: Effect:
- # \n<x> - Creates a name box with x string. Left side. *Note
- # \nc<x> - Creates a name box with x string. Centered. *Note
- # \nr<x> - Creates a name box with x string. Right side. *Note
- #
- # *Note: Works for message window only.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Position: Effect:
- # \px[x] - Sets x position of text to x.
- # \py[x] - Sets y position of text to y.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Picture: Effect:
- # \pic[x] - Draws picture x from the Graphics\Pictures folder.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Outline: Effect:
- # \oc[x] - Sets outline colour to x.
- # \oo[x] - Sets outline opacity to x.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Font: Effect:
- # \fr - Resets all font changes.
- # \fz[x] - Changes font size to x.
- # \fn[x] - Changes font name to x.
- # \fb - Toggles font boldness.
- # \fi - Toggles font italic.
- # \fo - Toggles font outline.
- # \fs - Toggles font shadow.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Actor: Effect:
- # \af[x] - Shows face of actor x. *Note
- # \ac[x] - Writes out actor's class name. *Note
- # \as[x] - Writes out actor's subclass name. Req: Class System. *Note
- # \an[x] - Writes out actor's nickname. *Note
- #
- # *Note: If x is 0 or negative, it will show the respective
- # party member's face instead.
- # 0 - Party Leader
- # -1 - 1st non-leader member.
- # -2 - 2nd non-leader member. So on.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Names: Effect:
- # \nc[x] - Writes out class x's name.
- # \ni[x] - Writes out item x's name.
- # \nw[x] - Writes out weapon x's name.
- # \na[x] - Writes out armour x's name.
- # \ns[x] - Writes out skill x's name.
- # \nt[x] - Writes out state x's name.
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # Icon Names: Effect:
- # \ic[x] - Writes out class x's name including icon. *
- # \ii[x] - Writes out item x's name including icon.
- # \iw[x] - Writes out weapon x's name including icon.
- # \ia[x] - Writes out armour x's name including icon.
- # \is[x] - Writes out skill x's name including icon.
- # \it[x] - Writes out state x's name including icon.
- #
- # *Note: Requires YEA - Class System
- #
- # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- #
- # And those are the text codes added with this script. Keep in mind that some
- # of these text codes only work for the Message Window. Otherwise, they'll work
- # for help descriptions, actor biographies, and others.
- #
- #==============================================================================
- # ▼ Compatibility
- # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
- # it will run with RPG Maker VX without adjusting.
- #
- #==============================================================================
- module YEA
- module MESSAGE
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - General Message Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # The following below will adjust the basic settings and that will affect
- # the majority of the script. Adjust them as you see fit.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # This button is the button used to make message windows instantly skip
- # forward. Hold down for the effect. Note that when held down, this will
- # speed up the messages, but still wait for the pauses. However, it will
- # automatically go to the next page when prompted.
- TEXT_SKIP = :A # Input::A is the shift button on keyboard.
- # This variable adjusts the number of visible rows shown in the message
- # window. If you do not wish to use this feature, set this constant to 0.
- # If the row value is 0 or below, it will automatically default to 4 rows.
- VARIABLE_ROWS = 21
- # This variable adjusts the width of the message window shown. If you do
- # not wish to use this feature, set this constant to 0. If the width value
- # is 0 or below, it will automatically default to the screen width.
- VARIABLE_WIDTH = 22
- # This is the amount of space that the message window will indent whenever
- # a face is used. Default: 112
- FACE_INDENT_X = 112
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - Name Window Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # The name window is a window that appears outside of the main message
- # window box to display whatever text is placed inside of it like a name.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- NAME_WINDOW_X_BUFFER = -20 # Buffer x position of the name window.
- NAME_WINDOW_Y_BUFFER = 0 # Buffer y position of the name window.
- NAME_WINDOW_PADDING = 20 # Padding added to the horizontal position.
- NAME_WINDOW_OPACITY = 255 # Opacity of the name window.
- NAME_WINDOW_COLOUR = 6 # Text colour used by default for names.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # - Message Font Settings -
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # Ace Message System separates the in-game system font form the message
- # font. Adjust the settings here for your fonts.
- #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- # This array constant determines the fonts used. If the first font does not
- # exist on the player's computer, the next font in question will be used
- # in place instead and so on.
- MESSAGE_WINDOW_FONT_NAME = ["Verdana", "Arial", "Courier New"]
- # These adjust the other settings regarding the way the game font appears
- # including the font size, whether or not the font is bolded by default,
- # italic by default, etc.
- MESSAGE_WINDOW_FONT_SIZE = 24 # Font size.
- MESSAGE_WINDOW_FONT_BOLD = false # Default bold?
- MESSAGE_WINDOW_FONT_ITALIC = false # Default italic?
- MESSAGE_WINDOW_FONT_OUTLINE = true # Default outline?
- MESSAGE_WINDOW_FONT_SHADOW = false # Default shadow?
- end # MESSAGE
- end # YEA
- #==============================================================================
- # ▼ Editting anything past this point may potentially result in causing
- # computer damage, incontinence, explosion of user's head, coma, death, and/or
- # halitosis so edit at your own risk.
- #==============================================================================
- #==============================================================================
- # ■ Variable
- #==============================================================================
- module Variable
- #--------------------------------------------------------------------------
- # self.message_rows
- #--------------------------------------------------------------------------
- def self.message_rows
- return 4 if YEA::MESSAGE::VARIABLE_ROWS <= 0
- return 4 if $game_variables[YEA::MESSAGE::VARIABLE_ROWS] <= 0
- return $game_variables[YEA::MESSAGE::VARIABLE_ROWS]
- end
- #--------------------------------------------------------------------------
- # self.message_width
- #--------------------------------------------------------------------------
- def self.message_width
- return Graphics.width if YEA::MESSAGE::VARIABLE_WIDTH <= 0
- return Graphics.width if $game_variables[YEA::MESSAGE::VARIABLE_WIDTH] <= 0
- return $game_variables[YEA::MESSAGE::VARIABLE_WIDTH]
- end
- end # Variable
- #==============================================================================
- # ■ Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # overwrite method: command_101
- #--------------------------------------------------------------------------
- def command_101
- wait_for_message
- $game_message.face_name = @params[0]
- $game_message.face_index = @params[1]
- $game_message.background = @params[2]
- $game_message.position = @params[3]
- while continue_message_string?
- @index += 1
- if @list[@index].code == 401
- $game_message.add(@list[@index].parameters[0])
- end
- break if $game_message.texts.size >= Variable.message_rows
- end
- case next_event_code
- when 102
- @index += 1
- setup_choices(@list[@index].parameters)
- when 103
- @index += 1
- setup_num_input(@list[@index].parameters)
- when 104
- @index += 1
- setup_item_choice(@list[@index].parameters)
- end
- wait_for_message
- end
- #--------------------------------------------------------------------------
- # new method: continue_message_string?
- #--------------------------------------------------------------------------
- def continue_message_string?
- return true if next_event_code == 101 && Variable.message_rows > 4
- return next_event_code == 401
- end
- end # Game_Interpreter
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # new method: setup_message_font
- #--------------------------------------------------------------------------
- def setup_message_font
- @message_font = true
- change_color(normal_color)
- contents.font.out_color = Font.default_out_color
- contents.font.name = YEA::MESSAGE::MESSAGE_WINDOW_FONT_NAME
- contents.font.size = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SIZE
- contents.font.bold = YEA::MESSAGE::MESSAGE_WINDOW_FONT_BOLD
- contents.font.italic = YEA::MESSAGE::MESSAGE_WINDOW_FONT_ITALIC
- contents.font.outline = YEA::MESSAGE::MESSAGE_WINDOW_FONT_OUTLINE
- contents.font.shadow = YEA::MESSAGE::MESSAGE_WINDOW_FONT_SHADOW
- end
- #--------------------------------------------------------------------------
- # alias method: reset_font_settings
- #--------------------------------------------------------------------------
- alias window_base_reset_font_settings_ams reset_font_settings
- def reset_font_settings
- if @message_font
- setup_message_font
- else
- window_base_reset_font_settings_ams
- contents.font.out_color = Font.default_out_color
- contents.font.outline = Font.default_outline
- contents.font.shadow = Font.default_shadow
- end
- end
- #--------------------------------------------------------------------------
- # alias method: convert_escape_characters
- #--------------------------------------------------------------------------
- alias window_base_convert_escape_characters_ams convert_escape_characters
- def convert_escape_characters(text)
- result = window_base_convert_escape_characters_ams(text)
- result = convert_ace_message_system_new_escape_characters(result)
- return result
- end
- #--------------------------------------------------------------------------
- # new method: convert_ace_message_system_new_escape_characters
- #--------------------------------------------------------------------------
- def convert_ace_message_system_new_escape_characters(result)
- #---
- result.gsub!(/\eFR/i) { "\eAMSF[0]" }
- result.gsub!(/\eFB/i) { "\eAMSF[1]" }
- result.gsub!(/\eFI/i) { "\eAMSF[2]" }
- result.gsub!(/\eFO/i) { "\eAMSF[3]" }
- result.gsub!(/\eFS/i) { "\eAMSF[4]" }
- #---
- result.gsub!(/\eAC\[([-+]?\d+)\]/i) { escape_actor_class_name($1.to_i) }
- result.gsub!(/\eAS\[([-+]?\d+)\]/i) { escape_actor_subclass_name($1.to_i) }
- result.gsub!(/\eAN\[([-+]?\d+)\]/i) { escape_actor_nickname($1.to_i) }
- #---
- result.gsub!(/\eNC\[(\d+)\]/i) { $data_classes[$1.to_i].name }
- result.gsub!(/\eNI\[(\d+)\]/i) { $data_items[$1.to_i].name }
- result.gsub!(/\eNW\[(\d+)\]/i) { $data_weapons[$1.to_i].name }
- result.gsub!(/\eNA\[(\d+)\]/i) { $data_armors[$1.to_i].name }
- result.gsub!(/\eNS\[(\d+)\]/i) { $data_skills[$1.to_i].name }
- result.gsub!(/\eNT\[(\d+)\]/i) { $data_states[$1.to_i].name }
- #---
- result.gsub!(/\eIC\[(\d+)\]/i) { escape_icon_item($1.to_i, :class) }
- result.gsub!(/\eII\[(\d+)\]/i) { escape_icon_item($1.to_i, :item) }
- result.gsub!(/\eIW\[(\d+)\]/i) { escape_icon_item($1.to_i, :weapon) }
- result.gsub!(/\eIA\[(\d+)\]/i) { escape_icon_item($1.to_i, :armour) }
- result.gsub!(/\eIS\[(\d+)\]/i) { escape_icon_item($1.to_i, :skill) }
- result.gsub!(/\eIT\[(\d+)\]/i) { escape_icon_item($1.to_i, :state) }
- #---
- return result
- end
- #--------------------------------------------------------------------------
- # new method: escape_actor_class_name
- #--------------------------------------------------------------------------
- def escape_actor_class_name(actor_id)
- actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0
- actor = $game_actors[actor_id]
- return "" if actor.nil?
- return actor.class.name
- end
- #--------------------------------------------------------------------------
- # new method: actor_subclass_name
- #--------------------------------------------------------------------------
- def escape_actor_subclass_name(actor_id)
- return "" unless $imported["YEA-ClassSystem"]
- actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0
- actor = $game_actors[actor_id]
- return "" if actor.nil?
- return "" if actor.subclass.nil?
- return actor.subclass.name
- end
- #--------------------------------------------------------------------------
- # new method: escape_actor_nickname
- #--------------------------------------------------------------------------
- def escape_actor_nickname(actor_id)
- actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0
- actor = $game_actors[actor_id]
- return "" if actor.nil?
- return actor.nickname
- end
- #--------------------------------------------------------------------------
- # new method: escape_icon_item
- #--------------------------------------------------------------------------
- def escape_icon_item(data_id, type)
- case type
- when :class
- return "" unless $imported["YEA-ClassSystem"]
- icon = $data_classes[data_id].icon_index
- name = $data_items[data_id].name
- when :item
- icon = $data_items[data_id].icon_index
- name = $data_items[data_id].name
- when :weapon
- icon = $data_weapons[data_id].icon_index
- name = $data_weapons[data_id].name
- when :armour
- icon = $data_armors[data_id].icon_index
- name = $data_armors[data_id].name
- when :skill
- icon = $data_skills[data_id].icon_index
- name = $data_skills[data_id].name
- when :state
- icon = $data_states[data_id].icon_index
- name = $data_states[data_id].name
- else; return ""
- end
- text = "\eI[#{icon}]" + name
- return text
- end
- #--------------------------------------------------------------------------
- # alias method: process_escape_character
- #--------------------------------------------------------------------------
- alias window_base_process_escape_character_ams process_escape_character
- def process_escape_character(code, text, pos)
- case code.upcase
- #---
- when 'FZ'
- contents.font.size = obtain_escape_param(text)
- when 'FN'
- text.sub!(/\[(.*?)\]/, "")
- font_name = $1.to_s
- font_name = Font.default_name if font_name.nil?
- contents.font.name = font_name.to_s
- #---
- when 'OC'
- colour = text_color(obtain_escape_param(text))
- contents.font.out_color = colour
- when 'OO'
- contents.font.out_color.alpha = obtain_escape_param(text)
- #---
- when 'AMSF'
- case obtain_escape_param(text)
- when 0; reset_font_settings
- when 1; contents.font.bold = !contents.font.bold
- when 2; contents.font.italic = !contents.font.italic
- when 3; contents.font.outline = !contents.font.outline
- when 4; contents.font.shadow = !contents.font.shadow
- end
- #---
- when 'PX'
- pos[:x] = obtain_escape_param(text)
- when 'PY'
- pos[:y] = obtain_escape_param(text)
- #---
- when 'PIC'
- text.sub!(/\[(.*?)\]/, "")
- bmp = Cache.picture($1.to_s)
- rect = Rect.new(0, 0, bmp.width, bmp.height)
- contents.blt(pos[:x], pos[:y], bmp, rect)
- #---
- else
- window_base_process_escape_character_ams(code, text, pos)
- end
- end
- end # Window_Base
- #==============================================================================
- # ■ Window_ChoiceList
- #==============================================================================
- class Window_ChoiceList < Window_Command
- #--------------------------------------------------------------------------
- # alias method: initialize
- #--------------------------------------------------------------------------
- alias window_choicelist_initialize_ams initialize
- def initialize(message_window)
- window_choicelist_initialize_ams(message_window)
- setup_message_font
- end
- end # Window_ChoiceList
- #==============================================================================
- # ■ Window_ScrollText
- #==============================================================================
- class Window_ScrollText < Window_Base
- #--------------------------------------------------------------------------
- # alias method: initialize
- #--------------------------------------------------------------------------
- alias window_scrolltext_initialize_ams initialize
- def initialize
- window_scrolltext_initialize_ams
- setup_message_font
- end
- end # Window_ScrollText
- #==============================================================================
- # ■ Window_NameMessage
- #==============================================================================
- class Window_NameMessage < Window_Base
- #--------------------------------------------------------------------------
- # initialize
- #--------------------------------------------------------------------------
- def initialize(message_window)
- @message_window = message_window
- super(0, 0, Graphics.width, fitting_height(1))
- self.opacity = YEA::MESSAGE::NAME_WINDOW_OPACITY
- self.z = @message_window.z + 1
- self.openness = 0
- setup_message_font
- @close_counter = 0
- deactivate
- end
- #--------------------------------------------------------------------------
- # update
- #--------------------------------------------------------------------------
- def update
- super
- return if self.active
- return if self.openness == 0
- return if @closing
- @close_counter -= 1
- return if @close_counter > 0
- close
- end
- #--------------------------------------------------------------------------
- # start_close
- #--------------------------------------------------------------------------
- def start_close
- @close_counter = 4
- deactivate
- end
- #--------------------------------------------------------------------------
- # force_close
- #--------------------------------------------------------------------------
- def force_close
- @close_counter = 0
- deactivate
- close
- end
- #--------------------------------------------------------------------------
- # start
- #--------------------------------------------------------------------------
- def start(text, x_position)
- @text = text.clone
- set_width
- create_contents
- set_x_position(x_position)
- set_y_position
- refresh
- activate
- open
- end
- #--------------------------------------------------------------------------
- # set_width
- #--------------------------------------------------------------------------
- def set_width
- text = @text.clone
- dw = standard_padding * 2 + text_size(text).width
- dw += YEA::MESSAGE::NAME_WINDOW_PADDING * 2
- dw += calculate_size(text.slice!(0, 1), text) until text.empty?
- self.width = dw
- end
- #--------------------------------------------------------------------------
- # calculate_size
- #--------------------------------------------------------------------------
- def calculate_size(code, text)
- case code
- when "\e"
- return calculate_escape_code_width(obtain_escape_code(text), text)
- else
- return 0
- end
- end
- #--------------------------------------------------------------------------
- # calculate_escape_code_width
- #--------------------------------------------------------------------------
- def calculate_escape_code_width(code, text)
- dw = -text_size("\e").width - text_size(code).width
- case code.upcase
- when 'C', 'OC', 'OO'
- dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width
- return dw
- when 'I'
- dw += -text_size("[" + obtain_escape_param(text).to_s + "]").width
- dw += 24
- return dw
- when '{'
- make_font_bigger
- when '}'
- make_font_smaller
- when 'FZ'
- contents.font.size = obtain_escape_param(text)
- when 'FN'
- text.sub!(/\[(.*?)\]/, "")
- font_name = $1.to_s
- font_name = Font.default_name if font_name.nil?
- contents.font.name = font_name.to_s
- when 'AMSF'
- case obtain_escape_param(text)
- when 0; reset_font_settings
- when 1; contents.font.bold = !contents.font.bold
- when 2; contents.font.italic = !contents.font.italic
- when 3; contents.font.outline = !contents.font.outline
- when 4; contents.font.shadow = !contents.font.shadow
- end
- else
- return dw
- end
- end
- #--------------------------------------------------------------------------
- # set_y_position
- #--------------------------------------------------------------------------
- def set_x_position(x_position)
- case x_position
- when 1 # Left
- self.x = @message_window.x
- self.x += YEA::MESSAGE::NAME_WINDOW_X_BUFFER
- when 2 # 3/10
- self.x = @message_window.x
- self.x += @message_window.width * 3 / 10
- self.x -= self.width / 2
- when 3 # Center
- self.x = @message_window.x
- self.x += @message_window.width / 2
- self.x -= self.width / 2
- when 4 # 7/10
- self.x = @message_window.x
- self.x += @message_window.width * 7 / 10
- self.x -= self.width / 2
- when 5 # Right
- self.x = @message_window.x + @message_window.width
- self.x -= self.width
- self.x -= YEA::MESSAGE::NAME_WINDOW_X_BUFFER
- end
- self.x = [[self.x, Graphics.width - self.width].min, 0].max
- end
- #--------------------------------------------------------------------------
- # set_y_position
- #--------------------------------------------------------------------------
- def set_y_position
- case $game_message.position
- when 0
- self.y = @message_window.height
- self.y -= YEA::MESSAGE::NAME_WINDOW_Y_BUFFER
- else
- self.y = @message_window.y - self.height
- self.y += YEA::MESSAGE::NAME_WINDOW_Y_BUFFER
- end
- end
- #--------------------------------------------------------------------------
- # refresh
- #--------------------------------------------------------------------------
- def refresh
- contents.clear
- reset_font_settings
- @text = sprintf("\eC[%d]%s", YEA::MESSAGE::NAME_WINDOW_COLOUR, @text)
- draw_text_ex(YEA::MESSAGE::NAME_WINDOW_PADDING, 0, @text)
- end
- end # Window_NameMessage
- #==============================================================================
- # ■ Window_Message
- #==============================================================================
- class Window_Message < Window_Base
- #--------------------------------------------------------------------------
- # alias method: initialize
- #--------------------------------------------------------------------------
- alias window_message_initialize_ams initialize
- def initialize
- window_message_initialize_ams
- setup_message_font
- end
- #--------------------------------------------------------------------------
- # overwrite method: window_width
- #--------------------------------------------------------------------------
- def window_width
- return Variable.message_width
- end
- #--------------------------------------------------------------------------
- # overwrite method: window_height
- #--------------------------------------------------------------------------
- def window_height
- return fitting_height(Variable.message_rows)
- end
- #--------------------------------------------------------------------------
- # alias method: create_all_windows
- #--------------------------------------------------------------------------
- alias window_message_create_all_windows_ams create_all_windows
- def create_all_windows
- window_message_create_all_windows_ams
- @name_window = Window_NameMessage.new(self)
- end
- #--------------------------------------------------------------------------
- # overwrite method: create_back_bitmap
- #--------------------------------------------------------------------------
- def create_back_bitmap
- @back_bitmap = Bitmap.new(width, height)
- rect1 = Rect.new(0, 0, Graphics.width, 12)
- rect2 = Rect.new(0, 12, Graphics.width, fitting_height(4) - 24)
- rect3 = Rect.new(0, fitting_height(4) - 12, Graphics.width, 12)
- @back_bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true)
- @back_bitmap.fill_rect(rect2, back_color1)
- @back_bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true)
- end
- #--------------------------------------------------------------------------
- # alias method: dispose_all_windows
- #--------------------------------------------------------------------------
- alias window_message_dispose_all_windows_ams dispose_all_windows
- def dispose_all_windows
- window_message_dispose_all_windows_ams
- @name_window.dispose
- end
- #--------------------------------------------------------------------------
- # alias method: update_all_windows
- #--------------------------------------------------------------------------
- alias window_message_update_all_windows_ams update_all_windows
- def update_all_windows
- window_message_update_all_windows_ams
- @name_window.update
- @name_window.back_opacity = self.back_opacity
- @name_window.opacity = self.opacity
- end
- #--------------------------------------------------------------------------
- # alias method: update_show_fast
- #--------------------------------------------------------------------------
- alias window_message_update_show_fast_ams update_show_fast
- def update_show_fast
- @show_fast = true if Input.press?(YEA::MESSAGE::TEXT_SKIP)
- window_message_update_show_fast_ams
- end
- #--------------------------------------------------------------------------
- # overwrite method: input_pause
- #--------------------------------------------------------------------------
- def input_pause
- self.pause = true
- wait(10)
- Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) ||
- Input.press?(YEA::MESSAGE::TEXT_SKIP)
- Input.update
- self.pause = false
- end
- #--------------------------------------------------------------------------
- # overwrite method: convert_escape_characters
- #--------------------------------------------------------------------------
- def convert_escape_characters(text)
- result = super(text.to_s.clone)
- result = namebox_escape_characters(result)
- result = message_escape_characters(result)
- return result
- end
- #--------------------------------------------------------------------------
- # new method: namebox_escape_characters
- #--------------------------------------------------------------------------
- def namebox_escape_characters(result)
- result.gsub!(/\eN\<(.+?)\>/i) { namewindow($1, 1) }
- result.gsub!(/\eN1\<(.+?)\>/i) { namewindow($1, 1) }
- result.gsub!(/\eN2\<(.+?)\>/i) { namewindow($1, 2) }
- result.gsub!(/\eNC\<(.+?)\>/i) { namewindow($1, 3) }
- result.gsub!(/\eN3\<(.+?)\>/i) { namewindow($1, 3) }
- result.gsub!(/\eN4\<(.+?)\>/i) { namewindow($1, 4) }
- result.gsub!(/\eN5\<(.+?)\>/i) { namewindow($1, 5) }
- result.gsub!(/\eNR\<(.+?)\>/i) { namewindow($1, 5) }
- return result
- end
- #--------------------------------------------------------------------------
- # new method: namebox
- #--------------------------------------------------------------------------
- def namewindow(text, position)
- @name_text = text
- @name_position = position
- return ""
- end
- #--------------------------------------------------------------------------
- # new method: message_escape_characters
- #--------------------------------------------------------------------------
- def message_escape_characters(result)
- result.gsub!(/\eAF\[(-?\d+)]/i) { change_face($1.to_i) }
- return result
- end
- #--------------------------------------------------------------------------
- # new method: change_face
- #--------------------------------------------------------------------------
- def change_face(actor_id)
- actor_id = $game_party.members[actor_id.abs].id if actor_id <= 0
- actor = $game_actors[actor_id]
- return "" if actor.nil?
- $game_message.face_name = actor.face_name
- $game_message.face_index = actor.face_index
- return ""
- end
- #--------------------------------------------------------------------------
- # alias method: new_page
- #--------------------------------------------------------------------------
- alias window_message_new_page_ams new_page
- def new_page(text, pos)
- adjust_message_window_size
- window_message_new_page_ams(text, pos)
- end
- #--------------------------------------------------------------------------
- # overwrite method: new_line_x
- #--------------------------------------------------------------------------
- def new_line_x
- return $game_message.face_name.empty? ? 0 : YEA::MESSAGE::FACE_INDENT_X
- end
- #--------------------------------------------------------------------------
- # new method: adjust_message_window_size
- #--------------------------------------------------------------------------
- def adjust_message_window_size
- self.height = window_height
- self.width = window_width
- create_contents
- update_placement
- self.x = (Graphics.width - self.width) / 2
- start_name_window
- end
- #--------------------------------------------------------------------------
- # new method: clear_name_window
- #--------------------------------------------------------------------------
- def clear_name_window
- @name_text = ""
- @name_position = 0
- end
- #--------------------------------------------------------------------------
- # new method: start_name_window
- #--------------------------------------------------------------------------
- def start_name_window
- return if @name_text == ""
- @name_window.start(@name_text, @name_position)
- end
- #--------------------------------------------------------------------------
- # overwrite method: fiber_main
- #--------------------------------------------------------------------------
- def fiber_main
- $game_message.visible = true
- update_background
- update_placement
- loop do
- process_all_text if $game_message.has_text?
- process_input
- $game_message.clear
- @gold_window.close
- @name_window.start_close
- Fiber.yield
- break unless text_continue?
- end
- close_and_wait
- $game_message.visible = false
- @fiber = nil
- end
- #--------------------------------------------------------------------------
- # alias method: open_and_wait
- #--------------------------------------------------------------------------
- alias window_message_open_and_wait_ams open_and_wait
- def open_and_wait
- clear_name_window
- adjust_message_window_size
- window_message_open_and_wait_ams
- end
- #--------------------------------------------------------------------------
- # alias method: close_and_wait
- #--------------------------------------------------------------------------
- alias window_message_close_and_wait_ams close_and_wait
- def close_and_wait
- @name_window.force_close
- window_message_close_and_wait_ams
- end
- #--------------------------------------------------------------------------
- # alias method: all_close?
- #--------------------------------------------------------------------------
- alias window_message_all_close_ams all_close?
- def all_close?
- return window_message_all_close_ams && @name_window.close?
- end
- #--------------------------------------------------------------------------
- # alias method: process_escape_character
- #--------------------------------------------------------------------------
- alias window_message_process_escape_character_ams process_escape_character
- def process_escape_character(code, text, pos)
- case code.upcase
- when 'W' # Wait
- wait(obtain_escape_param(text))
- else
- window_message_process_escape_character_ams(code, text, pos)
- end
- end
- end # Window_Message
- #==============================================================================
- #
- # ▼ End of File
- #
- #==============================================================================
Add Comment
Please, Sign In to add comment