XP 스크립트

전투시 대미지를 FF10 스타일로 표시하는 스크립트입니다.


#==============================================================================
# ■ RPG::Sprite
#------------------------------------------------------------------------------
# Change the damage display
#
# By Squall // squall@rmxp.ch
# released on the 30th march at rmxp.org
#==============================================================================

class RPG::Sprite < ::Sprite
  #--------------------------------------------------------------------------
  # ● initialize
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    @_whiten_duration = 0
    @_appear_duration = 0
    @_escape_duration = 0
    @_collapse_duration = 0
    @_damage_durations = []
    @_animation_duration = 0
    @_blink = false
  end
  #--------------------------------------------------------------------------
  # ● dispose
  #--------------------------------------------------------------------------
  def dispose
    dispose_damage(0...@_damage_durations.size)
    dispose_animation
    dispose_loop_animation
    super
  end
  #--------------------------------------------------------------------------
  # ● effect?
  #--------------------------------------------------------------------------
  def effect?
    damage_duration = 0
    for value in @_damage_durations
      damage_duration += value
    end
    @_whiten_duration > 0 or
    @_appear_duration > 0 or
    @_escape_duration > 0 or
    @_collapse_duration > 0 or
    damage_duration > 0 or
    @_animation_duration > 0
  end
  #--------------------------------------------------------------------------
  # ● damage
  #--------------------------------------------------------------------------
  def damage(value, critical)
    dispose_damage(0...@_damage_durations.size)
    @_damage_sprites = []
    if value.is_a?(Numeric)
      damage_string = value.abs.to_s
    else
      damage_string = value.to_s
    end
    if critical
      damage_string += " CRITICAL"
    end
     
    for i in 0...damage_string.size
      letter = damage_string[i..i]
      bitmap = Bitmap.new(48, 48)
      bitmap.font.size = 24
      bitmap.font.color.set(0, 0, 0)
      bitmap.draw_text(-1, 12-1, 48, 48, letter, 1)
      bitmap.draw_text(+1, 12-1, 48, 48, letter, 1)
      bitmap.draw_text(-1, 12+1, 48, 48, letter, 1)
      bitmap.draw_text(+1, 12+1, 48, 48, letter, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color.set(176, 255, 144)
      else
        bitmap.font.color.set(255, 255, 255)
      end
      bitmap.draw_text(0, 12, 48, 48, letter, 1)
     
      @_damage_sprites[i] = ::Sprite.new(self.viewport)
      @_damage_sprites[i].bitmap = bitmap
      @_damage_sprites[i].visible = false
      @_damage_sprites[i].ox = 16
      @_damage_sprites[i].oy = 16
      @_damage_sprites[i].x = self.x - self.ox / 2 + i * 12
      @_damage_sprites[i].y = self.y - self.oy / 2
      @_damage_sprites[i].z = 3000
      @_damage_durations[i] = 40 + i * 2
    end
  end
  #--------------------------------------------------------------------------
  # ● dispose_damage
  #--------------------------------------------------------------------------
  def dispose_damage(index)
    return if @_damage_sprites == nil
    if @_damage_sprites[index].is_a?(::Sprite) and @_damage_sprites[index].bitmap != nil
      @_damage_sprites[index].bitmap.dispose
      @_damage_sprites[index].dispose
      @_damage_durations[index] = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● update
  #--------------------------------------------------------------------------
  def update
    super
    if @_whiten_duration > 0
      @_whiten_duration -= 1
      self.color.alpha = 128 - (16 - @_whiten_duration) * 10
    end
    if @_appear_duration > 0
      @_appear_duration -= 1
      self.opacity = (16 - @_appear_duration) * 16
    end
    if @_escape_duration > 0
      @_escape_duration -= 1
      self.opacity = 256 - (32 - @_escape_duration) * 10
    end
    if @_collapse_duration > 0
      @_collapse_duration -= 1
      self.opacity = 256 - (48 - @_collapse_duration) * 6
    end
    for i in 0...@_damage_durations.size
      damage_sprite = @_damage_sprites[i]
      next if @_damage_durations[i] == nil
      if @_damage_durations[i] > 0
        @_damage_durations[i] -= 1
        damage_sprite.visible = (@_damage_durations[i] <= 40)
        case @_damage_durations[i]
        when 38..39
          damage_sprite.y -= 4
        when 36..37
          damage_sprite.y -= 2
        when 34..35
          damage_sprite.y += 2
        when 28..33
          damage_sprite.y += 4
        end
        damage_sprite.opacity = 256 - (12 - @_damage_durations[i]) * 32
        if @_damage_durations[i] == 0
          dispose_damage(i)
        end
      end
    end
    if @_animation != nil and (Graphics.frame_count % 2 == 0)
      @_animation_duration -= 1
      update_animation
    end
    if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
      update_loop_animation
      @_loop_animation_index += 1
      @_loop_animation_index %= @_loop_animation.frame_max
    end
    if @_blink
      @_blink_count = (@_blink_count + 1) % 32
      if @_blink_count < 16
        alpha = (16 - @_blink_count) * 6
      else
        alpha = (@_blink_count - 16) * 6
      end
      self.color.set(255, 255, 255, alpha)
    end
    @@_animations.clear
  end
end

Who's 백호

?

이상혁입니다.

http://elab.kr


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
161 기타 레벨9999만들기스크립 23 해파리 2009.04.10 3344
160 스탯 포인트 시스템 3차수정 ( ' 백호 ' 님이 올리신 자료 수정.) 26 카이어덱터 2010.01.04 3346
159 이동 및 탈것 최단경로 찾아가기 - (마우스 사용) 18 file 허걱 2009.02.02 3353
158 아이템 아이템 인벤토리 2 file 백호 2009.02.22 3356
157 파티 [최강전사님 제공] 파티가 따라오게 하는 스크립트 24 file 아방스 2007.11.09 3365
156 전투 ATB전투 5 백호 2009.02.22 3369
155 메뉴 [자작]명성치 사용 스크립트 16 Rainsy 2009.03.22 3390
154 기타 한글 입력 스크립트 입니다. (vx -> xp) 23 file 헤르코스 2009.04.18 3397
153 메뉴 스탯올리기 시스템 (액알가능) 27 file 백호 2009.02.22 3406
152 이동 및 탈것 멈췄을때 행동. 17 file Bera 2010.10.17 3408
151 기타 FPLE 2 - First Person Labyrinth Explorer by MGC 1 Alkaid 2012.01.17 3415
150 메시지 ◆메세지 윈도우 개조 -KGC_MessageAlter◆ 3 백호 2009.02.22 3422
149 미니맵 미니맵(중복률100%? 한글번역!) 17 백호 2009.02.21 3423
148 HUD 맵이름표시 ps인간 2009.01.23 3441
147 미니맵 던전용 미니맵 스크립트[사용법 추가] 16 file 배포 2008.03.02 3443
146 이동 및 탈것 3D 캐릭 스크립트 7 백호 2009.02.22 3443
145 능력치 올리기 스크립트 21 file 아방스 2007.11.09 3447
144 전투 CTB by Charlie Fleed 3.2 - FF10 스타일의 전투 시스템 7 Alkaid 2010.10.14 3449
143 미니맵 스크립트 이용하여 미니맵 만들기 16 file 아방스 2007.11.09 3452
142 메뉴 자작 메뉴 스크립트들(L's Simple CMS and menu scenes) (SDK 호환?) 10 Alkaid 2010.09.02 3455
Board Pagination Prev 1 ... 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 Next
/ 52