忍者ブログ

しいたけサイクロン

主にRPGツクールVXAceを扱うブログです。 ここに公開してあるスクリプトは全部自由に使用してもらってかまいません。 改造なり何なりして好きに使ってください。

クリティカル計算

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

クリティカル計算

クリティカルの計算はデフォルトでダメージを3倍にするようになっているのですが
これを変更することについて考えて見ます。
基本ダメージの定数倍ならば簡単で3倍する部分を書き換えるだけでOKです。
もう少し具体的に言うとa倍にしたいときはGame_Battlerの
apply_criticalがdamage * 3になっているのをdamege * aにすればいいです。

問題はもっと複雑な場合で、たとえばaを使用者、bを被使用者とするとダメージを
a.atk * 4 * c - b.def * 2(クリティカル時はc = 2でそれ以外は1)
としたい場合などはもう少し工夫が要ります。(つまりクリティカル時は攻撃力が2倍になる)

色々方法はあると思いますが、たとえば
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 : 0
end 

としたほうが分かりやすいかもしれません。

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
PR

コメント

プロフィール

HN:
tentako
性別:
非公開

P R

フリーエリア