以下の記事はBigBang以前のものです。
U&I以降のレベル補正に関する記事はこちらです。
物理攻撃のダメージ計算は以下のようになっていると推定されます。
「攻撃力」は、ステータス上の攻撃力(下図)です。(※注2)
「敵とのレベル差」は、(敵のレベル)−(自分のレベル)で計算されます。
自分の方がレベルが高い場合は0とします。
手裏剣や矢は1つでも残っていれば、それで攻撃した場合の攻撃力が表示されますが、
複数の手裏剣や矢を消費するスキルの場合、実際に使ったものを元にして計算されています。
左下の図は残り1の土手裏剣(攻撃+23)を先頭にした場合、
右下は残り700の水手裏剣(攻撃+10)を先頭にした場合の攻撃力です。
左上のような状態で、手裏剣2枚を消費するラッキーセブンを使うと、
表示上の攻撃力は土手裏剣のもので、水手裏剣が2枚消費されます。
この場合でも、実際のダメージは消費した手裏剣、つまり水手裏剣を元に計算されています。
以下の検証の前提として、
「自分のレベルより敵のレベルが低い場合でもダメージは増えない」
「敵の防御力が0のとき、通常攻撃のダメージはステータスの攻撃力の範囲内」
ということを用いました。
これについて個別の検証はしていませんが、
デンデン(防御0)に通常攻撃をした場合、自分のレベルがいくら高くても、
ステータス上の攻撃力を外れたダメージが出ることがないことから推定できます。
以前行ったスキル倍率とダメージ減少の検証データを再掲します。
ストレイフLv30 | 通常時(倍率100%) | クリティカル時(倍率200%) | ||||
観測値 | 防御無視理論値 | 差 | 観測値 | 防御無視理論値 | 差 | |
最小 | 57 | 250 | 193 | 128 | 500 | 372 |
最大 | 264 | 444 | 180 | 534 | 888 | 354 |
平均 | 150.47 | 347 | 196.53 | 311.88 | 694 | 382.12 |
計測数 | 118 | 91 |
アローレインLv28 | 通常時(倍率158%) | クリティカル時(倍率258%) | ||||
観測値 | 防御無視理論値 | 差 | 観測値 | 防御無視理論値 | 差 | |
最小 | 83 | 395 | 312 | 129 | 645 | 516 |
最大 | 396 | 701 | 305 | 643 | 1145 | 502 |
平均 | 239.65 | 548.26 | 308.61 | 394.06 | 895.26 | 501.20 |
計測数 | 149 | 118 |
この検証で(ダメージ)=(攻撃力−敵防御による影響)×(スキル倍率)であることを示しました。
このとき、敵防御によるダメージ減少量の平均は、
になります。
これは、アイアンボアの防御力350の約0.556倍です。
ここで、上のデータにおいて、どれも
になっています。
観測されたダメージより小さい/大きい数値が正確な最小/最大ダメージであることも考えられますが、
その場合でも
となるので、やっぱり
は変わりません。
このぶれ幅を調べることと、ダメージ減少量が防御力に比例することを確かめることを目的とし、
次の観測を行いました。
最大値・最小値のどちらかが5回観測できるまで通常攻撃を続けました。
通常攻撃 | 最小 | 最大 |
---|---|---|
観測値 | 36 | 96 |
防御無視時の攻撃力との差 | 60 | 50 |
観測回数 | 1 | 5 |
防御力による減少量に50〜60の幅があるのが確認できました。
また、これらの中央値の55をブロックパスの防御100で割った値0.55が、
前述の検証で出た値に近いため、ダメージ減少量が防御力に比例すると推定されます。
したがって、(レベル差がない場合の防御補正)=(敵防御力)×(0.50〜0.60)と推定されます。
アサルターの性能について実験していたところ、たまたま確認できたものです。
以下、確認に至る流れを載せておきます。
まず、Lv補正のない状態で、アサルターが防御力の影響を受けないことを調べました。
これで196回分のデータをとりました。
アサルターLv1 | 最小 | 最大 | 平均 |
---|---|---|---|
観測ダメージ | 340 | 599 | 469.50 |
防御無視時期待値 | 340 | 604 | 472 |
差 | 0 | 5 | 2.50 |
アサルターが防御を無視することが確認できました。
次に、レベル差のある敵を相手に、アサルターを撃ってみました。
それぞれ100回程度データを取りました。
アサルターLv1 vs 上忍(Lv差10) | 最小 | 最大 | 平均 |
---|---|---|---|
観測ダメージ | 308 | 544 | 426 |
防御無視時期待値 | 340 | 604 | 472 |
観測値÷期待値 | 0.9059 | 0.9007 | 0.9025 |
アサルターLv1 vs ウェンペペ(Lv差12) | 最小 | 最大 | 平均 |
---|---|---|---|
観測ダメージ | 300 | 532 | 416 |
防御無視時期待値 | 340 | 604 | 472 |
観測値÷期待値 | 0.8824 | 0.8808 | 0.8813 |
アサルターLv1 vs デスマリオネット(Lv差15) | 最小 | 最大 | 平均 |
---|---|---|---|
観測ダメージ | 290 | 514 | 402 |
防御無視時期待値 | 340 | 604 | 472 |
観測値÷期待値 | 0.8529 | 0.8510 | 0.8517 |
アサルターLv1 vs ファイアブル(Lv差20) | 最小 | 最大 | 平均 |
---|---|---|---|
観測ダメージ | 273 | 483 | 378 |
防御無視時期待値 | 340 | 604 | 472 |
観測値÷期待値 | 0.8029 | 0.7997 | 0.8008 |
アサルターLv1 vs 忍頭(Lv差30) | 最小 | 最大 | 平均 |
---|---|---|---|
観測ダメージ | 239 | 423 | 331 |
防御無視時期待値 | 340 | 604 | 472 |
観測値÷期待値 | 0.7029 | 0.7003 | 0.7013 |
レベル差が1開くごとに、観測値÷期待値が0.01ずつ減っています。
防御が同じ700で、レベルが違うウェンペペ・デスマリオネットでもこの傾向は変わらなかったため、
それぞれの観測値の差は、敵の防御を無視したレベル補正によるものだと考えられます。
したがって、レベル補正は(ダメージ)×(100−レベル差)÷100と推定されます。
各1000回程度(クリティカル含む)データを取りました。
通常攻撃 (クリティカルは1/2して算入) | デスマリオネット | グリュード | リセルグリュード |
---|---|---|---|
レベル差 | 5 | 14 | 17 |
防御 | 700 | 830 | 830 |
観測最大値 | 744 | 569 | 540 |
観測最小値 | 215 | 73 | 58 |
観測平均値 | 478.34 | 321.39 | 294.71 |
データ数 | 942 | 1029 | 1004 |
ここで、敵の防御が0だった場合の期待値を考えると、
通常攻撃 (クリティカルは1/2して算入) | デスマリオネット | グリュード | リセルグリュード | |
---|---|---|---|---|
レベル差 | 5 | 14 | 17 | |
防御 | 0と仮定 | 0と仮定 | 0と仮定 | |
防御無視時最大値 | 1094 | 990 | 956 | |
防御無視時最小値 | 624 | 565 | 545 | |
防御無視時平均値 | 859.28 | 777.87 | 750.74 | |
データ数 | 942 | 1029 | 1004 |
となります。
ここで、グリュードとリセルグリュードの防御力は同じ830のため、
これら2種類の(防御無視時ダメージ)−(観測値)が、防御力によって減らされたダメージになります。
通常攻撃 (クリティカルは1/2して算入) | デスマリオネット | グリュード | リセルグリュード | |
---|---|---|---|---|
レベル差 | 5 | 14 | 17 | |
防御 | 700 | 830 | 830 | |
防御無視時最大値−観測最大値 | 350 | 421 | 416 | |
(防御無視時最大値−観測最大値) ÷防御力 | 0.5000 | 0.5072 | 0.5012 | |
防御無視時最小値−観測最小値 | 409 | 492 | 487 | |
(防御無視時最小値−観測最小値) ÷防御力 | 0.5843 | 0.5928 | 0.5867 | |
防御無視時平均値−観測平均値 | 380.93 | 456.48 | 456.03 | |
(防御無視時平均値−観測平均値) ÷防御力 | 0.5442 | 0.5500 | 0.5494 | |
データ数 | 942 | 1029 | 1004 |
防御力によって減らされたダメージがグリュード・リセルグリュードでほぼ同じであることから、
防御による減算分にレベル差は影響しないことが分かります。
また、(防御無視時ダメージ)−(観測値)を防御力で割った値が0.50〜0.60の範囲内であるので、
(ダメージ)=(レベル補正後のダメージ)−(敵防御力)×(0.50〜0.60の範囲の乱数)
となります。
防御の影響が分かったので、観測値から防御による減少分を除くと、
通常攻撃 (クリティカルは1/2して算入) | デスマリオネット | グリュード | リセルグリュード |
---|---|---|---|
レベル差 | 5 | 14 | 17 |
防御 | 700 | 830 | 830 |
観測最大値+(防御)×0.50 | 1094 | 984 | 955 |
観測最小値+(防御)×0.60 | 635 | 571 | 556 |
観測平均値+(防御)×0.55 | 863.34 | 777.89 | 751.21 |
となります。
これをそれぞれ{(100−レベル差)÷100}で割ると、
通常攻撃 (クリティカルは1/2して算入) | デスマリオネット | グリュード | リセルグリュード |
---|---|---|---|
レベル差 | 5 | 14 | 17 |
防御 | 700 | 830 | 830 |
{観測最大値+(防御)×0.50} ÷{(100−レベル差)÷100} | 1151.58 | 1144.19 | 1150.60 |
{観測最小値+(防御)×0.60} ÷{(100−レベル差)÷100} | 668.42 | 663.95 | 669.88 |
{観測平均値+(防御)×0.55} ÷{(100−レベル差)÷100} | 908.78 | 904.53 | 905.07 |
となり、攻撃力の値とほぼ同じになります。
したがって、レベル補正は検証2と同じく×(100−レベル差)÷100でいいようです。
これに防御の影響を加えた式、
(攻撃力)×(100−敵とのレベル差)÷100−(敵の防御力)×(0.5〜0.6の範囲の乱数)
が、物理攻撃の通常攻撃時のダメージになると推定されます。
攻撃力704〜1247、Lv71でサベッジスタブLv30(単発80%)を、
ファイアブルLv90、防御835に使って実験しました。
データの総数は7650程度でした。
最小・最大値共に、理論値の範囲内で、かつかなり近い数値が確認できました。
表示上の攻撃力が同じでも小数点以下の違いがある場合に、どのような違いが出てくるのかを調べてみました。
それぞれ400個ずつデータをとりました。
通常攻撃ダメージ | 5 | 6 | 7 | 8 | 9 | 計 | |
---|---|---|---|---|---|---|---|
STR5 DEX35 | 回数 | 46 | 105 | 112 | 96 | 41 | 400 |
割合 | 11.5% | 26.25% | 28% | 24% | 10.25% | 100% | |
STR5 DEX37 | 回数 | 6 | 98 | 119 | 103 | 74 | 400 |
割合 | 1.5% | 24.5% | 29.75% | 25.75% | 18.5% | 100% |
明らかに両端の数値の出る割合が違うことが分かります。
図示してみると、
となります。
ここで、(1)5.628〜9.45、(2)5.928〜9.75の間にある数をそれぞれ適当に選びだすとき、
その得られた数の整数部分の確率分布は下表のようになります。
整数部分 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|
(1) | 9.73% | 26.16% | 26.16% | 26.16% | 11.77% |
(2) | 1.88% | 26.16% | 26.16% | 26.16% | 19.62% |
図示すると、
こうなります。
上のダメージの分布図とほぼ同じ構造になっているのが分かると思います。
したがって、
通常攻撃力算出時、小数点以下の数値も含めた確率で算出され、その後整数部分だけが使われる
ことが分かります。
したがって、例えば正確な攻撃力が100.50〜200.00でデンデンに通常攻撃をした場合、
101〜199までの数値は均等な割合で出ますが、
100が出る確率はその半分、200が出る確率は1/100以下(算出方法による)しかありません。
既にfunny days様にて防御補正にチャージ補正は乗算されないことは検証されていたのですが、
レベル補正のかかり方を調べてみることにしました。
まずは防御補正にチャージ補正が乗算されないことの追試を行いました。
通常攻撃 | 最小 | 最大 |
---|---|---|
防御無視理論値 | 76 | 138 |
観測値 | 17 | 87 |
差 | 59 | 51 |
仮にチャージ補正が防御補正にも乗算されるとすると、
防御による減算量は47.5〜57の範囲でないといけないので、実測値と矛盾します。
したがってチャージ補正は防御補正に乗算されないことが確認できました。
なお、最大攻撃力の小数点以下がぴったり0、最小攻撃力の小数点以下も大きいので、
1つ上の検証で示したように理論上最大値最小値が出る確率は非常に低いため、
本来は50〜60の差が出るはずですが、データを取るのを途中放棄しています。
次に、チャージ補正がレベル補正にかかるかどうかを調べました。
通常攻撃 | 最小 | 最大 |
---|---|---|
観測値 | 44 | 468 |
チャージ補正がレベル補正にかかる場合の理論値 | 41 | 469 |
チャージ補正がレベル補正にかからない場合の理論値 | 37 | 462 |
仮に(攻撃力)×(チャージ補正)−(攻撃力)×((敵レベル)−(自レベル))÷100とした場合、
観測最大値が理論値を超えているので不適です。
(攻撃力)×(チャージ補正)×(100−((敵レベル)−(自レベル))÷100)の方は
観測値が理論値内に収まっているので、こちらが正しいと推定されます。
まずは属性の相性による補正が防御補正に乗算されるかどうかを調べました。
通常攻撃 | 最小 | 最大 |
---|---|---|
観測値 | 36 | 215 |
((攻撃力)−(防御補正))×(弱点補正)の場合の理論値 | -34(※1) | 100 |
(攻撃力)×(弱点補正)−(防御補正)の場合の理論値 | 31 | 218 |
(※1:1以下の数値を1に繰り上げる処理は無視)
数百程度しかデータをとっていないので若干差は出ていますが、
属性の相性による補正は防御補正には乗算されないようです。
次に、レベル補正に乗算されるかを調べました。
通常攻撃 | 最小 | 最大 |
---|---|---|
観測値 | 262 | 898 |
レベル補正が防御補正に乗算される場合の理論値 | 252 | 909 |
レベル補正が防御補正に乗算されない場合の理論値 | 265 | 932 |
正確な最大・最小値を得られるまで攻撃を繰り返すととてつもなく時間がかかるので、
それぞれの式から得られる理論値から外れた数値が得られた時点で終了しました。
相性補正はレベル補正には乗算されるようです。
ソウルマスターコンボアタック・アドバンスドコンボ計算式の検証を参照してください。
小数点以下の処理がどのタイミングで何度行われているのかによって、
数ポイントの誤差が生じる可能性があります。
これはあくまで推測にすぎませんが、
n = int(ステータスから算出された攻撃力の範囲内の乱数)
lv = (敵レベル)−(自レベル)
lv < 0ならlv = 0
D = int(n - int(n×lv÷100) - int((敵防御力)×(0.5〜0.6の範囲内の乱数)))
Ds = int(D × スキル倍率)
となっていると考えると上手くいくような気がします(intは端数切捨て処理)。
少なくとも、Dを一度計算してから、スキル倍率をかけてDsを出しているのはほぼ確定だと思われます。
検証3で通常攻撃のクリティカル時に、1500程度のデータ内に奇数の値が確認できませんでした。
シャープアイズがかかっていない状態でのストレイフLv30(100%)のクリティカル時にも、
奇数の値を観測したことがありません。
パワーストライク(200%)で攻撃してみたところ奇数の値を確認しました。
どうやらint((算出値)×(スキル倍率))+int((算出値)×(クリティカル倍率))になってるようです。
なお、ダメージが1未満になった場合、強制的に1になる現象に関しては、
どういう処理がなされているのか不明です。
ボムの初弾(修正前:50%)やスラブラEXの後方(少なくとも50%以下)ではmiss表示になり、
サベジ(80%)では1になるので、おそらくD < 1になった場合、
スキル倍率が一定値以下(多分50%?)だと0(=miss)に、
一定値以上だと強制的に1になるんじゃないかと思いますが、さすがに検証する気はありません。
以下の3枚のSSは、上記の追試にて撮影したものです。
見えづらいですが、1枚目の一番下のダメージは「345」です。
上3つと下3つの数値とMISSの並びが全く同じになっています。
7000回以上もデータを取ればそんなこともある、というわけではなく、
これは1体のファイアブルに対してサベジを使ったときのものなのです。
サベジ1発の平均ダメージは1274.4、命中率は65%程度なので、
1体のファイアブルには55発程度サベジを使っているのですが、
3/55の確率で上のような数値がでるわけがありません。
さらに、ちょっと形は違いますがこんなのもありました。
最後がMISSになっていますが、形としてはかなり近いです。
これも同じファイアブルです。
これらの現象はたまたま1体のファイアブルの場合に集中して起こったわけではなく、
ほとんどのファイアブルで少なくとも1回は観測しました。
詳しくデータを取ったわけではないので不正確ですが、この現象は、
1回の攻撃中にMISSが2回以上出た場合にかなりの頻度で発生しました。
待ち構えていれば余裕でSSが取れるくらいの頻度です。
逆に6回とも命中した場合などには、数字が被るといったことは確認できませんでした。
乱数の関係なのかなんなのかよく分かりませんが……。
計算ツール作ってダメージ計算しても、完全に同じには作れないかもしれませんね。