damasterofthearts 0 Report post Posted May 12, 2011 Well, I downloaded Ccao's UMS a while ago and it works great except that I dont know how to cancel the script when i need to. Example: $game_system.add_shortcut('\c1', '\nm[Zoey]\face[bHG SMIR]\fr') $game_system.add_shortcut('\c2', '\nm[You]\face[t2_12 A]\fl') \c1 Hey main Character! = Zoey:Hey! \c2 Hey random Character! = You: Hey! But then when I try to do this in the same event: You are trying to make a fire. The UMS will paste the main characters pic and name on the message that has nothing to do with him! Help! It crumps my game. Share this post Link to post Share on other sites
0 kellessdee 48 Report post Posted May 12, 2011 Just so you know, Game Making support would be a better category for this topic, I will move this for you. As for your question, I am not too familiar with HOW the script works, but possibly within the same event the face graphic isn't getting cleared or something, try putting "\face[] You are trying to make a fire." as the message \face[] should empty the face graphic and not display any face. Share this post Link to post Share on other sites
0 Noob Saibot 38 Report post Posted May 12, 2011 Well, I downloaded Ccao's UMS a while ago and it works great except that I dont know how to cancel the script when i need to. Example: $game_system.add_shortcut('\c1', '\nm[Zoey]\face[bHG SMIR]\fr') $game_system.add_shortcut('\c2', '\nm[You]\face[t2_12 A]\fl') \c1 Hey main Character! = Zoey:Hey! \c2 Hey random Character! = You: Hey! But then when I try to do this in the same event: You are trying to make a fire. The UMS will paste the main characters pic and name on the message that has nothing to do with him! Help! It crumps my game. You can find many versions of this from old to some what updated. Attached is a file I received from Neo Seeker. It seems to all be working so check your work against this one. Also its best to post what YOU have (game file) as this allows us to compare it to how it should work and be done. So I advise you to post that as well; we can only help based on what you tell us, show us, and give us. v/Respectfully, Kage Kazumi UMS.zip Share this post Link to post Share on other sites
0 Tenoukii 0 Report post Posted May 12, 2011 (edited) I don't know if your version of the UMS is the same as mine: # ***************************************************************************** # * Universal Message System # * v1.8.0 # * by Ccoa # * If you're seeing this script anywhere other than RPG Revolution, RMVXP # * Universe, SponGen, or RPG Manager, then please contact me. I have not # * given permission for this to be distributed anywhere else. # ***************************************************************************** # Usage: =begin IN MESSAGE CODES \b - toggle bold on and off \bopc - change the back opacity for this message to i (should be 0-255) \c - change the text color \c[#IIIIII] - change the text color to the hex code (temporary) \e - place the text box over event i (0 = player, -1 no event) \face[name] - changes the face graphic to name.png (leave empty [] for no face) \fl - change face justification to left \font[name] - change the font to name, leave empty [] to return to the default font \fr - change face justification to right \g - display the gold window \height - height of the message window, works only in normal mode \i - toggle italics on and off \ic[name] - draw icon name in the window \ignr - Do not write anything on this line, only process codes, must be the first thing on a line \jc - justify the window to the center, ignored if using \e \jl - justify the window to the left, ignored if using \e \jr - justify the window to the right, ignored if using \e \m - toggle mode between normal and fit window to text \n - display the name of actor i \nm[name] - display the name in the name window, leave empty [] to remove the name window \oa - display the icon and name of armor i \oi - display the icon and name of item i \opc - change the opacity for this message to i (should be 0-255) \os - display the icon and name of skill i \ow - display the icon and name of weapon i \p - pause for i frames before writing the next character \pt - toggle pause display on and off \s - toggle shadowed text \shk - set window shake to i, higher i is bigger shake, 0 is no shake \sk - begin text to be shaken, i is begger shake \sk - end text to be shaken \skip - toggle text skip on and off \ta - center the window over train actor 1 \t1 - switch to the talk1 comic thingy \t2 - switch to the talk2 comic thingy \tc - center the text, must be the first thing on a line \th - switch to the thought comic thingy \tl - left justify the text, must be the first thing on a line \tr - right justify the text, must be the first thing on a line \v - display variable i \width - width of the message window, works only in normal mode \w - wait for i frames after receiving this code, then close the window \ws - change the write speed to i \slv[name] - set this window to be slave window name, or show slave window name \inc - include this window in the last OUT OF MESSAGE CODES (use in a Script event command) $game_system.ums_mode = NORMAL_MODE - switch to normal mode $game_system.ums_mode = FIT_WINDOW_TO_TEXT - switch to fit window mode $game_system.text_skip = true - turn text skip on $game_system.text_skip = false true - turn text skip off (true is necessary) $game_system.text_mode = WRITE_FASTER - change skip mode to write faster $game_system.text_mode = WRITE_ALL - change skip mode to write all $game_system.write_speed = i - change the delay between letters to i frames $game_system.window_height = i - change the window height to i $game_system.window_width = i - change the window width to i $game_system.window_justification = RIGHT - make the window right justified $game_system.window_justification = LEFT - make the window left justified $game_system.window_justification = CENTER - make the window center justified $game_system.face_graphic = "filename" - change the face graphic to filename.png $game_system.face_graphic = "" - change the face graphic to none $game_system.face_graphic_justification = LEFT - the face graphic is on the left side $game_system.face_graphic_justification = RIGHT - the face graphic is on the right side $game_system.face_graphic_position = TOP - face graphic appears on top of window $game_system.face_graphic_position = CENTER - face graphic appears centered in window $game_system.face_graphic_position = BOTTOM - face graphic appears on the bottom of window $game_system.shadow_text = true - turn text shadowing on $game_system.shadow_text = false true - turn text shadowing off (true is necessary) $game_system.shadow_color = Color.new(red, blue, green, alpha) - change shadow color $game_system.message_event = what event to put the message over (0 = player, -1 = no event) $game_system.comic_enabled = false true - turn off comic thingy $game_system.comic_enabled = true - turn on comic thingy (only works with message_event not -1) $game_system.comic_style = TALK1 - use the talk1.png comic thingy $game_system.comic_style = TALK2 - use the talk2.png comic thingy $game_system.comic_style = THOUGHT - use the thought.png comic thingy $game_system.name = "name" - change the text of the name window to name $game_system.name = "" - remove the name window $game_system.font = "name" - change the font to name $game_system.font = "" - return the font to the default $game_system.text_justification = CENTER - center justify the text $game_system.text_justification = LEFT - left justify the text $game_system.text_justification = RIGHT - right justify the text $game_system.show_pause = true - show pause icon when waiting for user input $game_system.show_pause = false - don't show pause icon when waiting for user input $game_system.shake = 0 - turn window shake off $game_system.shake = i - set shake to i, higher i is bigger shake $game_system.sound_effect = "" - turn off the letter-by-letter SE $game_system.sound_effect = "sename" - play the SE sename with each letter written $game_system.animated_faces = false - do not use animated faces $game_system.animated_faces = true - use animated faces $game_system.animation_pause = i - Wait i frames between each animation $game_system.face_frame_width = i - Each frame on the faceset is i pixels $game_system.resting_face = "" - Do not use a resting face $game_system.resting_face = "name" - Use a different animated face named facenamename when done talking $game_system.resting_animation_pause = i - Wait i frames between resting animations $game_system.text_mode = ONE_LETTER_AT_A_TIME - write text one letter at a time $game_system.text_mode = ALL_AT_ONCE - write text all at once $game_system.font_color = Color.new(R, G, B, A) - permanently change the font color to the RGBA color given here $game_system.font_color = nil - return the font color permanently to normal_color (white, by default) $game_system.windowskin = "windowskinname" - change the message box windowskin to windowskin $game_system.windowskin = "" - change the message box windowskin back to the one in the database $game_system.name_window = true - show the name window $game_system.name_window = false - hide the name window (just show the text) $game_system.opacity = i - change the message window back opacity to i (0-255) $game_system.window_image = "imagename" - the name of the image to show behind the window $game_system.window_image = nil - stop showing an image behind the window $game_system.train_actor = i - center the message over train actor i =end # ***************************************************************************** # CONSTANTS # ***************************************************************************** # modes NORMAL_MODE = 0 FIT_WINDOW_TO_TEXT = 1 #text modes ONE_LETTER_AT_A_TIME = 0 ALL_AT_ONCE = 1 # skip modes WRITE_FASTER = 0 WRITE_ALL = 1 # justifications RIGHT = 4 CENTER = 1 LEFT = 6 # positions for extra objects (face graphics, choice box, etc) ABOVE = 0 # place the object above the top of the message box CENTER = 1 # center the object vertically inside the message box BOTTOM = 2 # place the bottom of the object on the bottom of the message box SIDE = 3 # to the side of the message box (which side depends on justification) # comic type TALK1 = 0 TALK2 = 1 THOUGHT = 2 # ***************************************************************************** # Changes to Game_System. This allows any changes made to be saved when the # game is saved. # ***************************************************************************** class Game_System attr_accessor :ums_mode # what mode the UMS is in attr_accessor :text_skip # whether or not text skip is activated attr_accessor :skip_mode # write the text faster while C is pressed, or just skip to the end attr_accessor :write_speed # frame delay between characters attr_accessor :text_mode # write one letter at a time, or all at once? attr_accessor :window_height # default height of message window attr_accessor :window_width # default width of message window attr_accessor :window_justification # default justification of window attr_accessor :face_graphic # current face graphic attr_accessor :face_graphic_justification # justification of face graphic attr_accessor :face_graphic_position # position of face graphic attr_accessor :shadowed_text # whether or not to draw a shadow behind the text attr_accessor :shadow_color # the shadow color attr_accessor :choice_justification # where the choice window is located attr_accessor :choice_position # prefered position of choice window attr_accessor :message_event # what event to center the text over (0 player, -1 to not) attr_accessor :train_actor # what train actor to center the text over (0 player, -1 to not) attr_accessor :comic_enabled # using "talk" icons? attr_accessor :comic_style # what type of comic image to use attr_accessor :name # the text for the name window attr_accessor :name_window # should the name window be visible? attr_accessor :font # the name of the font attr_accessor :font_color # the name of the (permanent) font color attr_accessor :text_justification # the justification of the window text attr_accessor :show_pause # whether or not to show the pause icon attr_accessor :shake # the amount of shake for the window attr_accessor :text_shake # shake amount for text attr_accessor :sound_effect # SE to play with each letter attr_accessor :slave_windows # hash of slave windows attr_accessor :indy_windows # hash of independent windows attr_accessor :animated_faces # are the faces animated? attr_accessor :animation_pause # how long do I wait between animation loops? attr_accessor :face_frame_width # how many pixels wide is each face frame attr_accessor :resting_face # postext for waiting face graphic attr_accessor :resting_animation_pause # how long to wait for resting graphic attr_accessor :windowskin # what windowskin to use for messages attr_accessor :back_opacity # back opacity of windowskin attr_accessor :opacity # opacity of windowskin attr_accessor :window_image # image used behind window attr_reader :shortcuts # user-defined shortcuts alias ums_initialize initialize def initialize ums_initialize @ums_mode = NORMAL_MODE @skip_mode = WRITE_ALL @text_skip = true @write_speed = 2 @text_mode = ONE_LETTER_AT_A_TIME @window_height = 128 @window_width = 480 @window_justification = CENTER @face_graphic = "" @face_graphic_justification = LEFT @face_graphic_position = CENTER @shadowed_text = false @shadow_color = Color.new(0, 0, 0, 100) @choice_justification = RIGHT @choice_position = SIDE @message_event = -1 @train_actor = -1 @comic_enabled = false @comic_style = TALK1 @name = "" @name_window = true @font = "Verdana" @font_color = nil @text_justification = LEFT @show_pause = true @shake = 0 @text_shake = 0 @sound_effect = "" @slave_windows = {} @indy_windows = {} @animated_faces = false @animation_pause = 80 @face_frame_width = 100 @resting_face = "" @resting_animation_pause = 80 @windowskin = "" @opacity = 255 @back_opacity = 160 @window_image = nil @used_codes = ['\v', '\n', '\c', '\g', '\skip', '\m', '\height', '\width', '\jr', '\jc', '\jl', '\face', '\fl', '\fr', '\b', '\i', '\s', '\e', '\t1', '\t2', '\th', '\nm', '\font', '\p', '\w', '\ws', '\oa', '\oi', '\os', '\ow', '\tl', '\tr', '\tc', '\ignr', '\shk', '\slv', '\ind', '\inc'] @shortcuts = {} end def add_shortcut(shortcut, code) text = shortcut.downcase if !@used_codes.include?(text) @shortcuts[shortcut] = code end end def open_window(name) if $game_system.indy_windows.has_key?(name) $game_system.indy_windows[name].show = true end end def close_window(name) if $game_system.indy_windows.has_key?(name) $game_system.indy_windows[name].dispose $game_system.indy_windows.delete(name) end end end #============================================================================== # ** Game_Temp #------------------------------------------------------------------------------ # This class handles temporary data that is not included with save data. # Refer to "$game_temp" for the instance of this class. #============================================================================== class Game_Temp attr_accessor :choices attr_accessor :num_choices attr_accessor :skip_next_choices alias old_init initialize def initialize old_init @skip_next_choices = 0 @num_choices = 1 end end class Scene_Map alias ums_update update def update $game_system.slave_windows.each_value { |window| window.update } $game_system.indy_windows.each_value { |window| window.update } ums_update end end class Interpreter #-------------------------------------------------------------------------- # * Event Command Execution #-------------------------------------------------------------------------- def execute_command # If last to arrive for list of event commands if @index >= @list.size - 1 # End event command_end # Continue return true end # Make event command parameters available for reference via @parameters if !(@list[@index].code == 102 and $game_temp.skip_next_choices > 0) @parameters = @list[@index].parameters.clone if @list[@index].code == 402 @parameters[0] += @offset end end # Branch by command code case @list[@index].code when 101 # Show Text return command_101 when 102 # Show Choices return command_102 when 402 # When [**] return command_402 when 403 # When Cancel return command_403 when 103 # Input Number return command_103 when 104 # Change Text Options return command_104 when 105 # Button Input Processing return command_105 when 106 # Wait return command_106 when 111 # Conditional Branch return command_111 when 411 # Else return command_411 when 112 # Loop return command_112 when 413 # Repeat Above return command_413 when 113 # Break Loop return command_113 when 115 # Exit Event Processing return command_115 when 116 # Erase Event return command_116 when 117 # Call Common Event return command_117 when 118 # Label return command_118 when 119 # Jump to Label return command_119 when 121 # Control Switches return command_121 when 122 # Control Variables return command_122 when 123 # Control Self Switch return command_123 when 124 # Control Timer return command_124 when 125 # Change Gold return command_125 when 126 # Change Items return command_126 when 127 # Change Weapons return command_127 when 128 # Change Armor return command_128 when 129 # Change Party Member return command_129 when 131 # Change Windowskin return command_131 when 132 # Change Battle BGM return command_132 when 133 # Change Battle End ME return command_133 when 134 # Change Save Access return command_134 when 135 # Change Menu Access return command_135 when 136 # Change Encounter return command_136 when 201 # Transfer Player return command_201 when 202 # Set Event Location return command_202 when 203 # Scroll Map return command_203 when 204 # Change Map Settings return command_204 when 205 # Change Fog Color Tone return command_205 when 206 # Change Fog Opacity return command_206 when 207 # Show Animation return command_207 when 208 # Change Transparent Flag return command_208 when 209 # Set Move Route return command_209 when 210 # Wait for Move's Completion return command_210 when 221 # Prepare for Transition return command_221 when 222 # Execute Transition return command_222 when 223 # Change Screen Color Tone return command_223 when 224 # Screen Flash return command_224 when 225 # Screen Shake return command_225 when 231 # Show Picture return command_231 when 232 # Move Picture return command_232 when 233 # Rotate Picture return command_233 when 234 # Change Picture Color Tone return command_234 when 235 # Erase Picture return command_235 when 236 # Set Weather Effects return command_236 when 241 # Play BGM return command_241 when 242 # Fade Out BGM return command_242 when 245 # Play BGS return command_245 when 246 # Fade Out BGS return command_246 when 247 # Memorize BGM/BGS return command_247 when 248 # Restore BGM/BGS return command_248 when 249 # Play ME return command_249 when 250 # Play SE return command_250 when 251 # Stop SE return command_251 when 301 # Battle Processing return command_301 when 601 # If Win return command_601 when 602 # If Escape return command_602 when 603 # If Lose return command_603 when 302 # Shop Processing return command_302 when 303 # Name Input Processing return command_303 when 311 # Change HP return command_311 when 312 # Change SP return command_312 when 313 # Change State return command_313 when 314 # Recover All return command_314 when 315 # Change EXP return command_315 when 316 # Change Level return command_316 when 317 # Change Parameters return command_317 when 318 # Change Skills return command_318 when 319 # Change Equipment return command_319 when 320 # Change Actor Name return command_320 when 321 # Change Actor Class return command_321 when 322 # Change Actor Graphic return command_322 when 331 # Change Enemy HP return command_331 when 332 # Change Enemy SP return command_332 when 333 # Change Enemy State return command_333 when 334 # Enemy Recover All return command_334 when 335 # Enemy Appearance return command_335 when 336 # Enemy Transform return command_336 when 337 # Show Battle Animation return command_337 when 338 # Deal Damage return command_338 when 339 # Force Action return command_339 when 340 # Abort Battle return command_340 when 351 # Call Menu Screen return command_351 when 352 # Call Save Screen return command_352 when 353 # Game Over return command_353 when 354 # Return to Title Screen return command_354 when 355 # Script return command_355 else # Other return true end end #-------------------------------------------------------------------------- # * Show Text #-------------------------------------------------------------------------- def command_101 # If other text has been set to message_text if $game_temp.message_text != nil # End return false end # Set message end waiting flag and callback @message_waiting = true $game_temp.message_proc = Proc.new { @message_waiting = false } # Set message text on first line $game_temp.message_text = @list[@index].parameters[0] + "\n" line_count = 1 # Loop loop do # If next event command text is on the second line or after if @list[@index + 1].code == 401 # Add the second line or after to message_text $game_temp.message_text += @list[@index + 1].parameters[0] + "\n" line_count += 1 # If the next event command is show text elsif @list[@index + 1].code == 101 # If the text contains the \inc code if @list[@index + 1].parameters[0].index(/\\[ii][Nn][Cc]/) != nil $game_temp.message_text += @list[@index + 1].parameters[0] + "\n" $game_temp.message_text.sub!(/\\[ii][Nn][Cc]/) { "" } else return true end # If event command is not on the second line or after else # If next event command is show choices if @list[@index + 1].code == 102 # Advance index @index += 1 # skip this one, it was already shown? if $game_temp.skip_next_choices > 0 $game_temp.skip_next_choices -= 1 else # Choices setup $game_temp.choice_start = line_count setup_choices(@list[@index].parameters) end # If next event command is input number elsif @list[@index + 1].code == 103 # If number input window fits on screen if line_count < 4 # Advance index @index += 1 # Number input setup $game_temp.num_input_start = line_count $game_temp.num_input_variable_id = @list[@index].parameters[0] $game_temp.num_input_digits_max = @list[@index].parameters[1] end end # Continue return true end # Advance index @index += 1 end end #-------------------------------------------------------------------------- # * Show Choices #-------------------------------------------------------------------------- def command_102 # If text has been set to message_text if $game_temp.message_text != nil # End return false end if $game_temp.skip_next_choices > 0 # skip this one, it is part of another $game_temp.skip_next_choices -= 1 @offset += 4 @index += 1 return false else @offset = 0 end # Set message end waiting flag and callback @message_waiting = true $game_temp.message_proc = Proc.new { @message_waiting = false } # Choices setup $game_temp.message_text = "" $game_temp.choice_start = 0 setup_choices(@parameters) # Continue return true end #-------------------------------------------------------------------------- # * Setup Choices #-------------------------------------------------------------------------- def setup_choices(parameters) params = parameters.clone @offset = 0 i = @index curr = 1 while curr < $game_temp.num_choices i += 1 if @list.code == 102 params[0] += @list.parameters[0] if @list.parameters[1] == 5 @cancel_flag = true else @cancel_flag = false end params[1] = @list.parameters[1] + (curr * 4) curr += 1 end end # Set choice item count to choice_max $game_temp.choice_max = params[0].size # Set choice to message_text $game_temp.choices = params[0] # Set cancel processing $game_temp.choice_cancel_type = params[1] if $game_temp.num_choices != 1 $game_temp.skip_next_choices = $game_temp.num_choices - 1 $game_temp.num_choices = 1 end # Set callback current_indent = @list[@index].indent $game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n } end #-------------------------------------------------------------------------- # * When [**] #-------------------------------------------------------------------------- def command_402 # If fitting choices are selected if @branch[@list[@index].indent] == @parameters[0] # Delete branch data @branch.delete(@list[@index].indent) # Continue return true end # If it doesn't meet the condition: command skip return command_skip end #-------------------------------------------------------------------------- # * When Cancel #-------------------------------------------------------------------------- def command_403 # If choices are cancelled if @cancel_flag # Delete branch data @branch.delete(@list[@index].indent) # Continue return true end # If it doen't meet the condition: command skip return command_skip end #-------------------------------------------------------------------------- # * Input Number #-------------------------------------------------------------------------- def command_103 # If text has been set to message_text if $game_temp.message_text != nil # End return false end # Set message end waiting flag and callback @message_waiting = true $game_temp.message_proc = Proc.new { @message_waiting = false } # Number input setup $game_temp.message_text = "" $game_temp.num_input_start = 0 $game_temp.num_input_variable_id = @parameters[0] $game_temp.num_input_digits_max = @parameters[1] # Continue return true end #-------------------------------------------------------------------------- # * Script #-------------------------------------------------------------------------- def command_355 # Set first line to script script = @list[@index].parameters[0] + "\n" # Loop loop do # If next event command is second line of script or after if @list[@index + 1].code == 655 # Add second line or after to script script += @list[@index + 1].parameters[0] + "\n" # If event command is not second line or after else # Abort loop break end # Advance index @index += 1 end # Evaluation result = eval(script) # Continue return true end end # ***************************************************************************** # Changes to Window_Message. This is the bulk of the script # ***************************************************************************** #============================================================================== # ** Window_Message #------------------------------------------------------------------------------ # This message window is used to display text. #============================================================================== class Window_Message < Window_Selectable #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize # x-coordinate depends on justification if $game_system.window_justification == RIGHT x = 640 - self.width elsif $game_system.window_justification == LEFT x = 0 else # center x = (640 - $game_system.window_width) / 2 end # y-coordinate depends on height y = 480 - $game_system.window_height - 16 super(x, y, $game_system.window_width, $game_system.window_height) self.contents = Bitmap.new(width - 32, height - 32) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end self.visible = false self.z = 9998 @fade_in = false @fade_out = false @contents_showing = false # face graphic sprite @face = Sprite.new @face.opacity = 0 @face.z = self.z + 1 @face_offset = 0 # choice window @choice_window = Window_Choice.new([]) @choice_window.back_opacity = $game_system.back_opacity # comic sprite @comic = Sprite.new @comic.opacity = 0 @comic.z = self.z + 1 if $game_system.comic_style == TALK1 @comic.bitmap = RPG::Cache.windowskin("talk1") elsif $game_system.comic_style == TALK2 @comic.bitmap = RPG::Cache.windowskin("talk2") else # thought @comic.bitmap = RPG::Cache.windowskin("thought") end # window image sprite @window_back = Sprite.new @window_back.opacity = 0 @window_back.z = self.z - 1 if $game_system.window_image != nil @window_back.bitmap = RPG::Cache.windowskin($game_system.window_image) end # name window @name_window = Window_Name.new @name_window.z = self.z + 1 # shake bitmaps @shake_sprite = Sprite.new @shake_sprite.bitmap = Bitmap.new(width - 32, height - 32) @shake_sprite.x = self.x + 16 @shake_sprite.y = self.y + 8 @shake_sprite.z = self.z + 1 @pause_time = 0 @wait = 0 @show = false @face_frame = 0 end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose terminate_message $game_temp.message_window_showing = false if @input_number_window != nil @input_number_window.dispose end @face.dispose @choice_window.dispose @comic.dispose @name_window.dispose @shake_sprite.dispose super end #-------------------------------------------------------------------------- # * Terminate Message #-------------------------------------------------------------------------- def terminate_message @show = false self.active = false self.pause = false self.contents.clear # Clear showing flag @contents_showing = false # Call message callback if $game_temp.message_proc != nil $game_temp.message_proc.call end # Clear variables related to text, choices, and number input $game_temp.message_text = nil $game_temp.message_proc = nil $game_temp.choice_start = 99 $game_temp.choice_max = 0 $game_temp.choice_cancel_type = 0 $game_temp.choice_proc = nil $game_temp.num_input_start = 99 $game_temp.num_input_variable_id = 0 $game_temp.num_input_digits_max = 0 # Open gold window if @gold_window != nil @gold_window.dispose @gold_window = nil end @choice_window.visible = false @choice_window.active = false @comic.opacity = 0 $game_system.slave_windows.each_pair {|name, window| if window.show == true window.dispose $game_system.slave_windows.delete(name) end } @done = false end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end if $game_system.windowskin != "" self.windowskin = RPG::Cache.windowskin($game_system.windowskin) else self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name) end if $game_system.comic_style == TALK1 @comic.bitmap = RPG::Cache.windowskin("talk1") elsif $game_system.comic_style == TALK2 @comic.bitmap = RPG::Cache.windowskin("talk2") else # thought @comic.bitmap = RPG::Cache.windowskin("thought") end @show = true @x = @y = 0 # If waiting for a message to be displayed if $game_temp.message_text != nil @text = $game_temp.message_text # replace shortcuts with original code $game_system.shortcuts.each { |shortcut, code| @text.gsub!(shortcut, code) } # VERY first thing. Check to see if this is being set up as a slave # or independent window. if @text.index(/\\[ss][Ll][Vv]\[(.*?)\]/) != nil # is this a new slave window, or a request to display it? if !$game_system.slave_windows.has_key?($1.to_s) # there is no such slave window yet. Set it up. @text.gsub!(/\\[ss][Ll][Vv]\[(.*?)\]/, "") $game_system.slave_windows[$1.to_s] = Window_Slave.new(@text) @text = "" @show = false terminate_message return end end if @text.index(/\\[ii][Nn][Dd]\[(.*?)\]/) != nil # is this a new independent window, or a request to display it? if !$game_system.indy_windows.has_key?($1.to_s) # there is no such slave window yet. Set it up. @text.gsub!(/\\[ii][Nn][Dd]\[(.*?)\]/, "") $game_system.indy_windows[$1.to_s] = Window_Slave.new(@text) @text = "" @show = false terminate_message return end end # Control text processing begin last_text = @text.clone @text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } end until @text == last_text @text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end # window mode if @text.index(/\\[Mm]/) != nil if $game_system.ums_mode == NORMAL_MODE $game_system.ums_mode = FIT_WINDOW_TO_TEXT else $game_system.ums_mode = NORMAL_MODE end @text.gsub!(/\\[Mm]/) { "" } end # window height @text.gsub!(/\\[Hh][Ee][ii][Gg][Hh][Tt]\[([0-9]+)\]/) do $game_system.window_height = $1.to_i "" end # window width @text.gsub!(/\\[Ww][ii][Dd][Tt][Hh]\[([0-9]+)\]/) do $game_system.window_width = $1.to_i "" end # justification @text.gsub!(/\\[Jj][Rr]/) do $game_system.window_justification = RIGHT reset_window "" end @text.gsub!(/\\[Jj][Cc]/) do $game_system.window_justification = CENTER reset_window "" end @text.gsub!(/\\[Jj][Ll]/) do $game_system.window_justification = LEFT reset_window "" end # face graphics @text.gsub!(/\\[Ff][Aa][Cc][Ee]\[(.*?)\]/) do $game_system.face_graphic = $1.to_s if $1.to_s == "" @face.opacity = 0 end "" end @text.gsub!(/\\[Ff][Ll]/) do $game_system.face_graphic_justification = LEFT "" end @text.gsub!(/\\[Ff][Rr]/) do $game_system.face_graphic_justification = RIGHT "" end # event centering @text.gsub!(/\\[Ee]\[([0-9]+)\]/) do $game_system.message_event = $1.to_i "" end # train actor centering @text.gsub!(/\\[Tt][Aa]\[([0-9]+)\]/) do $game_system.train_actor = $1.to_i "" end # comic thingy @text.gsub!(/\\[Tt]1/) do $game_system.comic_style = TALK1 @comic.bitmap = RPG::Cache.windowskin("talk1.png") "" end @text.gsub!(/\\[Tt]2/) do $game_system.comic_style = TALK2 @comic.bitmap = RPG::Cache.windowskin("talk2.png") "" end @text.gsub!(/\\[Tt][Hh]/) do $game_system.comic_style = THOUGHT @comic.bitmap = RPG::Cache.windowskin("thought.png") "" end # name window @text.gsub!(/\\[Nn][Mm]\[(.*?)\]/) do $game_system.name = $1.to_s if $1.to_s == "" @name_window.visible = false @name_window.dummy_window.visible = false end "" end # name party window @text.gsub!(/\\[Nn][Pp]\[([0-9]+)\]/) do actor = $game_party.actors[$1.to_i] if actor != nil actor.name else "" end end if $game_system.name == "" @name_window.visible = false @name_window.dummy_window.visible = false end # toggle pause @text.gsub!(/\\[Pp][Tt]/) do $game_system.show_pause = !$game_system.show_pause "" end # shaking @text.gsub!(/\\[ss][Kk]\[([0-9]+)\]/) do $game_system.text_shake = $1.to_i "\030" end @text.gsub!(/\\[ss][Kk]/) do "\031" end @text.gsub!(/\\[ss][Hh][Kk]\[([0-9]+)\]/) do $game_system.shake = $1.to_i "" end # back opacity @text.gsub!(/\\[bb][Oo][Pp][Cc]\[([0-9]+)\]/) do $game_system.back_opacity = $1.to_i self.back_opacity = $game_system.back_opacity "" end # opacity @text.gsub!(/\\[Oo][Pp][Cc]\[([0-9]+)\]/) do $game_system.opacity = $1.to_i self.opacity = $game_system.opacity "" end # Change "\\\\" to "\000" for convenience @text.gsub!(/\\\\/) { "\000" } # Change "\\C" to "\001" and "\\G" to "\002" @text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } @text.gsub!(/\\[Gg]/) { "\002" } @text.gsub!(/\\[Cc]\[0x([0123456789abcdef]+)\]/) { "\026[#{$1}]" } # text skip code @text.gsub!(/\\[ss][Kk][ii][Pp]/) { "\003" } # ignore code @text.gsub!(/\\[ii][Gg][Nn][Rr]/) { "\023" } # slave and indy windows @text.gsub!(/\\[ss][Ll][Vv]\[(.*?)\]/) { "\024[#{$1}]" } @text.gsub!(/\\[ii][Nn][Dd]\[(.*?)\]/) { "\025[#{$1}]" } # bold and italics @text.gsub!(/\\[bb]/) { "\004" } @text.gsub!(/\\[ii]/) { "\005" } # shadow @text.gsub!(/\\[ss]/) { "\006" } # font @text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?)\]/) { "\007[#{$1}]" } # pause and wait @text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\010[#{$1}]" } @text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\011[#{$1}]" } # write speed @text.gsub!(/\\[Ww][ss]\[([0-9]+)\]/) { "\013[#{$1}]" } # armor, items, skills, and weapons @text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) { item = $data_armors[$1.to_i] "\014[#{$1}]" + " " + item.name } @text.gsub!(/\\[Oo][ii]\[([0-9]+)\]/) { item = $data_items[$1.to_i] "\015[#{$1}]" + " " + item.name } @text.gsub!(/\\[Oo][ss]\[([0-9]+)\]/) { item = $data_skills[$1.to_i] "\016[#{$1}]" + " " + item.name } @text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) { item = $data_weapons[$1.to_i] "\017[#{$1}]" + " " + item.name } @text.gsub!(/\\[ii][Cc]\[(.*?)\]/) { "\027[#{$1}]" } # text justification @text.gsub!(/\\[Tt][Cc]/) { "\020" } @text.gsub!(/\\[Tt][Ll]/) { "\021" } @text.gsub!(/\\[Tt][Rr]/) { "\022" } # Resize the window to fit the contents? if $game_system.ums_mode == FIT_WINDOW_TO_TEXT width = 1 text = @text.split("\n") height = 0 i = 0 for line in text # don't count this line's width if it has the ignr code if !line.include?("\023") width = [width, self.contents.text_size(line).width].max delta = self.contents.text_size(line).height height += delta + (delta * 0.2).to_i end end if $game_system.face_graphic != "" and ($game_system.face_graphic_position == CENTER or $game_system.face_graphic_position == BOTTOM) width += @face.bitmap.width if height < @face.bitmap.height height = @face.bitmap.height - 32 end end if height == 0 height = 1 end self.width = width + 48 self.height = height + 48 self.contents = Bitmap.new(width + 16, height) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end else # normal mode if self.width != $game_system.window_height or self.height != $game_system.window_width self.width = $game_system.window_width self.height = $game_system.window_height # check to see if overall text height is greater than window height text = @text.split("\n") height = 0 i = 0 for line in text # don't count this line's width if it has the ignr code if !line.include?("\023") delta = self.contents.text_size(line).height height += delta + (delta * 0.2).to_i end end height += 32 if (height > self.height) self.contents = Bitmap.new(self.width - 32, height - 32) else self.contents = Bitmap.new(self.width - 32, self.height - 32) end if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end end end if $game_system.window_image != nil # figure out how we're going to resize this @window_back.zoom_x = self.width.to_f / @window_back.bitmap.width @window_back.zoom_y = self.height.to_f / @window_back.bitmap.height end reset_window get_x_value @count = Graphics.frame_count @pause_time = 0 @ignore = false @ascending = true @target_x = self.x + $game_system.shake @target_x2 = @shake_sprite.x + $game_system.text_shake @done = false @face_frame = 0 @done = false self.oy = 0 end end #-------------------------------------------------------------------------- # * Set Window Position and Opacity Level #-------------------------------------------------------------------------- def reset_window (change_opacity = true) # x-coordinate depends on justification if $game_system.message_event == -1 and $game_system.train_actor == -1 if $game_system.window_justification == RIGHT self.x = 640 - $game_system.window_width elsif $game_system.window_justification == LEFT self.x = 0 else # center self.x = (640 - self.width) / 2 end elsif $game_system.train_actor >= 0 if $game_system.train_actor == 0 or $game_system.train_actor > $game_party.actors.size - 1 # center on player event_x = $game_player.screen_x else # center on train actor event_x = $game_train.actors[$game_system.train_actor - 1].screen_x end self.x = event_x - self.width / 2 @comic.x = self.x + (self.width / 2) + 4 else if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil # center on player event_x = $game_player.screen_x else # center on the event specified event_x = $game_map.events[$game_system.message_event].screen_x end self.x = event_x - self.width / 2 @comic.x = self.x + (self.width / 2) + 4 end if $game_temp.in_battle self.y = 16 else if $game_system.message_event == -1 and $game_system.train_actor == -1 case $game_system.message_position when 0 # up self.y = 16 when 1 # middle self.y = (480 - $game_system.window_height) / 2 when 2 # down self.y = 480 - $game_system.window_height - 24 end elsif $game_system.train_actor >= 0 if $game_system.train_actor == 0 or $game_system.train_actor > $game_party.actors.size - 1 # center on player self.y = $game_player.screen_y - self.height - 48 else # center on train actor self.y = $game_train.actors[$game_system.train_actor - 1].screen_y - self.height - 48 end @comic.y = self.y + self.height - 2 @comic.angle = 0 else if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil # above player self.y = $game_player.screen_y - self.height - 48 else # above event specified self.y = $game_map.events[$game_system.message_event].screen_y - self.height - 48 end @comic.y = self.y + self.height - 2 @comic.angle = 0 end end if self.y < 0 + ($game_system.name == "" ? 0 : 16) if $game_system.comic_enabled if $game_system.message_event == 0 or $game_map.events[$game_system.message_event] == nil self.y = $game_player.screen_y - 16 else self.y = $game_map.events[$game_system.message_event].screen_y - 16 end @comic.angle = 180 @comic.y = self.y + 2 @comic.x = self.x + (self.width / 2) - 4 else self.y = 0 + ($game_system.name == "" ? 0 : 16) end elsif self.y > 480 - self.height self.y = 480 - self.height end if self.x < 0 self.x = 0 elsif self.x > 680 - self.width - 48 self.x = 640 - self.width end if change_opacity if $game_system.message_frame == 0 and $game_temp.message_text != "" self.opacity = $game_system.opacity else self.opacity = 0 end self.back_opacity = $game_system.back_opacity end # window back stuff if $game_system.window_image != nil @window_back.bitmap = RPG::Cache.windowskin($game_system.window_image) @window_back.x = self.x @window_back.y = self.y end # face stuff if $game_system.face_graphic != "" # the player has chosen to show a face graphic if @done and $game_system.resting_face != "" @face.bitmap = RPG::Cache.picture($game_system.face_graphic + $game_system.resting_face) if @face_frame * $game_system.face_frame_width >= @face.bitmap.width @face_frame = 0 end else @face.bitmap = RPG::Cache.picture($game_system.face_graphic) end # picture y-coordinate if $game_system.face_graphic_position == ABOVE @face.y = self.y - @face.bitmap.height @face_offset = 0 elsif $game_system.face_graphic_position == CENTER delta = (@face.bitmap.height - self.height) / 2 @face.y = self.y - delta if $game_system.animated_faces @face_offset = $game_system.face_frame_width + 16 else @face_offset = @face.bitmap.width + 16 end elsif $game_system.face_graphic_position == BOTTOM @face.y = self.y + self.height - @face.bitmap.height if $game_system.animated_faces @face_offset = $game_system.face_frame_width + 16 else @face_offset = @face.bitmap.width + 16 end else # side delta = (@face.bitmap.height - self.height) / 2 @face.y = self.y - delta @face_offset = 0 end # picture x-coordinate if $game_system.face_graphic_justification == LEFT if $game_system.face_graphic_position == SIDE @face.x = self.x - @face.bitmap.width else @face.x = self.x + 10 end else # right side if $game_system.animated_faces offset = @face.bitmap.width - $game_system.face_frame_width else offset = 0 end if $game_system.face_graphic_position == SIDE @face.x = self.x + self.width + offset else @face.x = self.x + self.width - @face.bitmap.width - 10 + offset @face_offset = 0 end end if $game_system.animated_faces @face.src_rect = Rect.new(@face_frame * $game_system.face_frame_width, 0, $game_system.face_frame_width, @face.bitmap.height) if @done and $game_system.resting_face != "" pause = $game_system.resting_animation_pause else pause = $game_system.animation_pause end if Graphics.frame_count % pause == 0 @animate_face = true end if @animate_face if Graphics.frame_count % 3 == 0 @face_frame += 1 if @face_frame * $game_system.face_frame_width >= @face.bitmap.width @face_frame = 0 @animate_face = false end end end end end # name window if $game_system.name != "" @name_window.x = self.x @name_window.y = self.y - 36 @name_window.set_name($game_system.name) end # If choice if $game_temp.choice_max > 0 @choice_window.set_choices($game_temp.choices) # determine x and y coords for choice window if $game_system.choice_justification == LEFT @choice_window.x = self.x else @choice_window.x = self.x + self.width - @choice_window.width end if $game_system.choice_position == ABOVE # check to make sure there is enough room above the textbox if self.y < @choice_window.height # not enough room above, place below @choice_window.y = self.y + self.height else # draw above @choice_window.y = self.y - @choice_window.height end elsif $game_system.choice_position == BOTTOM # check to make sure there is enough room below the textbox if (480 - self.y - self.height) < @choice_window.height # not enough room below, place above @choice_window.y = self.y - @choice_window.height else # draw below @choice_window.y = self.y + self.height end else # side if $game_system.choice_justification == LEFT # check to make sure there's room on the left side if self.y < @choice_window.width # not enough room on the side, check to make sure there's room below if (480 - self.y - self.height) < @choice_window.height # not enough room below, place above @choice_window.y = self.y - @choice_window.height else # draw below @choice_window.y = self.y + self.height end else # place on the left side @choice_window.y = self.y @choice_window.x = self.x - @choice_window.width end else # right # check to make sure there's room on the right side if (680 - (self.y + self.width)) < @choice_window.width # not enough room on the side, check to make sure there's room below if (480 - self.y - self.height) < @choice_window.height # not enough room below, place above @choice_window.y = self.y - @choice_window.height else # draw below @choice_window.y = self.y + self.height end else # place on the left side @choice_window.y = self.y @choice_window.x = self.x + self.width end end end end # If number input if $game_temp.num_input_variable_id > 0 if @input_number_window == nil digits_max = $game_temp.num_input_digits_max number = $game_variables[$game_temp.num_input_variable_id] @input_number_window = Window_InputNumber.new(digits_max) @input_number_window.number = number end # determine x and y coords for number input window if $game_system.choice_justification == LEFT @input_number_window.x = self.x else @input_number_window.x = self.x + self.width - @input_number_window.width end if $game_system.choice_position == ABOVE # check to make sure there is enough room above the textbox if self.y < @input_number_window.height # not enough room above, place below @input_number_window.y = self.y + self.height else # draw above @input_number_window.y = self.y - @choice_window.height end elsif $game_system.choice_position == BOTTOM # check to make sure there is enough room below the textbox if (480 - self.y - self.height) < @input_number_window.height # not enough room below, place above @input_number_window.y = self.y - @input_number_window.height else # draw below @input_number_window.y = self.y + self.height end else # side if $game_system.choice_justification == LEFT # check to make sure there's room on the left side if self.y < @input_number_window.width # not enough room on the side, check to make sure there's room below if (480 - self.y - self.height) < @input_number_window.height # not enough room below, place above @input_number_window.y = self.y - @input_number_window.height else # draw below @input_number_window.y = self.y + self.height end else # place on the left side @input_number_window.y = self.y @input_number_window.x = self.x - @choice_window.width end else # right # check to make sure there's room on the right side if (680 - (self.y + self.width)) < @input_number_window.width # not enough room on the side, check to make sure there's room below if (480 - self.y - self.height) < @input_number_window.height # not enough room below, place above @input_number_window.y = self.y - @input_number_window.height else # draw below @input_number_window.y = self.y + self.height end else # place on the left side @input_number_window.y = self.y @input_number_window.x = self.x + self.width end end end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super if (@contents_showing and $game_system.message_event != -1 and $game_system.shake == 0) or $game_system.animated_faces reset_window(false) end if $game_system.shake != 0 # shake the window if @ascending if @target_x != self.x self.x += 1 else @ascending = false @target_x = self.x - ($game_system.shake * 2) end else if @target_x != self.x self.x -= 1 else @ascending = true @target_x = self.x + ($game_system.shake * 2) end end end if $game_system.text_shake != 0 # shake the text if @ascending if @target_x2 != @shake_sprite.x @shake_sprite.x += 1 else @ascending = false @target_x2 = @shake_sprite.x - ($game_system.text_shake * 2) end else if @target_x2 != @shake_sprite.x @shake_sprite.x -= 1 else @ascending = true @target_x2 = @shake_sprite.x + ($game_system.text_shake * 2) end end end @name_window.update if @wait > 0 @wait -= 1 if @wait == 0 terminate_message return end end # If fade in if @fade_in if $game_temp.message_text == "" @fade_in = false return end self.contents_opacity += 24 if $game_system.face_graphic != "" @face.opacity += 24 end if $game_system.window_image != nil @window_back.opacity += 24 end if $game_system.comic_enabled and $game_system.message_event != -1 @comic.opacity = self.opacity @comic.visible = self.visible end @shake_sprite.visible = true if $game_system.name != "" and @show @name_window.visible = true if $game_system.name_window @name_window.dummy_window.visible = true end end if @input_number_window != nil @input_number_window.contents_opacity += 24 end if self.contents_opacity == 255 @fade_in = false end return end # write the text if @text != nil and @text != "" speed = $game_system.write_speed if $game_system.text_mode == ALL_AT_ONCE or $game_temp.in_battle while (c = @text.slice!(/./m)) != nil write_char© end $game_system.slave_windows.each_value { |window| window.write_all } return end if $game_system.text_skip if $game_system.skip_mode == WRITE_FASTER and Input.press?(Input::C) # the player is holding the action button, write faster speed /= 3 elsif $game_system.skip_mode == WRITE_ALL and Input.trigger?(Input::C) # the player pressed the action button, write all the text while (c = @text.slice!(/./m)) != nil write_char© end $game_system.slave_windows.each_value { |window| window.write_all } return end end while @ignore c = @text.slice!(/./m) if c != nil write_char© end end if @pause_time > 0 @pause_time -= 1 return end if Graphics.frame_count - @count >= speed if $game_system.sound_effect != "" Audio.se_play("Audio/SE/" + $game_system.sound_effect, 80, 100) end @count = Graphics.frame_count c = @text.slice!(/./m) if c != nil write_char© end end return end if $game_system.animated_faces and $game_system.resting_face != "" @done = true end # If inputting number if @input_number_window != nil @input_number_window.update # Confirm 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 # Dispose of number input window @input_number_window.dispose @input_number_window = nil terminate_message end return end if @wait != 0 return end # If message is being displayed and contents are all written if @contents_showing # if choice if $game_temp.choice_max > 0 if !@choice_window.active @choice_window.visible = true @choice_window.active = true @choice_window.index = 0 end @choice_window.update else # If choice isn't being displayed, show pause sign self.pause = $game_system.show_pause end # Cancel if Input.trigger?(Input::B) if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0 $game_system.se_play($data_system.cancel_se) $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1) terminate_message end end # Confirm if Input.trigger?(Input::C) and !(@wait > 0) @done = true $game_system.slave_windows.each_value { |window| window.write_all if !window.done @done = false end } if @done if $game_temp.choice_max > 0 $game_system.se_play($data_system.decision_se) $game_temp.choice_proc.call(@choice_window.index) end terminate_message else @finishing_up = true end end return end if @finishing_up $game_system.slave_windows.each_value { |window| if !window.done @done = true break end } if @done = false terminate_message end end # If display wait message or choice exists when not fading out if @fade_out == false and $game_temp.message_text != nil @contents_showing = true $game_temp.message_window_showing = true reset_window refresh Graphics.frame_reset if @show self.visible = true end self.contents_opacity = 0 if @input_number_window != nil @input_number_window.contents_opacity = 0 end @fade_in = true return end # If message which should be displayed is not shown, but window is visible if self.visible @fade_out = true self.opacity -= 48 @name_window.opacity -= 48 @shake_sprite.opacity -= 48 @comic.opacity -= 48 @face.opacity -= 48 @window_back.opacity -= 48 if self.opacity == 0 self.visible = false @face.opacity = 0 @window_back.opacity = 0 @choice_window.visible = false @choice_window.active = false @comic.opacity = 0 @name_window.visible = false @shake_sprite.bitmap.clear @shake_sprite.opacity = 255 @name_window.dummy_window.visible = false @name_window.update @fade_out = false $game_temp.message_window_showing = false end return end if $game_temp.battle_calling or $game_temp.shop_calling or $game_temp.name_calling or $game_temp.menu_calling or $game_temp.save_calling or $game_temp.debug_calling $game_system.indy_windows.each_pair {|name, window| if window.show == true window.dispose $game_system.indy_windows.delete(name) end } end end #-------------------------------------------------------------------------- # * Process and write the given character #-------------------------------------------------------------------------- def write_char© if c == "\000" # Return to original text c = "\\" end # If \C[n] if c == "\001" # Change text color @text.sub!(/\[([0-9]+)\]/, "") color = $1.to_i if color >= 0 and color <= 7 self.contents.font.color = text_color(color) end # go to next text return end # If \G if c == "\002" # Make gold window if @gold_window == nil @gold_window = Window_Gold.new @gold_window.x = 560 - @gold_window.width if $game_temp.in_battle @gold_window.y = 192 else @gold_window.y = self.y >= 128 ? 32 : 384 end @gold_window.opacity = self.opacity @gold_window.back_opacity = self.back_opacity end # go to next text return end # If \skip if c == "\003" # toggle text skipping $game_system.text_skip = !$game_system.text_skip # go to next text return end # If \b if c == "\004" # toggle bold self.contents.font.bold = !self.contents.font.bold # go to next text return end # If \i if c == "\005" # toggle italics self.contents.font.italic = !self.contents.font.italic # go to next text return end # If \s if c == "\006" # toggle shadow $game_system.shadowed_text = !$game_system.shadowed_text # go to next text return end # If \font if c == "\007" # change font @text.sub!(/\[(.*?)\]/, "") font = $1.to_s $game_system.font = font if font == "" self.contents.font.name = Font.default_name else self.contents.font.name = font end # go to next text return end # If \p[n] if c == "\010" @text.sub!(/\[([0-9]+)\]/, "") @pause_time = $1.to_i # go to next text return end # If \w[n] if c == "\011" @text.sub!(/\[([0-9]+)\]/, "") @wait = $1.to_i # go to next text return end # If \ws[n] if c == "\013" @text.sub!(/\[([0-9]+)\]/, "") $game_system.write_speed = $1.to_i # go to next text return end # If \oa[n] if c == "\014" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_armors[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) line = self.contents.text_size("dj").height self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \oi[n] if c == "\015" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_items[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) line = self.contents.text_size("dj").height self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ic[name] if c == "\027" @text.sub!(/\[(.*?)\]/, "") # draw the icon icon = RPG::Cache.icon($1.to_s) line = self.contents.text_size("dj").height self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \os[n] if c == "\016" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_skills[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) line = self.contents.text_size("dj").height self.contents.blt(@x + 2, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ow[n] if c == "\017" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_weapons[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) line = self.contents.text_size("dj").height self.contents.blt(@x + 2, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \tc if c == "\020" # center justify $game_system.text_justification = CENTER get_x_value # go to next text return end # If \tl if c == "\021" # left justify $game_system.text_justification = LEFT get_x_value # go to next text return end # If \tr if c == "\022" # right justify $game_system.text_justification = RIGHT get_x_value # go to next text return end # If \ignr if c == "\023" # set ignore flage @ignore = true # go to next text return end # if \slv if c == "\024" # we need to show a slave window @text.sub!(/\[(.*?)\]/, "") name = $1.to_s $game_system.slave_windows[name].show = true return end # if \ind if c == "\025" # we need to show a independent window @text.sub!(/\[(.*?)\]/, "") name = $1.to_s if $game_system.indy_windows[name].show $game_system.indy_windows[name].dispose $game_system.indy_windows.delete(name) else $game_system.indy_windows[name].show = true end return end # if \c (hex color) if c == "\026" # convert hex color to RGB @text.sub!(/\[([0123456789abcdef]+)\]/, "") hex_code = $1.to_s red = ("0x" + hex_code.slice(0..1)).hex blue = ("0x" + hex_code.slice(2..3)).hex green = ("0x" + hex_code.slice(4..5)).hex self.contents.font.color = Color.new(red, blue, green) return end # if \sk (begin shake) if c == "\030" @shake_text = true return end # if \sk (end shake) if c == "\031" @shake_text = false return end # If new line text if c == "\n" # Add 1 to y if !@ignore @y += 1 end # check for scroll line = self.contents.text_size("dj").height if @y * line + 2 > self.height - 32 - line and @text.slice(/./m) != nil self.oy += line end if @text != "" get_x_value end @ignore = false # go to next text return end if @ignore return end # Draw text line = self.contents.text_size("dj").height if $game_system.shadowed_text old_color = self.contents.font.color.clone if @shake_text @shake_sprite.bitmap.font.color = $game_system.shadow_color @shake_sprite.bitmap.draw_text(6 + @x, line * @y + 2, 40, 32, c) @shake_sprite.bitmap.font.color = old_color else self.contents.font.color = $game_system.shadow_color self.contents.draw_text(6 + @x, line * @y + 2, 40, 32, c) self.contents.font.color = old_color end end if @shake_text @shake_sprite.bitmap.draw_text(4 + @x, line * @y, 40, 32, c) else self.contents.draw_text(4 + @x, line * @y, 40, 32, c) end # Add x to drawn text width @x += self.contents.text_size©.width end def get_x_value # text justification - offset for first line if $game_system.text_justification == CENTER # get the length of the current line w = self.contents.text_size(@text.split("\n")[0]).width @x = (self.width - w - 48) / 2 elsif $game_system.text_justification == RIGHT # get the length of the current line w = self.contents.text_size(@text.split("\n")[0]).width @x = self.width - w - 48 else # left if $game_system.face_graphic == "" @x = 0 else @x = @face_offset end end end end #============================================================================== # ** Window_Choice #------------------------------------------------------------------------------ # This message window is used to display choices. #============================================================================== class Window_Choice < Window_Selectable def initialize (choices) super(0, 0, 32, choices.size * 32) self.visible = false self.active = false self.z = 9999 @index = 0 @item_max = choices.size @choices = choices self.contents = Bitmap.new(32, 32) self.opacity = $game_system.opacity self.back_opacity = $game_system.back_opacity end def refresh # determine necessary width width = 64 for line in @choices width = [width, (self.contents.text_size(line).width + 48)].max end self.width = width self.height = @choices.size * 32 + 32 self.contents = Bitmap.new(width - 32, height - 32) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end if $game_system.windowskin != "" self.windowskin = RPG::Cache.windowskin($game_system.windowskin) else self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name) end # draw choices @y = 0 for line in @choices @x = 0 @text = line while (c = line.slice!(/./m)) != nil write_char© end @y += 1 end end def write_char© # If \oa[n] if c == "\014" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_armors[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 4, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 end # If \oi[n] if c == "\015" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_items[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 4, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ic[name] if c == "\027" @text.sub!(/\[(.*?)\]/, "") # draw the icon icon = RPG::Cache.icon($1.to_s) self.contents.blt(@x + 4, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \os[n] if c == "\016" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_skills[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ow[n] if c == "\017" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_weapons[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ic[name] if c == "\027" @text.sub!(/\[(.*?)\]/, "") # draw the icon icon = RPG::Cache.icon($1.to_s) self.contents.blt(@x + 4, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \C[n] if c == "\001" # Change text color @text.sub!(/\[([0-9]+)\]/, "") color = $1.to_i if color >= 0 and color <= 7 self.contents.font.color = text_color(color) end # go to next text return end # if \c (hex color) if c == "\026" # convert hex color to RGB @text.sub!(/\[([0123456789abcdef]+)\]/, "") hex_code = $1.to_s red = ("0x" + hex_code.slice(0..1)).hex blue = ("0x" + hex_code.slice(2..3)).hex green = ("0x" + hex_code.slice(4..5)).hex self.contents.font.color = Color.new(red, blue, green) return end # Draw text line = 32 if $game_system.shadowed_text old_color = self.contents.font.color.clone self.contents.font.color = $game_system.shadow_color self.contents.draw_text(6 + @x, line * @y + 2, 40, 32, c) self.contents.font.color = old_color end self.contents.draw_text(4 + @x, line * @y, 40, 32, c) # Add x to drawn text width @x += self.contents.text_size©.width end def set_choices(choices) @choices = Array.new for choice in choices @choices.push(choice.clone) end @item_max = @choices.size for choice in choices # variables choice.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } # actor names choice.gsub!(/\\[Nn]\[([0-9]+)\]/) { $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" } choice.gsub!(/\\[Nn][Pp]\[([0-9]+)\]/) { $game_party.actors[$1.to_i] != nil ? $game_party.actors[$1.to_i].name : "" } # armor, items, skills, and weapons choice.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) { item = $data_armors[$1.to_i] "\014[#{$1}]" + " " + item.name } choice.gsub!(/\\[Oo][ii]\[([0-9]+)\]/) { item = $data_items[$1.to_i] "\015[#{$1}]" + " " + item.name } choice.gsub!(/\\[Oo][ss]\[([0-9]+)\]/) { item = $data_skills[$1.to_i] "\016[#{$1}]" + " " + item.name } choice.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) { item = $data_weapons[$1.to_i] "\017[#{$1}]" + " " + item.name } choice.gsub!(/\\[ii][Cc]\[(.*?)\]/) { "\027[#{$1}]" } # color choice.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } choice.gsub!(/\\[Cc]\[0x([0123456789abcdef]+)\]/) { "\026[#{$1}]" } end refresh end end #============================================================================== # ** Window_Name #------------------------------------------------------------------------------ # This window is used to display names above the message window. Uncomment # and modify the various sections to customize. #============================================================================== class Window_Name < Window_Base attr_accessor :dummy_window def initialize super(0, 0, 32, 64) self.contents = Bitmap.new(32, 32) self.opacity = 0 @dummy_window = Window_Dummy.new self.visible = false end def set_name(name) @name = name refresh end def refresh if @name == nil return end self.width = self.contents.text_size(@name).width + 48 self.contents = Bitmap.new(width - 32, height - 32) if $game_system.name_window @dummy_window.x = self.x @dummy_window.y = self.y + 12 @dummy_window.set(height - 24, width - 12) end if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end # uncomment this and change the font to give the name window a fancy font #self.contents.font.name = "Ariel" self.contents.font.color = Color.new(0, 0, 0, 255) self.contents.draw_text(0, 0, self.width, 32, @name) self.contents.draw_text(0, 2, self.width, 32, @name) self.contents.draw_text(2, 0, self.width, 32, @name) self.contents.draw_text(2, 2, self.width, 32, @name) # change the color to give the name window a seperate color self.contents.font.color = normal_color self.contents.draw_text(1, 1, self.width, 32, @name) end def visible=(v) if $game_system.name_window @dummy_window.visible = v end super(v) end def update super if $game_system.name_window @dummy_window.x = self.x @dummy_window.y = self.y + 12 @dummy_window.update end end def dispose @dummy_window.dispose super end end class Window_Dummy < Window_Base def initialize super(0, 0, 32, 64) self.z = 9999 self.visible = false end def set(height, width) self.height = height self.width = width end def update super if $game_system.windowskin != "" self.windowskin = RPG::Cache.windowskin($game_system.windowskin) else self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name) end # self.windowskin = RPG::Cache.windowskin('sandstone') end end #============================================================================== # ** Window_Slave #------------------------------------------------------------------------------ # These are slave windows to the main message window. They will close when # the user terminates them. Initial settings are identical to the main # message window, with one exception. When in normal mode, it will apear # above if the main message is below, below if it is above or centered. Use # message codes to change the settings for this window. #============================================================================== class Window_Slave < Window_Base attr_accessor :show attr_reader :done def write_all @write_all = true end #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize (text) super(0, 0, 33, 33) @text = text # x-coordinate depends on justification if @justification == RIGHT self.x = 640 - self.width elsif @justification == LEFT self.x = 0 else # center self.x = (640 - self.width) / 2 end # y-coordinate depends on height self.y = 480 - $game_system.window_height - 16 self.contents = Bitmap.new(width - 32, height - 32) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end self.visible = false self.z = 9998 @fade_in = false @fade_out = false @contents_showing = false # face graphic sprite @face = Sprite.new @face.opacity = 0 @face.z = self.z + 1 @face_offset = 0 # choice window @choice_window = Window_Choice.new([]) @choice_window.back_opacity = $game_system.back_opacity @comic_style = $game_system.comic_style @name = $game_system.name # comic sprite @comic = Sprite.new @comic.opacity = 0 @comic.z = self.z + 1 if @comic_style == TALK1 @comic.bitmap = RPG::Cache.windowskin("talk1") elsif @comic_style == TALK2 @comic.bitmap = RPG::Cache.windowskin("talk2") else # thought @comic.bitmap = RPG::Cache.windowskin("thought") end # shake bitmaps @shake_sprite = Sprite.new @shake_sprite.bitmap = Bitmap.new(width - 32, height - 32) @shake_sprite.x = self.x + 16 @shake_sprite.y = self.y + 8 @shake_sprite.z = self.z + 1 @pause_time = 0 @wait = 0 @mode = $game_system.ums_mode self.height = $game_system.window_height self.width = $game_system.window_width @justification = $game_system.window_justification @face_graphic = $game_system.face_graphic @face_graphic_justification = $game_system.face_graphic_justification @message_event = $game_system.message_event if $game_system.message_position == 2 # down @message_position = 0 else @message_postion = 2 end @face_graphic_position = $game_system.face_graphic_position if $game_system.font == "" @font = Font.default_name else @font = $game_system.font end @text_justification = $game_system.text_justification @shake = $game_system.shake @face_frame = 0 refresh end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose terminate_message $game_temp.message_window_showing = false if @input_number_window != nil @input_number_window.dispose end @face.dispose @choice_window.dispose @comic.dispose @shake_sprite.dispose if @name_window != nil @name_window.dispose end super end #-------------------------------------------------------------------------- # * Terminate Message #-------------------------------------------------------------------------- def terminate_message self.active = false self.pause = false self.contents.clear # Clear showing flag @contents_showing = false # Call message callback if $game_temp.message_proc != nil $game_temp.message_proc.call end # Clear variables related to text, choices, and number input $game_temp.message_text = nil $game_temp.message_proc = nil $game_temp.choice_start = 99 $game_temp.choice_max = 0 $game_temp.choice_cancel_type = 0 $game_temp.choice_proc = nil $game_temp.num_input_start = 99 $game_temp.num_input_variable_id = 0 $game_temp.num_input_digits_max = 0 # Open gold window if @gold_window != nil @gold_window.dispose @gold_window = nil end @choice_window.visible = false @choice_window.active = false @comic.opacity = 0 end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end if $game_system.windowskin != "" self.windowskin = RPG::Cache.windowskin($game_system.windowskin) else self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name) end @x = @y = 0 # If waiting for a message to be displayed if @text != nil # replace shortcuts with original code $game_system.shortcuts.each { |shortcut, code| @text.gsub!(shortcut, code) } # Control text processing begin last_text = @text.clone @text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } end until @text == last_text @text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" end # window mode if @text.index(/\\[Mm]/) != nil if $game_system.ums_mode == NORMAL_MODE @mode = FIT_WINDOW_TO_TEXT else @mode = NORMAL_MODE end @text.gsub!(/\\[Mm]/) { "" } end # window height @text.gsub!(/\\[Hh][Ee][ii][Gg][Hh][Tt]\[([0-9]+)\]/) do self.height = $1.to_i "" end # window width @text.gsub!(/\\[Ww][ii][Dd][Tt][Hh]\[([0-9]+)\]/) do self.width = $1.to_i "" end # justification @text.gsub!(/\\[Jj][Rr]/) do @justification = RIGHT reset_window "" end @text.gsub!(/\\[Jj][Cc]/) do @justification = CENTER reset_window "" end @text.gsub!(/\\[Jj][Ll]/) do @justification = LEFT reset_window "" end # face graphics @text.gsub!(/\\[Ff][Aa][Cc][Ee]\[(.*?)\]/) do @face_graphic = $1.to_s if $1.to_s == "" @face.opacity = 0 end "" end @text.gsub!(/\\[Ff][Ll]/) do @face_graphic_justification = LEFT "" end @text.gsub!(/\\[Ff][Rr]/) do @face_graphic_justification = RIGHT "" end # event centering @text.gsub!(/\\[Ee]\[([0-9]+)\]/) do @message_event = $1.to_i "" end # comic thingy @text.gsub!(/\\[Tt]1/) do @comic_style = TALK1 @comic.bitmap = RPG::Cache.windowskin("talk1.png") "" end @text.gsub!(/\\[Tt]2/) do @comic_style = TALK2 @comic.bitmap = RPG::Cache.windowskin("talk2.png") "" end @text.gsub!(/\\[Tt][Hh]/) do @comic_style = THOUGHT @comic.bitmap = RPG::Cache.windowskin("thought.png") "" end # name window @text.gsub!(/\\[Nn][Mm]\[(.*?)\]/) do @name = $1.to_s if $1.to_s == "" and @name_window != nil @name_window.visible = false end "" end if @name != "" # name window @name_window = Window_Name.new @name_window.z = self.z + 1 @name_window.set_name(@name) end # shaking text.gsub!(/\\[ss][Kk]\[([0-9]+)\]/) do $game_system.text_shake = $1.to_i "\030" end @text.gsub!(/\\[ss][Kk]/) do "\031" end @text.gsub!(/\\[ss][Hh][Kk]\[([0-9]+)\]/) do @shake = $1.to_i "" end # back opacity @text.gsub!(/\\[bb][Oo][Pp][Cc]\[([0-9]+)\]/) do self.back_opacity = $1.to_i "" end # opacity @text.gsub!(/\\[Oo][Pp][Cc]\[([0-9]+)\]/) do self.opacity = $1.to_i "" end # Change "\\\\" to "\000" for convenience @text.gsub!(/\\\\/) { "\000" } # Change "\\C" to "\001" and "\\G" to "\002" @text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } @text.gsub!(/\\[Gg]/) { "\002" } @text.gsub!(/\\[Cc]\[0x([0123456789abcdef]+)\]/) { "\026[#{$1}]" } # text skip code @text.gsub!(/\\[ss][Kk][ii][Pp]/) { "\003" } # ignore code @text.gsub!(/\\[ii][Gg][Nn][Rr]/) { "\023" } # bold and italics @text.gsub!(/\\[bb]/) { "\004" } @text.gsub!(/\\[ii]/) { "\005" } # shadow @text.gsub!(/\\[ss]/) { "\006" } # font @text.gsub!(/\\[Ff][Oo][Nn][Tt]\[(.*?)\]/) { "\007[#{$1}]" } # pause and wait @text.gsub!(/\\[Pp]\[([0-9]+)\]/) { "\010[#{$1}]" } @text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\011[#{$1}]" } # write speed @text.gsub!(/\\[Ww][ss]\[([0-9]+)\]/) { "\013[#{$1}]" } # armor, items, skills, and weapons @text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) { item = $data_armors[$1.to_i] "\014[#{$1}]" + " " + item.name } @text.gsub!(/\\[Oo][ii]\[([0-9]+)\]/) { item = $data_items[$1.to_i] "\015[#{$1}]" + " " + item.name } @text.gsub!(/\\[Oo][ss]\[([0-9]+)\]/) { item = $data_skills[$1.to_i] "\016[#{$1}]" + " " + item.name } @text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) { item = $data_weapons[$1.to_i] "\017[#{$1}]" + " " + item.name } @text.gsub!(/\\[ii][Cc]\[(.*?)\]/) { "\027[#{$1}]" } # text justification @text.gsub!(/\\[Tt][Cc]/) { "\020" } @text.gsub!(/\\[Tt][Ll]/) { "\021" } @text.gsub!(/\\[Tt][Rr]/) { "\022" } # Resize the window to fit the contents? if @mode == FIT_WINDOW_TO_TEXT width = 1 text = @text.split("\n") height = 0 i = 0 for line in text # don't count this line's width if it has the ignr code if !line.include?("\023") width = [width, self.contents.text_size(line).width].max delta = self.contents.text_size(line).height height += delta + (6 * i) + 3 if i < 3 i += 1 end end end if @face_graphic != "" and ($game_system.face_graphic_position == CENTER or $game_system.face_graphic_position == BOTTOM) width += @face.bitmap.width if height < @face.bitmap.height height = @face.bitmap.height - 32 end end if height == 0 height = 1 end self.width = width + 48 self.height = height + 48 self.contents = Bitmap.new(width + 16, height) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end else if self.width != $game_system.window_height or self.height != $game_system.window_width self.width = $game_system.window_width self.height = $game_system.window_height self.contents = Bitmap.new(self.width - 32, self.height - 32) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end end end reset_window get_x_value @count = Graphics.frame_count @pause_time = 0 @ignore = false @done = false @face_frame = 0 end # If number input if $game_temp.num_input_variable_id > 0 digits_max = $game_temp.num_input_digits_max number = $game_variables[$game_temp.num_input_variable_id] @input_number_window = Window_InputNumber.new(digits_max) @input_number_window.number = number @input_number_window.x = self.x + 8 @input_number_window.y = self.y + $game_temp.num_input_start * 32 end end #-------------------------------------------------------------------------- # * Set Window Position and Opacity Level #-------------------------------------------------------------------------- def reset_window (change_opacity = true) # x-coordinate depends on justification if @message_event == -1 if @justification == RIGHT self.x = 640 - self.width elsif @justification == LEFT self.x = 0 else # center self.x = (640 - self.width) / 2 end else if @message_event == 0 or $game_map.events[@message_event] == nil # center on player event_x = $game_player.screen_x else # center on the event specified event_x = $game_map.events[@message_event].screen_x end self.x = event_x - self.width / 2 @comic.x = self.x + (self.width / 2) + 4 end if $game_temp.in_battle self.y = 16 else if @message_event == -1 case @message_position when 0 # up self.y = 16 when 1 # middle self.y = (480 - self.height) / 2 when 2 # down self.y = 480 - self.height - 24 end else if @message_event == 0 or $game_map.events[@message_event] == nil # above player self.y = $game_player.screen_y - self.height - 48 else # above event specified self.y = $game_map.events[@message_event].screen_y - self.height - 48 end @comic.y = self.y + self.height - 2 end end if self.y < 0 + (@name == "" ? 0 : 16) self.y = 0 + (@name == "" ? 0 : 16) elsif self.y > 480 - self.height self.y = 480 - self.height end if self.x < 0 self.x = 0 elsif self.x > 680 - self.width - 48 self.x = 640 - self.width end if change_opacity if $game_system.message_frame == 0 self.opacity = 255 else self.opacity = 0 end self.back_opacity = $game_system.back_opacity end # face stuff if @face_graphic != "" # the player has chosen to show a face graphic if @done and $game_system.resting_face != "" @face.bitmap = RPG::Cache.picture(@face_graphic + $game_system.resting_face) if @face_frame * $game_system.face_frame_width >= @face.bitmap.width @face_frame = 0 end else @face.bitmap = RPG::Cache.picture(@face_graphic) end # picture y-coordinate if @face_graphic_position == ABOVE @face.y = self.y - @face.bitmap.height @face_offset = 0 elsif @face_graphic_position == CENTER delta = (@face.bitmap.height - self.height) / 2 @face.y = self.y - delta if $game_system.animated_faces @face_offset = $game_system.face_frame_width + 16 else @face_offset = @face.bitmap.width + 16 end elsif @face_graphic_position == BOTTOM @face.y = self.y + self.height - @face.bitmap.height if $game_system.animated_faces @face_offset = $game_system.face_frame_width + 16 else @face_offset = @face.bitmap.width + 16 end else # side delta = (@face.bitmap.height - self.height) / 2 @face.y = self.y - delta @face_offset = 0 end # picture x-coordinate if @face_graphic_justification == LEFT if @face_graphic_position == SIDE @face.x = self.x - @face.bitmap.width else @face.x = self.x + 10 end else if $game_system.animated_faces offset = @face.bitmap.width - $game_system.face_frame_width else offset = 0 end if @face_graphic_position == SIDE @face.x = self.x + self.width + offset else @face.x = self.x + self.width - @face.bitmap.width - 10 + offset @face_offset = 0 end end if $game_system.animated_faces @face.src_rect = Rect.new(@face_frame * $game_system.face_frame_width, 0, $game_system.face_frame_width, @face.bitmap.height) if @done and $game_system.resting_face != "" pause = $game_system.resting_animation_pause else pause = $game_system.animation_pause end if Graphics.frame_count % pause == 0 @animate_face = true end if @animate_face if Graphics.frame_count % 3 == 0 @face_frame += 1 if @face_frame * $game_system.face_frame_width >= @face.bitmap.width @face_frame = 0 @animate_face = false end end end end end # name window if @name != "" and @name != nil @name_window.set_name(@name) @name_window.x = self.x @name_window.y = self.y - 36 end # If choice if $game_temp.choice_max > 0 @choice_window.set_choices($game_temp.choices) # determine x and y coords for choice window if $game_system.choice_justification == LEFT @choice_window.x = self.x else @choice_window.x = self.x + self.width - @choice_window.width end if $game_system.choice_position == ABOVE # check to make sure there is enough room above the textbox if self.y < @choice_window.height # not enough room above, place below @choice_window.y = self.y + self.height else # draw above @choice_window.y = self.y - @choice_window.height end elsif $game_system.choice_position == BOTTOM # check to make sure there is enough room below the textbox if (480 - self.y - self.height) < @choice_window.height # not enough room below, place above @choice_window.y = self.y - @choice_window.height else # draw below @choice_window.y = self.y + self.height end else # side if $game_system.choice_justification == LEFT # check to make sure there's room on the left side if self.y < @choice_window.width # not enough room on the side, check to make sure there's room below if (480 - self.y - self.height) < @choice_window.height # not enough room below, place above @choice_window.y = self.y - @choice_window.height else # draw below @choice_window.y = self.y + self.height end else # place on the left side @choice_window.y = self.y @choice_window.x = self.x - @choice_window.width end else # right # check to make sure there's room on the right side if (680 - (self.y + self.width)) < @choice_window.width # not enough room on the side, check to make sure there's room below if (480 - self.y - self.height) < @choice_window.height # not enough room below, place above @choice_window.y = self.y - @choice_window.height else # draw below @choice_window.y = self.y + self.height end else # place on the left side @choice_window.y = self.y @choice_window.x = self.x + self.width end end end end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super if !@show return else self.visible = true if @face_graphic != "" @face.opacity = 255 end if $game_system.comic_enabled and @message_event != -1 @comic.opacity = 255 end if @name != "" @name_window.visible = true if $game_system.name_window @name_window.dummy_window.visible = true end end if @input_number_window != nil @input_number_window.contents_opacity = 255 end reset_window end if (@contents_showing and $game_system.message_event != -1 and @shake == 0) or $game_system.animated_faces reset_window(false) end if $game_system.shake != 0 # shake the window if @ascending if @target_x != self.x self.x += 1 else @ascending = false @target_x = self.x - ($game_system.shake * 2) end else if @target_x != self.x self.x -= 1 else @ascending = true @target_x = self.x + ($game_system.shake * 2) end end end if $game_system.text_shake != 0 # shake the text if @ascending if @target_x2 != @shake_sprite.x @shake_sprite.x += 1 else @ascending = false @target_x2 = @shake_sprite.x - ($game_system.text_shake * 2) end else if @target_x2 != @shake_sprite.x @shake_sprite.x -= 1 else @ascending = true @target_x2 = @shake_sprite.x + ($game_system.text_shake * 2) end end end if @wait > 0 @wait -= 1 if @wait == 0 terminate_message return end end # If fade in if @fade_in self.contents_opacity += 24 if @face_graphic != "" @face.opacity += 24 end if $game_system.comic_enabled and @message_event != -1 @comic.opacity += 24 end if @name != "" @name_window.visible = true end if @input_number_window != nil @input_number_window.contents_opacity += 24 end if self.contents_opacity == 255 @fade_in = false end return end # write the text if @text != nil and @text != "" speed = $game_system.write_speed if $game_system.text_skip if $game_system.skip_mode == WRITE_FASTER and Input.press?(Input::C) # the player is holding the action button, write faster speed /= 3 elsif $game_system.skip_mode == WRITE_ALL and @write_all # the player pressed the action button, write all the text while (c = @text.slice!(/./m)) != nil write_char© end return end end while @ignore c = @text.slice!(/./m) if c != nil write_char© end end if @pause_time > 0 @pause_time -= 1 return end if Graphics.frame_count - @count >= speed if $game_system.sound_effect != "" Audio.se_play("Audio/SE/" + $game_system.sound_effect, 80, 100) end @count = Graphics.frame_count c = @text.slice!(/./m) if c != nil write_char© end end return end @done = true # If inputting number if @input_number_window != nil @input_number_window.update # Confirm 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 # Dispose of number input window @input_number_window.dispose @input_number_window = nil terminate_message end return end if @wait != 0 return end # If message is being displayed and contents are all written if @contents_showing # if choice if $game_temp.choice_max > 0 if !@choice_window.active @choice_window.visible = true @choice_window.active = true @choice_window.index = 0 end @choice_window.update else # If choice isn't being displayed, show pause sign self.pause = true end return end end #-------------------------------------------------------------------------- # * Process and write the given character #-------------------------------------------------------------------------- def write_char© if c == "\000" # Return to original text c = "\\" end # If \C[n] if c == "\001" # Change text color @text.sub!(/\[([0-9]+)\]/, "") color = $1.to_i if color >= 0 and color <= 7 self.contents.font.color = text_color(color) end # go to next text return end # If \G if c == "\002" # Make gold window if @gold_window == nil @gold_window = Window_Gold.new @gold_window.x = 560 - @gold_window.width if $game_temp.in_battle @gold_window.y = 192 else @gold_window.y = self.y >= 128 ? 32 : 384 end @gold_window.opacity = self.opacity @gold_window.back_opacity = self.back_opacity end # go to next text return end # If \skip if c == "\003" # toggle text skipping #$game_system.text_skip = !$game_system.text_skip # go to next text return end # If \b if c == "\004" # toggle bold self.contents.font.bold = !self.contents.font.bold # go to next text return end # If \i if c == "\005" # toggle italics self.contents.font.italic = !self.contents.font.italic # go to next text return end # If \s if c == "\006" # toggle shadow #$game_system.shadowed_text = !$game_system.shadowed_text # go to next text return end # If \font if c == "\007" # change font @text.sub!(/\[(.*?)\]/, "") font = $1.to_s @font = font if font == "" self.contents.font.name = Font.default_name else self.contents.font.name = font end # go to next text return end # If \p[n] if c == "\010" @text.sub!(/\[([0-9]+)\]/, "") @pause_time = $1.to_i # go to next text return end # If \w[n] if c == "\011" @text.sub!(/\[([0-9]+)\]/, "") @wait = $1.to_i # go to next text return end # If \ws[n] if c == "\013" @text.sub!(/\[([0-9]+)\]/, "") $game_system.write_speed = $1.to_i # go to next text return end # If \oa[n] if c == "\014" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_armors[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \oi[n] if c == "\015" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_items[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \os[n] if c == "\016" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_skills[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ow[n] if c == "\017" @text.sub!(/\[([0-9]+)\]/, "") index = $1.to_i @text.sub!(" ", "") item = $data_weapons[index] # draw the icon icon = RPG::Cache.icon(item.icon_name) self.contents.blt(@x + 2, (@y * 32) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \ic[name] if c == "\027" @text.sub!(/\[(.*?)\]/, "") # draw the icon icon = RPG::Cache.icon($1.to_s) line = self.contents.text_size("dj").height self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24)) @x += 24 # go to next text return end # If \tc if c == "\020" # center justify @text_justification = CENTER get_x_value # go to next text return end # If \tl if c == "\021" # left justify @text_justification = LEFT get_x_value # go to next text return end # If \tr if c == "\022" # right justify @text_justification = RIGHT get_x_value # go to next text return end # If \ignr if c == "\023" # set ignore flage @ignore = true # go to next text return end # if \c (hex color) if c == "\026" # convert hex color to RGB @text.sub!(/\[([0123456789abcdef]+)\]/, "") hex_code = $1.to_s red = ("0x" + hex_code.slice(0..1)).hex blue = ("0x" + hex_code.slice(2..3)).hex green = ("0x" + hex_code.slice(4..5)).hex self.contents.font.color = Color.new(red, blue, green) return end # if \sk (begin shake) if c == "\030" @shake_text = true return end # if \sk (end shake) if c == "\031" @shake_text = false return end # If new line text if c == "\n" # Add 1 to y if !@ignore @y += 1 end if @text != "" get_x_value end @ignore = false # go to next text return end if @ignore return end # Draw text line = self.contents.text_size("dj").height if $game_system.shadowed_text old_color = self.contents.font.color.clone if @shake_text @shake_sprite.bitmap.font.color = $game_system.shadow_color @shake_sprite.bitmap.draw_text(6 + @x, line * @y + 2, 40, 32, c) @shake_sprite.bitmap.font.color = old_color else self.contents.font.color = $game_system.shadow_color self.contents.draw_text(6 + @x, line * @y + 2, 40, 32, c) self.contents.font.color = old_color end end if @shake_text @shake_sprite.bitmap.draw_text(4 + @x, line * @y, 40, 32, c) else self.contents.draw_text(4 + @x, line * @y, 40, 32, c) end # Add x to drawn text width @x += self.contents.text_size©.width end def get_x_value # text justification - offset for first line if @text_justification == CENTER # get the length of the current line w = self.contents.text_size(@text.split("\n")[0]).width @x = (self.width - w - 48) / 2 elsif @text_justification == RIGHT # get the length of the current line w = self.contents.text_size(@text.split("\n")[0]).width @x = self.width - w - 48 else # left if @face_graphic == "" @x = 0 else @x = @face_offset end end end end #============================================================================== # ** Window_InputNumber #------------------------------------------------------------------------------ # This window is for inputting numbers, and is used within the # message window. #============================================================================== class Window_InputNumber < Window_Base #-------------------------------------------------------------------------- # * Object Initialization # digits_max : digit count #-------------------------------------------------------------------------- def initialize(digits_max) @digits_max = digits_max @number = 0 # Calculate cursor width from number width (0-9 equal width and postulate) dummy_bitmap = Bitmap.new(32, 32) @cursor_width = dummy_bitmap.text_size("0").width + 8 dummy_bitmap.dispose super(0, 0, @cursor_width * @digits_max + 32, 64) self.contents = Bitmap.new(width - 32, height - 32) if $game_system.font == "" self.contents.font.name = Font.default_name else self.contents.font.name = $game_system.font end self.z += 9999 self.opacity = $game_system.opacity self.back_opacity = $game_system.back_opacity @index = 0 refresh update_cursor_rect end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear if $game_system.font_color.nil? self.contents.font.color = normal_color else self.contents.font.color = $game_system.font_color end if $game_system.windowskin != "" self.windowskin = RPG::Cache.windowskin($game_system.windowskin) else self.windowskin = RPG::Cache.windowskin($data_system.windowskin_name) end s = sprintf("%0*d", @digits_max, @number) for i in 0...@digits_max # Draw text if $game_system.shadowed_text old_color = self.contents.font.color.clone self.contents.font.color = $game_system.shadow_color self.contents.draw_text(i * @cursor_width + 6, 2, 32, 32, s[i,1]) self.contents.font.color = old_color end self.contents.draw_text(i * @cursor_width + 4, 0, 32, 32, s[i,1]) end end end But (I assume) it should work the same as this one regardless? Try this and see if it works: Script Call: $game_system.face_graphic = "character 1" $game_system.name = "character 1" Text: Hey Script Call: $game_system.face_graphic = "character 2" $game_system.name = "character 2" Text: Hey Script Call: $game_system.face_graphic = "" $game_system.name = "" Text: You are trying to light a fire Replace the .face_graphic = "character 1/2" with the filename of the face graphic, and .name = "character 1/2" with the name of the character that's speaking. On the last script call, don't put anything in the "" as this shows no name window and no face graphic (if desired) If the script you're using isn't the same, then I would recommend that you use this one. There might be a a bit more to do in terms of script calls, but it's not so bad once you get the hang of it. Hope I could help! Edited May 12, 2011 by Tenoukii Share this post Link to post Share on other sites
Well, I downloaded Ccao's UMS a while ago and it works great except that I dont know how to cancel the script when i need to.
Example:
$game_system.add_shortcut('\c1',
'\nm[Zoey]\face[bHG SMIR]\fr')
$game_system.add_shortcut('\c2',
'\nm[You]\face[t2_12 A]\fl')
\c1 Hey main Character! = Zoey:Hey!
\c2 Hey random Character! = You: Hey!
But then when I try to do this in the same event:
You are trying to make a fire.
The UMS will paste the main characters pic and name on the message that has nothing to do with him!
Help! It crumps my game.
Share this post
Link to post
Share on other sites