display a name above event(npc) and actor(player)
someone have wrote a script like this, but too long and complex, i write a new one that simple to see and simple to use
class Game_Event
attr_reader :name
def initialize
@name = @event.name
end
end
class Game_Player
def name
return $game_party.actors[0].name
end
end
class Sprite_Character < RPG::Sprite
attr_accessor :character
def initialize(viewport, character = nil)
super(viewport)
@character = character
@filename = @character.character_name.to_s
@x_frame = @y_frame = 4
@x_frame = @filename.split(/@/)[1].to_i if @filename.split(/@/)[1].to_i != 0
@y_frame = @filename.split(/@/)[2].to_i if @filename.split(/@/)[2].to_i != 0
@name_spr = Sprite.new
@name_spr.bitmap = Bitmap.new(100,20)
update
end
def update
super
if @tile_id != @character.tile_id or @character_name != @character.character_name or @character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
self.bitmap = RPG::Cache.character(@character.character_name,0) rescue self.bitmap = RPG::Cache.character("",0)
@name_spr.bitmap.clear
@name_spr.bitmap.draw_text(0,0,100,30,@character.name,1)
@cw = bitmap.width / @x_frame
@ch = bitmap.height / @y_frame
self.ox = @cw / 2
self.oy = @ch
end
self.visible = (not @character.transparent)
if @tile_id == 0
sx = @character.pattern * @cw
case @character.direction
when 2
sy = 0 * @ch
when 4
sy = 1 * @ch
when 6
sy = 2 * @ch
when 8
sy = 3 * @ch
when 1
if @y_frame == 8
sy = 4 * @ch
else
sy = 1 * @ch
end
when 3
if @y_frame == 8
sy = 5 * @ch
else
sy = 0 * @ch
end
when 7
if @y_frame == 8
sy = 6 * @ch
else
sy = 3 * @ch
end
when 9
if @y_frame == 8
sy = 7 * @ch
else
sy = 2 * @ch
end
when 5
if @y_frame == 8
sy = 0 * @ch
else
sy = 0 * @ch
end
end
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
@name_spr.x = self.x - @cw/2
@name_spr.y = self.y - @ch - 30
@name_spr.z = self.z
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
end
end
ok, all done, F12 and test.
** this script include
Charset frame change