【解決済】RPG探検隊SVでHPダメージ/回復とMPダメージ/回復の画像を別々にしたい

真白灰
記事: 5
登録日時: 2018年3月05日(月) 15:02

【解決済】RPG探検隊SVでHPダメージ/回復とMPダメージ/回復の画像を別々にしたい

投稿記事by 真白灰 » 2018年4月01日(日) 22:03

RPG探検隊様のサイドビュースクリプトAce版ではMPダメージ/回復には「MP」という画像を頭につけるという処理がなされますが、ターン終了時にHPとMPが自動回復した場合など見づらいです。

サイドビュースクリプト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
最後に編集したユーザー 真白灰 on 2018年4月13日(金) 19:44 [ 編集 1 回目 ]

真白灰
記事: 5
登録日時: 2018年3月05日(月) 15:02

Re: RPG探検隊SVでHPダメージ/回復とMPダメージ/回復の画像を別々にしたい

投稿記事by 真白灰 » 2018年4月13日(金) 19:43

自己解決(?)しました。
SVとXP風を併用することでターン終了時のHP/MP同時回復の表示は理想に近いものになりました。

失礼しました。

“VX / Ace:スクリプト素材のリクエスト” へ戻る