RPGツクール VX Ace:ダメージ計算の仕組み

日曜日 , 24, 7月 2016 Leave a comment

 RPGツクール VX Aceのスクリプトを追いかけてみました。

 

 結論から書くと、上部メニューの「ツール」→「データベース」→「スキル」タブの「攻撃」の以下に定義があることを知っているとすぐにわかる。

001

 

 a.atk * 4 – b.def * 2

 

 というのが、ダメージ計算の式。

 攻撃者の攻撃力の4倍から被攻撃者の防御力の2倍というのが基本計算式。

 そこから、クリティカルとか防御中とかの計算が続く。

 ソースコードは以下(コメントは解説用に追加したもの)、

 

Game_Battler::make_damage_value

 

# user = 攻撃者
# item = スキル(通常攻撃の場合はスキルの[001:攻撃])
def make_damage_value(user, item)
    # selfは攻撃された側を表すクラス

    # 基本計算
    value = item.damage.eval(user, self, $game_variables)

    value *= item_element_rate(user, item)              # 属性による補正
    value *= pdr if item.physical?                      # 物理ダメージ率による補正
    value *= mdr if item.magical?                       # 魔法ダメージ率による補正
    value *= rec if item.damage.recover?                # 回復率による補正
    value = apply_critical(value) if @result.critical   # クリティカルなら補正
    value = apply_variance(value, item.damage.variance) # 分散度による補正
    value = apply_guard(value)                          # ガード状態なら補正
    @result.make_damage(value.to_i, item)

 

 evalで評価して、先述のデータベースのスキルで指定した「計算式」で算出し、各種補正を重ねて行くという流れですね。

 

 ちなみに$game_variablesは、ゲームで設定できる「変数」が入る。

 計算式で利用したい場合はcではなくv[1](変数の一番目の意味)という書式で指定します。

 

 例えば、計算式でダメージから変数0001の値を引きたい場合は以下のように記述します(v[0]はnilなので注意)。

 

a.atk * 4 – b.def * 2 – v[1]

 

 カスタマイズするなら、計算式の部分をデータベースから修正するか、make_damage_valueメソッドに手をいれれば良さそう。

 


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です