イベントの頭上に文字表示、フォント変更も可能に
前イベントの頭上に変数だけでなく、アイコンも複数表示をアップデート、別フォントを使えるようにしました。
http://kirara111.sakura.ne.jp/tukulu/namep_font.zip
重要な人物だけ文字色を変える、という事に使うと良いかも知れない。
表示の仕方は
<namepop @FONT[番号]@>
と指定すればOK。
(FONT変更は@@の中でのみ有効。なので、必ずV[]と一緒に使う事になるはず)
フォントですが、スクリプト中の”見本のフォント”という所に書いてあるものを、上から順に0,1,2…と指定する事になります。
追加したい場合は見本にならって、, の後に書き加えて下さい
(文字色=Colorを変える位なら簡単ですが、それ以上はツクールヘルプの「Font」項目を見ると分かりやすいかと思います)
やや複雑になったので補足すると、現時点で@@の中で使えるのは
V[番号] →番号の変数表示
I[番号] →番号のアイコン表示
FONT[番号] →番号のフォントに変更
のみ。
またこれらのIやVの中でVを使う(変数の値のアイコンを表示する)のも可能…という事です。
一応テキストとしても貼っておきます。。。
[コードを表示する]
#============================================================================== # ★ RGSS3_ネームポップ Ver1.11 #============================================================================== =begin 元作者:tomoaky webサイト:ひきも記 (http://hikimoki.sakura.ne.jp/) イベント名かイベント実行内容の先頭に『注釈』コマンドで <namepop 文字列> と記述してください。 イベントキャラクターの頭上に文字列が表示されます。 イベント名で指定した場合はイベント全ページに適用されますが、 優先度は注釈コマンドの方が高くなっています。 文字を消したい場合は <namepop none> としてください。 =end =begin 改造:111 webサイト:http://gamecome.hateblo.jp/ 2015.1.18 変数を表示できるようにしてみました。 2015.1.22 アイコンも表示できるように。 @@で包む表記を複数利用できるように。 2015.1.26 フォント変更も利用できるように。 変数の値を変えた後は スクリプトから update_namepop と書いて、更新しないと反映されません =end module TMNPOP def self.create_font(params = nil) font = Font.new() if(params) params.each{|key , value| font.send(key.to_s + "=", value) } end font end end #============================================================================== # □ 設定項目 #============================================================================== module TMNPOP FONT_SIZE = 22 # フォント指定しない場合の、フォントサイズ FONT_OUT_ALPHA = 255 # フォント指定しない場合の、フォントの縁取り不透明度 # # 見本のフォント(それぞれFONT(0)~FONT(4)で指定、追加も可能) # FONT = [ self.create_font() , self.create_font({:out_color => Color.new(255,0,0,128) }) , self.create_font({:size => 32 , :bold => true , :shadow => true}) , self.create_font({:italic => true , :outline => false , :color => Color.new(120,120,255,255) }) , self.create_font({:size => 18 , :out_color => Color.new(255,255,255,128) , :bold => true , :shadow => true , :color => Color.new(0,0,0,255) }) ] end #============================================================================== # ■ Game_Character #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :namepop # ポップアップテキスト attr_accessor :will_namepop_update #-------------------------------------------------------------------------- end #============================================================================== # ■ Game_Event #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● イベントページの設定をクリア #-------------------------------------------------------------------------- alias tmnpop_game_event_clear_page_settings clear_page_settings def clear_page_settings tmnpop_game_event_clear_page_settings @namepop = nil @will_namepop_update = false end #-------------------------------------------------------------------------- # ● イベントページの設定をセットアップ #-------------------------------------------------------------------------- alias tmnpop_game_event_setup_page_settings setup_page_settings def setup_page_settings tmnpop_game_event_setup_page_settings @namepop = nil @namepop_sprite_strs = nil if @list @namepop = $1 if /<namepop\s*(\S+?)>/i =~ @event.name @list.each do |list| if list.code == 108 || list.code == 408 @namepop = $1 if /<namepop\s*(\S+?)>/i =~ list.parameters[0] else break end end end end end #============================================================================== # ■ Sprite_Character #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- alias tmnpop_sprite_character_dispose dispose def dispose dispose_namepop tmnpop_sprite_character_dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias tmnpop_sprite_character_update update def update tmnpop_sprite_character_update update_namepop if @character.namepop != @namepop or @character.will_namepop_update @namepop = @character.namepop @character.will_namepop_update = false start_namepop end end # # @~@と普通の文字とを分割する # def _variables_split(namepop) tag_on = false str = "" strs = [] namepop.each_char do |char| if char == "@" if tag_on str += char char = "" end strs << str.clone str = "" tag_on = !tag_on end str += char end strs << str # 最終の@から行末まで strs.delete("") strs end # # 変数、アイコン変換 # def _namepop_change(str) obj = {:value => str , :font => nil , :type => "String"} if str =~ /@.+?@/ str.upcase! str.delete!("@") # 変数(V[])を先に置換 *但し変数を囲む変数は置換されない str.gsub!(/V\[(\d+?)\]/){|text| $game_variables[$1.to_i] } # 個別タグがまだある場合、反映 str.scan(/((I|V|FONT)\[(\d+?)\])/).each{|tmp| if tmp[1] == "I" obj[:value] = tmp[2].to_i obj[:type] = "Icon" return obj end if tmp[1] == "FONT" obj[:font] = TMNPOP::FONT[tmp[2].to_i] str.sub!(tmp[0] , "") elsif tmp[1] == "V" obj[:value] = $game_variables[tmp[2].to_i] str.sub!(tmp[0] , "") end } obj[:value] = str end obj end #-------------------------------------------------------------------------- # ○ namepopの開始 #-------------------------------------------------------------------------- def start_namepop dispose_namepop return if @namepop == "none" || @namepop == nil @namepop_sprite = ::Sprite.new(viewport) namepop_draws = _variables_split(@namepop) # 分けた文字列(アイコン)を描画 total_width = 0 best_height = 0 tmp_b = Bitmap.new(Graphics.width , Graphics.height) namepop_draws.each{|str| obj = _namepop_change(str) if obj[:type] == "Icon" # アイコン描画 icon_index = obj[:value] icon_bitmap = Cache.system("Iconset") r = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24) tmp_b.blt(total_width, 0, icon_bitmap, r) else # 文字列描画 str = obj[:value] b = Bitmap.new(1, 1) if obj[:font] b.font = obj[:font] else b.font.size = TMNPOP::FONT_SIZE b.font.out_color.alpha = TMNPOP::FONT_OUT_ALPHA end tmp_b.font = b.font r = b.text_size(str) # 縦が中央揃えになるよう調節 height_adjust = best_height == 0 ? 0 : (best_height - r.height) / 2 tmp_b.draw_text(total_width, height_adjust, r.width , r.height , str) end total_width += r.width best_height = r.height if r.height > best_height } # 文字列(アイコン)を結合 @namepop_sprite.bitmap = Bitmap.new(total_width, best_height) @namepop_sprite.bitmap.blt(0, 0, tmp_b , @namepop_sprite.bitmap.rect) @namepop_sprite.ox = @namepop_sprite.width / 2 @namepop_sprite.oy = best_height tmp_b.clear update_namepop end #-------------------------------------------------------------------------- # ○ namepopの更新 #-------------------------------------------------------------------------- def update_namepop if @namepop_sprite @namepop_sprite.x = x @namepop_sprite.y = y - height @namepop_sprite.z = z + 200 end end #-------------------------------------------------------------------------- # ○ namepopの解放 #-------------------------------------------------------------------------- def dispose_namepop if @namepop_sprite @namepop_sprite.bitmap.dispose @namepop_sprite.dispose @namepop_sprite = nil end end end # # ネームポップを更新させる # class Game_Interpreter def update_namepop $game_map.events.each_value{|event| event.will_namepop_update = true } end end