RPGツクール VX Aceのスクリプトを追いかけてみました。
結論から書くと、上部メニューの「ツール」→「データベース」→「スキル」タブの「攻撃」の以下に定義があることを知っているとすぐにわかる。
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