2014-02-05

RGSS-SPダメージ表示

ShareLink
«RGSS一覧

デフォルトではSPの回復量やダメージ量が表示されませんが
SPダメージを表示した方がわかりやすいだろ!
と思う人も少なくないハズ…

相変わらず説明が下手ですが
頑張ってSPダメージ表示スクリプトを作る方法を説明させていただきます!



【今回の変更点】
・RPG::Sprite(追加)
・Sprite_Battler
・Game_Battler 1
・Game_Battler 3
・Scene_Battle 4



■RPG::Sprite

組み込みクラスなのでヘルプから持ってくる。
RGSS-ダメージ文字・動作変更」にも書いてあるのでわからない人はソッチを参照に。

以下、☆マーク部分(青文字)を追加します。

def initialize の中に追加
☆@sp_damage_duration = 0
def dispose の中に追加
☆dispose_sp_damage

☆def sp_damage(value)
 dispose_sp_damage
 if value.is_a?(Numeric)
  damage_string = value.abs.to_s
 else
  damage_string = value.to_s
 end
 bitmap = Bitmap.new(160, 48)
 bitmap.font.name = "Arial Black"
 bitmap.font.size = 32
 bitmap.font.color.set(0, 0, 0)
 bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
 bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
 bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
 bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
 if value.is_a?(Numeric) and value < 0
  bitmap.font.color.set(200, 100, 255)
 else
  bitmap.font.color.set(255, 255, 255)
 end
 bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
 @_sp_damage_sprite = ::Sprite.new(nil)
 @_sp_damage_sprite.bitmap = bitmap
 @_sp_damage_sprite.ox = 80
 @_sp_damage_sprite.oy = 20
 @_sp_damage_sprite.x = self.x
 # y位置はHPダメージとかぶらないようにする
 @_sp_damage_sprite.y = self.y - self.oy / 2 + 24
 @_sp_damage_sprite.z = 3000
 @_sp_damage_duration = 40
end

☆ここまで

def dispose_damage の下あたりに
☆def dispose_sp_damage
 if @_sp_damage_sprite != nil
  @_sp_damage_sprite.bitmap.dispose
  @_sp_damage_sprite.dispose
  @_sp_damage_sprite = nil
  @_sp_damage_duration = 0
 end
end


if @_damage_duration > 0 の下に
☆if @_sp_damage_duration > 0
 @_sp_damage_duration -= 1
 case @_sp_damage_duration
 when 38..39
  @_sp_damage_sprite.y -= 4
 when 36..37
  @_sp_damage_sprite.y -= 2
 when 34..35
  @_sp_damage_sprite.y += 2
 when 28..33
  @_sp_damage_sprite.y += 4
 end
 @_sp_damage_sprite.opacity = 256 - (12 - @_sp_damage_duration) * 32
 if @_sp_damage_duration == 0
  dispose_sp_damage
 end
end

☆ここまで

■Game_Battler 1

公開インスタンス変数に
attr_accessor :sp_damage_pop
attr_accessor :sp_damage


オブジェクト初期化に
@sp_damage_pop = false
@sp_damage = nil
追加

■Game_Battler 3

アイテムの効果適用
「HP および SP を回復」の前に
self.sp_damage = -recover_sp
追加
# HP 回復率と回復量が 0 の場合の前に
if item.recover_sp_rate == 0 and item.recover_sp == 0
 self.sp_damage = ""
end

追加

# 戦闘中でない場合
unless $game_temp.in_battle
 # ダメージに nil を設定
 self.damage = nil
 ☆self.sp_damage = nil
end

■Sprite_Battler

フレーム更新に追加
☆if @battler.sp_damage_pop
 sp_damage(@battler.sp_damage)
 @battler.sp_damage = nil
 @battler.sp_damage_pop = false
end


■Scene_Battle 4

フレーム更新(メインフェーズステップ5:ダメージ表示)
for target in @target_battlers
 if target.damage != nil
  target.damage_pop = true
 end
 ☆if target.sp_damage != nil
   target.sp_damage_pop = true
  end☆

 end



★このスクリプトを使った関連作品

category: