09-17-2009, 02:26 PM 
	
	
	AMS - Advanced Message Script - R4 Update: #2
By: Dubealex, Edited by LegacyX
 By: Dubealex, Edited by LegacyX
Introduction
Firstly i want to say that i did not make this script...all ihave done is played around and added some extra features..
also, i shortened some shortcuts...so it doesn't fill up half the message box :smile:
Extra Features
- display the icon and name of a armor 
 
- display the icon and name of a item 
 
- display the icon and name of a skill 
 
- display the icon and name of a weapon
Screenshots
Sorry i haven't taken any Screenshots yet...
Script
 AMS Script
  			Code:
#===================================================
#  Â¦ AMS - Advanced Message Script - R4 [Update #2]
#===================================================
# For more infos and update, visit:
# http://www.creationasylum.net (Creation Asylum)
#
# Edited, Fixed and Enhanced by: Dubealex
# Original Script Core by: XRXS Scripter (Jap Dudes)
# HTML Hexadecimal color feature from: Phylomorphis
#
# Special Thanks:
# Rabu: For enabling the Show Face feature in an encrypted project
# LegacyX: For adding Extra Features
#
# To found all my new features, search the following:   #NEW
# To configure the button to skip the dialog, search:   #SKIP_TEXT_CODE
#
#    Edited by FF12_master :To find Edits Search for ++Edit
#   -Edits-
#
#   -Shortened face and name box short cut-
#   
#   \f[i] face shortcut, were i is the file name
#   \n[i] name box, were i is the decided name.
#
#   \oa[i]         - display the icon and name of armor i
#   \oi[i]         - display the icon and name of item i
#   \os[i]         - display the icon and name of skill i
#   \ow[i]         - display the icon and name of weapon i
#
# For any extra features to be added for Personalised Games Please PM LegacyX
#
# 24th Febuary 2009
#===================================================
 
LETTER_BY_LETTER_MODE = true    #Set the letter by letter mode ON/OFF
 
#===================================================
# ? CLASS AMS Begins
#===================================================
class AMS
 
 attr_accessor :name_box_x_offset
 attr_accessor :name_box_y_offset
 attr_accessor :font_type
 attr_accessor :name_font_type
 attr_accessor :font_size
 attr_accessor :name_font_size
 attr_accessor :message_box_opacity
 attr_accessor :name_box_skin
 attr_accessor :name_box_text_color
 attr_accessor :message_box_text_color
 attr_accessor :message_box_skin
 attr_accessor :name_box_width
 attr_accessor :name_box_height
 attr_accessor :message_width
 attr_accessor :message_height
 attr_accessor :message_x
 attr_accessor :message_y_bottom
 attr_accessor :message_y_middle
 attr_accessor :message_y_top
 attr_accessor :event_message_x_ofset
 attr_accessor :event_message_y_ofset
 
def initialize
 
 
 @name_box_x_offset = 0          #Choose the X axis offset of the name bos. default= 0
 @name_box_y_offset = -10       #Choose the Y axis offset of the name bos. default= -10
 @name_box_width = 8               #Choose the width of the Name Box. default= 8   
 @name_box_height = 26            #Choose the height of the Name Box. default= 26
 
 @font_type = "Tahoma"            #Choose the Font Name (Case Sensitive) for message box
 @name_font_type = "Tahoma"    #Choose the Font Name (Case Sensitive) for Name Box
 @font_size = 21                     #Choose the default Font Size for message box text
 @name_font_size = 21             #Choose the deafault Font Size for Name Box text
 @name_box_text_color=0          #Choose the Text Color of the Name Box
 @message_box_text_color=0      #Choose the Text Color of the Message Box
 
 @message_box_opacity = 240      #Choose the opacity of the message window. Default=160
 @message_box_skin = "Black3"   #Choose the WindowSkin for the Message Box
 @name_box_skin = "Black3"       #Choose the WindowSkin for the Name Box
 
 @message_width = 440             #Choose the width size of the message box. Default=480
 @message_height = 160            #Choose the height size of the message box. Default=160
 @message_x = 80                     #Choose the X position of the message box. Default=80
 @message_y_bottom = 310         #Choose the Y bottom position of the message box. Default=304
 @message_y_middle = 160         #Choose the Y middle position of the message box. Default=160
 @message_y_top = 16               #Choose the Y top position of the message box. Default=16
 
 @event_message_x_ofset = 0      #Choose the X position offset of the event message. Default=0
 @event_message_y_ofset = 48    #Choose the Y position offset of the event message. Default=48
 
