Heures au format UTC + 1 heure [ Heure d’été ]


Règles du forum


-Mettez un titre clair et explicite, pas un titre vague.
-Fournissez le plus d'informations possible, soyez clair et précis.
-Si votre question est liée à un script, postez le script, un lien vers lui, ou une démo.
-Pensez à éditer votre sujet afin d'ajouter [Résolu] dans le titre, lorsque votre problème est résolu.



Publier un nouveau sujet Répondre au sujet  [ 9 messages ] 
Auteur Message
 Sujet du message: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 10 Mar 2010, 22:58 
Villageois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 10 Mar 2010, 22:42
Messages: 14
Localisation: Nantes
Niveau RPG Maker: Moyen
Logiciel(s) préféré(s): RMVX
Point(s) Fort(s): Musiques, infographie, scénario
Sexe: Masculin
Points d'aide: 0/60

Créations :

Voir ses créations

Bonjour à tous.

J'ai un bug entre deux scripts. L'un permet de personnaliser les fenêtres de dialogues (Neo Message System 3.0) et l'autre de faire apparaitre des bulles (émoticones) sur le faceset dans une boite de dialogue (Emoticon on Face).

Voici les 2 scripts d'origine.

NMS 3:

Code: Tout sélectionner
#===============================================================
# + [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





Et le second (emoticon on face) est là:

http://forum.rpgcreative.net/sid-4d3597172425c12e36c8e69e455794ff-f72-rmvx-emoticon-on-face-t100648.html


Le truc est que quand je rentre la balise pour faire apparaitre la bulle, rien ne se passe dans le jeu. Dès que j'enlève le premier script, ça marche.

J'ai essayé de les bidouiller et de les "fondre" en un seul mais rien à faire et je commence à m'arracher les cheveux.

Je ne sais pas scripter.

Je fais donc appel à vos services les pros du making ;)

Merci d'avance.

_________________
AUBE et CRÉPUSCULE, premier double EP de M.A.X., disponible sur www.M-A-X.fr ou sur myspace.com/siteMAX


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 11 Mar 2010, 09:12 
Artisan (Nv 5)
Avatar de l’utilisateur

Inscrit le: 27 Oct 2009, 16:53
Messages: 181
Localisation: Encore et toujours là...
Niveau RPG Maker: Meilleur chaque jour
Logiciel(s) préféré(s): RM 2003, RM XP, Photofiltre, etc...
Point(s) Fort(s): Mapping, un peu graphisme (charas)
Sexe: Masculin
Points d'aide: 1/60

Créations :

Voir ses créations

