ダメージ計算における端数処理について

おお、なんということだ。最近、自分たちが旬のコンテンツ「闘戦記」にばかりかまけていたので、図らずも巷の需要に応えるかのような記事ばかりが並んでいるではないか。

いかんぞ、いかんいかん。これは私の本当の姿ではない。いま一度「需要なんてクソ喰らえ」の精神へと立ち戻り、好き勝手な記事を書かなくては。

…そうだな、今日はダメージ計算における端数処理について書くことにしよう。おお見たまえ、波が引くように人が去っていくぞ。


先んじてことわっておくと、今日のお話はあくまで自分はこの仮説にたどりついて以降、計算と実践がズレたケースとまだ出くわしていないという事実だけを頼りにしている。ゆえに、どのような「定式化」も意図していない。読み物として成立させる上での断定寄りの調子も、主張の強度とは一切無関係であることをご理解いただきたい。
 

様々な端数に関する処理

 僕が以前やった企画に「PROJECT:バーニングバード」というものがある。マァこれはほぼ企画倒れに終わったのだが、それに先立ってこの多段特技を利用してダメージ計算の再確認なんかをしていた。僕はけっしてガッツリ検証派ではないので、だいたいこうやって別のコトの副産物として集めたデータで遊んでいる。

 セッティングは画像の通り↓ 例によって全然見なくていい。見なくても成立する読み物になるよう頑張るから(なるとは言ってない)。

zyougedenai 先に言ってしまうとこの条件下のバーニングバードは「125~141」というダメージ範囲を持つ。いわゆる乱数だね。カンタンにいうと、今日はこのダメージ範囲が具体的にどうやって導き出されているかのお話だ。
 

 攻撃力依存の物理特技ダメージの算出には、よく「基礎ダメージ」と呼ばれる数値を使う。これは何の味付けもしていない通常攻撃のダメージとほぼ同義といっていい。「攻撃力/2-守備力/4」という式で求められる。この式は他のナンバリングDQでもよく使われているぞ。
 

 さて、特技ダメージの範囲を計算する場合、まずは基礎ダメージの範囲を計算してその各数字に特技倍率を含む各種の掛け算をしていくという手順を踏む。

 基礎ダメージの最小値と最大値は、例の式で求められる(広義の)中央値247.25にその値の「1/16+1」を足し引きすることで求めている。するとその範囲は「231~264」となる。そこに各種掛け算をして割り出したバーニィ君の最小ダメージが125で、最大ダメージが141というワケ。
 

baniminbanimax さて、今日の本題「端数」の話に入ろう。

 基礎ダメージを割り出す段階で、その数値には小数点以下の端数がでている。まず最初に求めた247.25という値だが、この端数は「維持」される

 次に、基礎ダメージの範囲を求める時だが、ここでの端数は「四捨五入」で処理される。具体的にいうと最小値は230.7968…、最大値は263.7031…なのだが、これが丸められているというコトだ。

 そして次だ。その丸められた数字に対して特技倍率などの掛け算を行なう段階になると、ここでの端数は一括して「切り捨て」られる。たとえばバーニィ君の最大値141は、264という基礎ダメージ最大値に特技倍率・宝珠補正・属性補正・固定値ボーナスやらを適切な手順で処理していった結果の141.1179…という値の端数を切り捨てて求められている。


 こんな感じで、DQ10のダメージ計算式においては各段階で端数処理の方法が異なるのだ。なんとややこしい。

 この法則を最初に割り出す過程はさておくとして、こうした端数処理を含む計算方法が正しいコトを簡易的ながらも確認するためには、出る可能性のあるダメージ値の全てが出現するまで(そして範囲外の数字がでないことを確認するまで)ひたすら同じ特技を実際に使う作業をするワケだ。上の方でいちおう、バーニィ君の最終的なダメ範囲が正しいコトを示す画像だけは張っておいたよ。怒涛の7段攻撃でこういう検証に向いているのがバーニングバードのたったひとつの長所だ。

 ところで、もうちょっと検証精度を上げるためにはバーニングバードのような低倍率特技ではなく、本当はもうすこし強い特技をつかった方がいい。なぜなら計算段階で「絶対に出ないハズの数値」が求められるからだ。

 じつは今回の場合もやっている。全く同じセッティング(属性強化だけは適用されない)のままパワフルスローを使うと、ダメージ範囲内の数値のうち「301、307、313、319、325、331」は絶対に出ないハズと事前にわかる。そして実際に、全てのダメージ値を確認するまでの間にこれらの数値だけが出なかった。「出なかった」ことを画像では証明できないので、信じてくれとしかいえないのだが。
 

おわりに

 本当は、端数処理の話から派生して「各ダメージの出現率の不均等」についてまで書きたかったのだが、とても紙面(?)が足りなくなってしまった。また次の機会に回そう。その時はまた地獄のような退屈をお届けするよっ。
 

 冒頭でも書いたように、DQ10のシステムは僕のやっているニワカ検証で確たる定式化ができるほど単純ではない。いや、本当にダメージ計算には謎が多いんじゃよ…。

 今回の端数処理のお話にしても、自分の思惑とはまったく違うルールによって、たまたま仮説と同じ結果が出ているだけかもしれない。その可能性を網羅的に潰せていないがゆえの「仮説」である。

 さらに添えると、どんな検証も純粋に「独力」のモノではない。直接・間接に自然と先人の知恵を借りているからこそ、いろいろなコトが書けている。今回の場合は、車輪の再発明であったとしても自力検証したことのある内容であるため、いわゆる直接の「参考文献」が存在しないに過ぎない。

 めざすモノは「どんな場面でも1のズレも生じないダメージ計算」だが、コレは遠すぎる野望だ。そしておそらく、一人ではムリなのだ。