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
901 그래픽 Event Transparency by DerVVulfman (XP/VX/VXA) Alkaid 2012.09.01 1485
900 전투 FF10 전투 대미지 공식 by hydro@rmxp.org 백호 2009.02.22 1140
899 메뉴 FF7 Menu version 3 by AcedentProne (SDK 호환) file 백호 2009.02.22 1116
898 메뉴 FF7형식의 메뉴로 변경하는 스크립트 1 file 백호 2009.02.21 1462
» 전투 FFX, X-2, FFXII 식으로 대미지 표시하기 by squall@rmxp.org 백호 2009.02.22 1115
896 오디오 FMOD Ex Audio Module Rewrite 1.51 by Cowlol 2 file Alkaid 2010.11.18 1793
895 Fog of War 4 file 실마릴 2008.06.19 2498
894 메시지 FontZ by DerVVulfman Alkaid 2013.07.19 1098
893 기타 FPLE 2 - First Person Labyrinth Explorer by MGC 1 Alkaid 2012.01.17 3415
892 기타 Free Window Demo 1 file 백호 2009.02.22 1002
891 키입력 Glitchfinder's Input Modules (XP/VX 공용) 2 Alkaid 2011.03.19 1952
890 기타 Golden_sun_intro v1 1 백호 2009.02.22 1262
889 스킬 Grouping and Detail (Items/Skills) 1 file 백호 2009.02.21 839
888 스킬 Grouping and Detail 7.2 by DerVVulfman 1 file Alkaid 2010.09.02 1510
887 스킬 Grouping and Details 8.1 by DerVVulfman 4 file Alkaid 2011.04.18 1437
886 전투 GTBS 1.4 스크립트 9 아방스 2009.02.05 3028
885 전투 GubiD's Tactical Battle System 1.5.1.4 (RMXP용) GTBS 2 Alkaid 2010.09.03 2456
884 맵/타일 H-Mode7 Engine 1.0 by MGCaladtogel 8 Alkaid 2010.12.23 2161
883 메시지 Hermes(Hermes Extends RPGXP Message System) 0.3d by derula Alkaid 2010.09.10 2024
882 메시지 Hermes(Hermes Extends RPGXP Message System) 0.4 by derula 1 Alkaid 2011.02.27 3053
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52