Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #------------------------------------------------------------------------------#
- # 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement