메시지

N.A.S.T.Y. Text Pop Over Events

by Mimesis posted Apr 08, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

font.png

폰트,크기,색,위치까지 설정 가능한 만능 글짜띄우기 스크립트입니다.

액알이나 기타 시뮬에 도움이 많이 될 것 같네요 ㅎㅎ

 

http://forums.rpgmakerweb.com/index.php?/topic/576-nasty-text-pop-over-events/<원본링크

 

스크립트를 제작해주신  Nelderson님께 깊은 감사를 드립니다.

 

#===============================================================================
#       N.A.S.T.Y. Text Pop Over Events
#      Nelderson's Awesome Scripts To You
#
# By: Nelderson
# Last Updated: 3/18/20112
#
# Version 1.0 - 3/17/2012
#
#===============================================================================
#
# Update History:
# - Version 1.0  - Initial release, 1st Resource Script for rpgmakervxace.net
#===============================================================================
# *Features:
# - This script creates text above an event or the player on a map

# *Initial Setup
# - This script has a small setup section to define a few Defaults when
#   text is first put up above an event's head:

# DEF_TEXT_COLOR - Is the default text color when not defined in the
#      script call. When you pick a color you have to use
#      the form:
#
#    Color.new(r,g,b,a) - Where r = red, g = green,
#          b = blue, and a = alpha
#
# DEF_TEXT_SIZE - This is the default text font size, pretty easy here.
#
# DEF_TEXT_FONT - This is the name of the default font that'll be used
#     for text pops that don't specify one in the script call
#
# *Script Call:
#
# - nel_textpop(:attribute => value,
#      :attribute2 => value,
#      :attribute3: => value,
#      )
#
#   ** Where :attributes can be any one of the following:
#
#    :text => Values will be in "quotes", and displays over event
#     (Defaults to "" when not defined)
#  
#    :event_id => The Event ID that will display text.
#     0 = Current Event ID,  -1 = Player,
#       -2 1stFollower, -3 2ndFollower, -4 3rdFollower
#     (Defaults to 0 when not defined)
#
#    :time => This is the time that the text will last in FRAMES.
#     60 FRAMES = 1 second,
#     *Note: Set :time => nil for the text to last forever*
#     (Defaults to nil when not defined)
#   
#    :font => This is the name of the font you want for the text.
#     Values with be in "quotes"
#     (Defaults to DEF_TEXT_FONT when not defined)
#
#    :size => This changes the font size on the text displayed
#      (Defaults to DEF_TEXT_SIZE when not defined)
#
#    :color => This changes the color of the text displayed
#     Values need to be => Color.new(r,g,b,a)
#    (Defaults to DEF_TEXT_COLOR when not defined)
#
#    :bold => This makes the displayed text bold
#       Values need to be => true or false
#    (Defaults to false when not defined)
#   
#    :italic => This makes the displayed text italic
#     Values need to be => true or false
#    (Defaults to false when not defined)
#
# *Instructions
#  -You can place the script call nel_textpop in any event
#
#  -You don't have to define every attribute, they will automatically
#   go to the defaults to make things easier.
#
# *Sample Call

#   nel_textpop(
#   :text => "I hate you!",
#   :event_id => -1,
#   :bold => true,
#   :italic => true,
#   :time => 120,
#   :font => "Vrinda",
#   :size => 64,
#   :color => Color.new(220,20,60),
#   )
#
#===============================================================================
# Credits:
# -Nelderson, tomoaky, and IceDragon
#===============================================================================
# Based off: RGSS2_namepop Ver0.02
# tomoaky (http://hikimoki.sakura.ne.jp/)
#===============================================================================

module NEL
  #Default text pop font
  DEF_TEXT_FONT = "Myriad"

  #Default text pop font size
  DEF_TEXT_SIZE = 16

  #Default text pop color
  DEF_TEXT_COLOR = Color.new(255,255,255,255)# <== White

end #<=== Don't Touch

#========#======================#====#================================#========#
#--------#       #----# DO NOT EDIT PAST THIS POINT!!! #--------#
#--------# End of Customization #----# Editing will cause death by #--------#
#--------#       #----# Zetu Stabbing your heart </3   #--------#
#========#======================#====#================================#========#

# // 02/03/2012 [
#Collects the hash keys in order, and then passes the values
class Hash
# // IceDragon <=== *The Ultimate in Awesome OTL
  def get_values(*args)
 args.collect {|a|self[a]}
  end
end 
# // 02/03/2012 ]

