Jump to content
New account registrations are disabed. This website is now an archive. Read more here.
Sign in to follow this  
GameFreak001

Message box

Recommended Posts

If anyone needs a Custom Message box, (Dim background).

Please let me know.

 

I Uploaded some Already in the Gallery. Please Enjoy......

:alright: :alright: :alright:

 

Please give credit on those Message boxes

If you use them.

Thank you.

 

When ever......I get my Site up and running...

I'll put some on there to.

 

Here is a preview of a custom message Box in action below

post-17239-015704900 1295478512_thumb.png

Edited by GameFreak001

Share this post


Link to post
Share on other sites

Its best to Use "Neo Message System 3.0 Beta"

with my Message boxes, in the VX resources.

 

Find this in Neo Message System 3.0 Beta script.

NMS_MSG_BACK = "MessageBack" # Message Back Image File Name (For 'Dim Background' Message)
 # (Must be in folder 'System')
 # $nms.mback = 'Image Name'
 NMS_MSG_BACK_OPACITY = 255 # message Back's Opacity
 # $nms.mback_opac = (0 - 255)

 

This Area is the Area for the Dim background message box.

info.png

messagebox1,messagebox2,messagebox3 and so on.

Have different message boxes for a different areas, maps, or levels.

Or let each Character have their own signature message box, That could be Cool.

Instead of having only one Message box for the Whole game.

 

#===============================================================
# + [VX] [ NMS - Neo Message System 3.0 Beta ] +
#--------------------------------------------------------------
# >> by Woratana [woratana@hotmail.com]
# >> Thaiware RPG Maker Community
# >> Special Thanks: Mako, Yatzumo, Straycat, Erzengel, RPG,
# Dubalex, Modern Algebra, Equilibrium Keeper
#--------------------------------------------------------------
# Released on: 07/06/2008 (D-M-Y)
#--------------------------------------------------------------
# Include: NEO-FACE SYSTEM ADVANCE (Version 3.0) by Woratana
#===============================================================
# Note:
# - This script started when VX English is not coming out yet,
# so some of comments here are still be Japanese :)
# - This script is included newest version of Neo-Face System,
# so you have to remove old Neo-Face System if you have it.

=begin
=============================================
+ NMS 3 Beta + [07/06/2008]
- Add 'Text Remove List'
- Change window size & position temporarily
- You can now call script:
$game_message.create_nms_data
to reset NMS data or create NMS data for old save file
- Fixed bug for write actor's class name
- Fixed bug for out-of-screen name box
- Add NAMEBOX_Y_PLUS_TOP to fix out-of-screen name box when show message on Top
- Set name box's opacity for different types of message background
- Auto fix if message window is out of screen
- You can draw new face while message is running, and also set new face size
=============================================
=============================================
+ NMS 2.3 + [11/03/2008 - 06/04/2008]
- Remove Color for [WRITE TEXT] features
- 'Quick Text' feature
- Animated Face
- Play SE/ME
- Typing Sound
- Scroll Text Vertically and Horizontally
- Auto-cut text (Not work perfectly)
- Hex Color (Special Thanks: RPG & Erzengel)
- Pop Message (Work in Progress)
- Add the script code in comment of some settings,
so user can change it in game by call script.
=============================================
=============================================
+ NMS 2.1 + [11/03/2008]: Fixed Name Box Bug
=============================================
=====================================
    + NMS 2.0 FEATURES LIST +
=====================================
Use these features in message box
----------------------------------
>> NMS MESSAGE FEATURES
----------------------------------
--------------------------
>> [sPECIAL CALL] PART
--------------------------
\ce[Common Event ID] << Run Common Event immediately

\ani[Animation ID] << Show Animation on 'This Event'
\bal[balloon ID] << Show Ballon on 'This Event'

* Note: This Event = Event that show this message

--------------------------
>> [MESSAGE WINDOW] PART
--------------------------
* temporary properties will be using only one time
\wx[x]        << Set temporary X to x
\wy[y]        << Set temporary Y to y
\ww[width]    << Set temporary Width to width
\wh[height]   << Set temporary Height to height

----------------------------------------
>> +[ POP TEXT ]+
----------------------------------------
Pop text is the message box that will show over character
and has size equal to message size

You can call pop text by put this in message
\p[character]

* character: Character you want to show message box over~
0 for Player
-1 for This Event
1 or more for that event ID

----------------------------------------
>> +[ QUICK TEXT ]+ a.k.a. Shortcut
----------------------------------------
Add & Call your very long text (or) text that you use many times by shortcut.
You can put special syntax in it, e.g. 'Welcome to \c[10]Syria Village\c[0]

$nms.qt[Quick Text ID] = 'Text you want' << Add Quick Text

\qt[Quick Text ID] << Call Quick Text from message box

--------------------------
>> [DRAW IMAGE] PART
--------------------------
\dw[weapon ID] << Draw Weapon Icon + Weapon Name
\da[armor ID]  << Draw Armor Icon + Armor Name
\di[item ID]   << Draw Item Icon + Item Name
\ds[skill ID]  << Draw Skill Icon + Skill Name

\ic[icon ID]   << Draw Icon

\dp[image_name] << Draw Image from folder 'System'

--------------------------
>> [WRITE TEXT] PART
--------------------------
\map                         << Write Map Name

\nc[actor ID]                << Write Class of Actor
\np[1 to 4 (order in party)] << Write Name of actor in that order
\nm[monster ID]              << Write Monster Name
\nt[troop ID]                << Write Troop Name

\nw[weapon ID]               << Write Weapon Name
\na[armor ID]                << Write Armor Name
\ns[skill ID]                << Write Skill Name
\ni[item ID]                 << Write Item Name
\price[item ID]              << Write Item Price

--------------------------
>> [TEXT EFFECT] PART
--------------------------
\fn[Font Name] (or) << Change Font Name
\fs[Font Size] << Change Font Size
\delay[Delay]  << Change text Delay per letter (in frame, 60 frames = about 1 sec)

\ref           << Reset Font Name
\res           << Reset Font Size
\red           << Reset text Delay

\b             << Turn on/off BOLD text
\i             << Turn on/off ITALIC text
\sh            << Turn on/off SHADOW text
\lbl           << Turn on/off LETTER-BY-LETTER Mode (default is ON)

--------------------------
>> [NAME BOX & FACE] PART
--------------------------
\nb[Name]  << Show Name Box in current message window

\rnb[Name] (or) $nms._name = 'Name' << Repeat Name Box:
Name Box with this name will show again and again in next messages
unless there is \nb[Name] in that message, or you've stop this option by type \rnb[]

\sd[side] (or) $nms.side = side << Change Face Side:
(0: Left Side Normal Face | -1: Right Side Normal Face)
(1: Left Side Neo Face | 2: Right Side Neo Face)

$nms.color = [Red,Green,Blue] << Change Name Text Color:
Put RGB Color in, e.g. [255,100,200]

\fa[face_file_name, face_index] (or) \fa[face_file_name, face_index, new_side]
<< Draw new face while message is running~
face_file_name: Face image's name
face_index:     Index of the face in image (0 - 7)
new_side:       Face side you want to change to

--------------------------
>> [sOUND] PART
--------------------------
\se[filename]   << Play SE
\me[filename]   << Play ME
\bgm[filename]  << Play BGM

\typ            << Turn on/off typing sound

