ハピナスオーバーフローチャレンジ
初めに
本日はWCS2023の開幕日です!大会に参加している人、配信で観戦している人も多いかと思います。横浜では様々なイベントがあり非常に盛り上がっていますが、ポケモンSVでもイベントが行われています。ハピナスレイドです。
ハピナスレイドは3度目ですが、テラピースをたくさん集めることができ、とても重要になっています。
友達3人でレイドを回していたところ、A+6のテツノカイナのてだすけワイルドボルトでB-6の水ハピナスを倒せないという事件が起きました。
さすがにおかしいと思い、オーバーフローの可能性を計算してみることにしました。
目的
ハピナスを倒せなかった原因がオーバーフローの可能性があるか確認
オーバーフローの発生条件の確認
前提条件
ハピナスレイド☆5
相手:ハピナス レベル75
☆5レイドバトルでは、相手HPが20倍
味方:
①テツノカイナ レベル100 A特化@命の珠 はらだいこ ワイルドボルト
②ブラッキー レベル100 いやなお てだすけ
③ブラッキー レベル100 いやなお てだすけ
観測データ(体感)
・A+6のテツノカイナのてだすけワイルドボルトでB-6の水ハピナスに6割
・A+6のテツノカイナのてだすけワイルドボルトでB-6の水ハピナスに1割
・A+6のテツノカイナのてだすけワイルドボルトでB-6の水ハピナスに10割 数回
・A+6のテツノカイナのてだすけワイルドボルトでB-6の等倍ハピナスに10割 10回以上
アプローチ
ハピナスのB実数値ごとにダメージ計算を行い、考えられる最小ダメージ最大ダメージからオーバーフローの値の予想
・16bitの最大値65536
・16bit符号あり最大値32768
・すばやさのオーバーフローの値10000
あたりから調査
結果
実数値
ハピナスのB実数値
以上からわかるように、ハピナスのB実数値は2倍以上の差がある。
したがって個体値によって、ダメージも2倍以上変動することになる。
テツノカイナのA実数値は416である。
ハピナスのHP
レイドバトルでは、☆の数によって倍率が変わる。☆5ハピナスでは、おおむね10000弱であり、防御実数値ほど個体値の影響を受けない。
ダメージ計算
以上の実数値に沿って、A+6のテツノカイナのてだすけワイルドボルトをB-6の水ハピナスに使った時のダメージ計算を行った。
最低乱数をだったとしても必ず倒せることが分かる。しかし実際には、想定よりも小さいダメージしか与えられていないときがある。
やはり、オーバーフローかその他のバグが発生している。
10000や32768でオーバーフローだとすると、水ハピナス以外の等倍ハピナスに対してもオーバーフローが容易に起こるので、観測結果と矛盾する。
おおよそ50000以上100000以下でオーバーフローが発生している可能性が高い。
65536でオーバーフローと仮定したときのダメージは次のようになる。
個体値0補正値なし、個体値0上昇補正の時にオーバーフローが発生し、ダメージが4桁になりレイドハピナスが倒せない場合があることが分かる。
他の個体値の時についても計算すると、実数値が20~23の時に乱数によってはハピナスを倒せない。
ちなみに実数値20~24で防御ランクが-6の時、1/4にしてあと切り捨てた値は一緒になるので、ダメージ計算結果も同じである。
実数値20~24の時のダメージを全乱数について、下に示す。
乱数によって、オーバーフローしハピナスダメージは1割~8割になる場合がある。
これは観測データとも矛盾しないので、ダメージが65536でオーバーフローすると考えてもおかしくない。
確率計算
ハピナスレイドでオーバーフローが発生する確率を考える。
ハピナスの防御実数値が20~23の時11/16で発生するので、防御実数値が20~23になる確率を考える。
防御実数値は性格補正と個体値で決まる。
防御性格補正の割合は
上昇補正:4/25
補正なし:17/25
下降補正:4/25
である。
上昇補正時、個体値が2以下の時、つまり3/32で実数値が20~23になる。
補正なし時、個体値が5以下の時、つまり6/32で実数値が20~23になる。
下降補正時、個体値が4以上9以下の時、つまり6/32で実数値が20~23になる。
したがって、ハピナスの実数値が20~23になる確率は、
4/25*3/32+17/25*6/32+4/25*6/32=(12+102+24)/800=138/800
であり、17%程度である。
したがって、オーバーフローが発生する確率は
138/800*11/16=0.1186
であり、12%程度である。
観測データを考えると、数回の試行で2回オーバーフローが発生したことになるので、発生しすぎなようにも思える。
しかし、パオジアンのつらら落としを数回打って2回外すことなんていくらでもあり、珍しいことでもない。
したがって、ポケモンSVにおいて、ダメージが65536を超えるとオーバーフローが発生するということは十分考えられ、否定はできないと結論付ける。
実際の仕様については調べてないので、文献あれば教えてください。
終わりに
疑問に思った通りに、確かにオーバーフローが発生してそうなことは分かった。
しかし、夏休み初日にWCSを配信で見ながらこんなことをやってて良いのか非常に怪しいし、せめて横浜の現地イベントに参加するべきではなかったのかと思う。
次回は結果を残して構築記事を書きたいです。