class Game_Interpreter
  include NEL
  #IceDragon helped make this script call easier with awesomeness...Thanks Icy!
  def nel_textpop(*args)
 if(args[0].is_a?(Hash))
   text, ev_id, time, size, color, font, bold, ital = args[0].get_values(:text,:event_id,:time,:size,:color,:font,:bold,:italic)
 else
   text, ev_id, time, size, color, font, bold, ital = *args
 end
 char = nel_get_character(ev_id || 0)
 return unless(char)
 char.namepop_size = size  || DEF_TEXT_SIZE
 char.namepop_color= color || DEF_TEXT_COLOR
 char.namepop_time = time  || nil
 char.namepop   = text  || ""
 char.namepop_font = font || DEF_TEXT_FONT
 char.namepop_bold = !!bold # // Convert to Bool
 char.namepop_ital = !!ital
 char.textpop_flag = true #Forces refresh
  end

  #--------------------------------------------------------------------------
  # *New Method: nel_get_character
  #
  # Instead of original get_character, this include Followers in the argument
  #--------------------------------------------------------------------------
  def nel_get_character(param)

 if $game_party.in_battle
   nil
 elsif param < 0
   case param
   when -1; return $game_player
   else; return $game_player.followers[(param + 2) * (-1)]
   end
 else
   events = same_map? ? $game_map.events : {}
   events[param > 0 ? param : @event_id]
 end
  end
  #--------------------------------------------------------------------------
end
#==============================================================================
# ¡ Game_Character
#==============================================================================
class Game_Character
  #--------------------------------------------------------------------------
  # œ œöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
  #--------------------------------------------------------------------------
  attr_accessor :namepop    
  attr_accessor :namepop_size
  attr_accessor :namepop_color
  attr_accessor :namepop_time
  attr_accessor :namepop_font
  attr_accessor :namepop_bold
  attr_accessor :namepop_ital
  attr_accessor :textpop_flag #Instant update if script call is used

  #--------------------------------------------------------------------------
  alias nel_font_type_init initialize
  def initialize
 @namepop_font = NEL::DEF_TEXT_FONT
 @namepop_bold = false
 @namepop_ital = false
 @textpop_flag = false
 nel_font_type_init
  end
end
#==============================================================================
# ¡ Sprite_Character
#==============================================================================
class Sprite_Character < Sprite_Base
  alias nel_textx_pop_initi initialize
  def initialize(*args)
 @timer = 0
 nel_textx_pop_initi(*args)
  end
  #--------------------------------------------------------------------------
  # œ ‰ð•ú
  #--------------------------------------------------------------------------
  alias tnpop_sprite_character_dispose dispose
  def dispose
 dispose_namepop
 tnpop_sprite_character_dispose
  end
  #--------------------------------------------------------------------------
  # œ ƒtƒœ[ƒ€XV
  #--------------------------------------------------------------------------
  alias tnpop_sprite_character_update update
  def update
 tnpop_sprite_character_update #Original Update
 if @timer > 0 && @character.textpop_flag == false#Skip when script called
   @timer -= 1
   update_text_pos
   if @timer <= 0
  @namepop_sprite.visible = false
  @namepop_sprite.opacity = 255 #Reset opacity just in case
  @namepop_sprite = nil
  @character.namepop = nil
  @namepop = nil
  @tmer_rat = nil #Reset ratio, just to avoid issues
   elsif @timer < 60
  #Fade out text gradually within the last 60 frames
  @tmer_rat ||= 255/@timer
  @namepop_sprite.opacity -= @tmer_rat
   end
 else
   update_namepop
   if @character.textpop_flag == true #If script call
  @namepop = @character.namepop
  start_namepop
   end
 end
  end

  def update_text_pos
 @namepop_sprite.x = x
 @namepop_sprite.y = y - height
 @namepop_sprite.z = z + 200
  end

  #--------------------------------------------------------------------------
  # › namepop‚ÌŠJŽn
  #--------------------------------------------------------------------------
  def start_namepop
 dispose_namepop
 return if @namepop == "none" or @namepop == nil
 @namepop_sprite = ::Sprite.new(viewport)
 b_width = @namepop.size * 8
 b_height = @character.namepop_size + 20
 @namepop_sprite.ox = 80 + (b_width/2)
 @namepop_sprite.oy = 16 + (b_height/2) #16
 @namepop_sprite.bitmap = Bitmap.new(b_width+160, b_height)
  ###Change Font, Font Size, Color, and Time based off Character values##
 @namepop_sprite.bitmap.font.color = @character.namepop_color
 @namepop_sprite.bitmap.font.size = @character.namepop_size
 @namepop_sprite.bitmap.font.name = [@character.namepop_font]
 @namepop_sprite.bitmap.font.bold = @character.namepop_bold
 @namepop_sprite.bitmap.font.italic = @character.namepop_ital
 @namepop_sprite.bitmap.draw_text(0, 0, b_width+160, b_height, @namepop, 1)
 @namepop_time = @character.namepop_time
 update_namepop(@namepop_time) #Pass a timer variable
 @character.textpop_flag = false
  end
  #--------------------------------------------------------------------------
  # › namepop‚ÌXV
  #--------------------------------------------------------------------------
  def update_namepop(time = nil) #Add a timer variable
 if @namepop_sprite != nil
   @namepop_sprite.x = x
   @namepop_sprite.y = y - height
   @namepop_sprite.z = z + 200
   if time != nil
  @timer = time
  @namepop_time = 0
   end
 end
  end
  #--------------------------------------------------------------------------
  # › namepop‚̉ð•ú
  #--------------------------------------------------------------------------
  def dispose_namepop
 if @namepop_sprite != nil
   @namepop_sprite.bitmap.dispose
   @namepop_sprite.dispose
   @namepop_sprite = nil
 end
  end
end