Permanent
Creation

RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。 (A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。


#==============================================================================
# ■ 特殊なダメージ計算
#------------------------------------------------------------------------------
#  RPGツクールVX Ace よろしくダメージ計算式をスキルごとに設定可能にします。
# (C) ルファー
# WebSite https://tkoolerlufar.pages.dev/
#==============================================================================

=begin
  =対応RGSS
  2

  =他の素材との競合の可能性
  !.. パラメータ追加系や、ダメージ計算に干渉する他素材に注意

  =使い方
  ダメージ計算式を入れたいスキルの「メモ」に
  半角で "formula" と入れて改行してください。
  その続きがダメージ計算式として使われます。

  VXAce 同様に、以下の変数を計算式に入れられます。

  * a.hp    ... スキル使用者の残り HP
  * a.maxhp ... スキル使用者の最大 HP
  * a.mp    ... スキル使用者の残り MP
  * a.maxmp ... スキル使用者の最大 MP
  * a.atk   ... スキル使用者の攻撃力
  * a.def   ... スキル使用者の防御力
  * a.spi   ... スキル使用者の精神力
  * a.agi   ... スキル使用者の敏捷性

  * b.hp    ... スキル対象者の残り HP
  * b.maxhp ... スキル対象者の最大 HP
  * b.mp    ... スキル対象者の残り MP
  * b.maxmp ... スキル対象者の最大 MP
  * b.atk   ... スキル対象者の攻撃力
  * b.def   ... スキル対象者の防御力
  * b.spi   ... スキル対象者の精神力
  * b.agi   ... スキル対象者の敏捷性

  * v[n] ... 変数の値 (イベントコマンド「文章の表示」で使う \V[n] と大体同じ)

  = 例
  * 使用者の残り HP が威力に比例する技
    formula
    a.hp / 2 + a.atk * 4 - b.def * 2

  * 100番の変数で威力を指定する魔法
    formula
    v[100] + a.spi * 2 - b.spi

  * 対象者の残り HP を 75% 削る
    formula
    b.hp * 4 / 3 + 1

  * 対象者の最大 HP の 50% 分の回復
    formula
    b.maxhp / (-2)

  * 固定ダメージ
    formula
    500

  =更新履歴
  2014/12/28 公開

  =再定義しているメソッド
  Game_Battler#make_obj_damage_value
=end

#----------------------------------------------------------------------------
# ◆ Lufar モジュール
#----------------------------------------------------------------------------
module Lufar
  module SpecialDamageCalc
    KEYWORD = "formula"
  end
end
class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキルまたはアイテムによるダメージ計算
  #     user : スキルまたはアイテムの使用者
  #     obj  : スキルまたはアイテム
  #    結果は @hp_damage または @mp_damage に代入する。
  #--------------------------------------------------------------------------
  alias _Lufar_SpecialDamageCalc_make_obj_damage_value make_obj_damage_value
  def make_obj_damage_value(*args)
    user, obj = args
    if obj.note =~ /^#{Lufar::SpecialDamageCalc::KEYWORD}(\r?\n|\r)(.*)\z/m
      begin
        formula = $~[-1]
        a, b, v = user, self, $game_variables
        damage = Kernel.eval(formula).to_i              # 基本ダメージ計算
        damage *= elements_max_rate(obj.element_set)    # 属性修正
        damage /= 100
        damage = apply_variance(damage, obj.variance)   # 分散
        damage = apply_guard(damage)                    # 防御修正
        if obj.damage_to_mp
          @mp_damage = damage                           # MP にダメージ
        else
          @hp_damage = damage                           # HP にダメージ
        end
      rescue Exception
        print "ダメージ計算中に #{$!.class} が発生しました。\n#{$!.message}"
        @mp_damage =
        @hp_damage = 0
      end
    else
      _Lufar_SpecialDamageCalc_make_obj_damage_value(*args)
    end
  end
end

戻る