サイドビュースクリプトVX無印版ではHPダメージ/回復とMPダメージ/回復に別の画像ファイルを指定することができ、色によって識別が容易で見やすかったので、そのような仕様に改変するスクリプトが欲しいです。
※RPG探検隊様のサイドビュースクリプト1.00の他にこちら↓のバグ修正スクリプトも入れてます。
コード: 全て選択
class Spriteset_Sideview
#--------------------------------------------------------------------------
# ● ダメージ実行
#--------------------------------------------------------------------------
def set_damage_pop(target)
@damage.compact!
r = [target.result.hp_damage,
target.result.mp_damage,
target.result.tp_damage
]
r.each_with_index{|rr,j|
next if rr == 0
@damage.push(Sprite_Damage.new(@viewport, target,j,false))
}
@damage.push(Sprite_Damage.new(@viewport, target,0,true)) if !target.result.added_state_objects.empty?
end
end
#==============================================================================
# ■ Sprite_Back_Picture
#------------------------------------------------------------------------------
# ダメージ表示のスプライトです。
#==============================================================================
class Sprite_Damage < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport = nil, battler,damage_type, view_state)
super(viewport)
@battler = battler
@time = 0
return @action_end = true if !@battler
@direction = -1
@direction *= -1 if @battler.actor?
@direction *= -1 if $sv_camera.mirror
set_state if view_state
set_damage(damage_type) unless view_state
update
end
#--------------------------------------------------------------------------
# ● ステート表示
#--------------------------------------------------------------------------
def set_state
return if !N03::STATE_POP
states = @battler.result.added_state_objects
states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
return if states == []
return if @battler.sv.add_state == @battler.result.added_state_objects
@battler.sv.add_state = states.dup
@st = []
@st_base = []
hit_count
for i in 0...states.size
@st[i] = Sprite.new
bitmap_state(@st[i], states[i])
@st_base[i] = []
@st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
@st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100 - (@hit * 16)
@st[i].z = 1000 + i
@st[i].opacity = 0
end
@time = @pop_time = 80
end
#--------------------------------------------------------------------------
# ● ダメージ表示
#--------------------------------------------------------------------------
def set_damage(damage_type)
return @action_end = true if !N03::DAMAGE_POP
case damage_type
when 0; damage = @battler.result.hp_damage
when 1; damage = @battler.result.mp_damage
when 2; damage = @battler.result.tp_damage
end
if !damage or damage == 0
@action_end = true if @st == nil
return # ステートだけPOPする設定を考慮して@action_endは返さない
end
hit_count
#@hit = @battler.sv.hit
#@battler.sv.hit += 1 if damage != 0
file = N03::DAMAGE_PLUS if damage > 0
file = N03::DAMAGE_MINUS if damage < 0
add_file = N03::DAMAGE_MP if damage_type == 1
add_file = N03::DAMAGE_TP if damage_type == 2
adjust_x = N03::DAMAGE_ADJUST
@num = []
@num_base = []
damage = damage.abs
max_num = damage.to_s.size
max_num += 1 if add_file != nil
for i in 0...max_num
@num[i] = Sprite.new
if add_file != nil && i == max_num - 1
@num[i].bitmap = Cache.system(add_file)
cw = (damage % (10 * 10 ** i))/(10 ** i)
sw = 0 if sw == nil
else
@num[i].bitmap = Cache.system(file)
cw = (damage % (10 * 10 ** i))/(10 ** i)
sw = @num[i].bitmap.width / 10
@num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
end
@num_base[i] = []
@num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
@num_base[i][1] = -(@num[i].bitmap.height / 3) - i * 2 - @hit * 2 + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
@num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
@num[i].z = 1000 + i + @hit * 10
end
@time = @pop_time = 80
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● ダメージ戦闘アニメ処理
#--------------------------------------------------------------------------
def damage_anime(targets, target, item)
@log_window.back_to(1) if @log_window.line_number == 5
return if item.scope != 9 && item.scope != 10 && target.dead?
@miss = false
invoke_item(target,item)
if target.result.missed
target.sv.miss_action(@subject, item)
return @miss = true
elsif target.result.evaded or target.sv.counter_id != 0
target.sv.evasion_action(@subject, item)
return @miss = true
elsif target.sv.reflection_id != 0
N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
target.sv.reflection_id = 0
@reflection_data = [] if @reflection_data == nil
return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
end
target.sv.damage_action(@subject, item)
N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
@spriteset.set_damage_pop(target)
@spriteset.set_damage_pop(@subject) if target != @subject && (@subject.result.hp_damage != 0 or @subject.result.mp_damage != 0)
N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
end
end