Demo – Version 0.5 >
#------------------------------------------------------------------------------#
# Galv's Double Message
#------------------------------------------------------------------------------#
# For: RPGMAKER VX ACE
# Version 0.5
#------------------------------------------------------------------------------#
# 2012-11-30 - version 0.5 - incomplete release
#------------------------------------------------------------------------------#
# This was an attempt at being able to show two messages at once. I couldn't
# work out how to do it how I wanted and decided to give up. It is usable in
# it's current state, though. The current problems are:
# - you cannot skip through the text while displaying the double message
# - you have to add double message text with script calls which is painful and
# could be hard for beginners.
#------------------------------------------------------------------------------#
# INSTRUCTIONS:
# Put below materials, above main.
# To create a double message, use this SCRIPT CALL before a normal message:
#
#------------------------------------------------------------------------------#
# msg("Text goes in here","Face Name", face_position)
#------------------------------------------------------------------------------#
#
# - "Face Name" is the name of the faceset you want a face from, eg "Actor1"
# - face_position is where in that faceset the face you want is. 0 is first
# - "Test goes in here" - this is where it's painful as the script box is very
# small. Each new line in the script box is a new line in the message box
# unless you create multiple strings and add them together.
#
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# EXAMPLE 1
#------------------------------------------------------------------------------#
#
# msg("This is the text that would appear
# in the script box. As the script box is
# small, it wraps, which will also make
# it wrap in the message window.",
# "Actor1", 0)
#
#-- Appears as ----------------------------------------------------------------#
# ________
# | | This is the text that would appear
# | face | in the script box. As the script box is
# | | small, it wraps, which will also make
# |________| it wrap in the message window.
#
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# EXAMPLE 2 - multiple strings added together so line breaks aren't used
#------------------------------------------------------------------------------#
# msg("This is the text that would appear" +
# "in the script box.
# As the script box is small, it wraps," +
# "which will also make
# it wrap in the message window.",
# "Actor1", 0)
#
#-- Appears as ----------------------------------------------------------------#
# ________
# | | This is the text that would appear in the script box.
# | face | As the script box is small, it wraps, which will also make
# | | it wrap in the message window.
# |________|
#
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# MESSAGE CODES
#------------------------------------------------------------------------------#
# Most normal message codes work, but in a scrip call you need to put 2 slashes
# eg. \\c[1]
# Also, \\n will create a new line the same as a return.
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# NOTES:
#------------------------------------------------------------------------------#
# A double message will only ever appear when a real message is called.
# A double message will only disappear when a real message does. If you add
# wait of 10 between messages, you can remove the double message and add a new
# one if required. See demo for examples of this in use.
#------------------------------------------------------------------------------#
# REMEMBER: This is not finished and I plan to come back to it later when I
# have possibly start to understand why the issues I was having were happening.
#------------------------------------------------------------------------------#
($imported ||= {})["Galvs_Double_Message"] = true
module Galv_Msgs
#------------------------------------------------------------------------------#
# SCRIPT SETTINGS
#------------------------------------------------------------------------------#
DISABLE_SKIP_SWITCH = 1 # Turn switch ON to disable skipping messages
# skipping is always disabled when using 2 mesasges
#------------------------------------------------------------------------------#
# END SCRIPT SETTINGS
#------------------------------------------------------------------------------#
end # don't touch
class Window_Message2 < Window_Base
def initialize
super(0, 0, window_width, window_height)
self.z = 200
self.openness = 0
clear_instance_variables
end
def window_width
Graphics.width
end
def window_height
fitting_height(visible_line_number)
end
def clear_instance_variables
@fiber2 = nil
@background = 0
@position2 = 0
end
def visible_line_number
return 4
end
def update
super
update_close if !$game_message.visible
self.visible = false if $game_message.remove2 == true
update_fiber
end
def update_close
return if self.openness <= 0
self.openness -= 48
end
def update_fiber
if @fiber2
@fiber2.resume
elsif $game_message.visible && !$game_message.scroll_mode
@fiber2 = Fiber.new { fiber_main }
@fiber2.resume
else
$game_message.visible = false
$game_message.clear
$game_message.clear2
end
end
def fiber_main
update_background
update_placement
loop do
process_all_text if $game_message.texts2 != ""
$game_message.clear2
Fiber.yield
break unless $game_message.busy?
end
close
Fiber.yield
@fiber2 = nil
end
def update_background
@background = $game_message.background
self.opacity = @background == 0 ? 255 : 0
end
def update_placement
case $game_message.position
when 2
@position2 = 0
when 0
@position2 = 2
end
self.y = @position2 * (Graphics.height - height) / 2
end
def process_all_text
$game_message.disable_skip = true
open
text = convert_escape_characters($game_message.texts2)
pos = {}
new_page(text, pos)
process_character(text.slice!(0, 1), text, pos) until $game_message.texts2 == ""
end
def text_continue?
$game_message.texts2 != ""
end
def wait(duration)
duration.times { Fiber.yield }
end
# Crash caused when show fast enabled. Disabled it.
#def update_show_fast
# @show_fast = true if Input.trigger?(:C)
#end
def wait_for_one_character
#update_show_fast
Fiber.yield #unless @show_fast
end
def new_page(text, pos)
contents.clear
draw_face($game_message.face_name2, $game_message.face_index2, 0, 0)
reset_font_settings
pos[:x] = new_line_x
pos[:y] = 0
pos[:new_x] = new_line_x
pos[:height] = calc_line_height(text)
end
def new_line_x
$game_message.face_name2 == "" ? 0 : 112
end
def process_character(c, text, pos)
case c
when "\n"
process_new_line(text, pos)
when "\f"
process_new_page(text, pos)
when "\e"
process_escape_character(obtain_escape_code(text), text, pos)
else
process_normal_character(c, pos)
end
end
def process_normal_character(c, pos)
text_width = text_size(c).width
draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
pos[:x] += text_width
wait_for_one_character
end
def process_new_line(text, pos)
@line_show_fast = false
super
if need_new_page?(text, pos)
input_pause
new_page(text, pos)
end
end
def need_new_page?(text, pos)
pos[:y] + pos[:height] > contents.height && !text.empty?
end
def process_new_page(text, pos)
text.slice!(/^\n/)
input_pause
new_page(text, pos)
end
def process_draw_icon(icon_index, pos)
super
wait_for_one_character
end
def process_escape_character(code, text, pos)
case code.upcase
when '$'
@gold_window.open
when '.'
wait(15)
when '|'
wait(60)
when '!'
input_pause
when '>'
@line_show_fast = true
when '<'
@line_show_fast = false
when '^'
@pause_skip = true
else
super
end
end
def input_pause
self.pause = true
wait(10)
#Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C)
Fiber.yield until $game_message.btn_pressed
#Input.update
self.pause = false
$game_message.btn_pressed = false
end
end # Window_Message2 < Window_Base
class Game_Message
attr_accessor :texts2
attr_accessor :face_name2
attr_accessor :face_index2
attr_accessor :remove2
attr_accessor :disable_skip
attr_accessor :btn_pressed
alias galv_messages_message_initialize initialize
def initialize
galv_messages_message_initialize
@remove2 = false
clear2
end
def clear2
@texts2 = ""
@face_name2 = ""
@face_index2 = 0
@disable_skip = false
@btn_pressed = false
end
end # Game_Message
class Game_Interpreter
def msg(texts, face_name, face_index)
$game_message.texts2 = texts
$game_message.face_name2 = face_name
$game_message.face_index2 = face_index
end
end # Game_Interpreter
class Scene_Map
alias galv_messages_map_create_message_window create_message_window
def create_message_window
galv_messages_map_create_message_window
@message_window2 = Window_Message2.new
end
end # Scene_Map
class Window_Message < Window_Base
alias galv_messages_window_wait_for_one_character wait_for_one_character
def wait_for_one_character
return Fiber.yield if $game_message.disable_skip || $game_switches[Galv_Msgs::DISABLE_SKIP_SWITCH]
galv_messages_window_wait_for_one_character
end
alias galv_messages_window_close_and_wait close_and_wait
def close_and_wait
$game_message.clear2
galv_messages_window_close_and_wait
end
alias galv_messages_window_input_pause input_pause
def input_pause
galv_messages_window_input_pause
$game_message.btn_pressed = true
end
end # Window_Message < Window_Base
Hi Galv. Would you mind explaining why lines 351 to 355 are useful? When I comment them out, not only do things seem to work correctly, but also the issue “you cannot skip through the text while displaying the double message” seems to be solved.
Sorry, this is an incomplete script from 3 years ago and I do not remember haha. Perhaps testing it out would reveal my reason for doing so.
Well, two months and a fair number of players later, no problem appears to have arisen, so maybe it’s alright after all.
I’m glad to hear!
You think you’ll finish this any time soon?
No, sorry – I gave up on this many many years ago.
I understand.
See my comment above for how to make it work.
Dim doesn’t seem to work, So I don’t think I’ll be using this but thank you.