Hi, I'm using Scrolling Message System EX for my game. I've tried a few other message systems but they don't work for some reason but this one seem to work better than most. I asked the author for help but he was understandably busy but he gave me permission to ask for help over here.
#==============================================================
# ** Scrolling Message System EX
#------------------------------------------------------------------------------
# Slipknot (http://www.creationasylum.net/)
# Version 1.2x (edited by LiTTleDRAgo)
# May 13, 2007
#==============================================================
# Features
#
# Default in RTP
#
# Color: \c[ID]
# Actor Name: \n[ActorID]
# Show Gold Window: \g
# Variable: \v[ID]
# -
# Default in SMS
#
# Letter by Letter: the characters are drawed one by one.
# Scrolling: the text lines are scrolled, the time of this can be changed.
# Stop: the message window can be stopped until the player press a key. \!
# Autoclose: the message will close without the player input. \%
# Choices: the choices are showed in a different window, they are also scrolled
# when are more than two.
# The choice window is shown inside the window like Default Message System
# Height: The height of lines can be changed, everything is adjusted to this.
# Above Events: You can draw the window above an event. \p[event]
# Bold and Italic: \b and \i
# Face: A small graphic is shown inside the message \face[file]
# Name Box: Text is shown in a small window above message \name[text]
# -
# Added Features in EX Version
#
# Furigana: Insert small text above a sentence \r[sentence,furigana]
# Font change: Change the font name or font size
# 1. \font[fontname] Change the font name
# 2. \font[fontsize] Change the font size (Integer)
# 3. \font[fontname,fontsize] Change both the font name or font size
# Conditional Text: Show the text if condition is met (for advanced user
# 1. \if[condition,text] Will show the text if condition is met
# (else nothing shown)
# 2. \unless[condition,text] Will show the text if condition is not met
# (else nothing shown)
# Game Related: Show Information related to the game
# 1. display name of current map \map
# 2. display name of item, weapon, armor or skill
# 2a. \N[In] = display name of item with id n (note the "I")
# 2b. \N[Wn] = display name of weapon with id n (note the "W")
# 2c. \N[An] = display name of armor with id n (note the "A")
# 2d. \N[Sn] = display name of skill with id n (note the "S")
# 2e. \N[En] = display name of enemies with id n (note the "E")
# 2f. \N[Pn] = display name of event with id n (note the "P")
# 3. display icon of item, weapon, armor or skill
# 3a. \I[In] = display icon of item with id n (note the "I")
# 3b. \I[Wn] = display icon of weapon with id n (note the "W")
# 3c. \I[An] = display icon of armor with id n (note the "A")
# 3d. \I[Sn] = display icon of skill with id n (note the "S")
# 4. display icon and name of item, weapon, armor or skill
# 4a. \I&N[In] = display icon and name of item with id n (note the "I")
# 4b. \I&N[Wn] = display icon and name of weapon with id n (note the "W")
# 4c. \I&N[An] = display icon and name of armor with id n (note the "A")
# 4d. \I&N[Sn] = display icon and name of skill with id n (note the "S)
$scrolling_message_system = true
module Message
#--------------------------------------------------------------------------
# * Settings
#--------------------------------------------------------------------------
# ~ Font
FontName = Font.default_name
FontSize = Font.default_size
# ~ Size
Width = 520
Height = 32
# ~ Delay
TextDelay = 1
Scroll = 30
Autoclose = 16
#--------------------------------------------------------------------------
# * Font
#--------------------------------------------------------------------------
def self.font
Font.new(FontName, FontSize)
end
end
if $scrolling_message_system
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :input_type
end
class Interpreter
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias slipknot_sms_command_101 command_101
alias slipknot_sms_command_102 command_102
alias slipknot_sms_command_103 command_103
#--------------------------------------------------------------------------
# * Show Text
#--------------------------------------------------------------------------
def command_101
if false
return slipknot_sms_command_101
end
return false if (temp = $game_temp).message_text
@message_waiting = true
temp.message_proc = Proc.new { @message_waiting = false }
temp.message_text = @list.at(@index).parameters.at(0) + "\n"
loop do
com = @list.at(@index + 1)
if com.code == 401 || com.code == 101
temp.message_text += com.parameters.at(0) + "\n"
else
if com.code == 102
temp.message_text += "\n\n"
slipknot_sms_set_choice(com.parameters)
current_indent = com.indent
temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }
@index += 1
elsif com.code == 103
@index += 1
temp.message_text += "\n"
slipknot_sms_set_inputnumber(com.parameters)
end
return true
end
@index += 1
end
end
#--------------------------------------------------------------------------
# * slipknot_sms_set_choice
#--------------------------------------------------------------------------
def slipknot_sms_set_choice(parameters)
if !$choice.nil? && $choice.is_a?(Array)
parameters[0] = $choice
end
$game_temp.choice_max = parameters.at(0).size
$game_temp.instance_variable_set(:@mes_choices, parameters.at(0))
$game_temp.choice_cancel_type = parameters.at(1)
end
#--------------------------------------------------------------------------
# * slipknot_sms_set_inputnumber
#--------------------------------------------------------------------------
def slipknot_sms_set_inputnumber(parameters)
$game_temp.num_input_variable_id = parameters.at(0)
$game_temp.num_input_digits_max = parameters.at(1)
end
#--------------------------------------------------------------------------
# * Show Choices
#--------------------------------------------------------------------------
def command_102() end
#--------------------------------------------------------------------------
# * Input Number
#--------------------------------------------------------------------------
def command_103() end
end
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias slipknot_sms_init initialize
alias slipknot_sms_refresh refresh
alias slipknot_sms_update update
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize
slipknot_sms_init
@original_height = self.height
@row_max = 4
self.height = Message::Height * @row_max + 32
self.back_opacity = 160
self.windowskin = windowskin.clone
self.windowskin.fill_rect(144, 16, 32, 32, Color.new(0, 0, 0, 0))
@ey = 1.0
@y = 0
end
#--------------------------------------------------------------------------
# * Opacity
#--------------------------------------------------------------------------
def opacity=(val)
super
@choices.opacity = val if @choices
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
contents.font = Message.font
self.height = Message::Height * @row_max + 32
@x = @y = @ex = @ey = 0
return if ! (@text = (temp = $game_temp).message_text)
replace_code
gold_win |= @text.gsub!(/\\[Gg]/, '')
if fit |= @text[/\\[Pp]/]
if @text.sub!(/\\[Pp]\[([-1,-2,-3,-4,0-9]+)\]/, '')
@event = $1.to_i
self.height = Message::Height * 2 + 32
elsif @text.gsub!(/\\[Pp]/, '')
@event = ev_ac
self.height = Message::Height * 2 + 32
end
end
lines_size = [0]
save, @lines = @text.clone, 0
while @c = @text.slice!(/./m)
if @c == "\n"
@lines += 1
lines_size << 0
next
end
lines_size[@lines] += eval_text(self.contents, true)
end
if temp.choice_max > 0
@c_data = [Bitmap.new(640 - Message::Width/4, Message::Height *
temp.choice_max), Array.new(temp.choice_max, 0)]
@c_data.at(0).font = Message.font
mes_choices = temp.instance_variable_get(:@mes_choices)||['']
@cond = mes_choices.collect {|s| s.is_a?(Array) ? s[1] : nil }
@text = mes_choices.collect {|s| s.is_a?(Array) ? s[0] : s }
@text.each_with_index {|s,i|
if !@cond.nil? && !@cond[i].nil? && !@cond[i] &&
mes_choices[i].is_a?(Array) && mes_choices[i][2]
@text[i] = mes_choices[i][2]
end}
@text = @text.join("\n")
replace_basic_code
@y = 0
while @c = @text.slice!(/./m)
@c_data.at(0).font.color.alpha=!@cond[@y].nil?&&!@cond[@y] ? 100 : 255
@c_data.at(1)[@y] += eval_text(@c_data.at(0))
end
@c_data[1] = @c_data.at(1).max + 8
@x = @y = 0
end
@text = save
twidth = temp.choice_max > 0 ? @c_data.at(1) + 32 : 0
#self.width = fit ? lines_size.max + 40 + @ex : Message::Width - twidth
self.width = [lines_size.max,twidth].max + 40 + @ex if @event
self.width = Message::Width if !@event
twidth += self.width
self.contents = Bitmap.new(self.width - 32, @lines * Message::Height)
contents.font = Message.font
if !@event #|| in_battle?
h2 = self.height / 2
self.y = in_battle? ? 96 - h2 :
case $game_system.message_position
when 0 then 96 - h2
when 1 then 240 - h2
when 2 then 384 - h2
end
self.x = 320 - self.width / 2
else
if in_battle?
if @event > 0
spr = spriteset.instance_variable_get(:@enemy_sprites)[@event-1]
elsif @event < 0
spr = spriteset.instance_variable_get(:actor_sprites)[(-@event)-1]
end
return terminate_message if spr == nil
sprite = spr
char_height = sprite.height
char_width = sprite.width
fx = sprite.x
fy = sprite.y - char_height/2
else
c = @event > 0 ? $game_map.events[@event] : $game_player
sprite = RPG::Cache.character(c.character_name,0)
mx, my = 636 - twidth, 476 - self.height
ch = [sprite.height / 4 + 4, 48].max
fx = [[c.screen_x - self.width / 2, 4].max, mx].min
fy = [[c.screen_y - (ch + self.height), 4].max, my].min
end
self.x, self.y = fx, fy
self.x = [[fx,0].max,640-self.width].min
self.y = [[fy,0].max,480-self.height].min
end
self.opacity = $game_system.message_frame == 0 ? 255 : 0
if gold_win
@gold_window = Window_Gold.new
@gold_window.x = 560 - @gold_window.width
@gold_window.z = self.z
if in_battle?
@gold_window.y = 192
else
@gold_window.y = self.y >= 128 ? 32 : 384
end
@gold_window.opacity = self.opacity
end
if temp.choice_max > 0
row_max = ((self.height - 32) / Message::Height) - 1
ch = [row_max - 2,0].max
x = self.x
y = self.y + Message::Height * ch + 32
y = self.y + Message::Height if @lines == 3
y = self.y if @event
size = 2
size = 3 if @lines == 3
@choices = Window_MesChoices.new(x, y, @c_data,size)
#@choices.x = self.width/2 - @choices.width/2
@choices.z = self.z
@choices.back_opacity = 0
@choices.opacity = 0
@choices.visible = false
end
return
if temp.choice_max > 0
@choices = Window_MesChoices.new(self.x + self.width, self.y, @c_data)
@choices.z = self.z
@choices.back_opacity = self.back_opacity
end
end
#--------------------------------------------------------------------------
# * In Battle?
#--------------------------------------------------------------------------
def in_battle?
return false if $scene.is_a?(Scene_Map)
return true if $scene.is_a?(Scene_Battle)
end
#--------------------------------------------------------------------------
# * Replace Code
#--------------------------------------------------------------------------
def replace_code
replace_basic_code
@text.gsub!('\!') { "\003" }
@text.gsub!('\.') { "\004" }
@text.gsub!(/\\\%\[(\d+)\]/) { "\011[#$1]" }
@text.gsub!('\%') { "\011" }
@text.gsub!("\\#\n") { "" }
end
def replace_basic_code
@text.gsub!(/\\\\/) { "\000" }
@text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
@text.gsub!('\$') { $game_party.gold.to_s }
@text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
$game_actors[$1.to_i] ? $game_actors[$1.to_i].name : ''
end
@text.gsub!(/\\[Cc]\[([0-9]+?)\]/) { "\001[#$1]" }
end
#--------------------------------------------------------------------------
# * Evaluate Text
#--------------------------------------------------------------------------
def eval_text(bitmap, read = false)
case @c
when "\000"
@c = '\\'
when "\001"
@text.sub!(/\[(\d+)\]/, '')
return 0 if read
bitmap.font.color = text_color($1.to_i)
return 0
when "\002"
@text.sub!(/\[(.*?)\]/, '')
return 24 if read
y = Message::Height * @y
bitmap.blt(@ex + @x + 4, y, RPG::Cache.icon($1.to_s),Rect.new(0,0,24,24))
@x += 24
return 0
when "\003"
return 0 if read
@stop = true
return 0
when "\004"
return 0 if read
@wait_count += 10
return 0
when "\011"
@text.sub!(/\[(\d+)\]/, '')
return 0 if read || $game_temp.num_input_variable_id > 0 ||
$game_temp.choice_max > 0
@autoclose = $1 ? $1.to_i : Message::Autoclose
return 0
end
eval_extra(bitmap)
return 0 if @c == '' || @c == nil
if @c == "\n"
@y += 1
@x = 0
return 0
end
w = bitmap.text_size(@c).width
unless read
y1 = Message::Height
bitmap.draw_text(@ex + @x + 4, y1 * @y, w, Message::Height, @c)
@x += w
end
return w
end
def eval_extra(bitmap) end
#--------------------------------------------------------------------------
# * Variables
#--------------------------------------------------------------------------
def ev_ac() interpreter.instance_variable_get(:@event_id) end
def spriteset() $scene.instance_variable_get(:@spriteset) end
def interpreter()
return $game_system.map_interpreter if !in_battle?
return $game_system.battle_interpreter if in_battle?
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
if @contents_showing
super
y1 = ((self.height - 32) / Message::Height) - 1
scroll = self.oy < (@y - y1) * Message::Height && @y < @lines
if scroll
@ey += Message::Height / Message::Scroll.to_f
ey = @ey - @ey.floor
self.oy += @ey.floor
@ey = ey
end
if @text
if Input.trigger?(Input::C) && @stop
self.pause = @stop = false
return
elsif @stop
return
elsif @wait_count > 0
@wait_count -= 1
return
end
@wait_count = 0
return if scroll
if (@c = @text.slice!(/./m))
eval_text(contents)
if @stop
self.pause = true
return
end
@wait_count += Input.press?(Input::C) ? 0 : Message::TextDelay
@wait_count = 0 if Input.press?(Input::CTRL)
else
@text = nil
end
return if @text || @autoclose != -1
if $game_temp.num_input_variable_id > 0
digits_max = $game_temp.num_input_digits_max
ch = [y1 - 1,0].max
x = self.x
y = self.y + Message::Height * ch + 32
y = self.y + Message::Height * (@lines-2) + 32 if @lines == 3
if self.height == Message::Height * 2 + 32 || @lines == 2
y = self.y + Message::Height * 1
end
@input_number_window = Window_InputNumber.new(digits_max)
@input_number_window.number =
$game_variables[$game_temp.num_input_variable_id]
@input_number_window.x = x
@input_number_window.y = y
@input_number_window.z = self.z + 10
@y -= 1
@ey -= 1.0
end
@choices.index, @choices.active,@choices.visible = 0,true,true if @choices
return
else
if @autoclose > 0
@autoclose -= 1
return
elsif @autoclose == 0
terminate_message
@autoclose = -1
return
end
end
if @input_number_window
@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
elsif @choices
@choices.update
end
self.pause = true
if Input.trigger?(Input::B)
if $game_temp.choice_max > 0 && $game_temp.choice_cancel_type > 0
result = $game_temp.choice_cancel_type - 1
if !@cond.nil? && !@cond[result].nil? && !@cond[result]
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.cancel_se)
@choices.visible = false
if !$choice.nil?
$choice_result = result
$choice = nil
end
$game_temp.choice_proc.call(result)
terminate_message
end
end
if Input.trigger?(Input::C)
if $game_temp.choice_max > 0
result = @choices.index
if !@cond.nil? && !@cond[result].nil? && !@cond[result]
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
@choices.visible = false
if !$choice.nil?
$choice_result = result
$choice = nil
end
$game_temp.choice_proc.call(result)
end
terminate_message
end
return
end
if ! @fade_out && $game_temp.message_text
@contents_showing = $game_temp.message_window_showing = true
if @choices
@choices.visible = false
@choices.dispose
@choices = nil
end
self.oy = 0
@stop = false
@autoclose = -1
refresh
@wait_count, self.visible = 0.0, true
return
end
return if ! visible
@fade_out = true
self.opacity -= 48
if self.opacity == 0
self.visible = @fade_out = false
if @choices
@choices.visible = false
@choices.dispose
@choices = nil
end
$game_temp.message_window_showing = false
end
end
end
class Window_MesChoices < Window_Selectable
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize(x, y, data,size = 2)
super(x, y, data.at(1) + 32, size * (h = Message::Height) + 32)
self.back_opacity = 0
self.opacity = 0
@size = size
self.index, self.active, @item_max = -1, false, $game_temp.choice_max
self.contents = Bitmap.new(data.at(1), @item_max * h)
contents.blt(0, 0, data.at(0), Rect.new(0, 0, data.at(1), h * @item_max))
end
#--------------------------------------------------------------------------
# * Update Cursor
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
return
end
self.oy = [[@index, @item_max].min - (@size-1), 0].max * Message::Height
y = @index * Message::Height - self.oy
cursor_rect.set(0, y, width - 32, Message::Height)
end
end
class Window_InputNumber < Window_Base
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize(digits_max)
case $game_temp.input_type
when nil,"default"
@character_array = ["0","1","2","3","4","5","6","7","8","9"]
when "binary"
@character_array = ["0","1"]
when "hexa"
@character_array = ["0","1","2","3","4","5","6","7","8","9",
"A","B","C","D","E","F"]
when "upcase_letters"
@character_array = ["A","B","C","D","E","F","G","H","I",
"J","K","L","M","N","O","P","Q","R","S",
"T","U","V","W","X","Y","Z"," "]
when "lowercase_letters"
@character_array = ["a","b","c","d","e","f","g","h","i",
"j","k","l","m","n","o","p","q","r","s",
"t","u","v","w","x","y","z"," "]
when "all_letters"
@character_array = ["A","B","C","D","E","F","G","H","I",
"J","K","L","M","N","O","P","Q","R","S",
"T","U","V","W","X","Y","Z","a","b","c",
"d","e","f","g","h","i","j","k","l","m",
"n","o","p","q","r","s","t","u","v","w",
"x","y","z"," "]
when "all_characters"
@character_array = ["A","B","C","D","E","F","G","H","I",
"J","K","L","M","N","O","P","Q","R","S",
"T","U","V","W","X","Y","Z","a","b","c",
"d","e","f","g","h","i","j","k","l","m",
"n","o","p","q","r","s","t","u","v","w",
"x","y","z","0","1","2","3","4","5","6",
"7","8","9","+","-","*","/","!","#","$",
"%","&","@",".",",","-"," "]
# when...
end
@digits_max = digits_max
@type = $game_temp.input_type || "default"
$game_temp.input_type = @type
@letter_array = []
@digits_max.times{@letter_array.push(0)}
dummy_bitmap = Bitmap.new(32, 32)
@cursor_width = 8
for i in 0...@character_array.size
letter_size = dummy_bitmap.text_size(@character_array[i]).width + 8
@cursor_width = [@cursor_width, letter_size].max
end
dummy_bitmap.dispose
super(0, 0, @cursor_width * @digits_max + 32+ 4, Message::Height+32)
self.contents = Bitmap.new(width - 32, height - 32)
self.z += 9999
self.opacity = 0
@index = 0
refresh
update_cursor_rect
end
def letter(index)
return @character_array[@letter_array[index]]
end
def increase_letter_array(index)
if @letter_array[index] == (@character_array.size-1)
@letter_array[index] = 0
else
@letter_array[index] += 1
end
end
def decrease_letter_array(index)
if @letter_array[index] == 0
@letter_array[index] = (@character_array.size-1)
else
@letter_array[index] -= 1
end
end
def update_cursor_rect
cursor_rect.set(@index * @cursor_width+2, 0, @cursor_width, Message::Height)
end
def update
super
if Input.repeat?(Input::UP)
$game_system.se_play($data_system.cursor_se)
increase_letter_array(@index)
refresh
end
if Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
decrease_letter_array(@index)
refresh
end
if Input.repeat?(Input::RIGHT)
if @digits_max >= 2
$game_system.se_play($data_system.cursor_se)
@index = (@index + 1) % @digits_max
end
end
if Input.repeat?(Input::LEFT)
if @digits_max >= 2
$game_system.se_play($data_system.cursor_se)
@index = (@index + @digits_max - 1) % @digits_max
end
end
if Input.trigger?(Input::B)
@letter_array[@index] = 0
refresh
end
update_cursor_rect
end
def refresh
contents.clear
contents.font.color = normal_color
(0...@digits_max).each {|i|
s = i * @cursor_width + 4
contents.draw_text(s,0,@cursor_width,Message::Height,letter(i),1) }
end
def number
@number = []
(0...@digits_max).each {|i| @number.push(letter(i))}
integer = @number.find_all {|i| !("0".."9").to_a.include?(i)}.size == 0
@number = @number.join
return integer ? @number.to_i : @number
end
def number=(number)
if number != 0
num = number.to_s
@array = num.scan(/./)
if @array.size != @digits_max
begin
@array.unshift(@character_array[0])
end until @array.size == @digits_max
end
(0...@digits_max).each {|i|
(0..@character_array.size).each {|j|
@letter_array[i] = j if @array[i] == @character_array[j]
}}
end
refresh
end
end
#==============================================================
# ** Scrolling Message System / Name Box
#------------------------------------------------------------------------------
# Slipknot (http://www.creationasylum.net/)
# Version 1.1
# March 13, 2007
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias slipknot_sms_nb_refresh refresh
alias slipknot_sms_nb_repcod replace_code
alias slipknot_sms_nb_termmes terminate_message
#--------------------------------------------------------------------------
# * Terminate Message
#--------------------------------------------------------------------------
def terminate_message
slipknot_sms_nb_termmes
if @name_box
@name_box.dispose
@name_box = nil
end
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
slipknot_sms_nb_refresh
if @name_text
@name_box = Window_MessageNameBox.new(x, y - 16, @name_text)
@name_box.back.opacity = 0 if $game_system.message_frame == 1
@name_box.z = self.z
@name_text = nil
end
end
#--------------------------------------------------------------------------
# * Replace Code
#--------------------------------------------------------------------------
def replace_code
slipknot_sms_nb_repcod
@text.gsub!(/\\[Nn]ame\[(.*?)\]/) { @name_text = $1; '' }
end
end
class Window_MessageNameBox < Window_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :back
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x, y, text)
dumb = Bitmap.new(160, 32)
dumb.font = Message.font
color = nil
text.sub!(/\\[Cc](\d)/) { color = text_color($1.to_i); '' }
size = dumb.text_size(text).width
dumb.dispose
@back = Window_Base.new(x, y, size + 12, 32)
@back.z = 9998
super(x - 10, y - 11, size + 32, 54)
self.z = 9999
self.opacity = 0
self.contents = Bitmap.new(size, 22)
contents.font = Message.font
contents.font.color = color if color
contents.draw_text(0, 0, size, 22, text)
end
#--------------------------------------------------------------------------
# * Dispose
#--------------------------------------------------------------------------
def dispose
@back.dispose
@back = nil
super
end
end
#==============================================================
# ** Scrolling Message System / Face
#------------------------------------------------------------------------------
# Slipknot (http://www.creationasylum.net/)
# Version 1.0
# May 13, 2007
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias slipknot_sms_f_refresh refresh
alias slipknot_sms_f_repcod replace_code
alias slipknot_sms_f_termmes terminate_message
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def terminate_message
slipknot_sms_f_termmes
if @face
@face.dispose
@face = nil
end
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
slipknot_sms_f_refresh
if @face_name
@face = Sprite.new
@face.x = self.x + 16
@face.y = self.y + 16
@face.z = self.z + 1
if @face_name.to_i > 0
actor = $game_actors[@face_name.to_i]
return @face_name = nil if actor.nil?
bitmap = RPG::Cache.windowskin("Actor#{actor.id}_HFace") rescue
RPG::Cache.windowskin("#{actor.name}_HFace") rescue
RPG::Cache.picture("Actor#{actor.id}_HFace") rescue
RPG::Cache.picture("#{actor.name}_HFace")
size = [bitmap.width,bitmap.height].min
rect = Rect.new(0,0,size,size)
else
bitmap = RPG::Cache.picture(@face_name)
rect = Rect.new(0,0,bitmap.width,bitmap.height)
end
@face.bitmap = Bitmap.new(60,60)
x = 30 - rect.width / 2
y = 30 - rect.height / 2
x, y = 0,0 if false
@face.bitmap.blt(x, y, bitmap, rect)
@face_name = nil
end
end
#--------------------------------------------------------------------------
# * Replace Code
#--------------------------------------------------------------------------
def replace_code
slipknot_sms_f_repcod
@text.sub!(/\\[Ff]ace\[(.*?)\]/) do
@face_name = $1
@ex += Message::Height * 2 + 4
''
end
end
end
#==============================================================
# ** Scrolling Message System / Bold & Italic
#------------------------------------------------------------------------------
# Slipknot (http://www.creationasylum.net/)
# Version 1.0
# May 13, 2007
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias slipknot_sms_bi_evalextra eval_extra
alias slipknot_sms_bi_repbcod replace_basic_code
#--------------------------------------------------------------------------
# * Eval Extra
#--------------------------------------------------------------------------
def eval_extra(bitmap)
slipknot_sms_bi_evalextra(bitmap)
if @c == "\005"
bitmap.font.bold = !bitmap.font.bold
@c = ''
end
if @c == "\006"
bitmap.font.italic = !bitmap.font.italic
@c = ''
end
end
#--------------------------------------------------------------------------
# * Replace Basic Code
#--------------------------------------------------------------------------
def replace_basic_code
slipknot_sms_bi_repbcod
@text.gsub!('\\b', "\005")
@text.gsub!('\\i', "\006")
end
end
#==============================================================
# ** Scrolling Message System / Furigana
#------------------------------------------------------------------------------
# LiTTleDRAgo (http://littledrago.blogspot.com/)
# Version 1.0
# June 27, 2013
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias drg3x4dkc2dx_evalextra eval_extra
alias drg3x4dkc2dx_evaltext eval_text
alias drg3x4dkc2dx_repbcod replace_basic_code
#--------------------------------------------------------------------------
# * Eval Extra
#--------------------------------------------------------------------------
def eval_extra(bitmap)
drg3x4dkc2dx_evalextra(bitmap)
if @c == "\031"
@text.sub!(/\[(.*?),(.*?)\]/, '')
text = [$1,$2,bitmap.font.size]
bitmap.font.size -= 6
text << bitmap.text_size(text[1])
@furigana = Bitmap.new(text[3].width,text[3].height)
@furigana.font = bitmap.font.dup
@furigana.draw_text(0,0,text[3].width,text[3].height,text[1])
bitmap.font.size = text[2]
text << bitmap.text_size(text[0])
x1 = [@ex + @x + (text[4].width/2 - text[3].width/2),0].max
y1 = Message::Height
x2 = [x1,self.width-text[3].width].min
y2 = y1 * @y - y1/10
@furigana_position = [x2,y2]
@c = text[0]
end
end
#--------------------------------------------------------------------------
# * Eval Extra
#--------------------------------------------------------------------------
def eval_text(*args)
result = drg3x4dkc2dx_evaltext(*args)
if @furigana && !@furigana.disposed?
x,y = @furigana_position
args[0].blt(x, y,@furigana,@furigana.rect) if !args[1]
@furigana.dispose
end
return result
end
#--------------------------------------------------------------------------
# * Replace Basic Code
#--------------------------------------------------------------------------
def replace_basic_code
drg3x4dkc2dx_repbcod
@text.gsub!(/\\[Rr]\[(.*?),(.*?)\]/) { "\031[#$1,#$2]" }
end
end
#==============================================================
# ** Scrolling Message System / Condition Text
#------------------------------------------------------------------------------
# LiTTleDRAgo (http://littledrago.blogspot.com/)
# Version 1.0
# June 27, 2013
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias drg3x4dkc2dy_repbcod replace_basic_code
#--------------------------------------------------------------------------
# * Replace Basic Code
#--------------------------------------------------------------------------
def replace_basic_code
drg3x4dkc2dy_repbcod
@text.gsub!(/\\[Ii][Ff]\[(.*?),(.*?)\]/) {
interpreter.send(:eval,"#$1") ? "#$2" : ""}
@text.gsub!(/\\[Uu][Nn][Ll][Ee][Ss][Ss]\[(.*?),(.*?)\]/) {
interpreter.send(:eval,"#$1") ? "" : "#$2"}
end
end
#==============================================================
# ** Scrolling Message System / Font Name & Size
#------------------------------------------------------------------------------
# LiTTleDRAgo (http://littledrago.blogspot.com/)
# Version 1.0
# July 04, 2013
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias drg3x4dkc2dz_evalextra eval_extra
alias drg3x4dkc2dz_repbcod replace_basic_code
#--------------------------------------------------------------------------
# * Eval Extra
#--------------------------------------------------------------------------
def eval_extra(bitmap)
drg3x4dkc2dz_evalextra(bitmap)
if @c == "\023"
@text.sub!(/\[(.*?)\]/, '')
font = $1
if font.to_i <= 0
bitmap.font.name = font
else
bitmap.font.size = font.to_i
end
@c = ''
end
end
#--------------------------------------------------------------------------
# * Replace Basic Code
#--------------------------------------------------------------------------
def replace_basic_code
drg3x4dkc2dz_repbcod
@text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?),([0-9]+)\]/) { "\\font[#$1]\\font[#$2]" }
@text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?)\]/) { "\023[#$1]" }
end
end
#==============================================================
# ** Scrolling Message System / Game Related
#------------------------------------------------------------------------------
# LiTTleDRAgo (http://littledrago.blogspot.com/)
# Version 1.0
# July 04, 2013
#==============================================================
class Window_Message < Window_Selectable
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias drg3x4dkc2ea_repbcod replace_basic_code
#--------------------------------------------------------------------------
# * Replace Basic Code
#--------------------------------------------------------------------------
def replace_basic_code
@text.gsub!(/\\[Ii]&[Nn]\[([EeIiWwAaSsPp])([0-9]+)\]/) {
entity = "#$1#$2"
"\\i[#{entity}] \\n[#{entity}]"}
@text.gsub!(/\\[Ii]\[([EeIiWwAaSsPp])([0-9]+)\]/) {
entity = case $1.downcase
when 'i' then $data_items[$2.to_i]
when 'w' then $data_weapons[$2.to_i]
when 'a' then $data_armors[$2.to_i]
when 's' then $data_skills[$2.to_i]
end
entity != nil ? "\002[#{entity.icon_name}]" : '' }
@text.gsub!(/\\[Ii]\[(.*?)\]/) { "\002[#$1]" }
@text.gsub!(/\\[Nn]\[([EeIiWwAaSsPp])([0-9]+)\]/) {
entity = case $1.downcase
when 'e' then $data_enemies[$2.to_i]
when 'i' then $data_items[$2.to_i]
when 'w' then $data_weapons[$2.to_i]
when 'a' then $data_armors[$2.to_i]
when 's' then $data_skills[$2.to_i]
when 'p' then $game_map.events[$2.to_i]
end
entity != nil ? entity.name : '' }
@text.gsub!(/\\[$]\[([EeIiWwAaSsPp])([0-9]+)\]/) {
e = case $1.downcase
when 'i' then $data_items[$2.to_i]
when 'w' then $data_weapons[$2.to_i]
when 'a' then $data_armors[$2.to_i]
when 's' then $data_skills[$2.to_i]
end
e != nil ? e.is_a?(RPG::Skill) ? e.sp_cost : e.price : '' }
@text.gsub!(/\\[Mm][Aa][Pp]/) {
load_data('Data/MapInfos.rxdata')[$game_map.map_id].name }
drg3x4dkc2ea_repbcod
end
end
end
-Face graphic size up to 96x96 pixels.
Scrolling Message System EX, Brewmeister's Empty Containers, Law's Custom Shop Screen, Weapon Specific Skills Script by TerreAqua, Game guy's Skill Shop, KK20's Organized Quest System, STCMS - Hybrid Edition and Blizz ABS.