Ccoa's Faces in Messages script:
This script has several things in different places, so bear with me.  First of all there is no need to make a new class for this.  Now, go to the 'Window_Message' class and press ctrl + a then come back to here, select all of the code below then press ctrl + c.  Go back to you Window_Message and make sure all of it is selected and press ctrl + v.  This will replace your 'Window_Message' with the one below:
#==================================
# Window_Message
#-------------------------------
#  The message window.
#==================================
class Window_Message < Window_Selectable
attr_accessor :autoclosetime
attr_accessor :op
#------------------------------- 
# Object Initialization
#------------------------------- 
def initialize
  super(80, 304, 480, 160)
  self.contents = Bitmap.new(width - 32, height - 32)
  self.visible = false
  self.z = 9998
  @fade_in = false
  @fade_out = false
  @contents_showing = false
  @cursor_width = 0
  @autoclosetime = -1
  @op = 255
  @refreshflag = false
  self.active = false
  self.index = -1
# ***ccoa***
# face for the message box
@face = Sprite.new
end
#-------------------------------
# Garbage Collection
#------------------------------- 
def dispose
  terminate_message
  $game_temp.message_window_showing = false
  if @input_number_window != nil
    @input_number_window.dispose
  end
  super
end
#------------------------------- 
# Message Termination Process
#------------------------------- 
def terminate_message
  self.active = false
  self.pause = false
  self.index = -1
  self.contents.clear
  @contents_showing = false
  if $game_temp.message_proc != nil
    $game_temp.message_proc.call
  end
  $game_temp.message_text = nil
  $game_temp.message_proc = nil
  $game_temp.choice_start = 99
  $game_temp.choice_max = 0
  $game_temp.choice_cancel_type = 0
  $game_temp.choice_proc = nil
  $game_temp.num_input_start = 99
  $game_temp.num_input_variable_id = 0
  $game_temp.num_input_digits_max = 0
  if @gold_window != nil
    @gold_window.dispose
    @gold_window = nil
  end
# ***ccoa***
#if there was a face showing, make it invisible
if $face_showing != nil
   @face.visible = false
