| 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. | ||||||||||||||||