#============================================================================== # ¡á Sprite_Character #------------------------------------------------------------------------------ # ij¸¯ÅÍ Ç¥½Ã¿ëÀÇ ½ºÇÁ¶óÀÌÆ®ÀÔ´Ï´Ù. Game_Character Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ # °¨½ÃÇØ, ½ºÇÁ¶óÀÌÆ® »óŸ¦ ÀÚµ¿ÀûÀ¸·Î º¯È­½Ãŵ´Ï´Ù. #============================================================================== class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # ¡Ü ¿ÀºêÁ§Æ® ÃʱâÈ­ # viewport : ºäÆ÷Æ® # character : ij¸¯ÅÍ (Game_Character) #-------------------------------------------------------------------------- alias shg_sprite_character_quest_mark_initialize initialize def initialize(viewport, character = nil) shg_sprite_character_quest_mark_initialize(viewport, character) @quest_mark = SHG::QUESTMARK::QuestMarkSprite.new(viewport, character) end #-------------------------------------------------------------------------- # ¡Ü Çعæ #-------------------------------------------------------------------------- alias shg_sprite_character_quest_mark_dispose dispose def dispose @quest_mark.dispose unless @quest_mark == nil shg_sprite_character_quest_mark_dispose end #-------------------------------------------------------------------------- # ¡Ü ÇÁ·¹ÀÓ °»½Å #-------------------------------------------------------------------------- alias shg_sprite_character_quest_mark_update update def update shg_sprite_character_quest_mark_update @quest_mark.update unless @quest_mark == nil end end #============================================================================== # ¡á Game_System #------------------------------------------------------------------------------ # ½Ã½ºÅÛ ÁÖÀ§ÀÇ µ¥ÀÌÅ͸¦ Ãë±ÞÇϴ Ŭ·¡½ºÀÔ´Ï´Ù. # Å» °ÍÀ̳ª BGM µîÀÇ °ü¸®µµ ½Ç½ÃÇÕ´Ï´Ù. # ÀÌ Å¬·¡½ºÀÇ ÀνºÅϽº´Â $game_system ·Î ÂüÁ¶µË´Ï´Ù. #============================================================================== class Game_System attr_reader :quest_mark #-------------------------------------------------------------------------- # ¡Ü ÃʱâÈ­ #-------------------------------------------------------------------------- alias shg_game_system_quest_mark_initialize initialize def initialize shg_game_system_quest_mark_initialize @quest_mark = SHG::QUESTMARK::QuestMarkData.new end end #============================================================================== # ¡á module SHG #============================================================================== module SHG begin @@script_list rescue @@script_list = {} end @@script_list["QUEST_MARK"] = {} if @@script_list["QUEST_MARK"] == nil #-------------------------------------------------------------------------- # ¡Ü Äù½ºÆ® ¸¶Å© #-------------------------------------------------------------------------- class QUESTMARK PICTURE_NAME = "quest_mark" # Äù½ºÆ® ¸¶Å© ±×·¡ÇÈ À̸§ OFFSET = [[0, -20], [0, -40]] # ¸¶Å©À§Ä¡ - ±×¸²¾øÀ»°æ¿ì [X,Y], ÀÖÀ» °æ¿ì[X,Y] ANIMATION_USE = true # ¸¶Å©°¡ Ç¥½ÃµÉ °æ¿ì ¾Ö´Ï¸ÞÀÌ¼Ç »ç¿ë ANIMATION_SPEED = 0.5 # ¿òÁ÷ÀÓ ¼Óµµ # ¾Ö´Ï¸ÞÀÌ¼Ç¿ë ¿ÀÇÁ¼Â ¼³Á¤ [X, Y, ANGLE] ANIMATION_OFFSET = [[0, -1],[0, -2],[0, -3],[0, -4],[0, -5],[0, -6], [0, -5],[0, -4],[0, -3],[0, -2],[0, -1]] ANIMATION_FREEZE = [[180, 300], [0, 0, 0]] # ¿òÁ÷ÀÓ ¸ØÃß±â [[ÃÖ¼Ò, ÃÖ´ë]½Ã°£, [offset(x, y, angle)]] #-------------------------------------------------------------------------- # ¡Ü Äù½ºÆ® ¸¶Å© µ¥ÀÌŸ #-------------------------------------------------------------------------- class QuestMarkData attr_reader :data #-------------------------------------------------------------------------- # ¡Ü ÃʱâÈ­ #-------------------------------------------------------------------------- def initialize @data = {} end #-------------------------------------------------------------------------- # ¡Ü Ãëµæ # key : [map_id, event_id] #-------------------------------------------------------------------------- def [](key) @data[key] = -1 if @data[key] == nil return @data[key] end #-------------------------------------------------------------------------- # ¡Ü ¼³Á¤ # key : [map_id, event_id] # value : ±×·¡ÇÈÀÇ index (À½¼öÀÏ °æ¿ì Á¦°Å) #-------------------------------------------------------------------------- def []=(key, value) @data[key] = value end end #-------------------------------------------------------------------------- # ¡Ü ½ºÇÁ¶óÀÌÆ® #-------------------------------------------------------------------------- class QuestMarkSprite < Sprite #-------------------------------------------------------------------------- # ¡Ü ÃʱâÈ­ #-------------------------------------------------------------------------- def initialize(viewport, character) super(viewport) self.ox = 16 self.oy = 32 reset_animation self.bitmap = Bitmap.new(32, 32) @character = character end #-------------------------------------------------------------------------- # ¡Ü °»½Å #-------------------------------------------------------------------------- def update super self.x = @character.screen_x self.y = @character.screen_y if @character.character_name == "" self.x += OFFSET[0][0] self.y += OFFSET[0][1] else self.x += OFFSET[1][0] self.y += OFFSET[1][1] end self.z = @character.screen_z + 10 self.opacity = @character.opacity self.blend_type = @character.blend_type animation_update if ANIMATION_USE key = [$game_map.map_id, @character.id] if @quest_mark_type != $game_system.quest_mark[key] @quest_mark_type = $game_system.quest_mark[key] reset_animation if ANIMATION_USE refresh end end #-------------------------------------------------------------------------- # ¡Ü ¾Ö´Ï¸ÞÀÌ¼Ç °»½Å #-------------------------------------------------------------------------- def animation_update if @animation_delay > 0 @animation_delay -= 1 unless ANIMATION_FREEZE[1] == nil self.x += ANIMATION_FREEZE[1][0] unless ANIMATION_FREEZE[1][0] == nil self.y += ANIMATION_FREEZE[1][1] unless ANIMATION_FREEZE[1][1] == nil self.angle = ANIMATION_FREEZE[1][2] unless ANIMATION_FREEZE[1][2] == nil end else @animation_index += ANIMATION_SPEED if @animation_index >= ANIMATION_OFFSET.size reset_animation end id = @animation_index.to_i self.x += ANIMATION_OFFSET[id][0] unless ANIMATION_OFFSET[id][0] == nil self.y += ANIMATION_OFFSET[id][1] unless ANIMATION_OFFSET[id][1] == nil self.angle = ANIMATION_OFFSET[id][2] unless ANIMATION_OFFSET[id][2] == nil end end #-------------------------------------------------------------------------- # ¡Ü ¾Ö´Ï¸ÞÀÌ¼Ç ¸®¼Â #-------------------------------------------------------------------------- def reset_animation @animation_index = 0.0 @animation_delay = rand(ANIMATION_FREEZE[0][1] - ANIMATION_FREEZE[0][0]) @animation_delay += ANIMATION_FREEZE[0][0] end #-------------------------------------------------------------------------- # ¡Ü ¹¦È­ #-------------------------------------------------------------------------- def refresh self.bitmap.clear return if @quest_mark_type < 0 src_bitmap = Cache.system(PICTURE_NAME) src_rect = Rect.new(@quest_mark_type * 32, 0, 32, 32) self.bitmap.blt(0, 0, src_bitmap, src_rect) end end end end #