デフォルトではSPの回復量やダメージ量が表示されませんが
SPダメージを表示した方がわかりやすいだろ!
と思う人も少なくないハズ…
相変わらず説明が下手ですが
頑張ってSPダメージ表示スクリプトを作る方法を説明させていただきます!
【今回の変更点】
・RPG::Sprite(追加)
・Sprite_Battler
・Game_Battler 1
・Game_Battler 3
・Scene_Battle 4
・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
☆ここまで
「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追加
「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
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
☆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
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