Summary. ダメージ計算の基本ルールについて解説してみます。ただし、話を簡単にするためにクリティカルの影響は無視します(いずれやるかも)。
始める前に
計算対象
当たり前ですが、コンボの合計ダメージは
1hit目のダメージ + 2hit目のダメージ + ・・・
と計算するして求めることになります。そこで、「一撃ごとのダメージ」の計算方法を主に考えることにします。
略語
ところで、解説中に『Aの小数点以下を切り捨てたものをBとする』と繰り返し何度も書くのはかったるいですし、読む方もダルいと思うので、大幅に略して
と書きます。たとえば、int(80.2) = 80です。あと、ReversePenalty補正を略して『RP補正』と呼びます。
注意
計算式の中に出てくる各種補正の値は原則として
その技が当たる直前までの値
を使って計算されます。これについては多少の例外もありますが、詳しくは後述します。
基本計算式
大まかにいうと、下の囲みの順番に計算していって最後に出た数字がダメージです。
A := int(攻撃力×防御係数)
B := int(A×ヒット数補正)
C := int(B×技補正)
ダメージ := int(C×状態補正)
ただし、
AAのヒスコハがやられ役の場合
に限ってはこの後に『ヒスコハ補正』が掛かります。
この場合は、最後に ダメージ×1.035 を計算して端数を切り捨てます。
[1]
ともあれ、適当に端数を切り捨てながら順番に掛け算を繰り返していけばOKです。
先に注意した通り、ヒット数などはこの段の攻撃が当たる前までの値を使います。ただし、場合によっては上の計算に先駆けて補正値の変更が発生します:
例外1a. RP補正
もしRP補正が0%でないならば、
上の計算の直前に
(100 - int(RP補正)) % の上書き補正
を実行します。タイミングが変則的なので気をつけてください。なお、シールド補正もRP補正の一種です。
例外1b. 引き剥がし補正
ReACT属性の攻撃で相手を引き剥がした場合、
RP補正適用の直後(本来の技補正の適用前)
に65%の乗算補正が発生します。これまたわかりづらいタイミングなので注意です。
例外2. EX補正
EXキャンセルをした場合、その瞬間に65%の乗算補正が発生します。
例外3. 状態変化
たとえば、レンの地上投げ・空中投げは
実際の相手の状態には関係なく、必ずSTAND時の状態補正を用いて計算
されます。同様に、FLOAT時の状態補正を用いる技も他キャラには存在します。これらは、実際に相手の状態を変化させていると考えてください
[2]。
例外4. レデュースダメージ
MBACとMBAAで仕様が異なります。
(a) MBACでは、レデュースに成功した場合、この段の計算に限り
ことになります。この影響は今回限りなので、補正値への影響は生じません。
(b) MBAAでは、レデュースに成功した場合、普通にダメージを計算した後に
という処理が追加されます。
補正値の更新
上の要領でダメージの算出が済んだ後は、各種補正の更新作業に入ります。
- まず、(当然ですが)ヒット数が1増えるのに伴い、ヒット数補正が変化します。[3]
- 同様に、HPの減少に伴って根性値が変化するかもしれません。その場合は防御係数も変化します。
- そして、当てた技に応じて技補正が更新されます。
3番目の「技補正の更新」は、当てた技の補正の種類によって計算が3種類に分かれます:
上書き補正
『現在の技補正の値』と『当てた技の補正値』とを比較して、より小さいほうが今後の技補正になります。
乗算補正
『現在の技補正の値』に『当てた技の補正値(%)』を掛け算します(端数切り捨て)。
減算補正
『現在の技補正の値』から『当てた技の補正値』を引き算します。
(たぶん、0%未満にはなりません。試したことないですが)
計算例
まあ、
ダメージ計算スクリプトが用意されてる時点で手計算を練習する意味は皆無なんですが、せっかくなので何か計算してみましょう。
別になんでもいいんですが、自分=Hレン, 相手=ワラキア(立ち食らい)で
{JC>JB}>空中氷 → C2~{JB>JC}~{JB>JC}>投げ
をやってみます。
1hit目
A = int(1050×1.1) = 1155
B = int(1155×1.0) = 1155
C = int(1155×1.0) = 1155
ダメージ = int(1155×1.0) = 1155
乗算補正なので技補正が90%に。
2hit目
リバースビートを使ったので、ここで技補正が77%になります。
A = int(700×1.1) = 770
B = int(770×0.96875) = 745
C = int(745×0.77) = 573
ダメージ = int(573×1.0) = 573
計1728。
3hit目
A = int(800×1.1) = 880
B = int(880×0.9375) = 825
C = int(825×0.77) = 635
ダメージ = int(635×1.0) = 635
計2363。氷で浮かすので以降の状態補正が88%に。
4hit目
A = int(450×1.1) = 495
B = int(495×0.90625) = 448
C = int(448×0.77) = 344
ダメージ = int(344×) = 302
計2665。
5hit目
A = int(400×1.1) = 440
B = int(440×0.875) = 385
C = int(385×0.77) = 296
ダメージ = int(296×0.88) = 260
計2925。ここで根性値が1に(防御係数&ヒット数補正に影響)。
6hit目
A = int(700×1.05) = 735
B = int(735×0.8125) = 597
C = int(597×0.77) = 459
ダメージ = int(459×0.88) = 403
計3328。ヒット数補正を間違えないように注意。
7hit目
A = int(1050×1.05) = 1102
B = int(1102×0.78125) = 860
C = int(860×0.77) = 662
ダメージ = int(662×0.88) = 582
計3910。技補正が69%に。
8hit目
A = int(700×1.05) = 735
B = int(735×0.75) = 551
C = int(551×0.69) = 380
ダメージ = int(380×0.88) = 334
計4244。
9hit目
A = int(1050×1.05) = 1102
B = int(1102×0.71875) = 792
C = int(792×0.69) = 546
ダメージ = int(546×0.88) = 480
計4724。技補正が62%に。
10hit目(厳密にはヒット数が増えないけど)
AAの空中投げは、計算前に90%の乗算補正が発生します。また状態補正を無視することに気を付けます。
A = int(1100×1.05) = 1155
B = int(1155×0.6875) = 794
C = int(794×0.55) = 436
ダメージ = int(492×1.0) = 436
したがって、最終的な合計ダメージは5160になります。
試せばわかりますが、実際のダメージは5155です。最初の3ヒットで1ずつ誤差が出ているのが大きいです。応急処置(擬似単精度)を使うと5159になりますが、いずれにせよ実際より少し大きい値になりました。
AC以前だと逆に実際より小さくなる方向に誤差が出ていたので、内部処理的な原因によると思います。
[1]
たぶんMBACでも本当は同様の仕組みなのだろうけど、うまく実測値と一致する値が見つけられない・・・orz そのため、ヒスコハの防御係数を単体時と区別する形で解決している。
[2]
たとえば、STANDの状態補正で計算する技を当てると、それ以降もSTAND時の状態補正が使われるようになる。これは、浮かせ技などを当てて再び状態が変化するまで続く。
[3]
実は当然ではない。投げ技の場合はヒット数が増えないことが多い。
最終更新:2013年06月11日 05:59