ダメージが65536以上だとオーバーフローで値が小さくなるのなら、65535が最大ダメージなので、これを実現したい
(2020/12/10 ビッパが第八世代にいないことに気がつき、防御役・実現手順の項を大幅に書き換えました。)
はじめに
下記の記事で、ダメージの16bitオーバーフローを証明する動画について解説しました。
ダメージ計算では、他の全ての補正計算後の値を65536で割った余りが対象に対して与えるダメージになります。これによって0ダメージを実現していました。
さて、65536で割った余りがダメージになるので、最終的なダメージは0~65535の範囲の整数になります。
よって、オーバーフローを考慮した場合のダメージの最大値は65535です。今回はこのダメージを与える方法について扱います。
掛け算の記号として、「*」の半角である * を用います。また、割り算の記号として、/ を使います。どちらも、キーボード入力ではよく使われる表現です(プログラミングなど)。
第七世代での先行研究
DaWoblefet氏のダメージ計算のコンプリートガイドという資料があります。これは、ダメージ計算に関わる全て、ステータスの計算や特殊な威力計算まで含めて本当に全てが載った、まさに完全版と言える資料です(ジャイロボールの計算式のミスは除く)。
この記事の最後のあたりで、A One-Turn Setup for Maximum Damageという項目があります。 ここでは、1ターンで最大ダメージを実現する方法について書かれています。
概要は以下のようになっています。
攻撃役 ブラックキュレム レベル100 攻撃424
味方のいばるで攻撃ランク2段階上昇(2倍で攻撃848)・ラムの実で混乱は回復。
防御役 コロモリ レベル1 防御4or5
味方からいやなおとを受ける。特性「たんじゅん」によりランク変化が2倍になるので防御4段階下降(1/3で小数点以下切り捨てで防御1)。
攻撃技 おんがえし ノーマルタイプ 物理技
ブラックキュレムのなつき度は230なので威力92
以上のようにして、ブラックキュレムがコロモリにおんがえしで攻撃することで、急所がなく乱数が最大のときにオーバーフローが起きて0ダメージが発生します。
第八世代での実現
第七世代での実現については既に書かれていましたが、技「おんがえし」が廃止されたこともあるので、現在の第八世代での実現について考えてみることにします。同じように、1ターンで65535ダメージを与えることを目指します。
先行研究で使われていた数値を参考にしつつ、その値にたどり着く方法の解説も含めて、実現方法をまとめます。
値の設定
Xの範囲 3276650 <= X < 3276700
基礎ダメージに他の補正をかけないようにして、基礎ダメージを65535にすることで計算後ダメージを65535にすることを検討します。乱数補正と急所補正の影響もなくしたいので、乱数補正は1・急所には当たらないと仮定します。これは、急所なし最大乱数をひくことを前提としていることを意味します。
基礎ダメージ
=( ( (攻撃側のレベル*2/5 +2 )*威力*攻撃側のこうげき / 防御側のぼうぎょ ) /50 +2)
という式があります。()内の計算ごとに小数点以下切り捨てです。
下線部を整数Xとしたとき、X/50+2が65535以上65536未満なら、小数点以下切り捨てで基礎ダメージが65535になります。
式に表すと、
65535 <= X/50 +2 < 65536 です。
これをといて
3276650 <= X < 3276700
となります。
Xの値 3276672
今回、攻撃側をレベル100にするために、Xは3276672を採用します。なぜこの数にするのかについて説明します。
下線部を整数Xとおいたので、
X = ( (攻撃側のレベル*2/5 +2 )*威力*攻撃側のこうげき / 防御側のぼうぎょ )
です。()内小数点以下切り捨て。
攻撃側がレベル100のとき、( (攻撃側のレベル*2/5 +2 )の値は42になります。防御側のぼうぎょが1のとき、Xは整数の掛け算で表されます。式で表すと次のようになります。
X = 42 * 威力 * 攻撃側のこうげき
このとき、整数Xは42の倍数である必要があります。言い換えると、42が約数である必要があります。よって、3276650 <= X < 3276700の範囲で唯一42の倍数である3276672を採用します。
威力×攻撃 78016
X=42*威力*攻撃側のこうげき と X=3276672から、
威力*攻撃側のこうげき = 3276672/42 = 78016
となります。
威力と攻撃の掛け算の結果が78016になるようにすれば、65535ダメージを実現できることになります。
威力 106
78016は整数同士の積です。威力と攻撃の値を設定するため、78016を素因数分解してみます。
下記サイトを使いました。
このサイトには、【ポケモン】他のどのポケモンより最初に行動するすばやさ8191ちょうどは実現可能か 8191は素数 - テツポンドのブログを書いたときにもお世話になりました。
素因数分解の結果、
78016 = 2^6 * 23 * 53 (^は累乗記号)
となりました。
攻撃の値は自由に設定しやすいのに対して、威力はそうではないので、先に威力の方を決めていきたいと思います。
先行研究では、78016 = (23*2*2) * (53*2*2*2*2) = 92 * 848として、威力を92に設定していました。今回は、別の分解として、78016 = (53*2) * (23*2*2*2*2*2) = 106 * 736として、威力106 (53*2)を採用します。
基礎威力 85
威力106の実現方法についてです。わざ「おんがえし」が廃止されたため、威力を自由に操作する方法は減りました。残りHP割合によって威力が変化する技「にぎりつぶす」や「ふんか」などは残っていますが、1ターンで実現することを目指す場合、HP調整の手間があるので難しいです。
ここでは、威力補正を使います。威力に直接かかる補正があります。いろいろありますが、約1.1倍の道具「ちからのハチマキ」、約1.2倍の特定タイプ強化道具、1.25倍の特性「とうそうしん」(強化)、約1.3倍の特性「かたいツメ」、1.5倍の特性「どくぼうそう」などがあります。
普通の技が持っている威力(5の倍数)にこれらの値をかけて、小数点以下を五捨五超入して106になるような値を探すと、85に1.25をかけると106.25になることが見つかりました。
正式な計算をすると、
85 * 5120 / 4096 = 106.25
威力のこの計算では、小数点以下は五捨五超入します。
0.25は0.5以下なので、小数点以下五捨五超入して106になります。
元のこうげき実数値 368
前述のとおり、こうげきは最終的に736にします。
1ターンで65535ダメージを実現することを考えるとき、味方からの補助で上げるこうげきランクが2段階で良ければ楽です。
元のこうげき実数値が368であれば、ランク2段階上昇で4/2倍で736になります。
場合によっては、こだわりハチマキの採用も考えられますが、今回は後述のとおりちょうどいいポケモンがいたので採用しません。
攻撃役 レントラー
下記の条件を満たすポケモンを探します。
・特性「とうそうしん」
・タイプ不一致で威力85の技を覚える
・こうげき368 (その他補正で736を実現できれば可)
とうそうしんを持つポケモンを検索して、唯一旅パで2回使ったことがあるレントラーから調べてみました。
都合のいいことに、威力85でタイプ不一致のわざ「サイコファング」(エスパータイプ)を覚えるようです。今回はタイプ一致補正(基礎ダメージに補正がかかる)はかけたくないので、タイプ不一致である必要がありました。
また、都合のいいことに、レントラーはこうげき種族値が120と高く、こうげき368が実現可能でした。レベル100のとき、性格いじっぱり個体値31努力値236で、こうげき368になります。わりとギリギリでした。
補助役よりも後に行動するために、こうこうのしっぽを持たせます。
防御役 バニプッチ
参考文献と同じように特性「たんじゅん」を持つポケモンを防御役にしたかったのですが、今回は攻撃技がエスパータイプのため、エスパー・ひこうタイプのコロモリではタイプ相性補正(基礎ダメージに補正がかかる)がかかってしまいます。他のたんじゅん持ち(ビッパ・ドンメル)は現在いないため、他の方法を模索します。
特性「くだけるよろい」に目をつけました。これは、物理技を受けるたびに防御が1段階下がりすばやさが2段階上がる特性です。【ポケモン】対トリックルーム最終兵器 〜すばやさ1808を超えれば先制〜 #1809現象実戦編 - テツポンドのブログではすばやさ上昇に注目して連続攻撃技を当てましたが、今回は防御下降に注目して連続攻撃技を当てます。特性「スキルリンク」によりつららばりなどの2~5回攻撃する技は確定で5回攻撃するようになります。この攻撃をくだけるよろいに当てることで、ぼうぎょを5段階下降させます。ぼうぎょが6なら、5段階下降で1になります。
特性スキルリンクのポケモンが使うタイプ不一致連続攻撃技として、シェルダーのつららばり(こおりタイプ)があります。つららばりで倒されないようにこおりタイプの技を半減できて、エスパータイプのサイコファングは等倍で通るような、特性くだけるよろいのポケモンを探すと、バニプッチ(こおりタイプ)がいました。こおりタイプの不遇耐性がここで役に立ちます。
とうそうしんで威力を強化させるため、レントラーと同じ性別にします。
補助役 マホイップ・シェルダー
レントラーのこうげきランクを2段階上げる手段として、デメリットなしに味方のこうげき・とくこうランクを2段階上げられる技「デコレーション」を使います。この技を使えるマホイップを補助役として採用します。
シェルダーは、特性スキルリンク・タイプ不一致の連続攻撃技を使える・レベル1の3つの条件を満たせるポケモンです。シェルダーはみず単タイプなので、こおりタイプのつららばりはタイプ不一致になります。シェルダーはレベルアップでこの技を覚えることはないですが、わざマシンで覚えることができます。バニプッチを倒してしまわないようにレベルは1で、こうげきは下降補正がかかるような性格にして最低の5にします。
実現手順
ポケモンと技
攻撃役 レントラー
でんきタイプ, レベル100, 特性とうそうしん, こうげき368, オス, 持ち物こうこうのしっぽ
補助役1 マホイップ
防御役 バニプッチ
こおりタイプ, レベル1, 特性くだけるよろい, HP11~12, ぼうぎょ6, オス
補助役2 シェルダー
みずタイプ, レベル1, 特性スキルリンク, こうげき5,
攻撃技 サイコファング
エスパータイプ, 物理技, 威力85
動き
攻撃側の場にレントラー、マホイップを出す
1ターン目
・マホイップはレントラーにわざ「デコレーション」
レントラーのこうげきが2段階上昇
シェルダーの特性スキルリンクとバニプッチの特性くだけるよろいにより、バニプッチのぼうぎょが5段階下降
バニプッチはこの前後で何か暇潰し技を使う
バニプッチに65535ダメージ
バニプッチは倒れる
ダメージ計算
レントラーのこうげき
368 * (4/2) = 736
バニプッチのぼうぎょ
6 * (2/7) = 1.7... 小数点以下切り捨てで、1
威力
85 * (5120/4096) = 106.25 小数点以下切り捨てで106
基礎ダメージ ()内計算後小数点以下切り捨て
( (100*2/5 +2) * 106 * 736 / 1 ) /50 +2 )
= ( ( (40+2) * 78016 ) /50 +2 )
= ( ( 42 * 78016 ) /50 +2 )
= ( 3276672 / 50 +2 )
= ( 65533.44 +2 )
= (65535.44)
小数点以下切り捨てで65535
乱数補正が最大の1で急所にも当たっていないとき、他のダメージ補正がないので、基礎ダメージがそのまま計算後ダメージです。
計算後のダメージ65535を65536で割った余りは65535のままです。よって、バニプッチに与えられるダメージは65535になります。
補足のダメージ計算
5回の攻撃が全て急所にあたり、乱数も最大であるときを考えます。
シェルダーのこうげきが5でレベルが1、つららばりの威力が25なので、バニプッチのぼうぎょをBとすると、
基礎ダメージ
= ( ( (1*2/5 +2) *25 *5 /B ) /50 +2)
= ( ( 2 *25 *5 /B ) /50 +2)
= ( (250/B) /50 ) +2
()内計算後小数点以下切り捨て
以下これをもとに計算します。急所補正は1.5倍して小数点以下五捨五超入、相性補正は1/2して小数点以下切り捨てです。バニプッチがn回目のつららばりのダメージを受けるとき、ぼうぎょランクはn-1だけ下がっています。
つららばり1回目 バニプッチぼうぎょ6
((250/6) /50)+2 = (41/50) +2 = 0+2 = 2
急所補正で3、相性補正で1
つららばり2回目 バニプッチぼうぎょ6*2/3 =4
((250/4) /50)+2 = (62/50) +2 = 1+2 = 3
急所補正で4、相性補正で2
つららばり3回目 バニプッチぼうぎょ6*2/4 =3
((250/3) /50)+2 = (83/50) +2 = 1+2 = 3
急所補正で4、相性補正で2
つららばり4回目 バニプッチぼうぎょ6*2/5 =2.4 →2
((250/2) /50)+2 = (125/50) +2 = 2+2 = 4
急所補正で6、相性補正で3
つららばり5回目 バニプッチぼうぎょ6*2/6 =2
((250/2) /50)+2 = (125/50) +2 = 2+2 = 4
急所補正で6、相性補正で3
乱数が最大で全て急所に当たった場合でも、合計ダメージが11なのでHPが12あれば耐えることができます。また、それ以外の全ての場合はHPが11でも耐えることができます。
バニプッチはわざ「こらえる」を覚えるので、それを使えばこんな計算をしなくてもつららばりを耐えることはわかりますが、こらえるを使うとレントラーの攻撃も耐えてしまい、最大ダメージを出した感じがしないので、あえて使いませんでした。
参考文献
それぞれについては前回の記事(【ポケモン】今も存在するダメージオーバーフロー 16bit編 〜最小ダメージである"0ダメージ"を与える〜 - テツポンドのブログ)で解説しています。
ダメージ計算式 - ポケモン対戦考察まとめWiki|最新世代(ソード・シールド)
おわりに
威力*攻撃=78016のところが難しかったです。威力85*1.25=106.25を見つけた後は都合よくハマってよかったです。レントラーありがとう。
特性「たんじゅん」はもっといるイメージでした。別特性でビッパ系統とコロモリ系統が持っているてんねんのせいかなと思い調べたところ、こちらは6系統でした。
今回の記事は最大ダメージについて扱っているので、最大最小カテゴリに属させています。他にもステータスの実現可能な最大最小について記事を書いているので、どうぞご覧ください。
お読みいただきありがとうございました。
追記 2020/12/10
朝起きたときにふとビッパが第八世代でまだ内定していない可能性に気がつき、調べたら実際にそうでした。補助役でいやなおとをするマルマインも内定していませんでした。第八世代での実現方法を考えているのにそれではいけないと、修正しました。浮かんだ別の案として、あまのじゃくてっぺき+かたやぶりいやなおとで防御4段階下降というのがありましたが、ツボツボのぼうぎょが高すぎたり、ズガイドスがいなかったりでダメでした。
数日間大きなミスをしたまま公開してしまいました。第八世代限定の話をするときはそのポケモンが今いるのかについて気をつけたいと思います。
Twitterアカウント