# ======================================================
#  「HP消費&威力スキル」スクリプト
# ======================================================
# <概要>
# 「HP消費」　　　：現在HPを消費するスキル
# 「HP威力」　　　：現在HPを威力にするスキル
# 「HP消費威力」　：現在HPを消費して威力にするスキル
# 　を作成できます。
# ・消費するHPが足りない場合でも戦闘不能にならず1だけ残ります。
# ・消費するHPは固定値指定と割合指定が可能です。
# ・消費したHPの○○%分の威力、なども指定可能です。
# 
# <基本的な使い方>
# スキルのメモ欄に例の様なキーワードを記入して下さい。
# もちろん数値の部分は自由に設定可能です。
# 例１：<HP消費:100>
# 　　　スキル発動時に100ポイントのHPが消費されます。
# 例２：<HP消費:50%>
# 　　　スキル発動時の現在HPの50%が消費されます。
# 例３：<HP威力:100%>
# 　　　スキルの基本ダメージが現在HPの数値分乗算されます。HPは消費されません。
# 　　　またこの場合は固定値ではなく%指定のみです。(固定値だと意味が無いので)
# 　　　(現在HPが1000の時に使用した場合、基本ダメージが1000倍。)
# 例４：<HP消費効果:75>
# 　　　スキル発動時に75ポイントのHPを消費、スキルの基本ダメージが75倍されます。
# 　　　例２の様に数値に%を付けた場合は、現在HPの%の数値分だけ倍率がかかります。
# 　　　(現在HPが1000の時に使用した場合、基本ダメージが750倍。)
# 例５：<HP消費効果:倍率200:50%>
# 　　　スキル発動時の現在HPの50%が消費され、
# 　　　その消費量の200%分だけ基本ダメージが乗算されます。
# 　　　(現在HPが1000の時に使用した場合、基本ダメージが2000倍。)
# 
# <具体的な使い方>
# 「基本ダメージ」を1に設定したスキルに<HP消費威力:50%>にすると、
# 　現在HP50%を消費して同数値のダメージ与えるスキルになります。
# 　基本ダメージを-1にすればダメージではなく回復になります。
# 　(分散度・打撃&精神関係度を0にして防御力無視にチェックを入れると
# 　乱数や精神力などに左右されない固定ダメージになります。)
# 例１：FF11のデヴォーション風のスキル設定
# 　　　<HP消費威力:25%>　
# 　　　基本ダメージ＝-１　分散度＝０　打撃&精神関係度＝０　防御力無視＝ON
# 　　　MPにダメージ＝ON
# 例２：FF5のホワイトウィンド風のスキル設定
# 　　　<HP威力:100%>　
# 　　　基本ダメージ＝-１　分散度＝０　打撃&精神関係度＝０　防御力無視＝ON
# 
# ■エイリアスしている箇所
# class Game_Battler内
# 　make_obj_damage_value（スキルまたはアイテムによるダメージ計算）
# 
# 同じ箇所を再定義やエイリアスしているスクリプトとは
# 競合する可能性があります。
# 
class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルまたはアイテムによるダメージ計算
  #     user : スキルまたはアイテムの使用者
  #     obj  : スキルまたはアイテム
  #    結果は @hp_damage または @mp_damage に代入する。
  #--------------------------------------------------------------------------
  alias make_obj_damage_value_hp_cost make_obj_damage_value
  def make_obj_damage_value(user, obj)
    hpobj = obj.clone
    hpobj.note.each_line { |line|
    case line
    when /<HP消費:(\d+)(|%)>/i
      # ％で消費するか判定
      if $2 == "%"
        hp_cost = (user.hp * $1.to_i) / 100
      else
        hp_cost = $1.to_i
      end
      # ＨＰ消費処理(0以下になる場合1に設定)
      if user.hp - hp_cost <= 0
        user.hp = 1
      else
        user.hp -= hp_cost
      end
    when /<HP威力:(\d+)%>/i
      hp_cost = (user.hp * $1.to_i) / 100
      hpobj.base_damage *= hp_cost
    when /<HP消費威力(|:倍率(\d+)):(\d+)(|%)>/i
      # ％で消費するか判定
      if $4 == "%"
        hp_cost = (user.hp * $3.to_i) / 100
      else
        hp_cost = $3.to_i
      end
      # ＨＰ消費処理(0以下になる場合1に設定)
      if  user.hp  - hp_cost <=  0
        user.hp = 1
      else
        user.hp -=  hp_cost
      end
      # 効果倍率設定
      if $1 != ""
        hp_cost = (hp_cost * $2.to_i) / 100
      end
      hpobj.base_damage *= hp_cost
    end
    }
    make_obj_damage_value_hp_cost(user, hpobj)  # 本来の処理に戻る
  end
end