ダメージ
崩壊学園のダメージ計算は非常にシンプルで、ざっくり書くとこのようになります。
もう少し厳密に書くとこうなります。
:非会心ダメージ。(1-会心率)の確率で発生する。
:基礎攻撃力。武器にそれぞれ設定されている。上げる手段はほとんど無い(空想星霊・双子など)。
:基礎攻撃力にかかるバフ。食べ鳥ちゃん、昇格レベルで上げられる。
:攻撃力加算。攻撃力+100など。
:攻撃力乗算。攻撃力+100%など
:倍率。200%のダメージを与える、など。表記がない場合は100%
:与えるダメージ+100%など。基本的には乗算。
加算の場合:同じスキル内、属性ダメージ同士、など
乗算の場合:異なるスキル同士、説明文に乗算とかかれている、など
:受けるダメージ+100%など。基本的には乗算。
:会心率。基本的には加算。デフォルトは0%。多くの装備は5%の基礎値がある。
:会心ダメージ。基本的には加算。デフォルトは200%
最大HP
:最大HP。
:基礎HP。服装ごとに設定されている。
:基礎HP%。食べ鳥ちゃん、昇格レベルで上げられる。
:プレイヤーレベル。
:HP加算。
:HP乗算。
移動速度
:基礎移動速度。現状姫子の聖痕以外に上げる手段はない。
:常在移動速度。部室効果、勲章の追加移動速度も常在移動速度。それ以外は常在移動速度と明示されていることが多い。
:移動速度。単に移動速度と書かれている場合。
会心の再計算
空想星霊・獅子などは、会心率が100%を超過した場合、会心の再計算を行う効果があります。
計算パラメータ
:会心の層数
:層目の会心率倍率
:層目の会心ダメージ倍率
:層目の会心発生時ダメージ
設定パラメータ
:会心率倍率
:会心ダメージ倍率
:非会心時のダメージ
:減衰率
具体例
会心率倍率310%
会心ダメージ倍率1000%
非会心時のダメージ3000
減衰率25%
会心の層数 | 会心率倍率 | 会心ダメージ倍率 | 会心発生時のダメージ |
1(通常の会心) | 310% | 1000% | 3000 × 1000% |
2 | 210% | 750% | 3000 × 1000% × 750% |
3 | 110% | 500% | 3000 × 1000% × 750% × 500% |
4 | 10% | 250% | 3000 × 1000% × 750% × 500% × 250% |
5 | 0% | 200% | 3000 × 1000% × 750% × 500% × 250% × 200% |
この場合、
10%の確率で(3000 × 1000% × 750% × 500% × 250%)ダメージが発生し、
90%の確率で(3000 × 1000% × 750% × 500%)ダメージが発生する。
その他
- あるステータスを参照して他のステータスを上昇させるスキルでは、参照するステータスは与ダメ以外で、上昇するステータスは与ダメとなる場合がほとんど
- 「n%ごとに~」計算は切り捨てが多い(1.9n%でも1.0n%と同じ)
- ただし切り捨ての有無は、なぜか同じスキルでも状況によって変化したりする。
- 弾薬上限は基本的には加算。最後に切り捨て。
- 攻撃速度は基本的には乗算。
- 基本的には乗算のため、攻撃力+10%、与えるダメージ+10%、敵の受けるダメージ+10%は、全て同じダメージ上昇量となる。 ただし以下のような差が存在する。
- 攻撃力を参照して与ダメupする装備もある
- 敵の被ダメupは通常/予備編成を切り替えても残る
練習室の被ダメ軽減
練習室で召喚する敵は、被ダメのlvを設定することができます。
被ダメlv | ダメージ軽減 |
1 | 0% |
2 | 30% |
3 | 60% |
4 | 90% |
5 | 99% |
6 | 99.90% |
7 | 99.99% |
8 | 99.999% |
9 | 99.9999% |
10 | 99.99999% |
ダメージ軽減の倍率はこのようになっています。しかし実際にダメージを出して検証してみると、数値通りになっていないと疑問に思った方もいるかもしれません。
例えば被ダメlv.4から10まではそれぞれ10倍となっているので、理論的にはダメージの桁数が変わるだけで数値は変わらないはずです。
ところが実際には以下のようになっています。
被ダメ | 実際 | 計算(スプレッドシート) | 誤差 |
被ダメ-0% | 448,575,902,041,767,000 | 448,575,859,548,032,000 | 0.00% |
被ダメ-30% | 314,003,134,865,211,000 | 314,003,101,683,622,000 | 0.00% |
被ダメ-60% | 179,430,367,688,654,000 | 179,430,343,819,213,000 | 0.00% |
被ダメ-90% | 44,857,600,512,098,300 | 44,857,585,954,803,200 | 0.00% |
被ダメ-99% | 4,485,755,380,432,890 | 4,485,758,595,480,320 | 0.00% |
被ダメ-99.9% | 448,570,176,045,056 | 448,575,859,548,032 | 0.00% |
被ダメ-99.99% | 44,865,035,436,032 | 44,857,585,954,798 | 0.02% |
被ダメ-99.999% | 4,491,851,071,488 | 4,485,758,595,460 | 0.14% |
被ダメ-99.9999% | 454,532,562,944 | 448,575,859,561 | 1.33% |
被ダメ-99.99999% | 53,474,414,592 | 44,857,585,931 | 19.21% |
特に被ダメlv10時点での誤差は到底看過できないほどの誤差となっております。
これは浮動小数点によるものです。
ほとんどのコンピュータでは2進数を使って計算しますが、小数点を含む10進数(私たちの普段使う数)の数を、2進数にぴったり変換することは基本不可能なのです。よってコンピュータで小数点を含む計算を行うときには必ず誤差が出ます。そして計算の精度は、使用する計算方法によって異なります。
崩壊学園では32bitの浮動小数点を使用しており、有効数字は約6桁です。
これにより、被ダメ-0.9999999xでは有効数字を超過しているため、大きな誤差が発生します。
具体的には、0.9999999は32bitでは0.9999998807…となります。
この2つでは誤差はほぼありませんが、計算では(1-被ダメ軽減)を掛けるため、0.0000001と0.0000001192…となり、19.2%もの誤差が生じるわけです。
ちなみにスプレッドシートでは64bitの浮動小数点で、有効数字は約15桁です。
以上の内容が本当に合っているかを検証するために、pythonを用いて、基準値(被ダメlv1)に対して32bitで被ダメ軽減を掛けた値を計算したのが以下の表です。
被ダメ | 実際 | 計算 | 誤差 | 被ダメ(32bit) | ダメージ(32bit) |
被ダメ-0% | 448,575,902,041,767,000 | 448,575,859,548,032,000 | 0.00% | 0.00000000000000 | 448575902041767936 |
被ダメ-30% | 314,003,134,865,211,000 | 314,003,101,683,622,000 | 0.00% | 0.30000001192093 | 314003134865211392 |
被ダメ-60% | 179,430,367,688,654,000 | 179,430,343,819,213,000 | 0.00% | 0.60000002384186 | 179430350508785664 |
被ダメ-90% | 44,857,600,512,098,300 | 44,857,585,954,803,200 | 0.00% | 0.89999997615814 | 44857600512098304 |
被ダメ-99% | 4,485,755,380,432,890 | 4,485,758,595,480,320 | 0.00% | 0.99000000953674 | 4485754843561984 |
被ダメ-99.9% | 448,570,176,045,056 | 448,575,859,548,032 | 0.00% | 0.99900001287460 | 448570142490624 |
被ダメ-99.99% | 44,865,035,436,032 | 44,857,585,954,798 | 0.02% | 0.99989998340607 | 44865035436032 |
被ダメ-99.999% | 4,491,851,071,488 | 4,485,758,595,460 | 0.14% | 0.99998998641968 | 4491851071488 |
被ダメ-99.9999% | 454,532,562,944 | 448,575,859,561 | 1.33% | 0.99999898672104 | 454532530176 |
被ダメ-99.99999% | 53,474,414,592 | 44,857,585,931 | 19.21% | 0.99999988079071 | 53474414592 |
“実際”の列と”ダメージ(32bit)”の列を比べると、ほぼ一致していることが分かります。
したがって、この誤差はこちら側からはどうすることもできない誤差だということが判明しました。
これからも崩壊学園はインフレしていくことが予想されますが、これ以上の被ダメ軽減は誤差が大きすぎて実装できないでしょうし、どうするのでしょう?最大HPをもっと高くして指数表記を使うとか?