ダメージ吸収カスタム



KGCソフトウェアのダメージ吸収を以下のように改変。
・ダメージ吸収○%の廃止(ダメージ吸収は常に100%)←後に復活させるかもしれない
・通常攻撃にSP吸収を追加
・シフトダメージの実装

※SPダメージと併用することで以下のスキル(多分武器も)を作成可能です
・SP吸収(元々の仕様です。)
・HPにダメージを与え、SPをHPダメージ分回復
・SPにダメージを与え、HPをSPダメージ分回復

※このスクリプトの原作者はTOMY様です。

変更点
2009:09:14
・通常攻撃のシフトダメージが実装されていなかったミスを修正
・通常攻撃でSP吸収を設定してもHPにダメージを与えていたバグを修正

#----------------------------------------------------------------------------
# ダメージ吸収 貪藻矢射妥←カスタム by 貪藻矢射妥←
# 微妙に使いづらいです・・・多分(をひ)
#----------------------------------------------------------------------------
# 原作:     ◆ ダメージ吸収 - KGC_AbsorbDamage ◆
#           ◇ Last update : 2008/06/07 ◇
# 原作者:   TOMY様
# HP:       KGC Software
# アドレス: http://ytomy.sakura.ne.jp/
#
# 改造内容:
# ・ダメージ吸収○%の廃止(ダメージ吸収は常に100%)
# ・通常攻撃にSP吸収を追加
# ・シフトダメージの実装
# 
# ※SPダメージと併用することで以下のスキルを作成可能です
# ・SP吸収
# ・HPにダメージを与え、SPをHPダメージ分回復
# ・SPにダメージを与え、HPをSPダメージ分回復
# 
# ※なお、ダメージ吸収○%を復活させるかもしれないのでその関数などは残したまま
#  となっております。
# 
#============================================================================
# 変更点
# 2009:09:14
# ・通常攻撃のシフトダメージが実装されていなかったミスを修正
# ・通常攻撃でSP吸収を設定してもHPにダメージを与えていたバグを修正

#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================

module KGC
  # ◆吸収量制限
  #  true にすると、相手の残存HP/SPを超える量は吸収しない。
  ABSDMG_RESTRICT = true
  # ◆吸収属性
  ABSORB   = 28
  # ◆Recover Inverce属性
  RECV_INV = 51
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

$imported = {} if $imported == nil
$imported["AbsorbDamage"] = true

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler
  attr_accessor :prev_hp, :prev_sp
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_AbsorbDamage initialize
  def initialize
    initialize_KGC_AbsorbDamage

    @prev_hp = nil
    @prev_sp = nil
  end
  #--------------------------------------------------------------------------
  # ● 吸収率取得
  #     elements : 属性配列
  #--------------------------------------------------------------------------
  def absorbency(elements)
    n = 0
    elements.each { |element|
      if $game_special_elements["absorb"] =~ $data_system.elements[element]
        n += $1.to_i
      end
    }
    return n
  end
  #--------------------------------------------------------------------------
  # ● 通常攻撃の効果適用
  #--------------------------------------------------------------------------
  alias attack_effect_KGC_AbsorbDamage attack_effect
  def attack_effect(attacker)
    result = attack_effect_KGC_AbsorbDamage(attacker)

    # ダメージ判定
    #r = absorbency(attacker.element_set)
    if result && attacker.element_set.include?(KGC::ABSORB)# && r > 0
      # 吸収量を算出
      if $imported["SPDamage"] && attacker.element_set.include?(KGC::SP_DAMAGE)
        recover_sp = self.damage.to_i# * r / 100
        recover_sp = [recover_sp, self.prev_sp].min if KGC::ABSDMG_RESTRICT
        # シフトダメージの場合HP/SPの回復を反転する
        if attacker.element_set.include?(KGC::RECV_INV)
          attacker.hp += recover_sp
          attacker.damage = -recover_sp
        else
          attacker.sp += recover_sp
          attacker.damage2 = -recover_sp
        end
        self.damage2 = self.damage
        self.damage = nil
      else
        recover_hp = self.damage.to_i# * r / 100
        recover_hp = [recover_hp, self.prev_hp].min if KGC::ABSDMG_RESTRICT
        # シフトダメージの場合HP/SPの回復を反転する
        if attacker.element_set.include?(KGC::RECV_INV)
          attacker.sp += recover_hp
          attacker.damage2 = -recover_hp
        else
          attacker.hp += recover_hp
          attacker.damage = -recover_hp
        end
      end
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #--------------------------------------------------------------------------
  alias skill_effect_KGC_AbsorbDamage skill_effect
  def skill_effect(user, skill)
    result = skill_effect_KGC_AbsorbDamage(user, skill)

    # ダメージ判定
    #r = absorbency(skill.element_set)
    if result && skill.element_set.include?(KGC::ABSORB)# && r > 0
      if $imported["SPDamage"] && self.damage2.is_a?(Numeric)
        # SP吸収量を算出
        recover_sp = self.damage2.to_i# * r / 100
        recover_sp = [recover_sp, self.prev_sp].min if KGC::ABSDMG_RESTRICT
        # シフトダメージの場合HP/SPの回復を反転する
        if skill.element_set.include?(KGC::RECV_INV)
          user.hp += recover_sp
          user.damage = -recover_sp
        else
          user.sp += recover_sp
          user.damage2 = -recover_sp
        end
      end
      if self.damage.is_a?(Numeric)
        # HP吸収量を算出
        recover_hp = self.damage.to_i# * r / 100
        recover_hp = [recover_hp, self.prev_hp].min if KGC::ABSDMG_RESTRICT
        # シフトダメージの場合HP/SPの回復を反転する
        if skill.element_set.include?(KGC::RECV_INV)
          user.sp += recover_hp
          user.damage2 = -recover_hp
        else
          user.hp += recover_hp
          user.damage = -recover_hp
        end
      end
    end
    return result
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 4)
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  alias update_phase4_step2_KGC_AbsorbDamage update_phase4_step2
  def update_phase4_step2
    # 元のHPを保存
    ($game_party.actors + $game_troop.enemies).each { |battler|
      battler.prev_hp = battler.hp
      battler.prev_sp = battler.sp
    }

    update_phase4_step2_KGC_AbsorbDamage
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_KGC_AbsorbDamage update_phase4_step5
  def update_phase4_step5
    update_phase4_step5_KGC_AbsorbDamage

    # 行動者もダメージ表示
    @active_battler.damage_pop |=
      (@active_battler.damage != nil && @active_battler.damage != "Miss") ||
      ($imported["SPDamage"] && @active_battler.damage2 != nil)
  end
end
薄緑色の属性をセットするだけで吸収スキルが作成できます。 また、SPダメージ属性もセットすることでSP吸収スキルが作成可能です。 更に吸収に薄赤色の属性をセットすればHPにダメージを与え、そのダメージ分SP回復、 その上、SPダメージを併用するとSPにダメージを与え、そのダメージ分HP回復 というシフトダメージが作成可能です。 また、SP消費の改造と組み合わせれば更にスキルのバリエーションが増やせる・・・かも。 EX) HP消費+SP吸収 HP消費+HPにダメージ+SP回復 SP消費+SPにダメージ+HP回復 ※シフトダメージを作ったのはSPを消費してSPを吸収するのはあまり意味がないのでは・・・と思ってのこと。  (だったら消費SPを0にすればいいのでは!?とかつっこまないこと。)  →敵のMax SPがスキルの消費SPより低く、かつ残存SP以上は回復しない場合、SP消費の無駄になるので・・・

戻る