By: Dubealex, Edited by FF12_master
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
Code:
Â
#===================================================
# ¦ AMS - Advanced Message Script - R4 [Update #2]
#===================================================
# For more infos and update, visit:
# [url=http://www.creationasylum.net]http://www.creationasylum.net[/url] (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
# FF12_Master: 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 FF12_master on RMXP.org
# or Simply Email [email=Rickster090@googlemail.com]Rickster090@googlemail.com[/email]
#
# 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
Â
end
Â
Instructions
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 =]