end
end
#------------------------------- 
# Refresh
#-------------------------------
def refresh
  self.contents.clear
  self.contents.font.color = normal_color
  self.contents.font.name = "OldEnglish"
  self.contents.font.size = 19
  x = y = 0
  @cursor_width = 0
  @autoclosetime = -1
  @refreshflag = true
  lineheight = 32
  active = ""
  a = ""
  centerflag = false
  rightflag = false
  bannerflag = false
  if $game_temp.choice_start == 0
    x = 8
  end
  if $game_temp.message_text != nil
    text = $game_temp.message_text
    begin
    last_text = text.clone
    text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
    end until text == last_text
    text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
      $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
    end
    text.gsub!(/\\\\/) { "\000" }
    text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
    text.gsub!(/\\[Gg]/) { "\002" }
     text.gsub!(/\\[Ii]\[([0-9]+)\]/) { "\003[#{$1}]" }
    text.gsub!(/\\[Ff]\[([0-9]+)\]/) { "\004[#{$1}]" }
    text.gsub!(/\\[Aa]\[([0-9]+)\]/) { "\005[#{$1}]" }
    text.gsub!(/\\[Xx]/) { "\006" }
    text.gsub!(/\\[Rr]/) { "\007" }
    text.gsub!(/\\[Dd]/) { "\011" }
    text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\023[#{$1}]" }
    text.gsub!(/\\[Bb]/) { "\017" }
    text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\014[#{$1}]" }
    text.gsub!(/\\[Mm]\[([0-9]+)\]/) { "\015[#{$1}]" }
    text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\016[#{$1}]" }
    text.gsub!(/\\[Jj]\[([0-9]+)\]/) { "\013[#{$1}]" }
    text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\021[#{$1}]" }
    text.gsub!(/\\[Kk]\[([0-9]+)\]/) { "\022[#{$1}]" }
    while ((c = text.slice!(/./m)) != nil)
      if c == "\000"
        c = "\\"
      end
      if c == "\001"
        text.sub!(/\[([0-9]+)\]/, "")
        color = $1.to_i
        if color >= 0 and color <= 7
          self.contents.font.color = text_color(color)
        end
        next
      end
      if c == "\002"
        if @gold_window == nil
          @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
        next
      end
        if c == "\003"
        text.sub!(/\[([0-9]+)\]/, "")
        item_sub = $1.to_i
        c = $data_items[item_sub].name
        l = self.contents.text_size(c).width
        draw_item_name($data_items[item_sub], x, y * 32 + 1)
        x = x + l + 24
        next
      end
       if c == "\004"
        text.sub!(/\[([0-9]+)\]/, "")
        fontize = $1.to_i
        case fontize
          when 1
            self.contents.font.name = "OldEnglish"
          when 2
            self.contents.font.name = "OldEnglish"
          when 3
            self.contents.font.name = "OldEnglish"
          when 4
            self.contents.font.name = "OldEnglish"
        end
        next
      end
       if c == "\005"
        text.sub!(/\[([0-9]+)\]/, "")
        @autoclosetime = $1.to_i
        next
      end
      if c == "\006"
        centerflag = true
        next
      end
      if c == "\007"
        rightflag = true
        next
      end
      if c == "\011"
        self.contents.font.name = "OldEnglish"
        self.contents.font.size = 19
        self.contents.font.color = normal_color
        lineheight = 32
        next
      end
      if c == "\014"
        text.sub!(/\[([0-9]+)\]/, "")
        w_sub = $1.to_i
        c = $data_weapons[w_sub].name
        l = self.contents.text_size(c).width
        bitmap = RPG::Cache.icon($data_weapons[w_sub].icon_name)
        self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
        x += 28
        self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
        x = x + l
        next
      end
        if c == "\015"
        text.sub!(/\[([0-9]+)\]/, "")
        a_sub = $1.to_i
        c = $data_armors[a_sub].name
        l = self.contents.text_size(c).width
        bitmap = RPG::Cache.icon($data_armors[a_sub].icon_name)
        self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
        x += 28
        self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
        x = x + l
        next
      end
        if c == "\016"
        text.sub!(/\[([0-9]+)\]/, "")
        @op = $1.to_i
        next
      end
       if c == "\017"
        bannerflag = true
        next
      end
      if c == "\018"
        text.sub!(/\[([0-9]+)\]/, "")
        jump = $1.to_i
        x += jump
        next
      end
        if c == "\021"
        text.sub!(/\[([0-9]+)\]/, "")
        lineheight = $1.to_i
        next
      end
      if c == "\022"
        text.sub!(/\[([0-9]+)\]/, "")
        skill_sub = $1.to_i
        c = $data_skills[skill_sub].name
        l = self.contents.text_size(c).width
        bitmap = RPG::Cache.icon($data_skills[skill_sub].icon_name) 
        self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
        x += 28
        self.contents.draw_text(x+4, 32 * y, l+32, lineheight, c)
        x = x + l
        next
      end
       if c == "\023"
        text.sub!(/\[([0-9]+)\]/, "")
        bigness = $1.to_i
        self.contents.font.size = bigness
        next
      end
      if c == "\n"
        if centerflag == true
          x = 448 - x
          x = x / 2
          self.contents.draw_text(x, 32 * y, 448-x, lineheight, a)
        end
        if rightflag == true
          x = 448 - x
          self.contents.draw_text(x, 32 * y, 448-x, lineheight, a)
        end
        if bannerflag == true
          x = 448 - x
          x = x / 2
          self.contents.draw_text(x, 44, 448-x, lineheight, a)
        end
        a = ""
        centerflag = false
        rightflag = false
        bannerflag = false
        if y >= $game_temp.choice_start
          @cursor_width = [@cursor_width, x].max
        end
        y += 1
        x = 0
        if y >= $game_temp.choice_start
          x = 8
        end
        next
      end
     # ***ccoa***
     #display face?
     if $face_showing != nil
       #draw the face, then add the text to one side of it
       @face.bitmap = RPG::Cache.picture($face_showing)
       @face.x = self.x +10
       @face.y = self.y +10
       @face.z = 9999
       @face.opacity = 100
       @face.visible = true
       if centerflag == false && rightflag == false && bannerflag == false
         self.contents.draw_text(4 + x, 32 * y, 40, lineheight, c)
         x += self.contents.text_size(c).width
       else
         a += c
         x += self.contents.text_size(c).width
       end
     else
        # just put in the text
        if centerflag == false && rightflag == false && bannerflag == false
          self.contents.draw_text(4 + x, 32 * y, 40, lineheight, c)
          x += self.contents.text_size(c).width
        else
          a += c
          x += self.contents.text_size(c).width
        end
      end
    end
  end
  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
#------------------------------- 
# Reset the window in response to changes in the position or
# transparency
#------------------------------- 
def reset_window
  if $game_temp.in_battle
    self.y = 16
  else
    case $game_system.message_position
    when 0
      self.y = 16
    when 1
      self.y = 160
    when 2
      self.y = 304
    end
  end
  if $game_system.message_frame == 0
    self.opacity = 255
  else
    self.opacity = 0
  end
  self.back_opacity = 160
end
#------------------------------- 
# Frame Update
#------------------------------- 
def update
  super
  if @refreshflag && @fade_in == false
    self.contents_opacity = @op
   end
  if @autoclosetime == 0
  @autoclosetime = -1
   terminate_message
end
  if @autoclosetime >= 1
  @autoclosetime -= 1
  end
  if @fade_in
    self.contents_opacity += 24
    if @input_number_window != nil
      @input_number_window.contents_opacity += 24
    end
    if self.contents_opacity >= @op
      @fade_in = false
    end
    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_can  cel_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
      @op = 255
      terminate_message
    end
    return
  end
  if @fade_out == false and $game_temp.message_text != nil
    @contents_showing = true
    $game_temp.message_window_showing = true
    reset_window
    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
#------------------------------- 
# Updates the cursor rectangle.
#-------------------------------
def update_cursor_rect
  if @index >= 0
    n = $game_temp.choice_start + @index
    # ***ccoa***
    # make sure the cursor appears in the correct spot for choice messages
    if $face_showing != nil
      self.cursor_rect.set(7, n * 32, @cursor_width, 32)
    else
      self.cursor_rect.set(8, n * 32, @cursor_width, 32)
    end
  else
    self.cursor_rect.empty
  end
end
end
Now, go to you 'Main' class and add this just after  the begin command:
#Are we showing a face this time?
$face_showing = nil
$showm = Win32API.new 'user32', 'keybd_event', %w(l l l l), ''
and the adding of the script is done.  Now, to be able to use this is tricky.  First, find a picture, i'd say 128x128 pixils at the most, and import it into the 'Pictures' folder in the Resource Manager.  Remember the name of that picture!  Now in an event, to show the picture, put this in a call script function just before the message:
$face_showing = "name of picture"
replace "name of picture" with what ever the picture that you imported's name was and press ok.  Now.  In order to stop showing the picture, you mus add a new command after the message(s) or else you will get the same picture on a different charecters message.  So, once the current character is done speaking, put this in a call script after the message:
$face_showing = nil
That will set the pic showing to none.  remember, you must do this for every picture you show in a message.  With this script, the text goes over the picture so in the opacity setting while importing, make sure to put it at 100 or less, so that the text will show up.
Hosted by www.Geocities.ws

1