RPGツクール素材メモ とかティラノスクリプトの話とか

同人RPGの制作で役立ちそうなスクリプト・プラグイン素材を書き留めておく

ネームポップを改造、イベントの頭上に名前だけじゃなく変数も表示する

*注意:バージョンアップしました 
イベントの頭上に変数だけでなく、アイコンも複数表示 - RGSS3・RPGツクールVXAceメモ


依頼があったので、ひきも記さんのネームポップスクリプトを改造、変数も表示できるようにしてみました。
規約とかは自由なので、お好きにお使い下さい。

http://kirara111.sakura.ne.jp/tukulu/namep_variables.zip

f:id:gamecome:20150120001133j:plain

サンプルプロジェクトを見れば大体使い方が分かると思いますが、
通常のnamepopの書き方の後に@v(変数番号)@と書けば、その番号の中身を表示します。

例:

<namepop 兵数は@v(110)@です>


f:id:gamecome:20150120001348j:plain

またツクールVX系の変数はスクリプトで指定すると任意の文字列を入れられるので、

f:id:gamecome:20150120001425j:plain

状況に合わせて表示名を変える…なんて事も可能です。

f:id:gamecome:20150120001511j:plain

一つ注意なのは、変数に変更を加えただけでは、表示が反映されないこと。
変数操作をした後にはスクリプト
update_namepop
と書いて下さい。そうすると表示が変わります。


一応テキストとしても貼っておきます。。。
[コードを表示する]

#==============================================================================
# ★ 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
変数を表示できるようにしてみました。

変数の値を変えた後は
スクリプトから
update_namepop
と書いて、更新しないと反映されません

=end

#==============================================================================
# □ 設定項目
#==============================================================================

module TMNPOP
  FONT_SIZE = 22          # フォントサイズ
  FONT_OUT_ALPHA = 255    # フォントの縁取り不透明度
end

#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :namepop                  # ポップアップテキスト
  #--------------------------------------------------------------------------
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
  end
  #--------------------------------------------------------------------------
  # ● イベントページの設定をセットアップ
  #--------------------------------------------------------------------------
  alias tmnpop_game_event_setup_page_settings setup_page_settings
  def setup_page_settings
    tmnpop_game_event_setup_page_settings
    namepop_set
  end
  
  def namepop_set
    @namepop = 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
    if @namepop =~ /(\S*?)@[Vv]\((\d+?)\)@(\S*)/
        number = $game_variables[$2.to_i]
        @namepop = $1 + number.to_s + $3
    end    
  end
  
  def update_namepop
    namepop_set
  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
      @namepop = @character.namepop
      start_namepop
    end
  end
  #--------------------------------------------------------------------------
  # ○ namepopの開始
  #--------------------------------------------------------------------------
  def start_namepop
    dispose_namepop
    return if @namepop == "none" || @namepop == nil
    @namepop_sprite = ::Sprite.new(viewport)
    h = TMNPOP::FONT_SIZE + 4
    @namepop_sprite.bitmap = Bitmap.new(h * 10, h)
    @namepop_sprite.bitmap.font.size = TMNPOP::FONT_SIZE
    @namepop_sprite.bitmap.font.out_color.alpha = TMNPOP::FONT_OUT_ALPHA
    @namepop_sprite.bitmap.draw_text(0, 0, h * 10, h, @namepop, 1)
    @namepop_sprite.ox = h * 5
    @namepop_sprite.oy = h
    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.update_namepop
    }
  end
end