補足その2:ダメージ計算式の導出


4.トルネコの攻撃力

続いて、トルネコの攻撃力について考察していきます。攻撃力に関わるトルネコのステータスにはレベル・剣の強さ・ちからの三つがあるので、この組み合わせをいろいろ変えてひたすらダメージの最小値と最大値を収集しました。パラメータの変化に敏感なデータを集めるため、防御力が最小であるスライムとドラキーを攻撃したときのダメージを記録しています。防御力が1であること、そしてそれによりダメージが15/16になることがすでにわかっているので、収集したダメージデータを16/15倍することでトルネコの攻撃力に関する情報が得られます。まずは剣の強さとちからについて。下の図をご覧ください。

図4-1
図4-1:スライム/ドラキーに対するダメージデータ。横軸は剣の強さとちからの合計、縦軸はダメージの最小値と最大値から算出した値。(レベル19でのデータ)

図4-1は、剣の強さとちからの合計を横軸に、スライム/ドラキーに対するダメージの最大値と最小値から前節と同様にして算出した数字を縦軸の値とその誤差棒としてプロットしたものです。ただし、剣の強さ+ちからが大きくなりすぎると攻撃力は限界に達してしまうので、最大値が255に届く範囲のデータについてはここでは除きました。一目見てわかるように、きれいに直線に並んでいるのが確認できます。更に詳しく調べると、直線のx切片はx=-8付近になることがわかりました。つまり、

攻撃力=(剣の強さ+ちから+8)×レベルで決まる数字(直線の傾き)

ということです。各レベルについて上図と同様にデータを処理し、直線の傾きが満たすべき範囲を求めてやれば、その範囲の中央の値をとりあえずの結論とすることができます。ただし、この計算だけではそれほど高い精度は期待できません。そこで、「プログラム内ではキリの良い数字が使われているはず」という仮定を利用することにします。このことを調べるために、レベルが上がった時の傾きの変化量をプロットしてみました(図4-2)。

図4-2
図4-2:傾きの変化量の度数分布

これを見ると、レベルアップに伴う傾きの変化量は等間隔な七つのグループに分けられることがわかります。差が等間隔になるということは、言い換えれば傾きはすべて何かの数字の整数倍として表現できるということでもあります。この場合、1/16の整数倍と考えるとすべての数字をかなり良く説明できることがわかりました。

:データから求めた直線の傾きを16倍したもの
レベル傾き×16予想値
1 5.04 5
2 7.02 7
3 8.94 9
4 10.97 11
5 13.02 13
6 16.02 16
7 19.05 19
8 22.03 22
9 24.99 25
10 29.08 29
11 33.06 33
12 36.96 37
13 41.03 41
14 45.93 46
15 50.99 51
16 56.05 56
17 61.10 61
18 65.05 65
19 71.08 71
20 74.07 74
21 77.12 77
22 80.01 80
23 83.14 83
24 86.10 86
25 89.15 89
26 89.88 90
27 91.20 91
28 92.05 92
29 93.15 93
30 94.07 94
31 95.13 95
32 96.00 96
33 97.03 97
34 98.07 98
35 99.01 99
36100.06100
37100.06100

以上の数値をここでは「基本攻撃力」と呼ぶことにします。ここまででわかった点をまとめると、

となります。


攻撃力の端数処理問題

これでダメージ計算式は完成した……と言いたいところですが、まだ詰めの作業が残っています。上で求めた式を使ってダメージ範囲を予想し元のデータと比べると、かなりのデータは正確に合うものの、最小値または最大値の予測が実際よりも1だけずれる例がいくつも出てきてしまうのです。非常に小さな差ではありますが、もう少しだけ考えてみましょう。

ここでモンスターの攻撃力のことを思い出してみます。モンスターの攻撃力とダメージ分布その2で辿り着いた結論のひとつは、モンスターの攻撃力は255までの整数であるということでした。トルネコの攻撃力についても、同様に四捨五入して整数値に直して計算するべきなのでしょう。この変更により、1だけずれていたデータの大部分が合うことが確認できました。しかし、これでも合わないデータがまだ少しだけ残ります。これらについては(剣の強さ+ちから)が8以下という共通点を持つため、この数値が8以上と8未満とで四捨五入の方向を変えてやることでうまくダメージ範囲を説明することができました。結局、先ほどの式は次のように変更されます。

攻撃力=基本攻撃力+[基本攻撃力×(剣の強さ+ちから−8)÷16を四捨五入した値]

これでようやく攻撃力についての式は完成です。が、うまくいったとは言うものの、先の式では単に8を足して基本攻撃力をかけるだけというシンプルな形だったのに、それに比べると何だか不自然な式のような気もします。本当にこれでいいの?……そんな疑問がつい浮かんでしまいますが、実はこの変形により、ダメージ計算最大の謎とも言える現象を同時にうまく説明することができるのです。この点については次節にて。


この節の結論

  1. トルネコの攻撃力=基本攻撃力(レベルによって決まる整数値)+[基本攻撃力×(剣の強さ+ちから−8)÷16を四捨五入した値]
  2. 最大ダメージ=攻撃力×(15/16)^防御力×143/128の端数を切り捨てた値
  3. 最小ダメージ=攻撃力×(15/16)^防御力×7/8の端数を切り捨てた値

前へ 次へ

トップ > ゲームの話 > トルネコの大冒険 > 補足その2:ダメージ計算式の導出 > 4.トルネコの攻撃力