きんのいれば

ポケモンGB世代の老兵によるメモ入れ場。


オーバーフローの知識と対策

ゲームボーイ版のポケモンは一度に1byteのデータしかロードすることができません。1byteとは、電気がOFF(0)かON(1…この数字がポールになびく旗に見えることからフラグが立つといわれる)かの二通りしかない豆電球のスイッチが8個ある部屋のようなものであり、2の8乗の256パターンの異なる部屋の照らし方が存在する。この部屋の照らし方を一度に記憶したり、読み込んだりすることができるというわけである。

ちなみに数字にすると0~255の0を含む256パターンの数字を扱うことができる。小数点以下の計算結果になるときは小数点以下を表す桁がそもそもないため、GB世代は端数切捨てとなる。また、256以上の数字を扱うことは極力避けて、技の威力も金銀の威力250の大爆発が最高値で、攻撃対象の防御力を1/2倍にする処理を行うことで実質威力500としている。連続斬りや転がるについても金銀では威力ではなく、ダメージを倍にする効果となっている。

ちなみに攻撃力や防御力が256以上となることは当然あり、ポケモンの現在ステータスは2byteの0~65535の65536通りまで理論上記録できるはずだが、ダメージ計算中に読み込めるのは1byte分のデータで、ダメージ計算に用いる攻撃力もしくは防御力が256以上となるときは、一旦両辺(攻撃力と防御力)を4で割る処理が入る。これに能力値の上限を999で打ち止めにする処理が加わることで1024以上の能力値にならなければ、255以下に収まり、オーバーフロー(桁溢れ)はそもそも起こらないはずだった。

すべての元凶は光の壁?

しかし、オーバーフローは起こった。それは光の壁の登場であった。この技はリフレクターよりも内部番号が若く、リフレクターより先に考案されたと考えられる。初代ではとくこうとくぼうとくしゅという共通ステータスでまとめられていた。しかし、ある時ゲームフリークはとくぼうだけを強化する技を考案するときに自分の首を絞めたことに気づいてしまう。とくしゅを強化するドわすれではとくこうも強化されてしまう。これでは強すぎることは当初から分かっていたのだと思われる。

そこでゲームフリークはダメージ計算中に一時的に倍にする処理を思いついたのである。そうしてダメージ計算中のみ防御力を倍にする特殊処理を施したため、能力変化の技を使ったときに999を超えようとすると999で打ち止めにする処理を無視してダメージ計算中に1024を超える能力値になる事例が生まれてしまったのである。256以上の時に4で割る処理は1度しか起こらなわれないため、一度4で割って0~255で収まらなければ、能力値が-1024(=256×4)されて計算されます。

www.youtube.com

初代ではパルシェンの殻に籠るとリフレクターの併用などのレアケースでしか起こりえませんでしたが、金銀では新たに登場した持ち物の太い骨、電気玉、メタルパウダーでも光の壁やリフレクターのようにダメージ計算時にのみ、倍にする効果としていたため、問題が浮き彫りになってしまいました。相手の黒い霧で持ち物の補正が消されるわけにはいかなかったのでしょう。転がるのようにダメージを倍にすれば、このような問題は起こらなかったはずだったのですが、物理攻撃技だけ、特殊攻撃技だけ、という条件が付いているときはこのような処理をどういうわけかしていません。

ガラガラのオーバーフロー対策

ガラガラの太い骨であれば、ステータス画面で確認できるこうげき実数値が127以下であれば、腹太鼓を使ったり、相手からの威張るで無理やりこうげきランクを+6にされてもオーバーフローすることはありません。

f:id:Gold:20170609223712p:plain

かつて、この仕様の対策とサンダースの♀のメロメロ対策として『がんへっど』と呼ばれるこうげき個体値8未満の♀のガラガラが金銀現役時代のオフ会で使われていました。

しかし、性別が♀で8未満だと目覚めるパワーの威力が低くなるので、こうげきの努力値を抑えることで、こうげき実数値127にした方が賢い選択といえるかもしれません。ちなみにレベル50のガラガラでもこうげき実数値127(個体値:DDFF / こうげき努力値:58~59)の威力70の目覚めるパワー虫でレベル50のナッシーをぴったり1発で倒すことができます。

ポケモンスタジアム金銀』ではないので、相手の最大HPから目覚めるパワーのタイプは予測できませんが、性別は表示されるので、相手のナッシーやヘラクロスに舐められないように♂で使用する方がよさそうです。ちなみに『ポケモンスタジアム金銀』の選出画面では性別の情報も表示されるので、ヒストリアカップ4からの見せ合いシートには性別の記述も必須事項になります。