色々方法はあると思いますが、たとえば
RPG::UsableItem::Damageの関数evalを次のようにして引数を追加します。
def eval(a, b, v, c)
[Kernel.eval(@formula), 0].max * sign rescue 0
end
この追加したcをスキルを設定する際のダメージ計算式で使うことができます。
たとえばダメージ計算式をa.atk * 4 * c - b.def * 2とします。
次にGame_Battlerのmake_damage_valueにおいて
value = apply_critical(value) if @result.criticalの部分を削り
value = item.damage.eval(user, self, $game_variables)となっている部分を
value = item.damage.eval(user, self, $game_variables, cri_deg)としてcri_degを次のように定義します。
def cri_deg
@result.critical ? 2 : 1
end
これでクリティカル時に攻撃力が2倍となるようにできます。
攻撃力を2倍するだけの場合は上でもいいかもしれませんが
色々なパターンを作りたいときは上でcri_degを
def cri_deg @result.critical ? 1 : 0end
としたほうが分かりやすいかもしれません。
c + 1で考えればクリティカル時に2,そうでない場合は1となるので
ダメージ計算式をa.atk * 4 * (c + 1) - b.def * 2とすることでクリティカル時に攻撃力が2倍となるようにできます。
またa.atk * 4 - b.def * 2 +100 * cとするとクリティカル時はダメージが100加算されることになります。つまりcをかけている項はクリティカル時のみ出現する形となります。
(1 - c)と考えるとクリティカルの場合は 0でそうでない場合は1となります。
これを使うとクリティカル時に防御無視の場合は
a.atk * 4 - b.def * 2 * (1 - c)
とするとできます。
・画像による例
クリティカル時に攻撃力が2倍となる場合。
画像1
画像2
画像3