ATS: Special Message Codes
Version: 1.0.6
Author: modern algebra
Date: 18 October 2012
Version History
- <Version 1.0.6> 2012.10.18 - Made it so that you could set default values for font settings like fontname and size.
- <Version 1.0.5> 2012.10.07 - Added the \NP code to show the name of a party member
- <Version 1.0.4> 2012.08.12 - Fixed an error where setting message speed to 0 wouldn't be instant. I also made it so you can use {} for the conditional text command, thus allowing you to include other text codes within it.
- <Version 1.0.3> 2012.08.01 - Added \lb as an alternate code to break a line.
- <Version 1.0a> 2012.02.03 - Fixed an error with the \resub message code
- <Version 1.0> 2011.12.11 - Original Release
Description
This script allows you to use a number of additional special codes in the message system, which will function similar to the default codes like \v[n], \c[n], etc. Please see the list of special message codes starting at line 54 for a full idea of what is added. Basically, it gives you greater control over the delivery of a message, allows you to make use of font effects like bolding and italicizing, and allows you to retrieve and display useful data like the names of weapons and armors.
Features
- Greater message control - can now specify the speed at which text is displayed, the speec at which it is displayed when holding enter, and can also specify the exact number of frames to wait. It is also possible to disable the ability to show the message fast
- More Font Effects - can now use a number of font effects, such as changing the font, bolding, italicizing, underlining, and more
- Replacement Codes - Can use codes to display a number of useful things, such as an actor's nickname, the icon of a weapon, the name of a variable, and more
- Conditional Text - Can set some text to appear only if a particular switch is ON or OFF.
Screenshots Instructions
Insert this script in its own slot above Main and below Materials.
For a complete list of the new special message codes and what they do, see the header of the script.
Script
#==============================================================================
# ATS: Special Message Codes [VXA]
# Version: 1.0.6
# Author: modern algebra (rmrk.net)
# Date: 18 October 2012
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
#
# This script allows you to use a number of additional special codes in the
# message system, which will function similar to the default codes like
# \v[n], \c[n], etc. Please see the list of special message codes starting at
# line 54 for a full idea of what is added. Basically, it gives you greater
# control over the delivery of a message, allows you to make use of font
# effects like bolding and italicizing, and allows you to retrieve and
# display useful data like the names of weapons and armors.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# ATS Series:
#
# This script is part of the Advanced Text System series of scripts. These
# scripts are based off the Advanced Text System for RMVX, but since RMVX Ace
# has a much more sensibly designed message system, it is no longer necessary
# that it be one large script. For that reason, and responding to feedback on
# the ATS, I have split the ATS into multiple different scripts so that you
# only need to pick up the components for the features that you want. It is
# therefore easier to customize and configure.
#
# To find more scripts in the ATS Series, please visit:
# http://rmrk.net/index.php/topic,44525.0.html
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Instructions:
#
# This script is not difficult to use or configure. There are only ten
# configuration options for this script. These are:
#
# :message_speed :font_italic
# :show_fast_speed :font_outline
# :font_name :font_shadow
# :font_size :font_underline
# :font_bold :font_highlight
#
# :message_speed allows you to set the default number of frames to wait
# between drawing each letter in the message window. :show_fast_speed allows
# you to control the amount it speeds up when the player presses enter. You
# can gain instructions on setting the default value for both at line 180.
#
# All of the :font_ settings simply let you set the initial values for the
# font when used.
#
# As with other ATS scripts, you can change the value of these options in
# game with the following codes in a script call:
#
# ats_next(:message_option, x)
# ats_all(:message_option, x)
#
# Where :message_option is the symbol you want (:message_speed or
# :show_fast_speed) and x is the value you want to change it to. ats_next
# will only change it for the very next message, while ats_all will change it
# for every message to follow.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# List of Special Message Codes:
#
# The default message codes are retained, and this script adds a number of
# other desirable features. The following is a complete list of the message
# codes at your disposal. Simply insert them into a Display Message command,
# Choice Branches, or any other message related system.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Font Effects:
#
# \fn[fontname] - Change the font to fontname. If you put multiple fontnames
# separated by commas, then it will take the first one the user has installed
# \fs[n] - Change the font size to n.
# \{ - Increase the font size by 8.
# \} - Decrease the font size by 8.
# \c[n] - Set the colour of the text being drawn to the nth colour of the
# Windowskin palette. 0 is the normal color and 16 is the system color.
# \hc[RRGGBB] or \c[#RRGGBB] - Set the colour of the text being drawn to any
# colour, using hexadecimal values. You can set each colour (red, green,
# blue) to anything from 0-255 (00-FF). You must use hexadecimal values. If
# so desired, you can add an additional hex value from 00-FF to change the
# alpha.
# \b - Turn bold on. Text drawn after this code will be bolded.
# /b - Turn bold off.
# \i - Turn italic on. Text drawn after this code will be italicized.
# /i - Turn italic off.
# \o - Turn outline on.
# /o - Turn outline off.
# \s - Turn shadow on. Text drawn after this code will have a shadow.
# /s - Turn shadow off.
# \u - Turn underline on. Text drawn after this code will be underlined.
# /u - Turn underline off.
# \hl[n] - Turn highlight on. Text drawn after this code will be highlighted
# with colour n + 1 from the windowskin palette
# /hl OR \hl[0] - Turn highlight off.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Message Control:
#
# \s[n] - Sets the message speed to wait n frames between drawing every letter.
# 0 is instant.
# \s[+n] - Sets the message speed to wait an additional n frames between drawing
# every letter.
# \s[-n] - Sets the message speed to wait n less frames between drawing every
# letter.
# \. - Wait 15 frames before drawing the next character
# \| - Wait 60 frames before drawing the next character
# \w[n] - Wait n frames before drawing the next character
# \! - Pause text and wait for player to press Enter
# \^ - Skip Pause; allows you to close a message window without requiring player
# input.
# \> - Show line fast.
# \< - Stop showing line fast.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Replacement Codes:
#
# \p[n] - Draw the name of the actor in the xth position in the party. 1 is
# the party leader, 2 is the second member, etc.
# \n[n] - Draw the name of the actor with ID n
# \nn[n] - Draw the nickname of the actor with ID n.
# \pid[n] - Draw the ID of the actor in the nth position in the party.
# \ac[n] - Draw the class name of the actor with ID n.
# \al[n] - Draw the level of the actor with ID n.
# \ni[n] - Draw the name of the item with ID n.
# \nw[n] - Draw the name of the weapon with ID n.
# \na[n] - Draw the name of the armor with ID n.
# \ns[n] - Draw the name of the skill with ID n.
# \nt[n] - Draw the name of the state with ID n.
# \nc[n] - Draw the name of the class with ID n.
# \ne[n] - Draw the name of the event with ID n on the current map.
# \nm[n] - Draw the name of the enemy with ID n.
# \nv[n] - Draw the name of the variable with ID n.
# \nsw[n] - Draw the name of the switch with ID n.
# \nl[n] - Draw the name of the element with ID n.
# \nwt[n] - Draw the name of the weapon type with ID n.
# \nat[n] - Draw the name of the armor type with ID n.
# \nst[n] - Draw the name of the skill type with ID n.
# \np[n] - Draw the name of the actor in the nth position in the party.
# \map - Draw the name of the map the player is currently on.
# \map[n] - Draw the name of the map with ID n.
# \pg - Draws the amount of money the party has.
# \g - Draws the unit of currency.
# \vocab[method] - Will draw whatever Vocab.method returns, if it is a valid
# method call. Suitable values for method are: level, level_a, hp, hp_a,
# mp, mp_a, tp, tp_a, fight, escape, attack, guard, item, skill, equip,
# status, formation, save, game_end, weapon, armor, key_item, equip2,
# optimize, clear, new_game, continue, shutdown, to_title, cancel,
# currency_unit
# \vocab[param, n] - Will draw the label for parameter with ID n. 0 => Max HP;
# 1 => Max MP; 2 => Attack; 3 => Defence; 4 => Magic; 5 => Magic Defence;
# 6 => Agility; 7 => Luck
# \vocab[etype, n] - Will draw the label for equipment type with ID n.
# 0 => Weapon; 1 => Shield; 2 => Head; 3 => Body; 4 => Accessory
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Other Effects:
#
# \$ - Opens a window which shows the party's gold.
# \n - line break
# \i[n] - Draw icon with index n.
# \ii[n] - Draw icon of the item with ID n.
# \iw[n] - Draw icon of the weapon with ID n.
# \ia[n] - Draw icon of the armor with ID n.
# \is[n] - Draw icon of the skill with ID n.
# \it[n] - Draw icon of the state with ID n.
# \x[n] - Draw next character at pixel n of the window contents.
# \s{n,text} - Will only draw text if the switch with ID n is ON.
# \s!{n,text} - Will only draw text if the switch with ID n is OFF.
# \#{code} - This will evaluate code. So, if you know scipting, you can place
# any code there and it will draw whatever is returned by it. For instance:
# \#{$game_system.save_count} would draw the number of times the player has
# saved the current game.
#==============================================================================
$imported = {} unless $imported
$imported[:ATS_SpecialMessageCodes] = true
#==============================================================================
# ** Game_ATS
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new public instance variables - message_speed; special_message_codes
#==============================================================================
class Game_ATS
CONFIG = {} unless $imported[:AdvancedTextSystem]
CONFIG[:special_message_codes] = {
special_message_codes: true,
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# EDITABLE REGION
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# :message_speed => x,
# Changing the value of x determines the default number of frames to
# wait between drawing letters in a message window. 0 is instant.
:message_speed => 1,
# :show_fast_speed => x
# Changing the value of x determines the number of frames to wait
# between drawing letters when the player is holding enter. 0 is
# instant
:show_fast_speed => 0,
# Font Settings - Set the default settings for the font you are using here.
:font_name => Font.default_name, # String or Array of Strings
:font_size => Font.default_size, # Integer
:font_bold => Font.default_bold, # true or false
:font_italic => Font.default_italic, # true or false
:font_outline => Font.default_outline, # true or false
:font_shadow => Font.default_shadow, # true or false
:font_underline => false, # true or false
:font_highlight => -1, # Integer for colour of highlight
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END EDITABLE REGION
#////////////////////////////////////////////////////////////////////////
}
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CONFIG[:special_message_codes].keys.each { |key| attr_accessor key }
end
#==============================================================================
# Initialize Common ATS Data if no other ATS script interpreted first
#==============================================================================
if !$imported[:AdvancedTextSystem]
#============================================================================
# *** DataManager
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - create_game_objects; make_save_contents;
# extract_save_contents
#============================================================================
module DataManager
class << self
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Create Game Objects
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias modb_ats_crtgmobj_6yh7 create_game_objects
def create_game_objects(*args, &block)
modb_ats_crtgmobj_6yh7(*args, &block)
$game_ats = Game_ATS.new
$game_ats.init_new_installs
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Make Save Contents
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mlba_ats_mksave_5tg9 make_save_contents
def make_save_contents(*args, &block)
contents = mlba_ats_mksave_5tg9(*args, &block)
contents[:ats] = $game_ats
contents
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Extract Save Contents
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias ma_ats_extrcsvcon_8uj2 extract_save_contents
def extract_save_contents(contents, *args, &block)
ma_ats_extrcsvcon_8uj2(contents, *args, &block)
$game_ats = contents[:ats] ? contents[:ats] : Game_ATS.new
$game_ats.init_new_installs
end
end
end
#============================================================================
# ** Game_ATS
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This class holds the default data for all scripts in the ATS series
#============================================================================
class Game_ATS
def initialize; reset; end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reset any or all installed ATS scripts
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def reset(script_name = nil)
if script_name.is_a? (Symbol) # If script to reset specified
CONFIG[script_name].each_pair { |key, value|
self.send("#{key}=".to_sym, value)
$game_message.send("#{key}=".to_sym, value)
}
else # Reset all ATS scripts
CONFIG.keys.each { |script| reset(script) }
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize any newly installed ATS scripts
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def init_new_installs
CONFIG.keys.each { |script| reset(script) unless self.send(script) }
end
end
#============================================================================
# ** Game_Message
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - clear
#============================================================================
class Game_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Clear
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mlb_ats_clrats_5tv1 clear
def clear(*args, &block)
mlb_ats_clrats_5tv1(*args, &block) # Run Original Method
return if !$game_ats
Game_ATS::CONFIG.values.each { |installed|
installed.keys.each { |key| self.send("#{key}=".to_sym, $game_ats.send(key)) }
}
end
end
#============================================================================
# ** Game_Interpreter
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new methods - ats_all; ats_next
#============================================================================
class Game_Interpreter
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * ATS All
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ats_all(sym, *args, &block)
$game_ats.send("#{sym}=".to_sym, *args, &block)
ats_next(sym, *args, &block)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * ATS Next
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def ats_next(sym, *args, &block)
$game_message.send("#{sym}=".to_sym, *args, &block)
end
end
end
$imported[:AdvancedTextSystem] = true
class Game_Message
Game_ATS::CONFIG[:special_message_codes].keys.each { |key| attr_accessor key }
end
#==============================================================================
# ** Game_Event
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new method - name
#==============================================================================
class Game_Event
def name
return @event ? @event.name : ""
end
end
#==============================================================================
# ** Window_Base
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased methods - initialize; convert_escape_characters; calc_line_height;
# process_escape_character; process_normal_character
#==============================================================================
class Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mlgb_atssmc_init_3do9 initialize
def initialize(*args, &block)
mlgb_atssmc_init_3do9(*args, &block) # Run Original Method
@underline = false
@highlight = -1
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Convert Escape Characters
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias ma_atssmc_convesc_4rc1 convert_escape_characters
def convert_escape_characters(text, *args, &block)
result = ma_atssmc_convesc_4rc1(text, *args, &block) # Run Original Method
# Party
result.gsub!(/\ePID\[(\d+)\]/i) { $1.to_i >= 1 ? $game_party.members[$1.to_i - 1].id.to_s : "1" }
result.gsub!(/\ePG/i) { $game_party.gold }
# Message Speed
result.gsub!(/\eS\[([\+-]?\d+)\]/i) { "\eMS\[#{$1}\]" }
result.gsub!(/\e%/) { "\eDS%"}
# Hex Colour
result.gsub!(/\eC\[#/i) { "\eHC[" }
# Icons
result.gsub!(/\eII\[(\d+)\]/i) { "\eI\[#{$data_items[$1.to_i].icon_index}\]" rescue "" }
result.gsub!(/\eIW\[(\d+)\]/i) { "\eI\[#{$data_weapons[$1.to_i].icon_index}\]" rescue "" }
result.gsub!(/\eIA\[(\d+)\]/i) { "\eI\[#{$data_armors[$1.to_i].icon_index}\]" rescue "" }
result.gsub!(/\eIS\[(\d+)\]/i) { "\eI\[#{$data_skills[$1.to_i].icon_index}\]" rescue "" }
result.gsub!(/\eIT\[(\d+)\]/i) { "\eI\[#{$data_states[$1.to_i].icon_index}\]" rescue "" }
# Actor Stats
result.gsub!(/\eAC\[(\d+)\]/i) { $data_classes[$game_actors[$1.to_i].class_id].name }
result.gsub!(/\eAL\[(\d+)\]/i) { $game_actors[$1.to_i].level.to_s }
# Names
result.gsub!(/\eMAP\[(\d+)\]/i) { load_data(sprintf("Data/Map%03d.rvdata2", $1.to_i)).display_name rescue "" }
result.gsub!(/\eMAP/i) { $game_map.display_name rescue "" }
result.gsub!(/\eNP\[(\d+)\]/i) { $game_party.members[$1.to_i].name rescue "" }
result.gsub!(/\eNE\[(\d+)\]/i) { $game_map.events[$1.to_i].name rescue "" }
result.gsub!(/\eNN\[(\d+)\]/i) { $game_actors[$1.to_i].nickname rescue "" }
result.gsub!(/\eNI\[(\d+)\]/i) { $data_items[$1.to_i].name rescue "" }
result.gsub!(/\eNW\[(\d+)\]/i) { $data_weapons[$1.to_i].name rescue "" }
result.gsub!(/\eNA\[(\d+)\]/i) { $data_armors[$1.to_i].name rescue "" }
result.gsub!(/\eNS\[(\d+)\]/i) { $data_skills[$1.to_i].name rescue "" }
result.gsub!(/\eNT\[(\d+)\]/i) { $data_states[$1.to_i].name rescue "" }
result.gsub!(/\eNM\[(\d+)\]/i) { $data_enemies[$1.to_i].name rescue "" }
result.gsub!(/\eNC\[(\d+)\]/i) { $data_classes[$1.to_i].name rescue "" }
result.gsub!(/\eNV\[(\d+)\]/i) { $data_system.variables[$1.to_i] }
result.gsub!(/\eNSW\[(\d+)\]/i) { $data_system.switches[$1.to_i] }
result.gsub!(/\eNWT\[(\d+)\]/i) { $data_system.weapon_types[$1.to_i] }
result.gsub!(/\eNAT\[(\d+)\]/i) { $data_system.armor_types[$1.to_i] }
result.gsub!(/\eNST\[(\d+)\]/i) { $data_system.skill_types[$1.to_i] }
result.gsub!(/\eNL\[(\d+)\]/i) { $data_system.elements[$1.to_i] }
# Vocab
result.gsub!(/\eVOCAB\[(\w+),\s*(\d+)\s*\]/i) { Vocab.send($1.downcase, $2.to_i) rescue "" }
result.gsub!(/\eVOCAB\[(\w+)\]/i) { Vocab.send($1.downcase) rescue "" }
# Font Settings
result.gsub!(/\eB/i) { "\eFE[0]" } # Bold On
result.gsub!(/\/B/i) { "\eFE[1]" } # Bold Off
result.gsub!(/\eI([^\[])/i) { "\eFE[2]#{$1}" } # Italics On
result.gsub!(/\/I/i) { "\eFE[3]" } # Italics Off
result.gsub!(/\eO/i) { "\eFE[4]" } # Outline On
result.gsub!(/\/O/i) { "\eFE[5]" } # Outline Off
result.gsub!(/\eS([^\[!])/i) { "\eFE[6]#{$1}" } # Shadow On
result.gsub!(/\/S/i) { "\eFE[7]" } # Shadow Off
result.gsub!(/\eU/i) { "\eFE[8]" } # Underline On
result.gsub!(/\/U/i) { "\e\FE[9]" } # Underline Off
result.gsub!(/\eHL\[(\d+)\]/i) { "\eHL[#{$1.to_i}]" } # Highlight On: custom colour
result.gsub!(/\eHL([^\[])/i) { "\eHL[17]#{$1}" }# Highlight On: system colour
result.gsub!(/\/HL/i) { "\eHL[0]" } # Hightlight Off
result.gsub!(/\/FN/i) { "\eFN[]" } # Default Font
result.gsub!(/\/FS/i) { "\eFS[#{Font.default_size}]" } # Default Font
# Conditional Text
result.gsub!(/\eS\[(\d+)[,;:](.+?)\]/mi) { $game_switches[$1.to_i] ? $2 : "" }
result.gsub!(/\eS!\[(\d+)[,;:](.+?)\]/mi) { $game_switches[$1.to_i] ? "" : $2 }
result.gsub!(/\eS\{(\d+)[,;:](.+?)\}/mi) { $game_switches[$1.to_i] ? $2 : "" }
result.gsub!(/\eS!\{(\d+)[,;:](.+?)\}/mi) { $game_switches[$1.to_i] ? "" : $2 }
# Evaluation
result.gsub!(/\e#\{(.+?)\}/im) { (eval($1)).to_s rescue "" }
# Do resubstitutions if requested
if result.sub!(/\eRESUB/i, "") != nil
result = convert_escape_characters(result, *args, &block)
end
result.gsub!(/\e(N|LB)/i, "\n") # Line Break
result # Return result
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Calculate Line Height
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias ma_atssmc_clclnhght_3ek9 calc_line_height
def calc_line_height(text, *args, &block)
res = ma_atssmc_clclnhght_3ek9(text, *args, &block) # Run Original Method
text.slice(/^.*$/).scan(/\eFS\[(\d+)\]/i) { |num| res = [res, num[0].to_i].max }
res
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Process Normal Character
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mlra_atssmc_procnorm_5fg2 process_normal_character
def process_normal_character(c, pos, *args, &block)
draw_highlight_underline(c, pos) if @underline || @highlight
mlra_atssmc_procnorm_5fg2(c, pos, *args, &block) # Run Original Method
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Process Escape Character
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias ma_atssmc_procesc_7gv1 process_escape_character
def process_escape_character(code, text, pos, *args, &block)
case code.upcase
when 'X' then pos[:x] = obtain_escape_param(text)
when 'HC' # Hex Colour
hex = text.slice!(/^\[([ABCDEF\d]+)\]/i)
rgb = $1.scan(/../).map { |hex| hex.to_i(16) }
change_color(Color.new(*rgb)) if rgb.size.between?(3,4)
when 'FE' # Font Settings
param = obtain_escape_param(text)
case param / 2
when 0 then contents.font.bold = ((param % 2) == 0) # Bold
when 1 then contents.font.italic = ((param % 2) == 0) # Italic
when 2 then contents.font.outline = ((param % 2) == 0) # Outline
when 3 then contents.font.shadow = ((param % 2) == 0) # Shadow
when 4 then @underline = ((param % 2) == 0) # Underline
end
when 'HL' then @highlight = obtain_escape_param(text) - 1 # Highlight
when 'FN' # Font Name
text.slice!(/^\[(.*?\])/)
param = $1
if param.nil? || param == ']'
contents.font.name = Font.default_name
else
ary = []
while param.slice!(/\s*(.+?)\s*[,;:\]]/) != nil do ary.push($1) end
contents.font.name = ary
end
when 'FS' # Font Size
text.slice!(/^\[(\d+)\]/)
contents.font.size = [[$1.to_i, 16].max, 64].min
else
ma_atssmc_procesc_7gv1(code, text, pos, *args, &block) # Run Original Method
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Draw Highlighting and Underlining
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def draw_highlight_underline(c, pos)
text_width = text_size(c).width
y_space = (pos[:height] - contents.font.size) / 2
if @underline # Underlining
y = pos[:y] + pos[:height]
y -= [2, y_space].max
contents.fill_rect(pos[:x], y, text_width, 2, contents.font.color)
end
if @highlight >= 0 # Highlighting
y = pos[:y]
y += y_space - 1 if y_space > 0
text_height = [contents.font.size + 2, pos[:height]].min
colour = text_color(@highlight)
colour.alpha = 128 if colour.alpha > 128
contents.fill_rect(pos[:x], y, text_width, text_height, colour)
end
end
end
#===============================================================================
# ** Window_Message
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - clear_instance_variables; process_escape_character;
# update_show_fast; wait_for_one_character
# overwritten super method - reset_font_settings
#===============================================================================
class Window_Message
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Clear Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias ma_atssmc_clrinsvar_3dq9 clear_instance_variables
def clear_instance_variables(*args, &block)
ma_atssmc_clrinsvar_3dq9(*args, &block) # Run Original Method
@skip_disabled = false
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reset Font Settings
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def reset_font_settings(*args, &block)
change_color(normal_color)
contents.font.name = $game_message.font_name
contents.font.size = $game_message.font_size
contents.font.bold = $game_message.font_bold
contents.font.italic = $game_message.font_italic
contents.font.outline = $game_message.font_outline
contents.font.shadow = $game_message.font_shadow
@underline = $game_message.font_underline
@highlight = $game_message.font_highlight
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Process Escape Character
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mnaa_atssmc_escchar_3dr9 process_escape_character
def process_escape_character(code, text, pos, *args, &block)
case code.upcase
when 'MS' # Set Message Speed
if !text[/^\[([+-])/].nil?
text.sub!(/^\[([\+-])/, '[' )
sign = $1
else
sign = ""
end
param = obtain_escape_param(text)
sign.empty? ? $game_message.message_speed = param : $game_message.message_speed += "#{sign}#{param}".to_i
when 'DS'
text.slice!(/^%/) # Delete buffer to ensure code isn't overextended
@skip_disabled = !@skip_disabled
when 'W' then wait(obtain_escape_param(text))
else
mnaa_atssmc_escchar_3dr9(code, text, pos, *args, &block) # Run Original Method
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Update Show Fast
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mlg_atssmc_updshwfast_7yb1 update_show_fast
def update_show_fast(*args, &block)
mlg_atssmc_updshwfast_7yb1(*args, &block)
if $game_message.message_speed < 1
@show_fast = true
elsif @skip_disabled
@show_fast = false
elsif $game_message.show_fast_speed > 0
@show_fast = Input.press?(:C)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Wait for One Character
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias mdrnl_smcats_waitonechar_5rf1 wait_for_one_character
def wait_for_one_character(*args, &block)
mdrnl_smcats_waitonechar_5rf1(*args, &block) # Run Original Method
if (@show_fast || @line_show_fast) && $game_message.show_fast_speed > 0
wait($game_message.show_fast_speed)
elsif $game_message.message_speed > 1
wait($game_message.message_speed - 1)
end
end
end
Credit
Support
Please post in this topic at RMRK for support.
Known Compatibility Issues
May not work with other message scripts which use the same codes for different functions.