#==============================================================================
#                   「HP/MP/TPゲージによるステータス変動」(ACE) ver1.1  by奈々
#
#   ◇使用規約
#   使用される場合はスクリプト作成者として「奈々」を明記して下さい。
#   このスクリプトを改変したり、改変したものを配布するなどは自由ですが
#   その場合も元のスクリプトの作成者として名前は載せて下さい。
#
#------------------------------------------------------------------------------
#
#   キャラクターのゲージ残量によってステータスを変動させることができます。
#   変動できるパラメーターはatk,def,mat,mdfの4つ。
#   パラメーターそれぞれに「HP/MP/TPのどれを参照するか」「どう増減するか」
#   「特定のステートに掛かっているときのみ変動するかどうか」を設定できます。
#
#==============================================================================
# ◇初期設定
module NanaSeven

  ATK_UP_STATE = -1      #攻撃力上昇のステートID(0で常時、-1でOFF)
  ATK_UP_RATE = 200     #上昇する値、指定はゲージ0のときの修正値
                        #200ならゲージ0で+200(=300%)、ゲージ半分で+100(=200%)
  ATK_HP_MP_TP = 1      #影響するゲージ、HPなら1、MPなら2、TPなら3

  DEF_UP_STATE = -1
  DEF_UP_RATE = 200
  DEF_HP_MP_TP = 1

  MAT_UP_STATE = -1
  MAT_UP_RATE = 200
  MAT_HP_MP_TP = 2

  MDF_UP_STATE = -1
  MDF_UP_RATE = 200
  MDF_HP_MP_TP = 2

end

#------------------------------------------------------------------------------

class Game_Battler < Game_BattlerBase

  #--------------------------------------------------------------------------
  # ● 通常能力値の取得(再定義)
  #--------------------------------------------------------------------------
  def param(param_id)
    value = param_base(param_id) + param_plus(param_id)
    value *= param_rate(param_id) * param_buff_rate(param_id) * param_by_nana(param_id)
    [[value, param_max(param_id)].min, param_min(param_id)].max.to_i
    return value.truncate
  end
  
  #--------------------------------------------------------------------------
  # ● ステータス変動判定&処理
  #--------------------------------------------------------------------------  
  def param_by_nana(param_id)
    case param_id
    when 2
      if self.state?(NanaSeven::ATK_UP_STATE) or NanaSeven::ATK_UP_STATE == 0
        case NanaSeven::ATK_HP_MP_TP
        when 1
          val = NanaSeven::ATK_UP_RATE * (1 - self.hp_rate) * 0.01 + 1
        when 2
          val = NanaSeven::ATK_UP_RATE * (1 - self.mp_rate) * 0.01 + 1
        when 3
          val = NanaSeven::ATK_UP_RATE * (1 - self.tp_rate) * 0.01 + 1
        end
      return val
      end
    when 3
      if self.state?(NanaSeven::DEF_UP_STATE) or NanaSeven::DEF_UP_STATE == 0
        case NanaSeven::DEF_HP_MP_TP
        when 1
          val = NanaSeven::DEF_UP_RATE * (1 - self.hp_rate) * 0.01 + 1
        when 2
          val = NanaSeven::DEF_UP_RATE * (1 - self.mp_rate) * 0.01 + 1
        when 3
          val = NanaSeven::DEF_UP_RATE * (1 - self.tp_rate) * 0.01 + 1
        end
      return val
      end
    when 4
      if self.state?(NanaSeven::MAT_UP_STATE) or NanaSeven::MAT_UP_STATE == 0
        case NanaSeven::MAT_HP_MP_TP
        when 1
          val = NanaSeven::MAT_UP_RATE * (1 - self.hp_rate) * 0.01 + 1
        when 2
          val = NanaSeven::MAT_UP_RATE * (1 - self.mp_rate) * 0.01 + 1
        when 3
          val = NanaSeven::MAT_UP_RATE * (1 - self.tp_rate) * 0.01 + 1
        end
      return val
      end
    when 5
      if self.state?(NanaSeven::MDF_UP_STATE) or NanaSeven::MDF_UP_STATE == 0
        case NanaSeven::MDF_HP_MP_TP
        when 1
          val = NanaSeven::MDF_UP_RATE * (1 - self.hp_rate) * 0.01 + 1
        when 2
          val = NanaSeven::MDF_UP_RATE * (1 - self.mp_rate) * 0.01 + 1
        when 3
          val = NanaSeven::MDF_UP_RATE * (1 - self.tp_rate) * 0.01 + 1
        end
      return val
      end
    end
    return 1
  end
end