end
end
#===================================================
# ? CLASS AMS Ends
#===================================================
 
 
#===================================================
# ? Class Window_Message Begins
#===================================================
class Window_Message < Window_Selectable   
 
alias xrxs9_initialize initialize
 
def initialize
 
@alex_skip = false
 
xrxs9_initialize
 
if $soundname_on_speak == nil then
  $soundname_on_speak = ""
end
 
$gaiji_file = "./Graphics/Gaiji/sample.png"
          
if FileTest.exist?($gaiji_file)
  @gaiji_cache = Bitmap.new($gaiji_file)
else
  @gaigi_cache = nil
end
@opacity_text_buf = Bitmap.new(32, 32)
end
 
 
#--------------------------------------------------------------------------
 
alias xrxs9_terminate_message terminate_message
 
def terminate_message
 
if @name_window_frame != nil
  @name_window_frame.dispose
  @name_window_frame = nil
end
 
if @name_window_text   != nil
  @name_window_text.dispose
  @name_window_text   = nil
end
xrxs9_terminate_message
end
 
#--------------------------------------------------------------------------
 
def refresh
 
self.contents.clear
self.contents.font.color = text_color($ams.message_box_text_color)
self.contents.font.name = $ams.font_type
self.contents.font.size = $ams.font_size
self.windowskin = RPG::Cache.windowskin($ams.message_box_skin)
@x = @y = @max_x = @max_y = @indent = @lines = 0
@face_indent = 0
@opacity = 255
@cursor_width = 0
@write_speed = 0
@write_wait = 0
@mid_stop = false
@face_file = nil
@popchar = -2
 
if $game_temp.choice_start == 0
  @x = 8
end
 