Je ne suis pas ''pro'' du scripting, mais en regardant le script de plus pres, j'ai vu qu'il y avait des choses que TU doit modifier (par exemple, j'ai vu une ligne ''w/[x] wait x frames''. C'est des choses que tu dois modifier toi-meme.

EDIT : désolé, j'ai du mal lire ^^

_________________
Allez allez ! On a besoin de monde ! http://rpgmakerunlimited.forums-actifs.com/forum.htm
Inscrivez-vous sur le forum Rpg Maker Unlimited !
ET VIVE Image !!! Soutenez le projet de Kintoune en s'inscrivant sur son forum !
Image


Dernière édition par Trac3rTong le 11 Mar 2010, 18:17, édité 1 fois au total.

Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 11 Mar 2010, 11:24 
Garde
Garde
Avatar de l’utilisateur

Inscrit le: 26 Sep 2006, 00:00
Messages: 1973
Points d'aide: Illimité

Créations :

Voir ses créations

Les deux "remplacent" le script de message de base je pense, donc un seul est pris en compte. Il faudrait les "fusionner" en quelque sorte...

_________________
Image
Image


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 11 Mar 2010, 16:19 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 25 Aoû 2009, 11:17
Messages: 849
Localisation: Jamais loin
Niveau RPG Maker: Débrouillard
Logiciel(s) préféré(s): RMXP, Photofiltre
Point(s) Fort(s): Polyvalent
Points d'aide: 39/60

Créations :

- Légendes d'un temps [Démo]


Voir ses créations

Mais la méthode de "fusion" à utiliser n'est pas de mettre l'un à la suite de l'autre car il seraient toujours deux scripts différents, vue qu'un script commence par "class maclasse" et fini par un "end" lié à cette définition. Je pense qu'il te faut établir un lien entre les deux, qu'ils s'appellent l'un l'autre. Je te le ferai bien, mais j'ai quelques soucis, notamment du au fait que la fenêtre script dépasse de mon écran et que je ne peux accéder à la commande "OK" qui est en bas. J'imagine que la solution serait de mettre une partie composée du script rajoutant la face dans le message dans le script avec les bulles. En gros, dans le "def intitialize" du premier script, tu mets "emoticon". En ayant mis le deuxième script à la fin du premier mais avant le dernier end, tu remplaces le "class Window_Message < Window_Selectable" par un "def emoticon". En gros tu définis une commande que tu appelles à la lecture du script.

_________________
Image
Ressources pour menu moghunter

Mon projet
Nom: Légendes d'un temps.
Avancement: Aucune idée^^'
Présentation: C'est par ici
Forum: http://un-monde-de-legendes.lescigales.org/


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 11 Mar 2010, 17:37 
Villageois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 10 Mar 2010, 22:42
Messages: 14
Localisation: Nantes
Niveau RPG Maker: Moyen
Logiciel(s) préféré(s): RMVX
Point(s) Fort(s): Musiques, infographie, scénario
Sexe: Masculin
Points d'aide: 0/60

Créations :

Voir ses créations

Merci pour vos réponses rapides.

Trac3rTong, désolé mais tu n'as pas du saisir mon problème car tu ne répond pas du tout ^^

Bahamut, justement, j'ai essayé pendant des heures de fondre ces deux scripts en un seul mais vu que je n'ai que des notions très vagues en matière de script, je n'arrive pas à résoudre mon problème.

Kintoune, j'ai suivi scrupuleusement ce que tu m'as dit de faire et ça ne fonctionne toujours pas (le jeu refuse de démarrer) j'ai aussi essayé de mettre tout ce qui est sous def update de l'un sous le def update de l'autre etc. en conservant la construction des deux scripts mais ça ne fonctionne pas non plus (il me trouve des "syntax error" partout...

Bref je suis toujours avec mon problème sur les bras :s

_________________
AUBE et CRÉPUSCULE, premier double EP de M.A.X., disponible sur www.M-A-X.fr ou sur myspace.com/siteMAX


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 11 Mar 2010, 19:49 
Garde
Garde
Avatar de l’utilisateur

Inscrit le: 26 Sep 2006, 00:00
Messages: 1973
Points d'aide: Illimité

Créations :

Voir ses créations

Effectivement, quand je dis "fusion", il ne s'agit pas des les mettre à la suite dans un seul script (ce qui exactement et parfaitement identique, la separation en "scripts" de rpg maker n'est qu'une facon de presenter les choses).

C'est aussi normal que tu n'y arrives pas si tu ne sais pas coder, il va falloir t'en remettre à quelqu'un capable de faire ca.

Kintoune t'as grossierement donné le principe en quelque sorte, mais ca ne te dira pas exactement comment faire non plus.

_________________
Image
Image


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 12 Mar 2010, 10:20 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 25 Aoû 2009, 11:17
Messages: 849
Localisation: Jamais loin
Niveau RPG Maker: Débrouillard
Logiciel(s) préféré(s): RMXP, Photofiltre
Point(s) Fort(s): Polyvalent
Points d'aide: 39/60

Créations :

- Légendes d'un temps [Démo]


Voir ses créations

Arf...je n'ai fait que te dire à peu près le principe, ce n'était pas des instructions censées être suffisante. J'ai bien dit "en gros". Il faut que quelqu'un s'y connaissant bien te donne directement le script fonctionnel. J'ai simplement voulu te mettre sur la voie. Bien sûr c'est plus compliqué que de mettre simplement ce que je t'ai dit, car il faut que les parties gérant les mêmes choses, par exemple les faces (si il y a cette option dans le premier script) ou d'autres trucs du genre, soient fusionnées de manière compatibles.

_________________
Image
Ressources pour menu moghunter

Mon projet
Nom: Légendes d'un temps.
Avancement: Aucune idée^^'
Présentation: C'est par ici
Forum: http://un-monde-de-legendes.lescigales.org/


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 12 Mar 2010, 20:19 
Ancien membre du staff
Ancien membre du staff
Avatar de l’utilisateur

Inscrit le: 20 Juil 2008, 00:00
Messages: 1726
Niveau RPG Maker: correct
Point(s) Fort(s): polyvalent
Sexe: Masculin
Points d'aide: 0/60

Créations :

- Création d'un sous menu

- Personnalisation des tailles d'icônes et de curseurs

- Affichages des altérations d'état via des icônes


Voir ses créations

De ce que j'ai vu, il vaut mieux mettre les alias du second script dans ceux du premier. Mais vu la complexité du premier script, ce sera presque un miracle si ça ne crash pas. Rendre les deux compatible demande déjà de s'approprier chaque script, or si c'est envisageable pour le deuxième, c'est très long pour le premier. Bon courage à qui se lancera là dedans.

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: bug "Neo Message System 3.0" + "Emoticon on Face"
MessagePublié: 20 Mar 2010, 20:08 
Villageois (Nv 1)
Avatar de l’utilisateur

Inscrit le: 10 Mar 2010, 22:42
Messages: 14
Localisation: Nantes
Niveau RPG Maker: Moyen
Logiciel(s) préféré(s): RMVX
Point(s) Fort(s): Musiques, infographie, scénario
Sexe: Masculin
Points d'aide: 0/60

Créations :

Voir ses créations

Bon ok, merci à tous.

Je vais renoncer au second script alors.
Pas grave, je ferai simplement des faces animées avec des bulles :)

Merci encore et bon making ;)

_________________
AUBE et CRÉPUSCULE, premier double EP de M.A.X., disponible sur www.M-A-X.fr ou sur myspace.com/siteMAX


Haut
 Profil  
 
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet  [ 9 messages ] 

Heures au format UTC + 1 heure [ Heure d’été ]


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 2 invités


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  
cron
RPG Creative Forum version 5 ; Tous droits réservés
phpBB Group (Traduit par Xaphos)
Optimisé pour une résolution 1024*728