テツポンドのブログ

テツポンドのブログ

テツポンド(Twitter : https://twitter.com/tetspond)のブログです。

【ポケモンSV】テラレイドバトルで意図せず発生する観測可能なダメージオーバーフロー

実戦で意図せずダメージオーバーフローが起きそれを観測できる事例を紹介したい

 

ソロだと難しいです

 

はじめに

 

 ポケットモンスタースカーレット・バイオレットのテラレイドバトルとダメージオーバーフローについての記事です。

 ポケモンにはダメージオーバーフローが存在し、状況を調整して実験するとオーバーフローを観測することが可能でした。しかし、オーバーフローの発生と観測は敷居が高く、今まで意図せず発生したオーバーフローを観測するということは普通ありませんでした。しかし、最新作のテラレイドバトルで、意図せずそれが起きうるようになりました。

 

 なお、ポケモンのダメージオーバーフローには16bitダメージオーバーフローと32bitダメージオーバーフローがありますが、今回の記事に出てくるのは16bitダメージオーバーフローです。

 

 

 

 

前提

 

(1)

 この記事ではダメージ計算の過程は省略します。式については以下をご参照ください。

latest.pokewiki.net

ダメージ - ポケモンWiki

 

 次の項で紹介する記事の中では、ダメージ計算式について詳しく触れています。

 

 

(2)

 テラレイドバトルについては以下を参考にしています。

 いけいけドンドンについては、この記事では常に倍率を1.5倍として扱います。

テラレイドバトル - ポケモンWiki

 

(3)

 「*」は、掛け算の記号です。

 

 

 

まず、ダメージオーバーフローとは何か

 

 今回取り扱う16bitダメージオーバーフローは、「最終的なダメージは、計算結果を65536で割った余りになる」というものです(原理としては、3桁のカウンターで999から2カウントしたら001になったというのと同じです)。

 例えば、計算結果が65530なら65530ダメージになりますが、65540だと4ダメージになり、70000だと4464ダメージになり、200000だと3392ダメージになります。

 

 

 ダメージオーバーフローについての日本語文献はかなり少ないです。

 弊ブログは数少ない文献の一つとなっていて、

オーバーフロー カテゴリーの記事一覧 - テツポンドのブログ

にいくつか記事があります。

 ちなみに、ポケモンにはダメージ以外でもオーバーフローがあります。上記カテゴリには、すばやさのオーバーフロー(レジエレキがトリルで……というのとは別です)、追加効果発動確率のオーバーフローについての記事が入っています。

 

 ダメージオーバーフローについての過去記事は以下のとおりです。

tetspond.hatenablog.com

 

tetspond.hatenablog.com

 

↓ 一番のお気に入り

tetspond.hatenablog.com

 

↓ 今回取り扱わない32bitダメージオーバーフローを取り扱った記事

tetspond.hatenablog.com

 

 

 

 

普通、意図せずオーバーフローを観測することはない

 

 普通は、意図せずオーバーフローを観測することはありません。

 その理由を以下に書きます。

 

理由1 普通、発生しない

 

 例えば、剣盾のレベル50対戦で、攻撃6段階上昇の霊獣ランドロス(攻撃=216*4=864

)が防御最低のフェローチェ(防御37)に威力140のダイジェットを使い、それが最高乱数&急所だった場合でも、ダメージは12960です。

 

 最終的なダメージが65536以上になるということのハードルがまず高いのです。

 

 

理由2 普通、万が一発生しても観測できない

 

 仮に、理由1のハードルをクリアして65536以上のオーバーフロー前ダメージを出せるという状況になったとします。そこから先にもハードルがあります。

 

 ポケモンの最大HPはせいぜい数百程度です。オーバーフローを観測するためには、ダメージの数値を攻撃を受ける相手のHP未満に抑えなければなりません。相手を倒してしまったのでは、ダメージがオーバーフローで減っているのかがわからず、観測したとは言えません。

 そのため、ダメージ計算の結果を65536で割ったときの余りが、1~「受け手の最大HP-1」の範囲になっていないといけません

 

 数万のダメージということは、乱数が1つ動くごとに数百ダメージ程度(乱数補正計算後にかかるタイプ一致補正や相性補正などがかかるので端数のずれはあります)のダメージの変動が発生します。0.85~1.00の16通りのダメージ乱数補正の中でどの数値がかけられるかは、攻撃をするまでわかりません。

 もし、1通りの乱数のときに余りが1~「受け手の最大HP-1」の範囲に収まるという状況になったとしても、他の15通りのときはオーバーフローが発生していたとしても受け手が倒れてしまいます。

 

 こういうことがあるので、通常のダメージオーバーフロー実験では、65536より2桁くらい大きい計算結果になるように場面を設定して、多くの乱数で計算結果が「65536の倍数*n+小さい数」になるようにしています。こうすることで「小さい数」がオーバーフロー後の値として出てきます。

 そして、そのような場面は、意図的に作らないと実現しません。

 

 

小まとめ

 

 まとめると、

まず、65536以上のダメージを作り出す必要があり、

次に、とある乱数でなら受け手がオーバーフロー後のダメージを耐えられるようにする必要があり、

さらに、その乱数を引く必要があります。

 

 以上のことから、SV発売までは、世界中で何兆回と行われた攻撃の中で、意図せずダメージオーバーフローを観測した事例は、10回未満しかなかったのではないかと考えています。

 

 

 

しかし、テラレイドバトルは違う

 

 しかし、テラレイドバトルは今までよりもダメージオーバーフローが発生&観測しやすくなっています。

 

 

理由1 レベル100が使える

 

 通常の対戦はレベル50以下(基本はレベル50統一)で行われますが、テラレイドバトルにレベル制限はありません。

 ダメージ計算には、攻撃側のレベルがかかわっています。レベル50と比べて、自分の攻撃/相手の防御が同じでも1.9倍程度ダメージが大きくなります。

 大きなダメージを出しやすいです。

 

 

理由2 レベル差がある

 

 テラレイドバトルの相手は、レベル100ではありません。例えば、星5のテラレイドバトルでは相手のレベルは75です。

テラレイドバトル - ポケモンWiki

 ステータスに差があるため、大きなダメージを出しやすいです。

 

 

理由3 相手のHPが増える

 

 テラレイドバトルの相手は、HPが通常よりもかなり大幅に増えます。例えば、星5のテラレイドバトルでは相手のHPは20倍になります。

 相手のHPが増えることで、ダメージオーバーフローを観測するためのオーバーフロー後ダメージの許容範囲が広がり、観測しやすいです。

 

 

理由4 特大火力による一撃を狙われやすい

 

 テラレイドバトルでは、敵ポケモンの残り体力か残り時間が少なくなると、相手がバリアを貼りダメージを軽減してきます。その対策として、低難易度のテラレイドではバリアを貼られるより先に特大火力を与えて一撃で一気に相手を倒すというものがあります。

 プレーヤー側がそれを狙ってワンパン志向で行動しやすいため、オーバーフローを意図せずとも特大火力を出す方向になりやすいです。

 

 

理由5 ハピナスが相手になりやすい

 

 期間限定テラレイドで、定期的にハピナスが出現します。テラピース集めを目的にたくさんのバトルが行われます。

 ハピナスは、防御の数値が低いことによりオーバーフローが発生しやすく、さらに、HPが高いため、オーバーフローの観測をしやすいです。

 

 

 

それでも、ソロでは難しい

 

 それでも、ソロでのテラレイドバトルでの実現は難しいです。

 観測はしやすくなっても、ダメージの数値の大きさのハードルはレベルの要素による追い風があっても依然として高いです。

 

 

 条件を設定します。

 ここでは、仮想敵を星5レイドのHP個体値31・防御個体値31・防御に関係する性格補正なしのハピナスとします。

 星5レイドの敵はレベル75であるため、ハピナスの防御の実数値は43です。普通のレベル50のポケモンの半分くらいしかない低い値です。

 通常時のHPは490で、星5レイドであるため20倍になって、9800になります。オーバーフロー後に4桁に収まれば許容範囲ということになります。

 

事例1

 レベル100の攻撃特化ガチグマが、はらだいこ(攻撃6段階上昇で攻撃4倍)・こんじょう(攻撃1.5倍)・いけいけドンドン(攻撃1.5倍)のぶちかまし(威力120)で、地面弱点テラスタルハピナスを攻撃した場合、最高乱数でのダメージは26334です。足りません。

 

事例2

 相手の防御も下げてみます。

 最強ゴリランダーレイドで活躍したレベル100の防御特化アーマーガアの防御6段階上昇・がっちりぼうぎょ(防御1.5倍)のボディプレスで、防御6段階下降の格闘弱点テラスタルハピナス(43/4で防御10)を攻撃した場合を計算します。なお、普通、ボディプレスは攻撃に関係する効果を受け防御に関係する効果を受けないのですが、テラレイドバトルの応援は例外となっています(参照:ボディプレス - ポケモンWiki)。

 この場合でも、最高乱数で27340です。足りません。

 

事例3

 星5レイドで65536以上のダメージを出すには、レベル100の特攻特化ガラルヤドキングが、鉄壁瞑想6積み状態でいけいけドンドンを使って威力380のアシストパワー(火力指数 2100*380=798000)を、特防6段階低下のエスパー弱点テラスタルのレベル75ハリテヤマ(防御 118/4=29)に当てる、くらいまでする必要があります。

 ここまですれば、最高乱数時に69348になります。足りました。しかしこれでも、16通りのうち6つの乱数でしか65536以上になりません。

 普通に相手を倒そうとするだけだとここまでするのは稀です。

 さらに、上記の13ターンの準備をしているうちに、味方NPCが相手を削り、バリア展開かこちらの能力リセットをされてしまいます。星3や星4ならなおさらで、なんならNPCだけで数ターンで敵を倒してしまいます。状況を整えるのも難しいのです。

 

 

 

しかし、マルチなら起こりやすい

 

 上記のように、ソロでテラレイドバトルをやっていてもなかなか65535を超えることはありません。

 しかし、マルチでテラレイドバトルをすると、味方のサポートが重なりさらに大きなダメージが自然と出るようになります。

 

 

  今回は、以下の実例を取り上げます。Twitter(X)でFFの方が遭遇した事例です。

 

 (関係ないですが、てだすけが微妙にずれて重なって一定の間隔の拍手になっている場面を初めて見ました。)

 

 

 ガチグマの攻撃は、攻撃特化の394から、攻撃ランク最大で4倍、いけいけドンドンで1.5倍、こんじょうで1.5倍で、3546です。

 威力は、状態異常により威力140になったからげんきが手助け2回で2.25倍になって、315です。

 ハピナスの防御は、防御最低で1/4倍で、10です。

 

 まず、攻撃側のレベル・攻撃・防御・威力から決定される基礎ダメージを求めます。計算の意味は省略するので、気になれば記事の最初のほうに載せた参考文献を参照ください。

100*2/5+2 = 42

42*3546*315/10 = 4691358

4691358/50 +2 = 93827.16 +2 → 93829

 

 93829ということで、65536以上になりました。

 ここから、乱数の計算とタイプ一致補正の計算をします。

 

 乱数を最低乱数とした場合、0.85をかけることになり、

93829*0.85 = 79754

 そこから、タイプ一致補正で

79754 * 1.5 = 119631

で、計算結果は119631になります。

 オーバーフロー後の数値は54095になります。最終的に、ハピナスは54095ダメージを受けることになります。

 

 しかし、ハピナスのHPは9800であるため、これではハピナスが一撃で倒され、オーバーフローを観測できません。

 別の乱数ならどうか、ということで、計算してみました。

基礎ダメージ 乱数 乱数補正後 一致補正後 overflow後
93829 0.85 79754 119631 54095
93829 0.86 80692 121038 55502
93829 0.87 81631 122446 56910
93829 0.88 82569 123853 58317
93829 0.89 83507 125260 59724
93829 0.90 84446 126669 61133
93829 0.91 85384 128076 62540
93829 0.92 86322 129483 63947
93829 0.93 87260 130890 65354
93829 0.94 88199 132298 1226
93829 0.95 89137 133705 2633
93829 0.96 90075 135112 4040
93829 0.97 91014 136521 5449
93829 0.98 91952 137928 6856
93829 0.99 92890 139335 8263
93829 1.00 93829 140743 9671

 

 乱数が0.94以上のとき、オーバーフロー後の値が9800未満になっています。これなら、ハピナスがダメージを耐えることができ、オーバーフローを観測することができます。

 7/16でオーバーフロー観測成功です(急所は考慮しません)。

 動画では、ハピナスのHPが3割程度削れているため、もしハピナスのもともとの防御が43であるのであれば乱数が0.95だったと思われます。(ただし、実際にはハピナスのうち5割くらいは個体値・性格の関係で防御が43ではなく、そういう場合にはまた別の乱数だったかもしれません。)

 

 このように、実際に意図せず観測可能なダメージオーバーフローが発生することがあります。

 

 

  ちなみに、もともとのこうげきが216のガチグマで同じことをすると、以下のようになり、13/16でオーバーフローを観測できます。

基礎ダメージ 乱数 乱数補正後 一致補正後 overflow後
51440 0.85 43724 65586 50
51440 0.86 44238 66357 821
51440 0.87 44752 67128 1592
51440 0.88 45267 67900 2364
51440 0.89 45781 68671 3135
51440 0.90 46296 69444 3908
51440 0.91 46810 70215 4679
51440 0.92 47324 70986 5450
51440 0.93 47839 71758 6222
51440 0.94 48353 72529 6993
51440 0.95 48868 73302 7766
51440 0.96 49382 74073 8537
51440 0.97 49896 74844 9308
51440 0.98 50411 75616 10080
51440 0.99 50925 76387 10851
51440 1.00 51440 77160 11624

 

 

 

関連ツイート

 

 TwitterでFFの方のツイートを紹介します。

 

 ニャイキング4匹で2ターンかけてアイアンヘッド1回で敵を倒す場合の、ダメージオーバーフローが起きる敵の種族値

 (2つ目のツイートが訂正版)

 

 

 

おわりに

 

 大きすぎる火力にはご注意を!ということを言える日が来るとは、と若干感動しています。SVで、オーバーフローが少し身近なものになりました。

 レイド自体は剣盾からありましたが、マックスレイドバトルでは1回の攻撃ではHPを一定値までしか削れず、その仕組みのせいでオーバーフローが観測されなかったのだろうと考えています。

 

 お読みいただきありがとうございました。

 

 もしダメージオーバーフローに興味が湧いたら、上述のガチグマでハピナスレイドをマルチで回るか、以下の記事に沿って1時間くらいで実験をするかして、ダメージオーバーフローを体験してみてください。

tetspond.hatenablog.com

 

 

翌日追記

 テラレイド関係だとこういう記事も書いてます。

tetspond.hatenablog.com

 

 

記事一覧 - テツポンドのブログ

オーバーフロー カテゴリーの記事一覧 - テツポンドのブログ

 

Twitterアカウント

テツポンド (@tetspond) | Twitter