if $game_temp.message_text != nil
  @now_text = $game_temp.message_text
  if (/\A\\[Ff]\[(.+?)\]/.match(@now_text))!=nil then
       @face_file ="Faces/" + $1 + ".png"
       @x = @face_indent = 128
     if FileTest.exist?("Graphics/Pictures/" + $1 + ".png")
        self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
     end
     @now_text.gsub!(/\\[Ff]\[(.*?)\]/) { "" }
  end
 
  begin
  last_text = @now_text.clone
  @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
  end until @now_text == last_text
  @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
     $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
    end
 
  #NEW
  #Dubealex's Stop Skip Text ON-OFF
  @now_text.gsub!(/\\[%]/) { "\100" }
  #End new command
    
  #NEW
  #Dubealex's Show Monster Name Feature
    @now_text.gsub!(/\\[Mm]\[([0-9]+)\]/) do
    $data_enemies[$1.to_i] != nil ? $data_enemies[$1.to_i].name : ""
    end
    #End new command
    
  #NEW
  #Dubealex's Show Item Price Feature
    @now_text.gsub!(/\\[Pp]rice\[([0-9]+)\]/) do
    $data_items[$1.to_i] != nil ? $data_items[$1.to_i].price : ""
    end
    #End new command
    
  #NEW
  #Dubealex's Show Hero Class Name Feature
    @now_text.gsub!(/\\[Cc]lass\[([0-9]+)\]/) do
    $data_classes[$data_actors[$1.to_i].class_id] != nil ? $data_classes[$data_actors[$1.to_i].class_id].name : ""
    end
    #End new command
    
  #NEW
  #Dubealex's Show Current Map Name Feature
    @now_text.gsub!(/\\[Mm]ap/) do
    $game_map.name      != nil ? $game_map.name      : ""
    end
    #End new command
    
  #New
    
    #New
    #++Edit
    #Shows Icon and Weapon/Armour and Item name use \ow[i], \oa[i], \oi[i]
    # armor, items, skills, and weapons
        @now_text.gsub!(/\\[Oo][Aa]\[([0-9]+)\]/) {
           item = $data_armors[$1.to_i]
           "\014[#{$1}]" + "   " + item.name
        }
        @now_text.gsub!(/\\[Oo][Ii]\[([0-9]+)\]/) {
           item = $data_items[$1.to_i]
           "\015[#{$1}]" + "   " + item.name
        }
        @now_text.gsub!(/\\[Oo][Ss]\[([0-9]+)\]/) {
           item = $data_skills[$1.to_i]
           "\016[#{$1}]" + "   " + item.name
        }
        @now_text.gsub!(/\\[Oo][Ww]\[([0-9]+)\]/) {
           item = $data_weapons[$1.to_i]
           "\017[#{$1}]" + "   " + item.name
        }
    
  #NEW
  #Dubealex's Choose Name Box Text Color
    @now_text.gsub!(/\\[Zz]\[([0-9]+)\]/) do
    $ams.name_box_text_color=$1.to_i
    @now_text.sub!(/\\[Zz]\[([0-9]+)\]/) { "" }
    end
    #End new command
    
    
    
  name_window_set = false
  if (/\\[Nn]\[(.+?)\]/.match(@now_text)) != nil
     name_window_set = true
     name_text = $1
     @now_text.sub!(/\\[Nn]\[(.*?)\]/) { "" }
  end
 
  if (/\\[Pp]\[([-1,0-9]+)\]/.match(@now_text))!=nil then
     @popchar = $1.to_i
     if @popchar == -1
        @x = @indent = 48
        @y = 4
     end
     @now_text.gsub!(/\\[Pp]\[([-1,0-9]+)\]/) { "" }
  end
 
  @max_choice_x = 0
  if @popchar >= 0
     @text_save = @now_text.clone
     @max_x = 0
     @max_y = 4
     for i in 0..3
        line = @now_text.split(/\n/)[3-i]
        @max_y -= 1 if line == nil and @max_y <= 4-i
        next if line == nil
        line.gsub!(/\\\w\[(\w+)\]/) { "" }
        cx = contents.text_size(line).width
        @max_x = cx if cx > @max_x
        if i >= $game_temp.choice_start
           @max_choice_x = cx if cx > @max_choice_x
        end
     end
     self.width = @max_x + 32 + @face_indent
     self.height = (@max_y - 1) * 32 + 64
     @max_choice_x -= 68
     @max_choice_x -= @face_indent*216/128
  else
     @max_x = self.width - 32 - @face_indent
     for i in 0..3
        line = @now_text.split(/\n/)[i]
        next if line == nil
        line.gsub!(/\\\w\[(\w+)\]/) { "" }
        cx = contents.text_size(line).width
        if i >= $game_temp.choice_start
           @max_choice_x = cx if cx > @max_choice_x
        end
     end
     @max_choice_x += 8
  end
  @cursor_width = 0
  @now_text.gsub!(/\\\\/) { "\000" }
  @now_text.gsub!(/\\[Cc]\[([0123456789ABCDEF#]+)\]/) { "\001[#{$1}]" }
  @now_text.gsub!(/\\[Gg]/) { "\002" }
  @now_text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\003[#{$1}]" }
  @now_text.gsub!(/\\[Aa]\[(.*?)\]/) { "\004[#{$1}]" }
 
    #NEW
    #Dubealex's Permanent Color Change
    @now_text.gsub!(/\\[Cc]olor\[([0-9]+)\]/) do
       $ams.message_box_text_color= $1.to_i
     @now_text.sub!(/\\[Cc]\[([0-9]+)\]/) { "" }
       end
    #End of new command
    
    #NEW
    #Dubealex's Font Change Feature
     @now_text.gsub(/\\[Tt]\[(.*?)\]/) do
       buftxt = $1.to_s
       $ams.font_type = buftxt
       @now_text.sub!(/\\[Tt]\[(.*?)\]/) { "" }
       end
    #End of new command
    
  @now_text.gsub!(/\\[.]/) { "\005" }
  @now_text.gsub!(/\\[|]/) { "\006" }
  @now_text.gsub!(/\\[|]/) { "\014" }
  @now_text.gsub!(/\\[|]/) { "\015" }
  @now_text.gsub!(/\\[|]/) { "\016" }
  @now_text.gsub!(/\\[|]/) { "\017" }
  @now_text.gsub!(/\\[>]/) { "\019" }
  @now_text.gsub!(/\\[<]/) { "\031" }
  @now_text.gsub!(/\\[!]/) { "\020" }
  @now_text.gsub!(/\\[~]/) { "\021" }
  @now_text.gsub!(/\\[Ee]\[([0-9]+)\]/) { "\022[#{$1}]" }
  @now_text.gsub!(/\\[Ii]/) { "\023" }
  @now_text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\024[#{$1}]" }
  @now_text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\025[#{$1}]" }
  @now_text.gsub!(/\\[Bb]\[([0-9]+)\]/) { "\026[#{$1}]" }
  @now_text.gsub!(/\\[Rr]\[(.*?)\]/) { "\027[#{$1}]" }
 
  reset_window
 
  if name_window_set
     color=$ams.name_box_text_color
     off_x =   $ams.name_box_x_offset
     off_y =   $ams.name_box_y_offset
     space = 2
     x = self.x + off_x - space / 2
     y = self.y + off_y - space / 2
     w = self.contents.text_size(name_text).width + $ams.name_box_width + space
     h = $ams.name_box_height + space
     @name_window_frame = Window_Frame.new(x, y, w, h)
     @name_window_frame.z = self.z + 1
     x = self.x + off_x + 4
     y = self.y + off_y
     @name_window_text   = Air_Text.new(x, y, name_text, color)
     @name_window_text.z = self.z + 2
  end
end
 
reset_window
 
if $game_temp.choice_max > 0
  @item_max = $game_temp.choice_max
  self.active = true
  self.index = 0
end
 
if $game_temp.num_input_variable_id > 0
  digits_max = $game_temp.num_input_digits_max
  number = $game_variables[$game_temp.num_input_variable_id]
  @input_number_window = Window_InputNumber.new(digits_max)
  @input_number_window.number = number
  @input_number_window.x = self.x + 8
  @input_number_window.y = self.y + $game_temp.num_input_start * 32
end
end
 
#--------------------------------------------------------------------------
 
def update
 
super
 
 
    
if @fade_in
  self.contents_opacity += 24
  if @input_number_window != nil
     @input_number_window.contents_opacity += 24
  end
  if self.contents_opacity == 255
     @fade_in = false
  end
  return
end
@now_text = nil if @now_text == ""
 
if @now_text != nil and @mid_stop == false
  if @write_wait > 0
     @write_wait -= 1
     return
  end
  text_not_skip = LETTER_BY_LETTER_MODE
  while true
     @max_x = @x if @max_x < @x
     @max_y = @y if @max_y < @y
     if (c = @now_text.slice!(/./m)) != nil
        if c == "\000"
           c = "\\"
        end
       
        if c == "\001"
           @now_text.sub!(/\[([0123456789ABCDEF#]+)\]/, "")
           temp_color = $1
           color = temp_color.to_i
           leading_x = temp_color.to_s.slice!(/./m)
           if leading_x == "#"
              self.contents.font.color = hex_color(temp_color)
              next
           end
           if color >= 0 and color <= 7
              self.contents.font.color = text_color(color)
           end
           next
        end
 
        if c == "\002"
           if @gold_window == nil and @popchar <= 0
              @gold_window = Window_Gold.new
              @gold_window.x = 560 - @gold_window.width
              if $game_temp.in_battle
                 @gold_window.y = 192
              else
                 @gold_window.y = self.y >= 128 ? 32 : 384
              end
              @gold_window.opacity = self.opacity
              @gold_window.back_opacity = self.back_opacity
           end
           c = ""
        end
 
        if c == "\003"
           @now_text.sub!(/\[([0-9]+)\]/, "")
           speed = $1.to_i
           if speed >= 0 and speed <= 19
              @write_speed = speed
           end
           c = ""
        end
 
        if c == "\004"
           @now_text.sub!(/\[(.*?)\]/, "")
           buftxt = $1.dup.to_s
           if buftxt.match(/\//) == nil and buftxt != "" then
              $soundname_on_speak = "Audio/SE/" + buftxt
           else
              $soundname_on_speak = buftxt.dup
           end
           c = ""
        elsif c == "\004"
           c = ""
        end
       
        if c == "\005"
           @write_wait += 5
           c = ""
        end
       
        if c == "\006"
           @write_wait += 20
           c = ""
        end
       
        if c == "\019"
           text_not_skip = false
           c = ""
        end
       
        if c == "\031"
           text_not_skip = true
           c = ""
        end
       
        if c == "\020"
           @mid_stop = true
           c = ""
        end
       
        if c == "\021"
           terminate_message
           return
        end
       
        if c == "\023"
           @indent = @x
           c = ""
        end
 
        if c == "\024"
           @now_text.sub!(/\[([0-9]+)\]/, "")
           @opacity = $1.to_i
           color = self.contents.font.color
           self.contents.font.name = $ams.font_type
           self.contents.font.size = $ams.font_size
           self.contents.font.color = Color.new(color.red, color.green, color.blue, color.alpha * @opacity / 255)
           c = ""
        end
 
        if c == "\025"
           @now_text.sub!(/\[([0-9]+)\]/, "")
           self.contents.font.size = [[$1.to_i, 6].max, 32].min
           c = ""
        end
 
        if c == "\026"
           @now_text.sub!(/\[([0-9]+)\]/, "")
           @x += $1.to_i
           c = ""
        end
       
        if c == "\027"
           @now_text.sub!(/\[(.*?)\]/, "")
           @x += ruby_draw_text(self.contents, @x, @y * line_height + (line_height - self.contents.font.size), $1, @opacity)
           if $soundname_on_speak != ""
              Audio.se_play($soundname_on_speak)
           end
        c = ""
        end
 
        if c == "\030"
           @now_text.sub!(/\[(.*?)\]/, "")
           self.contents.blt(@x , @y * line_height + 8, RPG::Cache.icon($1), Rect.new(0, 0, 24, 24))
           if $soundname_on_speak != ""
              Audio.se_play($soundname_on_speak)
           end
           @x += 24
           c = ""
        end
 
        if c == "\n"
           @lines += 1
           @y += 1
           @x = 0 + @indent + @face_indent
           if @lines >= $game_temp.choice_start
              @x = 8 + @indent + @face_indent
              @cursor_width = @max_choice_x
           end
           c = ""
        end
       
        if c == "\022"
           @now_text.sub!(/\[([0-9]+)\]/, "")
           @x += gaiji_draw(4 + @x, @y * line_height + (line_height - self.contents.font.size), $1.to_i)
           c = ""
        end
       
        #NEW
        #Dubealex's Text Skip On/OFF Command
          if c == "\100"
              if @alex_skip==false
                   @alex_skip=true
              else
                 @alex_skip=false
              end
             c = ""
          end   
          #end of new command
                                                    
        if c != ""
           self.contents.draw_text(0+@x, 32 * @y, 40, 32, c)
           @x += self.contents.text_size(c).width
           if $soundname_on_speak != "" then
              Audio.se_play($soundname_on_speak)
           end
        end
       
  #New
    #++Edit
    #Shows Icon and Weapon/Armour and Item name use \ow[i], \oa[i], \oi[i]
    
        # If \oa[n]
     if c == "\014"
        @now_text.sub!(/\[([0-9]+)\]/, "")
        index = $1.to_i
        @now_text.sub!("   ", " ")
        item = $data_armors[index]
        # draw the icon
        icon = RPG::Cache.icon(item.icon_name)
        line = self.contents.text_size("dj").height
        self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
        @x += 24
 
        # go to next text
        return
     end
     #++Edit
     # If \oi[n]
     if c == "\015"
        @now_text.sub!(/\[([0-9]+)\]/, "")
        index = $1.to_i
        @now_text.sub!("   ", " ")
        item = $data_items[index]
        # draw the icon
        icon = RPG::Cache.icon(item.icon_name)
        line = self.contents.text_size("dj").height
        self.contents.blt(@x + 4, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
        @x += 24
 
        # go to next text
        return
     end
     #++Edit
     # If \os[n]
     if c == "\016"
        @now_text.sub!(/\[([0-9]+)\]/, "")
        index = $1.to_i
        @now_text.sub!("   ", " ")
        item = $data_skills[index]
        # draw the icon
        icon = RPG::Cache.icon(item.icon_name)
        line = self.contents.text_size("dj").height
        self.contents.blt(@x + 2, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
        @x += 24
 
        # go to next text
        return
     end
     #++Edit
     # If \ow[n]
     if c == "\017"
        @now_text.sub!(/\[([0-9]+)\]/, "")
        index = $1.to_i
        @now_text.sub!("   ", " ")
        item = $data_weapons[index]
        # draw the icon
        icon = RPG::Cache.icon(item.icon_name)
        line = self.contents.text_size("dj").height
        self.contents.blt(@x + 2, (@y * line) + 4, icon, Rect.new(0, 0, 24, 24))
        @x += 24
       
        # go to next text
        return
     end
 
       
#SKIP_TEXT_CODE
 
# B = Escape, 0 (On The NumPad), X
# C = Enter, Space Bar and C
# A = Shift, Z
 
  if Input.press?(Input::C) # <-- Change the value on that line
     if @alex_skip==false         
     text_not_skip = false
     end
        end
     else
        text_not_skip = true
        break
     end
    
     if text_not_skip
        break
     end
  end
  @write_wait += @write_speed
  return
end
 
if @input_number_window != nil
  @input_number_window.update
  if Input.trigger?(Input::C)
     $game_system.se_play($data_system.decision_se)
     $game_variables[$game_temp.num_input_variable_id] =
        @input_number_window.number
     $game_map.need_refresh = true
     @input_number_window.dispose
     @input_number_window = nil
     terminate_message
  end
  return
end
 
if @contents_showing
  if $game_temp.choice_max == 0
     self.pause = true
  end
 
  if Input.trigger?(Input::B)
     if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
        $game_system.se_play($data_system.cancel_se)
        $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
        terminate_message
     end
  end
 
  if Input.trigger?(Input::C)
     if $game_temp.choice_max > 0
        $game_system.se_play($data_system.decision_se)
        $game_temp.choice_proc.call(self.index)
     end
     if @mid_stop
        @mid_stop = false
        return
     else
        terminate_message
     end
  end
  return
end
 
if @fade_out == false and $game_temp.message_text != nil
  @contents_showing = true
  $game_temp.message_window_showing = true
  refresh
  Graphics.frame_reset
  self.visible = true
  self.contents_opacity = 0
  if @input_number_window != nil
     @input_number_window.contents_opacity = 0
  end
  @fade_in = true
  return
end
 
if self.visible
  @fade_out = true
  self.opacity -= 48
  if self.opacity == 0
     self.visible = false
     @fade_out = false
     $game_temp.message_window_showing = false
  end
  return
end
end
 
#--------------------------------------------------------------------------
 
def get_character(parameter)
 
case parameter
when 0   
  return $game_player
else
  events = $game_map.events
  return events == nil ? nil : events[parameter]
end
end
 
#--------------------------------------------------------------------------
 
def reset_window
 
#MESSAGE_SIZE
#MESSAGE_POSITION
 
if @popchar >= 0
  events = $game_map.events
  if events != nil
     character = get_character(@popchar)
     x = [[character.screen_x -   $ams.event_message_x_ofset - self.width / 2, 4].max, 636 - self.width].min
     y = [[character.screen_y - $ams.event_message_y_ofset - self.height, 4].max, 476 - self.height].min
     self.x = x
     self.y = y
  end
elsif @popchar == -1
  self.x = -4
  self.y = -4
  self.width = 648
  self.height = 488
else
  if $game_temp.in_battle
     self.y = 16
  else
     case $game_system.message_position
     when 0   
        self.y = $ams.message_y_top
     when 1   
        self.y = $ams.message_y_middle
     when 2   
        self.y = $ams.message_y_bottom
     end
     self.x = $ams.message_x
     if @face_file == nil
        self.width = $ams.message_width
        self.x = $ams.message_x
     else
        if self.width <= 600
           self.width = 600
           self.x -=60
          end
     end
     self.height = $ams.message_height
  end
end
self.contents = Bitmap.new(self.width - 32, self.height - 32)
self.contents.font.color = text_color($ams.message_box_text_color)
self.contents.font.name = $ams.font_type
 self.contents.font.size = $ams.font_size
if @face_file != nil
  self.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
end
if @popchar == -1
  self.opacity = 255
  self.back_opacity = 0
elsif $game_system.message_frame == 0
  self.opacity = 255
  self.back_opacity = $ams.message_box_opacity
else
  self.opacity = 0
  self.back_opacity = $ams.message_box_opacity
end
end
 
#--------------------------------------------------------------------------
 
def gaiji_draw(x, y, num)
 
if @gaiji_cache == nil
  return 0
else
  if @gaiji_cache.width < num * 24
     return 0
  end
 
  if self.contents.font.size >= 20 and self.contents.font.size <= 24
     size = 24
  else
     size = self.contents.font.size * 100 * 24 / 2200
  end
 
  self.contents.stretch_blt(Rect.new(x, y, size, size), @gaiji_cache, Rect.new(num * 24, 0, 24, 24))
 
  if $soundname_on_speak != "" then
     Audio.se_play($soundname_on_speak)
  end
  return size
end
end
 
#--------------------------------------------------------------------------
 
def line_height
return 32
 
if self.contents.font.size >= 20 and self.contents.font.size <= 24
  return 32
else
  return self.contents.font.size * 15 / 10
end
end
 
#--------------------------------------------------------------------------
 
def ruby_draw_text(target, x, y, str,opacity)
 
sizeback = target.font.size
target.font.size * 3 / 2 > 32 ? rubysize = 32 - target.font.size : rubysize = target.font.size / 2
rubysize = [rubysize, 6].max
opacity = [[opacity, 0].max, 255].min
split_s = str.split(/,/)
split_s[0] == nil ? split_s[0] = "" : nil
split_s[1] == nil ? split_s[1] = "" : nil
 
height = sizeback + rubysize
width   = target.text_size(split_s[0]).width
 
target.font.size = rubysize
ruby_width = target.text_size(split_s[1]).width
target.font.size = sizeback
 
buf_width = [target.text_size(split_s[0]).width, ruby_width].max
 
width - ruby_width != 0 ? sub_x = (width - ruby_width) / 2 : sub_x = 0
 
if opacity == 255
  target.font.size = rubysize
  target.draw_text(x + sub_x, y - target.font.size, target.text_size(split_s[1]).width, target.font.size, split_s[1])
  target.font.size = sizeback
  target.draw_text(x, y, width, target.font.size, split_s[0])
  return width
else
  if @opacity_text_buf.width < buf_width or @opacity_text_buf.height < height
     @opacity_text_buf.dispose
     @opacity_text_buf = Bitmap.new(buf_width, height)
  else
     @opacity_text_buf.clear
  end
  @opacity_text_buf.font.size = rubysize
  @opacity_text_buf.draw_text(0 , 0, buf_width, rubysize, split_s[1], 1)
  @opacity_text_buf.font.size = sizeback
  @opacity_text_buf.draw_text(0 , rubysize, buf_width, sizeback, split_s[0], 1)
  if sub_x >= 0
     target.blt(x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
  else
     target.blt(x + sub_x, y - rubysize, @opacity_text_buf, Rect.new(0, 0, buf_width, height), opacity)
  end
  return width
end
end
 
#--------------------------------------------------------------------------
 
def convart_value(option, index)
option == nil ? option = "" : nil
option.downcase!
 
case option
when "i"
  unless $data_items[index].name == nil
     r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name)
  end
when "w"
  unless $data_weapons[index].name == nil
     r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
  end
when "a"
  unless $data_armors[index].name == nil
     r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
  end
when "s"
  unless $data_skills[index].name == nil
     r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)
  end
else
  r = $game_variables[index]
end
 
r == nil ? r = "" : nil
return r
end
 
#--------------------------------------------------------------------------
 
def dispose
terminate_message
 
if @gaiji_cache != nil
  unless @gaiji_cache.disposed?
     @gaiji_cache.dispose
  end
end
 
unless @opacity_text_buf.disposed?
  @opacity_text_buf.dispose
end
 
$game_temp.message_window_showing = false
if @input_number_window != nil
  @input_number_window.dispose
end
super
end
 
 
 
#--------------------------------------------------------------------------
 
def update_cursor_rect
if @index >= 0
  n = $game_temp.choice_start + @index
  self.cursor_rect.set(8 + @indent + @face_indent, n * 32, @cursor_width, 32)
else
  self.cursor_rect.empty
end
end
end
#=========================================
# ? CLASS Window_Message Ends
#=========================================
 
 
#=========================================
# ? Class Window_Frame Begins
#=========================================
class Window_Frame < Window_Base
 
def initialize(x, y, width, height)
super(x, y, width, height)
self.windowskin = RPG::Cache.windowskin($ams.name_box_skin)
self.contents = nil
end
 
#--------------------------------------------------------------------------
 
def dispose
super
end
end
#=========================================
# ? CLASS Window_Frame Ends
#=========================================
 
 
#=========================================
# ? CLASS Game_Map Additional Code Begins
#=========================================
class Game_Map
 
#Dubealex's Addition (from XRXS) to show Map Name on screen
def name
 $map_infos[@map_id]
end
end
#=========================================
# ? CLASS Game_Map Additional Code Ends
#=========================================
 
 
#=========================================
# ? CLASS Scene_Title Additional Code Begins
#=========================================
class Scene_Title
 
#Dubealex's Addition (from XRXS) to show Map Name on screen
 $map_infos = load_data("Data/MapInfos.rxdata")
 for key in $map_infos.keys
    $map_infos[key] = $map_infos[key].name
 end
 
 #Dubealex's addition to save data from the AMS in the save files
 $ams = AMS.new
 
end
#=========================================
# ? CLASS Scene_Title Additional Code Ends
#=========================================
 
 
#=========================================
# ? CLASS Window_Base Additional Code Begins
#=========================================
class Window_Base < Window
 
#Dubealex Addition (from Phylomorphis) to use HTML Hex Code Colors
def hex_color(string)
  red = 0
  green = 0
  blue = 0
  if string.size != 6
     print("Hex strings must be six characters long.")
     print("White text will be used.")
     return Color.new(255, 255, 255, 255)
  end
  for i in 1..6
     s = string.slice!(/./m)
     if s == "#"
        print("Hex color string may not contain the \"#\" character.")
        print("White text will be used.")
        return Color.new(255, 255, 255, 255)
     end
     value = hex_convert(s)
     if value == -1
        print("Error converting hex value.")
        print("White text will be used.")
        return Color.new(255, 255, 255, 255)
     end
     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, 255)
end
 
#--------------------------------------------------------------------------
 
def hex_convert(character)
  case character
    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
    end
  return -1
end
end
#=========================================
# ? CLASS Window_Base Additional Code Ends
#=========================================
 
 
#=========================================
# ? Class Air_Text Begins
#=========================================
class Air_Text < Window_Base
 
def initialize(x, y, designate_text, color=0)
 
super(x-16, y-16, 32 + designate_text.size * 12, 56)
self.opacity         = 0
self.back_opacity = 0
self.contents = Bitmap.new(self.width - 32, self.height - 32)
w = self.contents.width
h = self.contents.height
self.contents.font.name = $ams.name_font_type
self.contents.font.size = $ams.name_font_size
self.contents.font.color = text_color(color)
self.contents.draw_text(0, 0, w, h, designate_text)
end
 
#--------------------------------------------------------------------------
 
def dispose
self.contents.clear
super
end
end
#==========================================
# ? CLASS Air_Text   Ends
#==========================================
 
 
#===================================================
# ? CLASS Scene_Save Additional Code Begins
#===================================================
class Scene_Save < Scene_File
 
 alias ams_original_write_save_data write_save_data
 
 def write_save_data(file)
    ams_original_write_save_data(file)
    Marshal.dump($ams, file)
 end
 
end
#===================================================
# ? CLASS Scene_Save Additional Code Ends
#===================================================
 
 
#===================================================
# ? CLASS Scene_Load Additional Code Begins
#===================================================
class Scene_Load < Scene_File
 
 alias ams_original_read_save_data read_save_data
 
 def read_save_data(file)
    ams_original_read_save_data(file)
    $ams         = Marshal.load(file)
 end
 
endInstructions
Place above the main. and away you go =]
Compatibility
at the moment there are no known compatibiltiy problems
FAQ
Q: How do i change the face picture so that it actually fits in the window?
A:Find this lineself.contents.blt(16, 16, RPG::Cache.picture(@face_file), Rect.new(0, 0, 96, 96))
and edit this part Rect.new(0, 0, 96, 96) to say Rect.new(0, 0, 150,150) to make it bigger
Credits and Thanks
Credits and thanks go to Dubealex, for making this script all i've done is added some extra features.
Notes
If you would like me to added any more features..please just ask and i'll see what i can do =]

 
 
 AMS - Advanced Message Script - R4 (LegacyX Edit)
 AMS - Advanced Message Script - R4 (LegacyX Edit)
 

 

