#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ¡ß «À«á?«¸?ö·ËÇðã - KGC_DamageAlter ¡ß #_/ ¡Þ Last update : 2006/08/24 ¡Þ #_/---------------------------------------------------------------------------- #_/ «À«á?«¸?ö·ªòËÇð㪷ªÞª¹¡£ #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #============================================================================== # ¡Ú «««¹«¿«Þ«¤«ºú£ÙÍ ¡Ú #============================================================================== module KGC # ¡ß«À«á?«¸?ö·?ßÀ # "Graphics/Pictures/" ª«ªé?ªß?ªà¡£?íåí­àýÕÔʦ¡£ DA_IMG_DAMAGE = "Damage01" # ¡ßüÞÜÖ?ö·?ßÀ DA_IMG_RECOVER = "Damage02" # ¡ß«ß«¹?ßÀ DA_IMG_MISS = "Miss" # ¡ß«¯«ê«Æ«£«««ë?ßÀ DA_IMG_CRITICAL = "Critical" # ¡ßùùÊàÌ° # ÊÀùùªÎ?ö·ªÎÙÚ?ÊàÌ°ªòò¦ïÒ¡£ DA_DIGIT_MARGIN = -8 # ¡ßæÑõó«¿«¤«× # 0..«Ç«Õ«©«ë«È 1..«¹«é«¤«É 2..«º?«à DA_DIRECT_TYPE = 2 # ==== ì¤ù»ªÏ¡¢?ö·?«ß«¹ì¤èâªÎøúãƪËÞÅéÄ ==== # ¡ß«À«á?«¸øúãÆ«Õ«©«ó«È DA_FONT_NAME = "Times New Roman" # ¡ß«À«á?«¸øúãÆ«µ«¤«º DA_FONT_SIZE = 40 # ¡ß«À«á?«¸øúãÆ«Ü?«ë«É DA_FONT_BOLD = true # ¡ß«À«á?«¸øúãÆ«¤«¿«ê«Ã«¯ DA_FONT_ITALIC = false end #¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú¡Ù¡Ú $imported = {} if $imported == nil $imported["DamageAlter"] = true #============================================================================== # ¡á RPG::Sprite #============================================================================== class RPG::Sprite #------------------------------------------------------------------------ # ¡Ü «ª«Ö«¸«§«¯«ÈôøÑ¢ûù #------------------------------------------------------------------------ unless @_initialize_damage_alter alias initialize_KGC_DamageAlter initialize end @_initialize_damage_alter = true def initialize(viewport = nil) initialize_KGC_DamageAlter(viewport) @_damage_duration_2 = 0 end #------------------------------------------------------------------------ # ¡Ü «À«á?«¸«¹«×«é«¤«ÈíÂà÷ #------------------------------------------------------------------------ def damage(value, critical) dispose_damage bitmap = create_damage_bitmap(value, critical) sprite = ::Sprite.new sprite.bitmap = bitmap sprite.ox = bitmap.width / 2 sprite.oy = bitmap.height / 2 sprite.x = self.x sprite.y = self.y - self.oy / 2 sprite.z = 3000 @_damage_duration_2 = 40 if KGC::DA_DIRECT_TYPE == 2 sprite.zoom_x = 0.0 sprite.zoom_y = 5.0 end @_damage_sprite = sprite end #------------------------------------------------------------------------ # ¡Ü «À«á?«¸?ßÀíÂà÷ # value : ?ö· # critical : «¯«ê«Æ«£«««ë«Õ«é«° #------------------------------------------------------------------------ def create_damage_bitmap(value, critical) if value.is_a?(Numeric) # ?ö· dgt_bmp = nil crt_bmp = nil # ?áêêª?ßÀªòö¢Ôð if value < 0 dgt_bmp = RPG::Cache.picture(KGC::DA_IMG_RECOVER) else dgt_bmp = RPG::Cache.picture(KGC::DA_IMG_DAMAGE) end crt_bmp = RPG::Cache.picture(KGC::DA_IMG_CRITICAL) # ?áêÏ»û¡ªòö¢Ôð rect = dgt_bmp.rect.clone rect.width /= 10 # ÙÚ?ñÞÝá dw = rect.width + KGC::DA_DIGIT_MARGIN dh = rect.height + crt_bmp.height dmg_str = value.abs.to_s.scan(/./) dmg_bmp = Bitmap.new(dw * dmg_str.size - KGC::DA_DIGIT_MARGIN, dh) dx = 0 dy = crt_bmp.height # ÙÚ?ËÒã· dmg_str.each { |d| rect.x = d.to_i * rect.width dmg_bmp.blt(dx, dy, dgt_bmp, rect) dx += dw } if critical dmg_bmp.blt((dmg_bmp.width - crt_bmp.width) / 2, 0, crt_bmp, crt_bmp.rect) end return dmg_bmp elsif value == "Miss" # Miss miss = RPG::Cache.picture(KGC::DA_IMG_MISS) dmg_bmp = Bitmap.new(miss.width, miss.height) dmg_bmp.blt(0, 0, miss, miss.rect) return dmg_bmp else # ª½ªÎöâ str = value.to_s bitmap = Bitmap.new(160, 48) bitmap.font.name = KGC::DA_FONT_NAME bitmap.font.size = KGC::DA_FONT_SIZE bitmap.font.bold = KGC::DA_FONT_BOLD bitmap.font.italic = KGC::DA_FONT_ITALIC bitmap.font.color.set(0, 0, 0) bitmap.draw_text(-1, 12-1, 160, 36, str, 1) bitmap.draw_text(+1, 12-1, 160, 36, str, 1) bitmap.draw_text(-1, 12+1, 160, 36, str, 1) bitmap.draw_text(+1, 12+1, 160, 36, str, 1) bitmap.font.color.set(255, 255, 255) bitmap.draw_text(0, 12, 160, 36, str, 1) return bitmap end end #------------------------------------------------------------------------ # ¡Ü «¨«Õ«§«¯«ÈøúãÆñé÷÷ïÒ #------------------------------------------------------------------------ unless @_effect_damage_alter alias effect_KGC_DamageAlter? effect? end @_effect_damage_alter = true def effect? return effect_KGC_DamageAlter? || @_damage_duration_2 > 30 end #------------------------------------------------------------------------ # ¡Ü ÌÚãæ #------------------------------------------------------------------------ unless @_update_damage_alter alias update_KGC_DamageAlter update end @_update_damage_alter = true def update update_KGC_DamageAlter if @_damage_duration_2 > 0 && @_damage_sprite != nil @_damage_duration_2 -= 1 damage_direct(@_damage_sprite, @_damage_duration_2) if @_damage_duration_2 <= 0 dispose_damage end else @_damage_duration_2 = 0 end end #------------------------------------------------------------------------ # ¡Ü «À«á?«¸æÑõó #------------------------------------------------------------------------ def damage_direct(sprite, duration) case KGC::DA_DIRECT_TYPE when 0 # «Ç«Õ«©«ë«È damage_direct_default(sprite, duration) when 1 # «¹«é«¤«É damage_direct_slide(sprite, duration) when 2 # «º?«à damage_direct_zoom(sprite, duration) end end #------------------------------------------------------------------------ # ¡Ü «À«á?«¸æÑõó : «Ç«Õ«©«ë«È #------------------------------------------------------------------------ def damage_direct_default(sprite, duration) sprite.x = self.x if duration > 27 sprite.y -= [(duration - 33) / 2 + 1, 1].max end sprite.opacity = 256 - (12 - duration) * 32 end #------------------------------------------------------------------------ # ¡Ü «À«á?«¸æÑõó : «¹«é«¤«É #------------------------------------------------------------------------ def damage_direct_slide(sprite, duration) sprite.x = self.x sprite.y -= 1 sprite.opacity = 256 - (12 - duration) * 32 end #------------------------------------------------------------------------ # ¡Ü «À«á?«¸æÑõó : «º?«à #------------------------------------------------------------------------ def damage_direct_zoom(sprite, duration) sprite.x = self.x case duration when 39 sprite.zoom_x = 0.1 sprite.zoom_y = 4.6 when 30..38 sprite.zoom_x += 0.1 sprite.zoom_y -= 0.4 when 1..10 sprite.zoom_x += 0.1 sprite.zoom_y -= 0.1 when 0 sprite.zoom_x = 1.0 sprite.zoom_y = 1.0 end sprite.opacity = 256 - (12 - duration) * 32 end end