--------------------------
>> [Misc.] PART
--------------------------
\cb           << Turn on/off cancel skip text feature (Player can/can't press [Enter] to skip text)
\nl           << Start new line
\sc[x]        << Create blank space x pixel
\w[x]         << Wait x frames
\c[#XXXXXX]   << Use Hex Color for text

----------------------------------
>> VX DEFAULT MESSAGE FEATURES
----------------------------------
\v[variable ID] << Write value from variable
\n[actor ID]    << Write actor's name
\c[color ID]    << Change text color (Color ID is from Down-right corner in Windowskin)
\g              << Show gold window
\.              << Wait 15 frames (about 1/4 sec)
\|              << Wait 60 frames (about 1 sec)
\!              << Wait for player to press button to continue message
\>              << Skip letter-by-letter in current line
\<              << Stop 'skip letter-by-letter' in current line
\^              << Close message box immediately
\\              << Write '\'

=end
class Window_Base

 #---------------------------------
 # [sTART] SETUP SCRIPT PART
 #-------------------------------
 #---------------------------------
 # ? MESSAGE SYSTEM
 #-------------------------------
 NMS_FONT_NAME = Font.default_name # Default Font Name
 NMS_FONT_SIZE = 20 # Default Font Size

 # COLOR_ID is from Windowskin image in down-right corder
 NMS_ITEM_NAME_COLOR_ID = 5 
 NMS_WEAPON_NAME_COLOR_ID = 10
 NMS_ARMOR_NAME_COLOR_ID = 4
 NMS_SKILL_NAME_COLOR_ID = 2

 NMS_DELAY_PER_LETTER = 0 # Delay between letter when showing text letter-by-letter
 # Delay is in frame, 60 frames = 1 second
 # $nms.text_delay = (number)

 TEXT_X_PLUS = 0 # Move Text Horizontally
 CHOICE_INPUT_X_PLUS = 0
 # Move Choices Text and Input Number Text Horizontally

 # [NEW SETTING] #
 NMS_MSGWIN_X = 0 # Default Message Window X
 # $nms.msg_x = (number)

 NMS_MSGWIN_WIDTH = 544 # Default Message Window Width
 # $nms.msg_w = (number)
 NMS_MSGWIN_MIN_HEIGHT = 128 # Default & Minimum Message Window Height
 # $nms.msg_h_user = (number)

 NMS_MAX_LINE = 4 # Max Message Lines to display per page
 # $nms.max_line = (number)
 NMS_GET_NEXT_LINE = false # Get messages from next message command, if box is not full
 # $nms.next_msg = true/false

 NMS_MSG_BACK = "MessageBack" # Message Back Image File Name (For 'Dim Background' Message)
 # (Must be in folder 'System')
 # $nms.mback = 'Image Name'
 NMS_MSG_BACK_OPACITY = 255 # message Back's Opacity
 # $nms.mback_opac = (0 - 255)

 NMS_TEXT_SCROLL = false # Use Vertical Text Scroll?
 # $nms.txt_scrl = true/false

 NMS_TEXT_AUTO_CUT = false # Text will automatically start new line if that line is full
 # (Some bug, it may cut in the middle of word..)
 # $nms.txt_cut = true/false

 NMS_TEXT_AUTO_SCROLL_HORIZONTAL = false # Text will automatically scroll to the left if line is full
 # This will not work if NMS_TEXT_AUTO_CUT is true
 # $nms.txt_scrl_hori = true/false
 NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY = 1 # Scroll Delay (in frame)
 # $nms.txt_scrl_hori_delay = (number)

 NMS_USER_NEW_LINE = false # Text will goes in new line ONLY when type \nl
 # (Good for Text Auto Cut)
 # $nms.txt_unl = true/false

 NMS_REMOVE_LIST = [] # List of text that you want to remove from message
 # for example, NMS_REMOVE_LIST = ['test', '[MS]']
 # will remove text 'test' and '[MS]' before show message
 # Note that this is NOT case sensitive

 #---------------------------------
 # ? FACE SYSTEM
 #-------------------------------
 #------------------------------------------------
 # ** BOTH FACE SYSTEMS SETUP
 #----------------------------------------------
 DEFAULT_FACE_SIDE = 0 # Default Face Side when game start~
 # (0: Left Side Normal Face | -1: Right Side Normal Face)
 # (1: Left Side Neo Face | 2: Right Side Neo Face)
 # $nms.side = (side no.)

 FACE_X_PLUS = 0 # Move Face Horizontally (Left: -, Right: +)
 FACE_Y_PLUS = 0 # Move Face Vertically (Up: -, Down: +)

 MOVE_TEXT = true # (true/false)
 # Move text to right side of face, when showing face in left side.

 #-------------------------------------
 # **SHOW FACE EFFECT
 # * For both Face Systems *
 #----------------------------------
 FADE_EFFECT = true # Turn on/off fade effect (true/false)
 # $nms.face_fade = true/false
 FADE_SPEED = 20 # Speed up face's fade effect by increase this number
 FADE_ONLY_FIRST = true # Use Fade Effect only in first message window?

 MOVE_EFFECT = true # Turn on/off "move in" effect (true/false)
 # $nms.face_move = true/false
 MOVE_SPEED = 10 # Speed up face's "move in" effect by increase this number
 MOVE_ONLY_FIRST = true # Use Move Effect only in first message window?

 FADE_MOVE_WHEN_USE_NEW_FACE = true
 # Use Fade and Move effect when change Face graphic
 # (In case using FADE_ONLY_FIRST and MOVE_ONLY_FIRST)

 #-------------------------------
 # ** NEO FACE SYSTEM
 #----------------------------
 EightFaces_File = false
 # Use 8 Faces per file (or) 1 Face per file (true/false)

 #-------------------------------
 # ** ANIMATED FACE SYSTEM
 #----------------------------
 ANIMATE_FACE_DELAY = 6 # Face animate every _ frame
 # $nms.animf_delay = (number)

 ANIMATE_FACE_CONTINUE = false # Face continue to animate after text stop writing?
 # $nms.animf_cont = (true/false)

 #------------------------------------
 # ? NAME BOX SYSTEM
 #----------------------------------
 NAMEBOX_SKIN = 'Window' # Windowskin of Name Box (In folder 'Graphics/System')
 NAMEBOX_OPACITY = 255 # Name Box Opacity when using 'Normal Background' message
 # (Lowest 0 - 255 Highest)
 NAMEBOX_OPACITY_DIM_BG = 0 # Name Box Opacity when using 'Dim Background'
 NAMEBOX_OPACITY_NO_BG = 0 # Name Box Opacity when using 'Transparent' Background
 NAMEBOX_BACK_OPACITY = 180 # Name Box Background Opacity

 NAMEBOX_X_PLUS_NOR = 100 # Additional Name Box X [Horizontal] for Normal Face Name Box
 NAMEBOX_X_PLUS_NEO = 160 # Additional Name Box X for Neo Face Name Box
 NAMEBOX_Y_PLUS = 0 # Move Name Box & Text Vertically
 NAMEBOX_Y_PLUS_TOP = 140
 # Move Name Box & Text Vertically if message box is on Top

 NAMEBOX_TEXT_FONT = Font.default_name # Name Text Font's Name
 NAMEBOX_TEXT_SIZE = Font.default_size # Name Text Font's Size
 NAMEBOX_TEXT_HEIGHT_PLUS = 2 # Increase Name Text Height (For Big Size Text)

 NAMEBOX_TEXT_BOLD = false # Make Text in Name Box Bold
 NAMEBOX_TEXT_OUTLINE = false # Make Black Outline around Text (Good with Opacity = 0)
 NAMEBOX_TEXT_DEFAULT_COLOR = [255,255,255]#[255,255,255] # [Red,Green,Blue]: Name Text Color (RGB) 
 # You can easily find color code for RGB (Red Green Blue) color in Google :)
 # You are allow to change color in game by call script:
 # $nms.color = [Red,Green,Blue]

 NAMEBOX_TEXT_AFTER_NAME = ":" # Add Text after Name, leave "" to disable.

 NAMEBOX_BOX_WIDTH_PLUS = 6 # Increase Name Box Width
 NAMEBOX_BOX_HEIGHT_PLUS = 7 # Increase Name Box Height

 MOVE_NAMEBOX = true
 # (true/false) Move Text Box to Right Side if showing Face in Right side.

 #---------------------------------
 # ? TEXT TYPING SOUND SYSTEM
 #-------------------------------
 TYPING_SOUND = true # Use Typing Sound?
 # $nms.typ_se = true/false
 TYPING_SOUND_FILE = 'Open1'
 # Sound File Name for Typing Sound (Must be in Folder 'Audio/SE')
 # $nms.typ_file = 'filename'
 TYPING_SOUND_VOLUME = 40 # Typing Sound's Volume
 # $nms.typ_vol = 0 - 100
 TYPING_SOUND_SKIP = 4
 # How many frames you want to skip before play typing sound again?
 # $nms.typ_skip = (no. of frames)
 #---------------------------------
 # [END] SETUP SCRIPT PART
 #-------------------------------
end
 $worale = {} if $worale == nil
 $worale["NMS"] = true

class Window_Message < Window_Selectable
 #--------------------------------------------------------------------------
 # ? ALIAS
 #--------------------------------------------------------------------------
   alias wor_nms_winmsg_ini initialize
   def initialize
     wor_nms_winmsg_ini
     $nms = $game_message
     contents.font.name = $nms.nms_fontname
     contents.font.size = $nms.nms_fontsize
     @face = Sprite.new
     @face.z = self.z + 5
     @nametxt = Sprite.new
     @nametxt.z = self.z + 15
     @namebox = nil
     @ori_x = 0
     @name_text = nil
     @showtime = 0 # To check if this is first time it shows message (For face)
     @face_data = Array.new(3)
     @face_data_old = Array.new(3)

     #NMS 2++
     self.width = $nms.msg_w
     self.height = $nms.msg_h
     update_window_size(true)
     self.x = $nms.msg_x

     @typse_count = 0
     @delay_text = 0
     @no_press_input = false
     @biggest_text_height = 0
     @all_text_width = 0
     @animf_dl = 0 # Animation Face Delay
     @animf = false # Using Animation Face?
     @animf_ind = 0 # Animation Face Index
     @pop = nil # Pop ID
   end
 #--------------------------------------------------------------------------
 # ? ??
 #--------------------------------------------------------------------------
 def dispose
   super
   dispose_gold_window
   dispose_number_input_window
   dispose_back_sprite
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def update
   super
 if self.visible == true
   update_back_sprite
   update_gold_window
   update_number_input_window
   update_show_fast
   update_window_size
   update_animate_face if @animf

   @typse_count -= 1 if @typse_count > 0

   if @name_text != nil
     draw_name(@name_text,self.x,self.y)
   end
   if @face.bitmap != nil
     # UPDATE FADE IN EFFECT
     if @face.opacity < 255
       @face.opacity += FADE_SPEED
     end
     # UPDATE MOVE IN EFFECT
     if $nms.face_move and @ori_x != @face.x
       if (@ori_x > @face.x and @face.x + MOVE_SPEED < @ori_x) or (@ori_x < @face.x and @face.x - MOVE_SPEED > @ori_x)
         @face.x += MOVE_SPEED if @ori_x > @face.x
         @face.x -= MOVE_SPEED if @ori_x < @face.x
       else
         @face.x = @ori_x
       end
     end
   end
 end
   unless @opening or @closing
     if @wait_count > 0
       @wait_count -= 1
     elsif self.pause
       input_pause
     elsif self.active
       input_choice
     elsif @number_input_window.visible
       input_number
     elsif @text != nil
       if @delay_text > 0
         @delay_text -= 1
       else
         update_message
       end
     elsif continue?
       @showtime += 1
       start_message
       open
       $game_message.visible = true
     else
       close
       @showtime = 0
       if @face.bitmap != nil
        @face.bitmap.dispose
       end
       clear_namebox if @namebox != nil
       $game_message.visible = @closing
     end
   end
 end
 #--------------------------------------------------------------------------
 # ? NEW
 #--------------------------------------------------------------------------
 def update_window_size(direct = false, create_bitmap = true)
   if (self.width != $nms.msg_w or self.height != $nms.msg_h) or direct
     self.width = $nms.msg_w if $nms.msg_w > 32
     self.height = $nms.msg_h if $nms.msg_h > 32
     create_contents if create_bitmap
   end
 end
 #--------------------------------------------------------------------------
 # ? ???????????
 #--------------------------------------------------------------------------
 def create_gold_window
   @gold_window = Window_Gold.new(384, 0)
   @gold_window.openness = 0
 end
 #--------------------------------------------------------------------------
 # ? ????????????
 #--------------------------------------------------------------------------
 def create_number_input_window
   @number_input_window = Window_NumberInput.new
   @number_input_window.visible = false
 end
 #--------------------------------------------------------------------------
 # ? ??????????
 #--------------------------------------------------------------------------
 def create_back_sprite
   @back_sprite = Sprite.new
   @back_sprite.bitmap = @old_mback = Cache.system($game_message.mback)
   @back_sprite.opacity = @old_mback_opac = $game_message.mback_opac
   @back_sprite.visible = (@background == 1)
   @back_sprite.z = 190
 end
 #--------------------------------------------------------------------------
 # ? ???????????
 #--------------------------------------------------------------------------
 def dispose_gold_window
   @gold_window.dispose
 end
 #--------------------------------------------------------------------------
 # ? ????????????
 #--------------------------------------------------------------------------
 def dispose_number_input_window
   @number_input_window.dispose
 end
 #--------------------------------------------------------------------------
 # ? ??????????
 #--------------------------------------------------------------------------
 def dispose_back_sprite
   @back_sprite.dispose
 end
 #--------------------------------------------------------------------------
 # ? ???????????
 #--------------------------------------------------------------------------
 def update_gold_window
   @gold_window.update
 end
 #--------------------------------------------------------------------------
 # ? ????????????
 #--------------------------------------------------------------------------
 def update_number_input_window
   @number_input_window.update
 end
 #--------------------------------------------------------------------------
 # ? ??????????
 #--------------------------------------------------------------------------
 def update_back_sprite
   @back_sprite.visible = (@background == 1)
   @back_sprite.y = y - 16
   @back_sprite.opacity = $nms.mback_opac > openness ? openness : $nms.mback_opac
   @back_sprite.update
 end
 #--------------------------------------------------------------------------
 # ? ?????????
 #--------------------------------------------------------------------------
 def update_show_fast
   if self.pause or self.openness < 255
     @show_fast = false
   elsif Input.trigger?(Input::C) and @wait_count < 2 and !@no_press_input
     @show_fast = true
   elsif not Input.press?(Input::C)
     @show_fast = false
   end
   if @show_fast and @wait_count > 0
     @wait_count -= 1
   end
 end
 #--------------------------------------------------------------------------
 # ? ????????????????????
 #--------------------------------------------------------------------------
 def continue?
   return true if $game_message.num_input_variable_id > 0
   return false if $game_message.texts.empty?
   if self.openness > 0 and not $game_temp.in_battle
     return false if @background != $game_message.background
     return false if @position != $game_message.position
   end
   return true
 end
 #--------------------------------------------------------------------------
 # ? EDITED: NMS 2.2+
 #--------------------------------------------------------------------------
 def start_message
   @all_text_width = 0
   @pop = nil

   @text = ""
   @text_line = $game_message.texts.size < $game_message.max_line ? $game_message.texts.size + 1 : MAX_LINE + 1
   for i in 0...$game_message.texts.size
     # Change "    " to "" (Spacing for choice)
     @text += "" if i >= $game_message.choice_start
     @text += $game_message.texts[i].clone + "\x00"
   end

   @item_max = $game_message.choice_max
   convert_special_characters
   reset_window
   update_window_size
   new_page
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def new_page
   @animf = false
   contents.clear

   if @face.bitmap != nil
   @face.bitmap.dispose
   end
   if $game_message.face_name.empty?
   @contents_x = TEXT_X_PLUS
   else
     nms_draw_new_face
     # CHECK FOR MOVE EFFECT
     @ori_x = @face.x
     if $nms.face_move and ((MOVE_ONLY_FIRST and @showtime <= 1) or (MOVE_ONLY_FIRST == false))
       if $game_message.side == 0 or $game_message.side == 1
         @face.x = 0 - @face.width
       else
         @face.x = Graphics.width
       end
     end
     @contents_x = get_x_face
   end
   @main_contents_x = @contents_x
   @contents_y = 0
   @line_count = 0
   @typse_count = 0
   @show_fast = false
   @line_show_fast = false
   @pause_skip = false
   contents.font.color = text_color(0)
   @contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 00

   if @old_mback != Cache.system($nms.mback) or @old_mback_opac != $nms.mback_opac
     dispose_back_sprite; create_back_sprite
   end

   @no_press_input = false
   self.oy = 0
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def new_line
   biggest = @biggest_text_height > WLH ? @biggest_text_height : WLH
   @contents_y += biggest
   if $nms.txt_scrl and @contents_y >= contents.height and @text != ""
     rect = Rect.new(0, biggest, contents.width, contents.height - biggest)
     cont_s = Bitmap.new(contents.width,contents.height)
     cont_s.blt(0, 0, contents, rect)
     rect_s = Rect.new(0,0,contents.width,contents.height)
     contents.clear_rect(0, 0, contents.width, contents.height)
     contents.blt(0, 0, cont_s, rect_s)
     @contents_y = rect.height
     cont_s.dispose
     @show_fast = false
     @no_press_input = true
   end
   @contents_x = @main_contents_x
   @contents_x += CHOICE_INPUT_X_PLUS if $game_message.choice_max > 0
   @biggest_text_height = WLH
   @line_count += 1
   @line_show_fast = false
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def convert_special_characters
   clear_namebox if @namebox != nil

   # Woratana's :: Quick Text
   @text.gsub!(/\\QT\[([0-9]+)\]/i) { $nms.qt[$1.to_i] }

   #--------------------------
   # DEFAULT FEATURES
   #-----------------------
   @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
   @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
   @text.gsub!(/\\C\[(.*?)\]/i) { "\x01{#{$1}}" }
   @text.gsub!(/\\G/i)              { "\x02" }
   @text.gsub!(/\\\./)             { "\x03" }
   @text.gsub!(/\\\|/)             { "\x04" }
   @text.gsub!(/\\!/)              { "\x05" }
   @text.gsub!(/\\>/)              { "\x06" }
   @text.gsub!(/\\</)              { "\x07" }
   @text.gsub!(/\\\^/)             { "\x08" }
   @text.gsub!(/\\\\/)             { "\\" }

   #--------------------------
   # * NMS FEATURES!!
   #-----------------------
   # Woratana's :: Draw Weapon Name + Icon
   @text.gsub!(/\\DW\[([0-9]+)\]/i) { "\x83[#{$data_weapons[$1.to_i].icon_index}]\x01{#{NMS_WEAPON_NAME_COLOR_ID}}\\nw[#{$1.to_i}]\x01{#{$nms.last_color}}"}
   # Woratana's :: Draw Item Name + Icon
   @text.gsub!(/\\DI\[([0-9]+)\]/i) { "\x83[#{$data_items[$1.to_i].icon_index}]\x01{#{NMS_ITEM_NAME_COLOR_ID}}\\ni[#{$1.to_i}]\x01{#{$nms.last_color}}" }
   # Woratana's :: Draw Armor Name + Icon
   @text.gsub!(/\\DA\[([0-9]+)\]/i) { "\x83[#{$data_armors[$1.to_i].icon_index}]\x01{#{NMS_ARMOR_NAME_COLOR_ID}}\\na[#{$1.to_i}]\x01{#{$nms.last_color}}"}
   # Woratana's :: Draw Skill Name + Icon
   @text.gsub!(/\\DS\[([0-9]+)\]/i) { "\x83[#{$data_skills[$1.to_i].icon_index}]\x01{#{NMS_ITEM_NAME_COLOR_ID}}\\ns[#{$1.to_i}]\x01{#{$nms.last_color}}"}

   # Woratana's :: Call Animation
   @text.gsub!(/\\ANI\[([0-9]+)\]/i) { "\x80[#{$1}]" }
   # Woratana's :: Call Balloon
   @text.gsub!(/\\BAL\[([0-9]+)\]/i) { "\x81[#{$1}]" }
   # Woratana's :: Call Common Event
   @text.gsub!(/\\CE\[([0-9]+)\]/i) { "\x82[#{$1}]" }
   # Woratana's :: Draw Icon
   @text.gsub!(/\\IC\[([0-9]+)\]/i) { "\x83[#{$1}]" }

   # Woratana's :: Map Name
   @text.gsub!(/\\MAP/i) { nms_get_map_name }
   # Woratana's :: Actor Class Name
   @text.gsub!(/\\NC\[([0-9]+)\]/i) { $data_classes[$game_actors[$1.to_i].class_id].name }
   # Woratana's :: Party Actor Name
   @text.gsub!(/\\NP\[([0-9]+)\]/i) { $game_party.members[($1.to_i - 1)].name }
   # Woratana's :: Monster Name
   @text.gsub!(/\\NM\[([0-9]+)\]/i) { $data_enemies[$1.to_i].name }
   # Woratana's :: Troop Name
   @text.gsub!(/\\NT\[([0-9]+)\]/i) { $data_troops[$1.to_i].name }
   # Woratana's :: Item Name
   @text.gsub!(/\\NI\[([0-9]+)\]/i) { $data_items[$1.to_i].name }
   # Woratana's :: Weapon Name
   @text.gsub!(/\\NW\[([0-9]+)\]/i) { $data_weapons[$1.to_i].name }
   # Woratana's :: Armor Name
   @text.gsub!(/\\NA\[([0-9]+)\]/i) { $data_armors[$1.to_i].name }
   # Woratana's :: Skill Name
   @text.gsub!(/\\NS\[([0-9]+)\]/i) { $data_skills[$1.to_i].name }
   # Woratana's :: Item Price
   @text.gsub!(/\\PRICE\[([0-9]+)\]/i) { $data_items[$1.to_i].price.to_s }

   # Woratana's :: Font Name Change
   @text.gsub!(/\\FN\[(.*?)\]/i) { "\x84[#{$1}]" }
   # Woratana's :: Font Size Change
   @text.gsub!(/\\FS\[(.*?)\]/i) { "\x85[#{$1}]" }
   # Woratana's :: Reset Font Name
   @text.gsub!(/\\REF/i) { "\x86" }
   # Woratana's :: Reset Font Size
   @text.gsub!(/\\RES/i) { "\x87" }
   # Woratana's :: BOLD Text
   @text.gsub!(/\\B/i) { "\x88" }
   # Woratana's :: ITALIC Text
   @text.gsub!(/\\I/i) { "\x89" }
   # Woratana's :: Text DELAY
   @text.gsub!(/\\DELAY\[([0-9]+)\]/i) { "\x90[#{$1}]"}
   # Woratana's :: Reset Text Delay
   @text.gsub!(/\\RED/i) { "\x91" }
   # Woratana's :: Turn On/Off Letter by Letter
   @text.gsub!(/\\LBL/i) { "\x92" }

    # Woratana's NeoFace System
    @text.scan(/\\SD\[([-,0-9]+)\]/i)
    if $1.to_s != ""
      $game_message.side = $1.to_i
      @text.sub!(/\\SD\[([-,0-9]+)\]/i) {}
    end

    # Woratana's :: Name Box
    @text.scan(/\\NB\[(.*?)\]/i)
    if $1.to_s != ""
      n_text = $1.to_s.gsub(/\x01\{(.*?)\}/i) {} # Clear If there's Color
      @name_text = n_text
      @text.sub!(/\\NB\[(.*?)\]/i) {}
    end

    # Woratana's :: Repeat Name Box
    @text.gsub!(/\\RNB\[(.*?)\]/i) do
      $game_message._name = $1.to_s
      a = ""
    end

    # NMS 2++
    # Woratana's :: SHADOW Text
    @text.gsub!(/\\SH/i) { "\x93" }
    # Woratana's :: Cancel Skip Text Button
    @text.gsub!(/\\CB/i) { "\x94" }
    # Woratana's :: Wait X Frame
    @text.gsub!(/\\W\[([0-9]+)\]/i) { "\x95[#{$1}]" }
    # Woratana's :: Add Space X Pixel
    @text.gsub!(/\\SC\[([0-9]+)\]/i) { "\x96[#{$1}]" }

    # Woratana's :: Play SE
    @text.gsub!(/\\SE\[(.*?)\]/i) { "\x97[#{$1}]" }
    # Woratana's :: Play ME
    @text.gsub!(/\\ME\[(.*?)\]/i) { "\x98[#{$1}]" }
    # Woratana's :: Play BGM
    @text.gsub!(/\\BGM\[(.*?)\]/i) { "\x99[#{$1}]" }

    # Woratana's :: Start New Line
    @text.gsub!(/\\NL/i) { "\x09" }
    # Woratana's :: Turn ON/OFF Typing Sound
    @text.gsub!(/\\TYP/i) { "\x10" }
    # Woratana's :: Draw Picture
    @text.gsub!(/\\DP\[(.*?)\]/i) { "\x11[#{$1}]" }

    # Woratana's :: Draw Face
    @text.gsub!(/\\FA\{(.*?)\}/i) { "\x12{#{$1}}" }

    # Woratana's :: Temporary Width
    @text.scan(/\\WW\[([-,0-9]+)\]/i)
    if $1.to_s != ''
      $nms.msg_temp_w = $1.to_i
      @text.sub!(/\\WW\[([-,0-9]+)\]/i) {}
    end
    # Woratana's :: Temporary Height
    @text.scan(/\\WH\[([-,0-9]+)\]/i)
    if $1.to_s != ''
      $nms.msg_temp_h = $1.to_i
      @text.sub!(/\\WH\[([-,0-9]+)\]/i) {}
    end
    # Woratana's :: Temporary X
    @text.scan(/\\WX\[([-,0-9]+)\]/i)
    if $1.to_s != ''
      $nms.msg_temp_x = $1.to_i
      @text.sub!(/\\WX\[([-,0-9]+)\]/i) {}
    end
    # Woratana's :: Temporary Y
    @text.scan(/\\WY\[([-,0-9]+)\]/i)
    if $1.to_s != ''
      $nms.msg_temp_y = $1.to_i
      @text.sub!(/\\WY\[([-,0-9]+)\]/i) {}
    end

   # Woratana's :: Remove text list
    NMS_REMOVE_LIST.each {|i| @text.gsub!(/#{i}/i) {} }

    # Woratana's :: Pop Text
    @text.scan(/\\P\[(.*?)\]/i)
    if $1.to_s != ""
     @pop = $1.to_i
     contents.font.name = $nms.nms_fontname if contents.font.name != $nms.nms_fontname
     contents.font.size = $nms.nms_fontsize if contents.font.size != $nms.nms_fontsize
     a = @text.split(/\x00/)
     for i in 0..(a.size - 1)
       text_width = contents.text_size(a[i]).width
       @all_text_width = text_width if @all_text_width < text_width
     end
      nms_draw_new_face
      if @face.bitmap != nil
       if get_x_face == 0 and MOVE_TEXT
         @all_text_width += (@face.width + TEXT_X_PLUS)
       else
         @all_text_width += get_x_face
       end
       @face.bitmap.dispose
       @face.bitmap = nil
     end
     @text.sub!(/\\P\[(.*?)\]/i) {}
     end

    @name_text = $game_message._name if @name_text == nil and $game_message._name != ""
  end
 #--------------------------------------------------------------------------
 # ? EDIT: NMS 2.2++
 #--------------------------------------------------------------------------
 def reset_window
   @background = $game_message.background
   @position = $game_message.position
   if @background == 0
     self.opacity = 255
   else
     self.opacity = 0
   end
   # Calculate Window X/Y and Size depends on Pop or normal message
   if @pop != nil
     $nms.msg_h = [((@text_line * WLH) + 8), $nms.msg_h_user].min
     $nms.msg_w = @all_text_width + 32

     case @pop
     when 0 # Player
       set_window_xy($game_player)
     when -1 # This Event
       set_window_xy($game_map.events[$game_message.event_id])
     else # Event ID
       set_window_xy($game_map.events[@pop])
     end
   else
     $nms.msg_h = ((((@text_line * WLH) + 8) > $nms.msg_h_user) and ($nms.txt_scrl == false)) ? ((@text_line * WLH) + 8) : $nms.msg_h_user
     $nms.msg_w = NMS_MSGWIN_WIDTH
     self.x = $nms.msg_x
     case @position
     when 0  # Down
       self.y = 0
       @gold_window.y = 360
     when 1  # Middle
       self.y = ((Graphics.height - $nms.msg_h) / 2)
       @gold_window.y = 0
     when 2  # Up
       self.y = Graphics.height - $nms.msg_h
       @gold_window.y = 0
     end
   end
   # Temporary Size & Position
   if !$nms.msg_temp_w.nil?
     $nms.msg_w = $nms.msg_temp_w
     $nms.msg_temp_w = nil
   end
   if !$nms.msg_temp_h.nil?
     $nms.msg_h = $nms.msg_temp_h
     $nms.msg_temp_h = nil
   end
   if !$nms.msg_temp_x.nil?
     self.x = $nms.msg_temp_x
     $nms.msg_temp_x = nil
   end
   if !$nms.msg_temp_y.nil?
     self.y = $nms.msg_temp_y
     $nms.msg_temp_y = nil
   end
   # Fix Window Position if it's out of screen
   self.x = 0 if self.x < 0
   self.x = Graphics.width - $nms.msg_w if (self.x + $nms.msg_w) > Graphics.width
   self.y = 0 if self.y < 0
   self.y = Graphics.height - $nms.msg_h if (self.y + $nms.msg_h) > Graphics.height
 end
 #--------------------------------------------------------------------------
 # ? SET Window XY for Pop Message
 #--------------------------------------------------------------------------
 def set_window_xy(chara)
   char_x = chara.screen_x
   char_y = chara.screen_y
   self.x = char_x - ($nms.msg_w / 2)
   self.y = ((char_y - 32 - $nms.msg_h) >= 0) ? (char_y - 32 - $nms.msg_h) : (char_y + 32)
 end
 #--------------------------------------------------------------------------
 # ? ????????
 #--------------------------------------------------------------------------
 def terminate_message
   self.active = false
   self.pause = false
   self.index = -1
   @gold_window.close
   @number_input_window.active = false
   @number_input_window.visible = false
   $game_message.main_proc.call if $game_message.main_proc != nil
   $game_message.clear
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def update_message
   loop do
     c = @text.slice!(/./m)
     case c
     when nil
       finish_message
       break
     when "\x00"
       new_line if !$nms.txt_unl
       if @line_count >= $game_message.max_line
         unless @text.empty?
           self.pause = true
           break
         end
       end
     when "\x80"
       @text.sub!(/\[([0-9]+)\]/, "")
       $game_map.events[$game_message.event_id].animation_id = $1.to_i
     when "\x81"
       @text.sub!(/\[([0-9]+)\]/, "")
       $game_map.events[$game_message.event_id].balloon_id = $1.to_i
     when "\x82"
       @text.sub!(/\[([0-9]+)\]/, "")
       a = $game_map.interpreter.params[0]
       $game_map.interpreter.params[0] = $1.to_i
       $game_map.interpreter.command_117
       $game_map.interpreter.params[0] = a
     when "\x83"
       @text.sub!(/\[([0-9]+)\]/, "")
       bitmap = Cache.system("Iconset")
       icon_index = $1.to_i
       # Check for Auto Cut
       new_line if $nms.txt_cut and (@contents_x + 24 > contents.width)
       # Draw ICON
       draw_icon(icon_index, @contents_x, @contents_y, true)
       @contents_x += 24
     when "\x84"
       @text.sub!(/\[(.*?)\]/, "")
       $nms.nms_fontname = $1.to_s
       next
     when "\x85"
       @text.sub!(/\[([0-9]+)\]/, "")
       $nms.nms_fontsize = $1.to_i; next
     when "\x86"
       $nms.nms_fontname = NMS_FONT_NAME; next
     when "\x87"
       $nms.nms_fontsize = NMS_FONT_SIZE; next
     when "\x88"
       contents.font.bold = contents.font.bold == true ? false : true
       next
     when "\x89"
       contents.font.italic = contents.font.italic == true ? false : true
       next
     when "\x90"
       @text.sub!(/\[([0-9]+)\]/, "")
       $nms.text_delay = $1.to_i; next
     when "\x91"
       $nms.text_delay = NMS_DELAY_PER_LETTER; next
     when "\x92"
       $nms.lbl = $nms.lbl == true ? false : true; next
     when "\x93"
       contents.font.shadow = contents.font.shadow == true ? false : true
       next
     when "\x94"
       @no_press_input = @no_press_input == true ? false : true
       next
     when "\x95"
       @text.sub!(/\[([0-9]+)\]/, "")
       @wait_count = $1.to_i
       break
     when "\x96"
       @text.sub!(/\[([0-9]+)\]/, "")
       @contents_x += $1.to_i
       next
     when "\x97"
       @text.sub!(/\[(.*?)\]/, "")
       RPG::SE.new($1).play
     when "\x98"
       @text.sub!(/\[(.*?)\]/, "")
       RPG::ME.new($1).play
     when "\x99"
       @text.sub!(/\[(.*?)\]/, "")
       RPG::BGM.new($1).play
     when "\x09"
       new_line
     when "\x10"
       $nms.typ_se = !$nms.typ_se
     when "\x11"
       @text.sub!(/\[(.*?)\]/, "")
       bitmap = Cache.system($1.to_s)
       rect = Rect.new(0,0,0,0)
       rect.width = bitmap.width
       rect.height = bitmap.height
       # Check for Auto Cut & Scroll
       if (@contents_x + bitmap.width > contents.width)
         if $nms.txt_cut; new_line
         elsif $nms.txt_scrl_hori; nms_scroll_hori(bitmap.width)
         end
       end
       # Draw Image
       self.contents.blt(@contents_x, @contents_y, bitmap, rect)
       @contents_x += bitmap.width
       @biggest_text_height = bitmap.height if bitmap.height > @biggest_text_height
       bitmap.dispose
     when "\x12"
       @text.sub!(/\{(.*?)\}/, "")
       a = $1.to_s.split(',')
       $nms.face_name = a[0]
       $nms.face_index = a[1].to_i
       $nms.side = a[2].to_i unless a[2].nil?
       nms_draw_new_face
       @ori_x = @face.x
     when "\x01"
       @text.sub!(/\{(.*?)\}/, "")
       color_code = $1.to_s
       if color_code.include?('#')
         color_code.sub!(/([0123456789ABCDEF]+)/, "")
         contents.font.color = get_hex($1)
       else
         $nms.last_color = color_code.to_i
         contents.font.color = text_color($nms.last_color)
       end
       next
     when "\x02"
       @gold_window.refresh
       @gold_window.open
     when "\x03"
       @wait_count = 15
       break
     when "\x04"
       @wait_count = 60
       break
     when "\x05"
       self.pause = true
       break
     when "\x06"
       @line_show_fast = true
     when "\x07"
       @line_show_fast = false
     when "\x08"
       @pause_skip = true
     else
       contents.font.name = $nms.nms_fontname if contents.font.name != $nms.nms_fontname
       contents.font.size = $nms.nms_fontsize if contents.font.size != $nms.nms_fontsize
       c_width = contents.text_size(c).width

       # Check for Text Cut & Scroll Horizontal
       if (@contents_x + c_width > contents.width)
         if $nms.txt_cut; new_line
         elsif $nms.txt_scrl_hori
           nms_scroll_hori(c_width)
           @wait_count = $nms.txt_scrl_hori_delay
           @text = c + @text
           return
         end
       end
       nms_line_height = contents.text_size(c).height
       contents.draw_text(@contents_x, @contents_y, 40, nms_line_height, c)
       @contents_x += c_width
       # Change Biggest Text Height
       @biggest_text_height = nms_line_height if nms_line_height > @biggest_text_height

       # Play Typing Sound
       if $nms.typ_se and @typse_count <= 0
         RPG::SE.new($nms.typ_file, $nms.typ_vol).play
         @typse_count += $nms.typ_skip
       end
       #Show Fast & Text Delay
       @show_fast = true if $nms.lbl == false

       @delay_text += $nms.text_delay
     end
     break unless @show_fast or @line_show_fast
   end
 end
 #--------------------------------------------------------------------------
 # ? ??????????
 #--------------------------------------------------------------------------
 def finish_message
   if $game_message.choice_max > 0
     start_choice
   elsif $game_message.num_input_variable_id > 0
     start_number_input
   elsif @pause_skip
     terminate_message
   else
     self.pause = true
   end
   @wait_count = 10
   @text = nil
 end
 #--------------------------------------------------------------------------
 # ? ??????
 #--------------------------------------------------------------------------
 def start_choice
   self.active = true
   self.index = 0
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def start_number_input
   digits_max = $game_message.num_input_digits_max
   number = $game_variables[$game_message.num_input_variable_id]
   @number_input_window.digits_max = digits_max
   @number_input_window.number = number
   if $game_message.face_name.empty? or MOVE_TEXT == false
     @number_input_window.x = x - 23
   else
     case $game_message.side
     when 0
       @number_input_window.x = (x + 112) - 23
     when 1
       @number_input_window.x = (x + text_x) - 23
     when 2
       @number_input_window.x = x - 23
     when -1
       @number_input_window.x = x - 23
     end
   end
   @number_input_window.x += CHOICE_INPUT_X_PLUS
   @number_input_window.y = y + @contents_y
   @number_input_window.active = true
   @number_input_window.visible = true
   @number_input_window.update
 end
 #--------------------------------------------------------------------------
 # ? EDITED
 #--------------------------------------------------------------------------
 def update_cursor
   if @index >= 0
     if $game_message.face_name.empty?
     x = TEXT_X_PLUS
     else
     x = get_x_face
     end
     y = ($game_message.choice_start + @index) * WLH
     # CHANGE WIDTH OF CURSOR FOR CHOICE SELECT
     if $game_message.face_name.empty? or MOVE_TEXT == false
       facesize = x
     else
       facesize = get_x_face
       facesize += @face.width if $game_message.side == 2
       facesize += @face.width + 16 if $game_message.side == -1
     end
     self.cursor_rect.set(x, y, contents.width - facesize, WLH)
   else
     self.cursor_rect.empty
   end
 end

 #--------------------------------------------------------------------------
 # ? ?????????
 #--------------------------------------------------------------------------
 def input_pause
   if Input.trigger?(Input::B) or Input.trigger?(Input::C)
     self.pause = false
     if @text != nil and not @text.empty?
       new_page if @line_count >= $game_message.max_line
     else
       terminate_message
     end
   end
 end
 #--------------------------------------------------------------------------
 # ? ????????
 #--------------------------------------------------------------------------
 def input_choice
   if Input.trigger?(Input::B)
     if $game_message.choice_cancel_type > 0
       Sound.play_cancel
       $game_message.choice_proc.call($game_message.choice_cancel_type - 1)
       terminate_message
     end
   elsif Input.trigger?(Input::C)
     Sound.play_decision
     $game_message.choice_proc.call(self.index)
     terminate_message
   end
 end
 #--------------------------------------------------------------------------
 # ? ???????
 #--------------------------------------------------------------------------
 def input_number
   if Input.trigger?(Input::C)
     Sound.play_decision
     $game_variables[$game_message.num_input_variable_id] =
       @number_input_window.number
     $game_map.need_refresh = true
     terminate_message
   end
 end
end

#==============================================================================
# NMS +[ADD ON]+ WINDOW_MESSAGE_CLASS
#------------------------------------------------------------------------------
#==============================================================================

class Window_Message < Window_Selectable

# Return X for Text
def get_x_face
 if MOVE_TEXT == true
   case $game_message.side
   when 0
     return 112 + TEXT_X_PLUS
   when 1
     return text_x
   when 2
     return TEXT_X_PLUS
   else
     return TEXT_X_PLUS
   end
 else
   return TEXT_X_PLUS
 end
end

 def text_x
   return @face.width + TEXT_X_PLUS
 end

 # Clear Name Box & Name Text
 def clear_namebox
   @nametxt.bitmap.dispose
   @namebox.dispose
   @namebox = nil
   @name_text = nil
 end

 def nms_get_map_name
   mapdata = load_data("Data/MapInfos.rvdata")
   map_id = $game_map.map_id
   return mapdata[map_id].name
 end

 #--------------------------------------
 # DRAW FACE [both Systems] METHOD
 #------------------------------------
 def draw_face2(face_name, x, y, index = 0, animf = false, animf_index = 0, animf_max = 1, nofade = false)
 if animf
   # Use Animated Face
   bitmap = Cache.face(face_name)
   rect = Rect.new(0,0,0,0)
   rect.width = (bitmap.width / animf_max)
   rect.height = bitmap.height
   rect.x = animf_index * rect.width
   rect.y = 0
   @face.bitmap = Bitmap.new(rect.width,rect.height)
   @face.bitmap.blt(0,0,bitmap,rect)
   bitmap.dispose
 elsif $game_message.side == 0 or $game_message.side == -1 or EightFaces_File
   # USE 8 FACES PER FILE
   bitmap = Cache.face(face_name)
   rect = Rect.new(0,0,0,0)
   rect.width = (bitmap.width / 4)
   rect.height = (bitmap.height / 2)
   rect.x = index % 4 * rect.width
   rect.y = index / 4 * rect.height
   @face.bitmap = Bitmap.new(rect.width,rect.height)
   @face.bitmap.blt(0,0,bitmap,rect)
   bitmap.dispose
 else
   # USE 1 FACES PER FILE
   @face.bitmap = Cache.face(face_name)
 end
 # SET X/Y OF FACE DEPENDS ON FACE SIDE
 if $game_message.side == 1
   @face.mirror = false
   @face.x = x + 6
   @face.y = y - 6 + height - @face.height
 elsif $game_message.side == 2
   @face.mirror = true
   @face.x = x + ((self.width - 6) - @face.width)
   @face.y = y - 6 + height - @face.height
 elsif $game_message.side == 0
   @face.mirror = false
   @face.x = x + 16
   @face.y = y - 16 + height - @face.height
 elsif $game_message.side == -1
   @face.mirror = true
   @face.x = x + self.contents.width - @face.width + 16
   @face.y = y - 16 + height - @face.height
 end
   @face.x += FACE_X_PLUS
   @face.y += FACE_Y_PLUS
   @face_data = [face_name, index, $game_message.side]
   if @face_data != @face_data_old and FADE_MOVE_WHEN_USE_NEW_FACE; @showtime = 1; @face_data_old = @face_data; end
   @face.opacity = 0 if !nofade and ($nms.face_fade == true and ((FADE_ONLY_FIRST and @showtime <= 1) or (FADE_ONLY_FIRST == false)))
 end
 #--------------------------------------
 # DRAW NAME BOX METHOD
 #-----------------------------------
 def draw_name(name,x,y)
   name = name + NAMEBOX_TEXT_AFTER_NAME
   a = Bitmap.new(33,33)
   a.font.name = NAMEBOX_TEXT_FONT
   a.font.size = NAMEBOX_TEXT_SIZE
   rect = a.text_size(name)
   a.dispose
   @nametxt.bitmap = Bitmap.new(16 + rect.width, rect.height + NAMEBOX_TEXT_HEIGHT_PLUS)
   @nametxt.x = x + 8
   if $game_message.side == 1 or $game_message.side == 2
     @nametxt.x += NAMEBOX_X_PLUS_NEO
   else
     @nametxt.x += NAMEBOX_X_PLUS_NOR
   end
   @nametxt.y = y - 20 + ($game_message.position == 0 ? NAMEBOX_Y_PLUS_TOP : NAMEBOX_Y_PLUS)
   namebox_x_plus = ($game_message.side == 1 or $game_message.side == 2) ? NAMEBOX_X_PLUS_NEO : NAMEBOX_X_PLUS_NOR
   @nametxt.x = ((self.x + $nms.msg_w) - namebox_x_plus - @nametxt.width) if MOVE_NAMEBOX and ($game_message.side == 2 or $game_message.side == -1)
   @namebox = Window.new
   @namebox.windowskin = Cache.system(NAMEBOX_SKIN)
   @namebox.z = self.z + 10
   @namebox.opacity = case @background
   when 0; NAMEBOX_OPACITY
   when 1; NAMEBOX_OPACITY_DIM_BG
   when 2; NAMEBOX_OPACITY_NO_BG
   end
   @namebox.back_opacity = NAMEBOX_BACK_OPACITY
   @namebox.openness = 255
   @namebox.x = @nametxt.x - NAMEBOX_BOX_WIDTH_PLUS
   @namebox.y = @nametxt.y - NAMEBOX_BOX_HEIGHT_PLUS
   @namebox.width = @nametxt.bitmap.width + (NAMEBOX_BOX_WIDTH_PLUS * 2)
   @namebox.height = @nametxt.bitmap.height + (NAMEBOX_BOX_HEIGHT_PLUS * 2)
   # Fixed position bug
   @namebox.x = 0 if @namebox.x < 0
   @namebox.x = (Graphics.width - @namebox.width) if (@namebox.x + @namebox.width) > Graphics.width 
   @nametxt.bitmap.font.name = NAMEBOX_TEXT_FONT
   @nametxt.bitmap.font.size = NAMEBOX_TEXT_SIZE
   @nametxt.bitmap.font.bold = NAMEBOX_TEXT_BOLD
   if NAMEBOX_TEXT_OUTLINE == true
     # MAKE TEXT OUTLINE
     old_shadow = @nametxt.bitmap.font.shadow
     @nametxt.bitmap.font.color = Color.new(0,0,0)
     @nametxt.bitmap.draw_text(0,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
     @nametxt.bitmap.draw_text(0,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
     @nametxt.bitmap.draw_text(2,0,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
     @nametxt.bitmap.draw_text(2,2,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
     @nametxt.bitmap.font.shadow = old_shadow
   end
   @nametxt.bitmap.font.color = Color.new($game_message.color[0],$game_message.color[1],$game_message.color[2])
   @nametxt.bitmap.draw_text(1,1,@nametxt.bitmap.width,@nametxt.bitmap.height,name,1)
   @name_text = nil
 end

 #--------------------------------------
 # DRAW NEW FACE
 #-----------------------------------
 def nms_draw_new_face
   # Setup Face Name / Index
   name = $game_message.face_name
   index = $game_message.face_index
   animf_test = name.sub(/\[([0-9]+)\]/, "")
   # Animated?
   @animf = $1.to_i > 0 ? true : false
   @animf_maxind = $1.to_i
   @animf_ind = 0
   @animf_dl = $nms.animf_delay
   # CALL DRAW FACE METHOD
   draw_face2(name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind)
 end
 #--------------------------------------
 # UPDATE ANIMATION FACE
 #-----------------------------------
 def update_animate_face
   if (!self.pause or $nms.animf_cont)
     @animf_dl -= 1
     if @animf_dl <= 0
       @animf_ind = (@animf_ind + 1) % @animf_maxind
       @animf_dl = $nms.animf_delay
       draw_face2($game_message.face_name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind, true)
     end
   elsif @animf_ind != 0
     @animf_ind = 0
     draw_face2($game_message.face_name, self.x, self.y, index, @animf, @animf_ind, @animf_maxind, true)
   end
 end
 #--------------------------------------
 # SCROLL TEXT HORIZONTAL
 #-----------------------------------
 def nms_scroll_hori(scr_width)
   biggest = @biggest_text_height > WLH ? @biggest_text_height : WLH
   rect = Rect.new(0, @contents_y, contents.width, biggest)
   bitmap = Bitmap.new(rect.width, rect.height)
   bitmap.blt(0, 0, contents, rect)
   contents.clear_rect(rect)
   rect = Rect.new(0, 0, rect.width, rect.height)
   contents.blt(0 - scr_width, @contents_y, bitmap, rect)
   contents.clear_rect(0, 0, @face.width, @face.height) if @face.bitmap != nil
   bitmap.dispose
   @contents_x = @contents_x - scr_width
 end

 #--------------------------------------
 # GET HEX COLOR by RPG & ERZENGEL
 #------------------------------------
 def get_hex(n)
   red = 0
   green = 0
   blue = 0
   if n.size != 6
     print("Hex triplets must be six characters long!\nNormal color will be used.")
     return normal_color
   end
   for i in 1..6
     sliced = n.slice!(/./m)
     value = hexconvert(sliced)
     case i
     when 1; red += value * 16
     when 2; red += value
     when 3; green += value * 16
     when 4; green += value
     when 5; blue += value * 16
     when 6; blue += value
     end
   end
   return Color.new(red, green, blue)
 end
 def hexconvert(n)
   case n
   when "0"; return 0
   when "1"; return 1
   when "2"; return 2
   when "3"; return 3
   when "4"; return 4
   when "5"; return 5
   when "6"; return 6
   when "7"; return 7
   when "8"; return 8
   when "9"; return 9
   when "A"; return 10
   when "B"; return 11
   when "C"; return 12
   when "D"; return 13
   when "E"; return 14
   when "F";return 15
   else; return -1
   end
 end
end # CLASS END

#==============================================================================
# NMS +[ADD ON]+ OTHER CLASS
#------------------------------------------------------------------------------
#==============================================================================

# STORE variables here~*
class Game_Message
 attr_accessor :nms_fontname, :nms_fontsize, :event_id, :side, :color, :_name,
:last_color, :text_delay, :lbl, :msg_w, :msg_h, :msg_x, :max_line, :nms_face_name, 
:nms_face_index, :next_msg, :typ_se, :typ_file, :typ_skip, :typ_vol, :mback, :mback_opac,
:qt, :txt_scrl, :msg_h_user, :animf_delay, :animf_cont, :txt_cut, :txt_unl, :txt_scrl_hori,
:txt_scrl_hori_delay, :face_fade, :face_move, :msg_temp_y, :msg_temp_x, :msg_temp_h,
:msg_temp_w


 alias wor_nms_old_ini initialize
 def initialize
   create_nms_data
   wor_nms_old_ini
 end

 def create_nms_data
   # NFS
   @side = Window_Base::DEFAULT_FACE_SIDE
   @_name = ""
   @color = Window_Base::NAMEBOX_TEXT_DEFAULT_COLOR
   # NMS
   @last_color = 0
   @nms_fontname = Window_Base::NMS_FONT_NAME
   @nms_fontsize = Window_Base::NMS_FONT_SIZE
   @event_id = 0
   @text_delay = Window_Base::NMS_DELAY_PER_LETTER
   @lbl = true
   @msg_w = Window_Base::NMS_MSGWIN_WIDTH
   @msg_h = @msg_h_user = Window_Base::NMS_MSGWIN_MIN_HEIGHT
   @msg_x = Window_Base::NMS_MSGWIN_X
   @max_line = Window_Base::NMS_MAX_LINE
   @nms_face_name = ""
   @nms_face_index = 1
   @next_msg = false
   @typ_se = Window_Base::TYPING_SOUND
   @typ_file = Window_Base::TYPING_SOUND_FILE
   @typ_skip = Window_Base::TYPING_SOUND_SKIP
   @typ_vol = Window_Base::TYPING_SOUND_VOLUME
   @mback = Window_Base::NMS_MSG_BACK
   @mback_opac = Window_Base::NMS_MSG_BACK_OPACITY
   @qt = Array.new
   @txt_scrl = Window_Base::NMS_TEXT_SCROLL
   @animf_delay = Window_Base::ANIMATE_FACE_DELAY
   @animf_cont = Window_Base::ANIMATE_FACE_CONTINUE
   @txt_cut = Window_Base::NMS_TEXT_AUTO_CUT
   @txt_scrl_hori = Window_Base::NMS_TEXT_AUTO_SCROLL_HORIZONTAL
   @txt_scrl_hori_delay = Window_Base::NMS_TEXT_AUTO_SCROLL_HORIZONTAL_DELAY
   @txt_unl = Window_Base::NMS_USER_NEW_LINE
   @face_fade = Window_Base::FADE_EFFECT
   @face_move = Window_Base::MOVE_EFFECT
   @msg_temp_x = nil
   @msg_temp_y = nil
   @msg_temp_h = nil
   @msg_temp_w = nil
 end
end

class Game_Map
 attr_accessor :interpreter
end

class Game_Interpreter
 attr_accessor :params
end

class Game_Interpreter
 def command_101
   unless $game_message.busy
     $game_message.event_id = @event_id
     $game_message.face_name = @params[0]
     $game_message.face_index = @params[1]
     $game_message.background = @params[2]
     $game_message.position = @params[3]
     next_msg = true
   loop do
     if @list[@index].code == 101 and $game_message.max_line > $game_message.texts.size and next_msg
       @index += 1
     else
       break
     end
     next_msg = false
     while @list[@index].code == 401 and $game_message.max_line > $game_message.texts.size
       next_msg = $game_message.next_msg
       $game_message.texts.push(@list[@index].parameters[0])
       @index += 1
     end
   end
     if @list[@index].code == 102
       setup_choices(@list[@index].parameters)
     elsif @list[@index].code == 103
       setup_num_input(@list[@index].parameters)
     end
     set_message_waiting
   end
   return false
 end

 def setup_choices(params)
   if $game_message.texts.size <= $game_message.max_line - params[0].size
     $game_message.choice_start = $game_message.texts.size
     $game_message.choice_max = params[0].size
     for s in params[0]
       $game_message.texts.push(s)
     end
     $game_message.choice_cancel_type = params[1]
     $game_message.choice_proc = Proc.new { |n| @branch[@indent] = n }
     @index += 1
   end
 end
end

 

Here is the Demo

http://www.mediafire.com/download.php?tmjmtxzdriw

Edited by GameFreak001

Share this post


Link to post
Share on other sites

Your message box looks cool. I'm surprised no one posted here. Oh that's right almost everybody on this forum hates VX.

 

I like this one the most.

gallery_17239_61_2500.png

Share this post


Link to post
Share on other sites

Thanks for the love...I was wondering why to..

I was thinking they love both. I wanted XP But VX won me over.

:alright: :alright: :alright:

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...