#============================================================================== # # ?¥ Yami Engine Ace - Pop Message # -- Last Updated: 2012.06.07 # -- Level: Normal # -- Requires: n/a # #============================================================================== $imported = {} if $imported.nil? $imported["YSE-PopMessage"] = true #============================================================================== # ?¥ Updates # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 2012.06.07 - Fixed Compatible: YEA - Ace Message System. # 2012.05.11 - Fixed Message Position. # - Remove Requirement: YSE - Fix Events Order. # 2012.05.07 - Fixed Face position. # - Added Requirement: YSE - Fix Events Order. # 2012.04.06 - You can change Bubble Tag filename. # 2012.03.28 - Fixed Default Message Position and Sizes. # 2012.03.27 - Fixed Default Message. # 2012.03.27 - Added Bubble Tag. # 2012.03.25 - Fixed Escape Message. # 2012.03.24 - Fixed Battle Message. # 2012.03.24 - Rewrote script. # #============================================================================== # ?¥ Instructions # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # To install this script, open up your script editor and copy/paste this script # to an open slot below ?¥ Materials/‘f?T but above ?¥ Main. Remember to save. # # ----------------------------------------------------------------------------- # Message Window text Codes - These go inside of your message window. # ----------------------------------------------------------------------------- # Position: Effect: # \bm[x] - Sets Message Window position to event x. *Note # \cbm - Cancel bubble message. # # *Note: Set to 0 to sets position to Game Player. # #============================================================================== # ?¥ Compatibility # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that # it will run with RPG Maker VX without adjusting. # #============================================================================== module YSE module POP_MESSAGE #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Visual Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- LIMIT = { # Start. :limit_width => 0, # Set to 0 to disable limit. :limit_line => 6, # Set to 0 to disable limit. } # End. POSITION = { # Start. :x_buffer => 0, :y_buffer => -36, :face_x_buffer => 8, :face_y_buffer => 24, :tag_y_buffer => -6, :name_x_buffer => 112, # Require YEA - Message System. } # End. EFFECT = { # Start. :fade_face => true, :move_face => true, :use_bubble_tag => true, :bubble_tag_name => "BubbleTag", } # End. end end #============================================================================== # ?¥ Editting anything past this point may potentially result in causing # computer damage, incontinence, explosion of user's head, coma, death, and/or # halitosis so edit at your own risk. #============================================================================== #============================================================================== # ?? Spriteset_Map #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # public instance variables #-------------------------------------------------------------------------- attr_accessor :character_sprites end # Spriteset_Map #============================================================================== # ?? Window_Message_Face #============================================================================== class Window_Message_Face < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize super(0, 0, 120, 120) self.opacity = 0 @face_name = "" @face_index = 0 @move_x = 0 close end #-------------------------------------------------------------------------- # message_window= #-------------------------------------------------------------------------- def message_window=(window) @message_window = window end #-------------------------------------------------------------------------- # set_face #-------------------------------------------------------------------------- def set_face contents.clear return unless @message_window if !$game_message.face_name.empty? draw_face($game_message.face_name, $game_message.face_index, 0, 0) set_position show_face else hide_face end end #-------------------------------------------------------------------------- # set_position #-------------------------------------------------------------------------- def set_position return unless @message_window self.x = @message_window.x self.y = @message_window.y - 96 self.x += YSE::POP_MESSAGE::POSITION[:face_x_buffer] self.y += YSE::POP_MESSAGE::POSITION[:face_y_buffer] self.y += (@message_window.real_lines - 1) * 24 self.z = @message_window.z + 1 if (@face_name != $game_message.face_name || @face_index != $game_message.face_index) if YSE::POP_MESSAGE::EFFECT[:move_face] @move_x = 30 self.x -= 30 end @face_name = $game_message.face_name @face_index = $game_message.face_index self.contents_opacity = 0 if YSE::POP_MESSAGE::EFFECT[:fade_face] end end #-------------------------------------------------------------------------- # show_face #-------------------------------------------------------------------------- def show_face open end #-------------------------------------------------------------------------- # hide_face #-------------------------------------------------------------------------- def hide_face contents.clear close end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super self.contents_opacity += 15 if self.contents_opacity < 255 unless @move_x <= 0 self.x += 2 @move_x -= 2 end end end # Sprite_Message_Face #============================================================================== # ?? Window_Message #============================================================================== class Window_Message < Window_Base #-------------------------------------------------------------------------- # new method: face_window= #-------------------------------------------------------------------------- def face_window=(window) @face_window = window end #-------------------------------------------------------------------------- # new method: bubble_tag= #-------------------------------------------------------------------------- def bubble_tag=(sprite) @bubble_tag = sprite end #-------------------------------------------------------------------------- # new method: message_escape_characters_pop_message #-------------------------------------------------------------------------- def message_escape_characters_pop_message(result) result.gsub!(/\eBM\[(\d+)\]/i) { event_pop_message_setup($1.to_i, false) } result.gsub!(/\eBMF\[(\d+)\]/i) { event_pop_message_setup($1.to_i, true) } result.gsub!(/\eCBM/i) { event_pop_message_setup(nil, false) } result end #-------------------------------------------------------------------------- # alias method: convert_escape_characters #-------------------------------------------------------------------------- alias yse_convert_escape_characters_pm convert_escape_characters def convert_escape_characters(text) result = yse_convert_escape_characters_pm(text) result = message_escape_characters_pop_message(result) result end #-------------------------------------------------------------------------- # new method: event_pop_message_setup #-------------------------------------------------------------------------- def event_pop_message_setup(event_id, follower = false) if follower && $game_player.followers[event_id].nil? @event_pop_id = nil @event_pop_follower = false return "" end @event_pop_follower = follower @event_pop_id = event_id return "" end #-------------------------------------------------------------------------- # new method: set_face_position #-------------------------------------------------------------------------- def set_face_position return unless SceneManager.scene_is?(Scene_Map) return unless @event_pop_id return unless @face_window contents.clear @face_window.set_face return unless $imported["YEA-MessageSystem"] return if @face_window.close? #@name_window.x = self.x + YSE::POP_MESSAGE::POSITION[:face_x_buffer] + YSE::POP_MESSAGE::POSITION[:name_x_buffer] if (@name_position == 1 || @name_position == 2) end #-------------------------------------------------------------------------- # alias method: new_page #-------------------------------------------------------------------------- alias window_message_new_page_pm_yse new_page def new_page(text, pos) window_message_new_page_pm_yse(text, pos) set_face_position end #-------------------------------------------------------------------------- # alias method: close #-------------------------------------------------------------------------- alias pop_message_close close def close pop_message_close return unless SceneManager.scene_is?(Scene_Map) return unless @event_pop_id @event_pop_id = nil @event_pop_follower = false @face_window.hide_face return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag] @bubble_tag.visible = false if @bubble_tag end #-------------------------------------------------------------------------- # alias method: open_and_wait #-------------------------------------------------------------------------- alias pop_message_open_and_wait open_and_wait def open_and_wait pop_message_open_and_wait return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag] @bubble_tag.visible = true if @event_pop_id && @bubble_tag end #-------------------------------------------------------------------------- # alias method: process_all_text #-------------------------------------------------------------------------- alias pop_message_process_all_text process_all_text def process_all_text @event_pop_id = nil convert_escape_characters($game_message.all_text) update_placement adjust_pop_message($game_message.all_text) pop_message_process_all_text end #-------------------------------------------------------------------------- # alias method: update_placement #-------------------------------------------------------------------------- alias event_pop_message_update_placement update_placement def update_placement if SceneManager.scene_is?(Scene_Map) if @event_pop_id.nil? fix_default_message event_pop_message_update_placement elsif @event_pop_id == 0 character = $game_player self.y = character.screen_y - self.height + YSE::POP_MESSAGE::POSITION[:y_buffer] self.x = character.screen_x - self.width / 2 + YSE::POP_MESSAGE::POSITION[:x_buffer] fix_position_bubble(character) set_bubble_tag(character) elsif @event_pop_id > 0 hash = @event_pop_follower ? $game_player.followers : $game_map.events character = hash[@event_pop_id] self.y = character.screen_y - self.height + YSE::POP_MESSAGE::POSITION[:y_buffer] self.x = character.screen_x - self.width / 2 + YSE::POP_MESSAGE::POSITION[:x_buffer] fix_position_bubble(character) set_bubble_tag(character) end else event_pop_message_update_placement end end #-------------------------------------------------------------------------- # new method: fix_default_message #-------------------------------------------------------------------------- def fix_default_message self.width = window_width self.height = window_height self.x = 0 @face_window.hide_face if @face_window create_contents return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag] @bubble_tag.visible = false if @bubble_tag end #-------------------------------------------------------------------------- # new method: fix_position_bubble #-------------------------------------------------------------------------- def fix_position_bubble(character) end_x = self.x + self.width end_y = self.y + self.height self.x = 0 if self.x < 0 self.y = character.screen_y if self.y < 0 self.x = Graphics.width - self.width if end_x > Graphics.width self.y = Graphics.height - self.height if end_y > Graphics.height end #-------------------------------------------------------------------------- # new method: set_bubble_tag #-------------------------------------------------------------------------- def set_bubble_tag(character) return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag] return unless @bubble_tag up = self.y == character.screen_y self.y += up ? @bubble_tag.height / 2 : [email]-@bubble_tag.height[/email] / 2 @bubble_tag.x = character.screen_x - @bubble_tag.width / 2 if up @bubble_tag.src_rect.set(0, @bubble_tag.height, @bubble_tag.width, @bubble_tag.height) @bubble_tag.y = self.y - @bubble_tag.height - YSE::POP_MESSAGE::POSITION[:tag_y_buffer] else @bubble_tag.src_rect.set(0, 0, @bubble_tag.width, @bubble_tag.height) @bubble_tag.y = self.y + self.height + YSE::POP_MESSAGE::POSITION[:tag_y_buffer] end end #-------------------------------------------------------------------------- # new method: cal_number_line #-------------------------------------------------------------------------- def cal_number_line(text) result = 0 text.each_line { result += 1 } return result end #-------------------------------------------------------------------------- # new method: cal_width_line #-------------------------------------------------------------------------- def cal_width_line(text) result = 0 text.each_line { |line| result = text_size(line).width if result < text_size(line).width } return result end #-------------------------------------------------------------------------- # alias method: adjust_message_window_size #-------------------------------------------------------------------------- if $imported["YEA-MessageSystem"] alias yse_pop_message_adjust_message_window_size adjust_message_window_size def adjust_message_window_size start_name_window if @event_pop_id return if @event_pop_id yse_pop_message_adjust_message_window_size end end #-------------------------------------------------------------------------- # new method: adjust_pop_message #-------------------------------------------------------------------------- def adjust_pop_message(text = " ") return unless SceneManager.scene_is?(Scene_Map) unless @event_pop_id if $imported["YEA-MessageSystem"] #adjust_message_window_size end return end n_line = cal_number_line(text) n_line = YSE::POP_MESSAGE::LIMIT[:limit_line] if YSE::POP_MESSAGE::LIMIT[:limit_line] > 0 && cal_number_line(text) > YSE::POP_MESSAGE::LIMIT[:limit_line] @real_lines = n_line self.height = fitting_height(n_line) self.width = cal_width_line(text) + 24 self.width += new_line_x if self.width > YSE::POP_MESSAGE::LIMIT[:limit_width] && YSE::POP_MESSAGE::LIMIT[:limit_width] > 0 self.width = YSE::POP_MESSAGE::LIMIT[:limit_width] end create_contents update_placement end #-------------------------------------------------------------------------- # overwrite method: new_line_x #-------------------------------------------------------------------------- def new_line_x if $game_message.face_name.empty? return 0 else result = YSE::POP_MESSAGE::POSITION[:face_x_buffer] p_x = $imported["YEA-MessageSystem"] ? YEA::MESSAGE::FACE_INDENT_X : 112 result += p_x return result end end #-------------------------------------------------------------------------- # new method: real_lines #-------------------------------------------------------------------------- def real_lines @real_lines end end # Window_Message #============================================================================== # ?? Scene_Map #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # alias method: create_message_window #-------------------------------------------------------------------------- alias yse_pm_create_message_window create_message_window def create_message_window yse_pm_create_message_window @face_window = Window_Message_Face.new @face_window.message_window = @message_window if YSE::POP_MESSAGE::EFFECT[:use_bubble_tag] @bubble_tag_sprite = Sprite.new @bubble_tag_sprite.visible = false @bubble_tag_sprite.bitmap = Cache.system(YSE::POP_MESSAGE::EFFECT[:bubble_tag_name]) @bubble_tag_sprite.src_rect.set(0, 0, @bubble_tag_sprite.width, @bubble_tag_sprite.height / 2) @message_window.bubble_tag = @bubble_tag_sprite end @message_window.face_window = @face_window end #-------------------------------------------------------------------------- # alias method: dispose_spriteset #-------------------------------------------------------------------------- alias pop_message_dispose_spriteset dispose_spriteset def dispose_spriteset pop_message_dispose_spriteset return unless @bubble_tag_sprite @bubble_tag_sprite.dispose end end # Scene_Map #============================================================================== # # ?¥ End of File # #==============================================================================
#encoding:utf-8 #============================================================================== # ■ 半身像对话框 by LBQ #------------------------------------------------------------------------------ # 一个简单的半身像对话框罢了= = #------------------------------------------------------------------------------ # ■ 用法一览 # 1:如何将半身像应用到游戏中? # ——如果想要把一个脸图替换成半身像,则需要找到这个脸图的编号,比如说拉尔 # 夫,就是Actor1的编号0,之后去在Graphics/Busts这个文件夹里面拷贝一个 # 叫做Actor1_0的图像,这个图像会被当做半身像替换原有图像。 #============================================================================== $imported ||= {} $imported[:LBQ_Bust]=true module LBQ module Bust FOLDER="Busts" SUB1=[/【/, "\\{\\c[6]-- "] SUB2=[/】/, " --\\c[0]\\}"] TEXT_FOR_NEXT="[next]" TEXT_FOR_END ="[end]" INDENT=175 #半身像的缩进 end end module Cache def self.busts(filename) load_bitmap("Graphics/#{LBQ::Bust::FOLDER}/", filename) end end class Sprite_Bust < Sprite_Base attr_accessor :bust_graphics attr_accessor :status def initialize(vp=nil) super(vp) @bust_graphics=nil @status=:nothing end def slide_in @status=:sliding_in end def slide_out @status=:sliding_out if $game_message.do_not_slide_out @status=:slided_out set_pos end end def set_pos(slide_in=true) self.x=0 - self.bitmap.width self.y=Graphics.height-self.bitmap.height self.x=0 unless slide_in end def set_graphics(bust_graphics) self.bitmap=Cache.busts(bust_graphics) end def update super case @status when :nothing # Do Nothing when :sliding_in #Slide In self.x+=12 if self.x>=0 self.x=0 @status=:slided_in end when :sliding_out self.x-=12 if self.x<= -self.bitmap.width self.x= -self.bitmap.width @status=:slided_out end #Slide Out when :slided_in #Slided in when :slided_out #Sliede out end end end class Game_Message attr_accessor :bust_name attr_accessor :bust attr_accessor :have_bust attr_accessor :do_not_slide_out alias lbq_bust_shot_game_message_init initialize def initialize lbq_bust_shot_game_message_init @bust_name="" @bust=nil @have_bust=false @do_not_slide_out=false end #-------------------------------------------------------------------------- # ● 添加内容 #-------------------------------------------------------------------------- def add(text) new_text=text.gsub(LBQ::Bust::SUB1[0],LBQ::Bust::SUB1[1]) new_text2=new_text.gsub(LBQ::Bust::SUB2[0],LBQ::Bust::SUB2[1]) if new_text2.include? LBQ::Bust::TEXT_FOR_NEXT new_text2.delete!(LBQ::Bust::TEXT_FOR_NEXT) $game_message.do_not_slide_out=true end if new_text2.include? LBQ::Bust::TEXT_FOR_END new_text2.delete!(LBQ::Bust::TEXT_FOR_END) $game_message.do_not_slide_out=false end @texts.push(new_text2) end end class Game_Interpreter alias lbq_bust_shot_command_101 command_101 #-------------------------------------------------------------------------- # ● 显示文字 #-------------------------------------------------------------------------- def command_101 $game_message.bust=nil unless @params[0].empty? if File.exist?("Graphics/#{LBQ::Bust::FOLDER}/#{@params[0]}_#{@params[1]}.png") $game_message.have_bust=true else $game_message.have_bust=false $game_message.bust_name="" end end unless @params[3] == 2 $game_message.have_bust=false end if $game_message.have_bust $game_message.bust_name="#{@params[0]}_#{@params[1]}" $game_message.bust=nil $game_message.bust=Sprite_Bust.new $game_message.bust.set_graphics($game_message.bust_name) $game_message.bust.z=99999 unless $game_message.do_not_slide_out $game_message.bust.set_pos $game_message.bust.slide_in else $game_message.bust.set_pos(false) $game_message.bust.slide_in end end lbq_bust_shot_command_101 if $game_message.have_bust $game_message.bust.slide_out Fiber.yield until $game_message.bust.status==:slided_out end $game_message.have_bust=false $game_message.bust_name="" end alias lbq_bust_int_update update def update lbq_bust_int_update $game_message.bust.update unless $game_message.bust.nil? end end class Window_Message #-------------------------------------------------------------------------- # ● 获取换行位置 #-------------------------------------------------------------------------- def new_line_x value=0 value=112 unless $game_message.face_name.empty? unless $game_message.face_name.empty? && $game_message.bust_name.empty? value=LBQ::Bust::INDENT end return value end end class Window_Message #-------------------------------------------------------------------------- # ● 翻页处理 #-------------------------------------------------------------------------- def new_page(text, pos) contents.clear draw_face($game_message.face_name, $game_message.face_index, 0, 0) if $game_message.bust_name.empty? reset_font_settings pos[:x] = new_line_x pos[:y] = 0 pos[:new_x] = new_line_x pos[:height] = calc_line_height(text) clear_flags end end
QQ图片20161223232835.png (3.95 KB, 下载次数: 25)
QQ图片20161223234558.png (5.77 KB, 下载次数: 31)
class Window_Message def new_line_x return LBQ::Bust::INDENT if !$game_message.bust_name.empty? #如果半身立绘存在就用半身立绘的缩进 return 0 if $game_message.face_name.empty? #如果没有脸图就不用缩进 value = YSE::POP_MESSAGE::POSITION[:face_x_buffer] #以上两种情况都没有,就使用pop message的脸图缩进 value += $imported["YEA-MessageSystem"] ? YEA::MESSAGE::FACE_INDENT_X : 112 return value end end
class Window_Message def new_line_x return LBQ::Bust::INDENT if !$game_message.bust_name.empty? #如果半身立绘存在就用半身立绘的缩进 return 0 if $game_message.face_name.empty? #如果没有脸图就不用缩进 return YSE::POP_MESSAGE::POSITION[:face_x_buffer] + 112#以上两种情况都没有,就使用pop message的脸图缩进 end end
RaidenInfinity 发表于 2016-12-24 00:23
主要冲突的地方在Window_Message类的new_line_x方法。两个脚本都有各自的定义,所以在列表内偏下面的脚本会 ...
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |