ダメージ計算/ショック

スポンサーリンク

「ショック」のダメージ分布 Edit

アリスのPSYが200である場合における、スキル「ショック」の、実際のダメージ分布を挙げてみます。

ダメージ 出現回数
180 4
181 0
182 7
183 0
184 4
185 0
186 10
187 0
188 5
189 0
190 8
191 0
192 10
193 0
194 6
195 0
196 12
197 0
198 6
199 0
200 5
201 0
202 10
203 0
204 5
205 0
206 5
207 0
208 6
209 0
210 10
211 0
212 7
213 0
214 8
215 0
216 6
217 0
218 4
219 0
220 2

こんな感じです。合計の試行回数は140回です。

この表から、面白いことが分かります。出現するダメージ数値1つ飛ばしになっているのです。別の言い方をすると、偶数のダメージしか出現していません。

なお、アリスのPSY = 200である今回の場合、出現するダメージ数値のパターンは、180から220まで、1つ飛ばしで21通りであるということを覚えておいてください。

そして、上記の表にダメージが、アリスのPSY = 200の何倍であるのかも追加したのが以下の表となります。

ダメージ 出現回数 PSYとの関係
180 4 0.9倍
181 0 0.905倍
182 7 0.91倍
183 0 0.915倍
184 4 0.92倍
185 0 0.925倍
186 10 0.93倍
187 0 0.935倍
188 5 0.94倍
189 0 0.945倍
190 8 0.95倍
191 0 0.955倍
192 10 0.96倍
193 0 0.965倍
194 6 0.97倍
195 0 0.975倍
196 12 0.98倍
197 0 0.985倍
198 6 0.99倍
199 0 0.995倍
200 5 1倍
201 0 1.005倍
202 10 1.01倍
203 0 1.015倍
204 5 1.02倍
205 0 1.025倍
206 5 1.03倍
207 0 1.035倍
208 6 1.04倍
209 0 1.045倍
210 10 1.05倍
211 0 1.055倍
212 7 1.06倍
213 0 1.065倍
214 8 1.07倍
215 0 1.075倍
216 6 1.08倍
217 0 1.085倍
218 4 1.09倍
219 0 1.095倍
220 2 1.1倍

この表から判断するに、『停滞少女』のダメージ計算において、最終的なダメージをバラけさせている乱数[乱数 1] は、言うなれば、小数第三位以下が切り捨てられ[乱数 2] ているような状況です。

小数第三位以下の切り捨てにより、 0.9050.9 に、 0.9150.91 になり、その結果、 200 × 0.905181 200 × 0.915183 といった小数第三位を必要とするダメージが存在し得なくなっているのだろうと考えられるのです。

[乱数 1]
ランダムな数値=乱数
[乱数 2]
実際には、小数点の位置を2桁分右にずらした上で小数点以下をまるごと全部切り捨てている筈です。が、詳細は後述

「ショック」のダメージの具体的な計算予想 Edit

乱数取得 Edit

具体的にどのような計算が行われているのか、想像してみましょう。


まず、0〜20という21通りの整数値を、乱数から取得[乱数 3] します。

なぜ21通りなのかといえば、前述の180〜220の内、1つ飛ばしの21通りのダメージをもたらす21通りのランダムな整数を得たいため、21を選択するわけです。

次に、 90 を足し算します。 0≦乱数≦209090≦和≦110 です。最小値は90、最大値は110になります。この計算の和を、改めて、今回ダメージ算出に使用する乱数とするわけです。

なお、90~110までの どの数値 も、出現する確率は だいたい等しく なっています。

[乱数 3]

余談ですが、0〜20という21通りの整数値を得るには、例えば――

  • ( 乱数 × 21 ÷ ( 乱数最大値1 ) )(小数切り捨て) = 0≦解<21 (整数)

――というような計算を行ったりします。

仮に乱数の範囲が 0以上32767以下であれば――

  • ( 0≦乱数≦32767 × 21 ÷ 32768 )(小数切り捨て)= 0≦解<21 (整数)

――となります。まぁ、実際のRPGツクール2000の乱数範囲はもっともっとデカイので、0以上32767以下なんてことはないですけれどね。あくまでも例です。


なお、例に挙げた式中の割る数である32768という数値は、2の累乗数[算数 1] であり215です。このように割る数が2の累乗数である時、コンピュータは高速で、小数切り捨ての割り算をすることが可能です。

例えば、838860という数値は 、コンピュータの中で、11001100110011001100という0と1だけの形式(二進法)で記憶されているのですが、これを 2 × 2 × 2 × 2 × 2 × 2 × 2 × 228256 である256で割り算すると、結果は110011001100(二進法) =3276(十進法) になります。なんと右側の8桁を単純に取り除いただけで、小数切り捨ての割り算の結果が得られるのです。

同様に、838860(十進法) =11001100110011001100(二進法) を 2 × 2 × 2 × 2 × 22532 である32で割り算すると、結果は110011001100110(二進法) =26214(十進法) になります。右側の5桁を単純に取り除いただけで、小数切り捨ての割り算の結果が得られるのです。便利ですね。

なので、838860(十進法) =11001100110011001100(二進法) を215こと、32768で割り算するなら、右側の15桁を単純に取り除いた11001(二進法) =25(十進法) が答えになるわけです。

そういうわけで、 乱数最大値1 の和は、2の累乗数であると効率的。言い換えれば、 乱数の最大値 は、 2の累乗数1 であるべきとも言えます。

[算数 1]

2の累乗数というのは、2; 4; 8; 16; 32; 64; ... という風に2を倍々にしていった数字のことです。

さて、上記のような計算は、RPGツクール2000に対して90~110の乱数をちょうだいとお願いすれば、ツクールの側で勝手にやってくれます。

続いて、 アリスのPSY の値に対して、上記で得られた 90~110の乱数 を掛け算します。 アリスのPSY × 90≦乱数≦110 です。結果は以下のようになります。

アリスのPSY ×90 ×100 ×110
15 1350 1500 1650
20 1800 2000 2200
30 2700 3000 3300
100 9000 10000 11000
200 18000 20000 22000

最後に、得られた数値を100で割り算して、その数値をダメージとします。なお、ツクール2000はゲーム部分においては小数を扱えないため、商の小数点以下はすべて切り捨てられます。

アリスのPSY ×90÷100 ×100÷100 ×110÷100
15 13 15 16
20 18 20 22
30 27 30 33
100 90 100 110
200 180 200 220

最終的に 100 で割り算することにより、 90~110の乱数 (小数切り捨て) は 0.9~1.1の乱数 (小数第三位以下切り捨て) と同じ効果を持つことになるわけです。 ( PSY × 0.9≦乱数≦1.1 (小数第三位以下切り捨て) )(小数切り捨て) ( PSY × 90≦乱数≦110 (小数切り捨て) ÷ 100 )(小数切り捨て) とでは、同じ範囲の数値がダメージとして得られますからね。

乱数の確認実験 Edit

スキル「ショック」において、ダメージを分散させるための乱数は、90~110であるというのが、上記から導き出される推測ですが、それが合っているかどうか、実験をしてみました。アリスのPSYを20まで上げた状態で、「ショック」を使いまくってみたのです。

  • ( PSY × 90≦乱数≦110 ÷ 100 )(小数切り捨て) = ダメージ

――が正しいなら、PSYが20のとき、乱数とダメージの関係は以下の表のようになる筈です。

乱数 ダメージ
90 18
91 18(18.2)
92 18(18.4)
93 18(18.6)
94 18(18.8)
95 19
96 19(19.2)
97 19(19.4
98 19(19.6
99 19(19.8
100 20
101 20(20.2)
102 20(20.4)
103 20(20.6)
104 20(20.8)
105 21
106 21(21.2)
107 21(21.4)
108 21(21.6)
109 21(21.8)
110 22

~18;19;20;21 、の4つのダメージに対して、22ダメージだけは、乱数が最大値である110ぴったりの場合にしか出現しないため、出現回数が1/5くらいに少なくなりそうだ。ということが予想できるかと思います。

そして、実際の結果は、以下の通りです。

ダメージ 出現回数
18 57
19 57
20 43
21 44
22 9

合計210回の「ショック」を仕掛けたところ、22ダメージだけは、他のダメージよりも明らかに出現回数が少なくなっています。しかも、おおよそ1/5に近い比率と言っても良い感じになっていますね。

どうやら、乱数の範囲は90≦110であるという上記の推測は合っているようです。

「ショック」のまとめ Edit

「ショック」に関しては、これで、計算が完了です。ショックのダメージ計算は――

  • ( PSY × 90≦乱数≦110 (小数切り捨て) ÷ 100 )(小数切り捨て) = 「ショック」ダメージ

――となります。実用上は――

  • ( PSY × 0.9≦乱数≦1.1 (小数第三位以下切り捨て))(小数切り捨て) = 「ショック」ダメージ

――と考えて差し支えありません。

しかし、もっと強力なスキルに関しては、どうやら追加の計算が必要となりそうです。

../ブレイン・ブルーに続く。

Amazon.co.jpアソシエイト