Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

AMS - Advanced Message Script - R4 (Edited)

AMS - Advanced Message Script - R4 Update: #2
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 =]
 
This script is fairly good but it's been dropped by the maker. So I would suggest using a different message script solely based on reliability but I will take a look at changes you have made.
 
Umm a few problums... First off you need to add some stuff to download also like for instance Black 3 for the message box and text it would be alot easyer to just put the original download link then under that tell them to replace his script with your's that way we can get all the graphics etc..But besides that it look's pretty good.
 
well Black3 is just the name of the Window skin.. So just change line 83 and 84

@message_box_skin = "Black3" < change to the name of your windowskin #Choose the WindowSkin for the Message Box
@name_box_skin = "Black3" #Choose the WindowSkin for the Name Box

.. .. hope that solves your problem :smile:
 
how do i adjust the face limit size so that i can fit in a larger face or change the position ion which it shows?


I changed the face indent:

Line 74: @x = @face_indent = 170

But the face still gets cut off as it is a size of 120 wide and 90 heigh.

Also If i wanted to change the position where the face shows, which line do i go to change the X & Y position.

Thanks
 
the position.. you just change x and y..

but the as for the indent..im not quitew sure... i'll have a play around and tell you ok . :smile:
 
hum... i'll have a look...ill get right back to you.

Edit:

you could try at line 159 adding.

@Face.x = ?
@Face.y = ?

(? = the number where you want the face to appear..)
please let me know if this works.. if not... ill see what i can do ok ?
 
can you upload it to imagehost.org please..since i cantuse imageshack in school lol ty..

also try using this.

@face_file.x =
@face_file.y =

add before line 166 .. might work.. not 100% sure.

Edit:

hey no problem.. thats why im here after all... im not a great scriupter..but im learning..and it seems to be paying off :smile:

Really important Edit:

I just read over the previous posts...
you want to see a face file you have there allready right..but its too big and gets cut off ?

well go to line 87 and change
@message_height = 160
to
@message_height = 200... (More or less) so that it changes the hieght of the message file to allow your bigger face file to be viewed....Might help ?

Oh and BTW.. the face indent changes how fare away the text is from the face file.. (just to let you know)
 
Face.png

I tryed your sugeestion and i come up with the same error again.
its not the height. its the width. and if i could move the picture from out of the text box all togther is kinda what im getting at. other wise i might just have to go with the good old... show picture at location x= y= .... erase pic 1 lol
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top