通信なし進化(赤緑青)

以下の方法により、通信交換で進化するポケモンをレベルアップで進化させることができます。

セレクトバグを用いる方法

※この方法は、2020年11月13日のツイートを加筆・修正して記事化したものです。

用意するもの

  • いらないポケモン2匹
    • ニックネームの3文字目が「わ」であるポケモン (以下P1とする)
    • ポイントアップ0回使用・残りPPが50の技を含めて技を2つ以上覚えているポケモン (以下P2とする)
      • 残りPP50の技は一番下に置いておく。
  • 道具13種類以上
  • タマムシシティかヤマブキジムに1度でも入っておく (13番目セレクトバグを行うため)
    • 必須ではないが準備が面倒になるため入っておくことを推奨

手順

  1. P1を手持ち6番目に、P2を手持ち1番目に置く。
  2. P1に対して13番目セレクトバグを行い、そのまま逃げる。
  3. 手持ち道具の一番下でセレクトBB。
  4. 野生のポケモンとエンカウントする。
  5. たたかうを選び、残りPP50の技でセレクト、そのまま逃げる。
  6. P1に対して再度13番目セレクトバグを行い、そのまま逃げる。
  7. これ以降電源を切るかリセットするまで、通信交換で進化するポケモンがレベルアップ(戦闘・ふしぎなアメどちらでも可)で進化するようになる。

備考

  • 通信なし進化ができる状態では、通常のレベルアップ進化・石進化はできない。石進化の場合、ポケモン一覧では「つかえる」と表示されるが、使っても「つかっても こうかが ないよ」と表示される。
  • 通信交換で進化するポケモンがレベルアップで進化するとき、Bボタンによる進化キャンセルは可能。
  • 手順3で手持ち道具欄を一番下までスクロールさせているときにスクロールが止まった場合は、Bボタンを一度押す。このとき手持ち道具欄が閉じられた場合は、一番下までスクロールできているので、再度手持ち道具欄を開いてセレクトBBをすればいい。
  • 手順5~7の間にトレーナーに見つかると、ドッペルゲンガーが勝負を仕掛けてきてフリーズすることがある[1][2]。
  • 手順5を行ったときに入れ替わる技は、手持ち6番目のバグっているポケモンの1番目の技(D343h)。
  • 進化させたあとにマップのグラフィックがバグった場合は、メニューから主人公の情報を見ると治る。

名前の長いバグわざを利用する方法 (Super Glitchを利用するもの)

※この方法は、juninさんによるものです。

文献: 上から順に[3][4]

備考

この方法で通信なし進化をしてからレポートを書くときは、レポートを書く前に必ずポケモンセンターの受付に話しかけ、「あずける/やめる」の選択肢を表示させること(回復する必要はない)。これを行わなかった場合、レポートを書く際にバグ選択肢が表示されてフリーズすることがある。

解説

文献: [5]

具体的には、アドレスD0F0hの値が32hのとき、通信なし進化ができるようになります[6]。セレクトバグを用いた方法は、戦闘中の自分のポケモンの221番目の残りPPがアドレスD0F0hに対応していることを利用しています。名前の長いバグわざを用いた方法は、技名バッファとなるアドレスD0BEhから数えて51文字目がアドレスD0F0hに対応していることを利用しています。

参考文献

[1] ROTF、D0F0の挙動 | ROTFの覚え書き、https://rollingonthefloor.blog.fc2.com/blog-entry-174.html、2022年7月13日閲覧。

[2] ROTF、『名前の長いバグわざ』について | ROTFの覚え書き、https://blog-imgs-111-origin.fc2.com/r/o/l/rollingonthefloor/20190516082325823.html、2022年7月13日閲覧。

[3] junin、Twitterhttps://twitter.com/junin_x10/status/1327899855671312385、2022年7月12日閲覧。

[4] junin、Twitterhttps://twitter.com/junin_x10/status/1329007295527677952、2022年7月12日閲覧。

[5] junin、Twitterhttps://twitter.com/junin_x10/status/1327637221273264128、2022年7月12日閲覧。

[6] 【GB/VC】ポケモン 赤緑青ピカチュウ 36【初代】 [無断転載禁止]©2ch.net | 5ちゃんねる、https://tamae.5ch.net/test/read.cgi/poke/1485481078/626、2022年7月18日閲覧*1

付録

ポイントアップ0回使用・残りPP50の技を用意する方法

この技を用意する方法はいくつかありますが、最大PPが50~63の安全なバグ技を用意するのが楽だと思います。以下にその方法を示します。

用意するもの
  • 道具9種類以上
  • 以下の条件を満たすいらないポケモン(以下Aとする)
    • 経験値を256で割ったあまりが207(赤緑)・212(青)である
    • こうげきの実数値を256で割ったあまりが63以下
手順
  1. Aを手持ち1番目に置く。
  2. 道具の9番目でセレクトBB。
  3. 野生のポケモンとエンカウントし、たたかう→いらない技でセレクト、セレクト後はそのまま逃げる。
  4. Aがわざマシン07(赤緑)・わざマシン12(青)を覚えており、その技の最大PPが53(赤緑)・50(青)であることを確認する。
  5. Aをポケモンセンターで回復させる。
  6. (赤緑のみ)戦闘でわざマシン07を3回だけ使う。

更新履歴

2022年7月22日 公開

2022年7月28日 名前の長いバグ技を利用した方法に備考(注意事項)を追記

2022年8月2日

  • セレクトバグを用いる方法に、元ツイートへのリンクを追加
  • セレクトバグを用いる方法に、道具を13種類以上用意することを追記
  • 付録としてポイントアップ0回使用・残りPP50の技を用意する方法を追記

*1:通信なし進化の流れは611~632あたり

13番目セレクトバグでハマる原因と回避条件

ピカチュウバージョン以外の初代ポケモンには、13番目セレクトバグというどうぐ欄のやめるよりも下にスクロールすることができる裏技があります[1]。この裏技は、ある程度ストーリーを進めていないと、バグらせるポケモンを選んだときにハマりが起こります。これは入れ替えて出てくる手持ち13番目のポケモンのHPが、HPバーの長さ計算でハマる条件を満たしているためです。

※この記事を読む前に、HPバーについて(初代)の記事を見ることをおすすめします。

手持ち13番目のポケモン

そもそも手持ち13番目のポケモンとは、一体何でしょうか。初代ポケモンでは手持ちポケモンは6匹までであり、メモリ上でも6匹分だけの領域が確保されています。6匹目のデータより後ろには、手持ちポケモンとは別のデータが入っています。

13番目セレクトバグをした場合、バグらせるポケモンと手持ち13番目のポケモンのデータを入れ替える処理が行われます。前述の通り手持ち7番目以降のポケモンのデータは存在しませんが、ポケモンのデータを入れ替える処理ではそれを気にせず手持ち13番目のポケモンに相当する領域のデータと入れ替えが行われます。

メモリ上、手持ちポケモンのデータは以下のように配置されています[2][3]。

手持ちポケモンの数
D123h
手持ちポケモンの外見
D124h~D129h、1匹あたり1バイト
終端(手持ちポケモンを6匹持っているときに使用される)
D12Ah
手持ちポケモンのデータ
D12Bh~D232h、1匹あたり44バイト
手持ちポケモンの親名
D233h~D256h、1匹あたり6バイト
手持ちポケモンのニックネーム
D257h~D27Ah、1匹あたり6バイト

手持ち7番目以降のポケモンの外見・データ・親名・ニックネームの領域は、それぞれ手持ち6番目のポケモンの領域以降に続いているものとみなします。したがって、手持ち13番目のポケモンに相当するメモリ上の領域は、以下のようになります。

外見
D130h (手持ち1番目のタイプ1)
データ
D33Bh~D366h (現在いるマップの出口情報の一部、後述)
親名
D27Bh~D280h (捕まえたフラグ (図鑑No. 1~48))
ニックネーム
D29Fh~D2A4h (見つけたフラグ (図鑑No. 137~152)、手持ち道具所持数、手持ち道具1番目の種類・個数、手持ち道具2番目の種類)

冒頭で書いた通り、ハマりの原因は手持ち13番目のポケモンのHPにあります。手持ち13番目のポケモンの現在HPのアドレスはD33Ch~D33Dh、最大HPのアドレスはD35Dh~D35Ehです。このアドレスは、出口情報の一部分です。出口情報については次で説明します。

出口情報

出口情報とは、現在いるマップに存在する扉・階段・ワープパネルなどの出口について、出口ごとに座標と移動先を定めているものです*1。1つの出口情報は、出口のY座標・X座標・移動先出口番号・移動先マップ番号の4バイトで構成され、アドレスD32Eh以降に配置されます[4]。これとは別に、アドレスD32Dhに現在いるマップの出口の数が格納されます[4]。

出口情報とアドレスの対応を表1に示します。

表1 出口番号ごとの出口情報とアドレスの対応[4]
出口番号 Y座標 X座標 移動先出口番号 移動先マップ番号
0 D32Eh D32Fh D330h D331h
1 D332h D333h D334h D335h
2 D336h D337h D338h D339h
3 D33Ah D33Bh D33Ch D33Dh
中略
11 D35Ah D35Bh D35Ch D35Dh
12 D35Eh D35Fh D360h D361h
中略
31 D3AAh D3ABh D3ACh D3ADh

例えばマサラタウンにいる場合、アドレスD32Dhの値は03hとなり、D32Eh以降に配置される出口情報は表2のようになります。

表2 マサラタウンにいるときの出口情報
出口番号 Y座標 X座標 移動先出口番号 移動先マップ番号
0 05h 05h 00h 25h (主人公の家 1階)
1 05h 0Dh 00h 27h (ライバルの家)
2 0Bh 0Ch 01h 28h (オーキド研究所)

出口情報は、最初から始めたときは全領域が00hになっており、マップを切り替えたときか戦闘を終わらせたときに、現在いるマップに対応した情報に更新されます。このとき更新される出口情報は、出口番号0番から(現在いるマップの出口の数 - 1)番までで、(現在いるマップの出口の数)番目以降の情報はそのまま残ります*2。また、出口情報はレポートに記録されるので、リセットして続きから始めても初期化されることはありません。

手持ち13番目のポケモンのHPと出口情報の関係

手持ち13番目のポケモンのデータは、3番出口のX座標から14番出口のY座標に対応します。このうち、現在HPのアドレスは3番出口の移動先出口番号・移動先マップ番号、最大HPのアドレスは11番出口の移動先マップ番号・12番出口のY座標に対応します。これらのアドレスの値が変わる条件を述べます。

手持ち13番目のポケモンの現在HPが変わる条件

手持ち13番目のポケモンの現在HPは、ゲームを始めた時点では0です。現在HPは、出口が4箇所以上あるマップに入ったときに変わります。現在HPが始めて変わるタイミングは、最初にトキワシティ(5箇所)に入ったときです*3。一度トキワシティに入った後は、手持ち13番目のポケモンの現在HPが0になることはありません*4

手持ち13番目のポケモンの最大HPが変わる条件

手持ち13番目のポケモンの最大HPは、ゲームを始めた時点では0です。最大HPは、出口が12箇所以上あるマップに入ったときに変わります。出口が12箇所以上あるマップは、以下のとおりです(緑後期で確認)。

  • ヤマブキジム (32箇所)
  • タマムシシティ (13箇所)
  • サントアンヌ号 2階客室 (12箇所)

それぞれのマップに入った後の最大HPは、以下のようになります(緑後期で確認)。

ヤマブキジム
45585 (B211h)
タマムシシティ
35611 (8B1Bh)
サントアンヌ号 2階客室
上記2マップに入っていない場合: 24576 (6000h)
ヤマブキジム→客室の順で入った場合: 24593 (6011h)
タマムシシティ→客室の順で入った場合: 24603 (601Bh)

13番目セレクトバグでハマりを回避する条件

結論から先にいうと、13番目セレクトバグでハマりが起こらなくなる条件は、「タマムシシティかヤマブキジムに1度でも入る」です。以下で詳細を述べます。

ゲームを始めてからトキワシティに入るまでの間は、手持ち13番目のポケモンの最大HP・現在HPはともに0であるため、この時点では13番目セレクトバグを行ってもハマることはありません。しかし、この時点で道具を13種類以上持つことは不可能であるため、そもそも13番目セレクトバグはできません。

トキワシティに入ってから出口が12箇所以上あるマップに入るまでの間は、手持ち13番目のポケモンの最大HPは0・現在HPは0でない値となり、HPバーの長さ計算でハマる条件を満たしているためハマりが起こります。出口が12箇所以上あるマップのうちサントアンヌ号 2階客室だけ入った場合、最大HPは24576となります。これは1024の倍数であるため、同様にハマりが起こります。

タマムシシティかヤマブキジムに1度でも入った場合、最大HPは45585・35611・24593・24603のいずれかとなります。これらは1024で割ったあまりが4以上であるため、HPバーの長さ計算でハマる条件を満たさずハマりは起こりません。

別の回避方法として、バグらせるポケモンを外見がアネ゛デパミ゛ポケモンより下に置いて13番目セレクトバグを行うという方法があります[5]。この場合はカギカッコ内の条件を満たす必要はありません。

参考文献

[1] ありす*、13番目セレクトバグ---鞄は13で出来ている。アンリミテッドアイテムワークス--- - Wonderland Seeker、https://alice-wreath.hatenablog.com/entry/2019/11/14/114946、2022年6月14日閲覧。

[2] ゴールド、レポートデータ | POKeMON Bug HiSTORiA、http://pokemon.s20.xrea.com/bug/1st/memory.html、2022年6月16日閲覧。

[3] れんだ、D120からDFFFまでを表したCの構造体 | 8D A7 87 93 19 07 50、https://www.msmrrenda.net/~renda/select/memory_struct.h、2022年6月16日閲覧。

[4] 2P、利用者:2P/第一世代のワープバグ - ポケモンWiki

https://wiki.ポケモン.com/wiki/%E5%88%A9%E7%94%A8%E8%80%85:%EF%BC%92%EF%BC%B0/%E7%AC%AC%E4%B8%80%E4%B8%96%E4%BB%A3%E3%81%AE%E3%83%AF%E3%83%BC%E3%83%97%E3%83%90%E3%82%B0、2022年6月20日閲覧。

[5] れんだ、シュレディンガーのゼロ除算 - タマムシ未到着で道具欄拡張 | 8D A7 87 93 19 07 50、http://www.msmrrenda.net/~renda/select/07_schroedinger.html、2022年6月22日閲覧。

*1:ただし、ふたごじまなどに存在する落とし穴やポケモン屋敷に存在する上から飛び降りるマスは含みません。

*2:出口が1つもないマップに移動したときは、出口の数だけ更新されます。

*3:マサラタウンマサラタウンの建物(4マップ)は出口が3箇所以下、1番道路は出口なし

*4:マサラタウンの0番出口につながるのは主人公の家 1階のみだが、移動先出口番号はFFhとなっている。

HPバーについて(初代)

この記事では、初代ポケモンにおけるHPバーの長さ・色・ピンチ音について説明します。

HPバーの長さ

現在HPが 0 の場合は HPバーの長さ = 0 で、以下の計算は行わない。現在HPが 1 以上の場合、HPバーの長さ = (X / Y) を 256 で割った余り。ただし、 計算結果が 0 となった場合は 1 とする。なお、小数点以下は出るたびに切り捨てる(これ以降も同様)。

X と Y の値は以下の通り。

最大HPが 256 未満のとき:

  • X = 現在HP * 48
  • Y = 最大HP

最大HPが 256 以上のとき:

  • X = 現在HP * 48、その後下位 2 バイトを 4 で割る
  • Y = (最大HP / 4) を 256 で割った余り

最大HPが 256 以上のときの X の値について、例を示します。

現在HPが 200 のとき
現在HP * 48 の値は 9600 (2580h)、下位 2 バイトを 4 で割った値は 2400 (960h)

現在HPが 1400 のとき
現在HP * 48 の値は 67200 (10680h)、下位 2 バイトを 4 で割った値は 65952 (101A0h)

ハマりが起こるケース

Y が 0 となった場合、ゼロ除算によるハマりが起こります。ハマりが起こる条件(すなわち、Y が 0 となる条件)は、現在HPが 1 以上で、最大HPが以下のどちらかの条件を満たすときです。

  • 最大HPが 0
  • 最大HPが 1024 以上かつ 1024 で割った余りが 0 ~ 3

HPバーの長さが不正になるケース

以下のいずれかの条件を満たす場合、HPバーの長さは最大HPに対する現在HPの割合ではなくなります。

  • X / Y の値が 256 以上
  • 最大HPが 256 以上かつ現在HPが 1366 以上
  • 最大HP が 1028 以上

なお、ステータス計算においてHPを含む各ステータスは 999 が上限となります。そのため、現在HP・最大HPが 1000 以上となるのは、セレクトバグなどで HP の値を直接書き換えるか、そのような値を持ったポケモン(に相当するデータ)と入れ替える場合に限られます。

HPバーの色

スーパーゲームボーイでプレイしている場合、HPバーの長さによって色が変わります。

  • 9 以下: 赤
  • 10 以上 26 以下: 黄
  • 27 以上: 緑

ピンチ音

プレイしているハードウェアによらず、戦闘中自分のポケモンのHPバーの長さが 9 以下のときにピンチ音が鳴ります。スーパーゲームボーイでプレイしている場合、HPバーの色が赤のときにピンチ音が鳴るとも言えます。

ロケットゲームコーナーの隠しコインのバグ

ロケットゲームコーナーには、見えないコインがいくつか落ちています。これらの隠しコインのうち、いくつかはバグによって異常な挙動を示します。

40枚落ちているはずのコイン(赤緑青ピカチュウ)

(x = 11, y = 7、スイッチがあるポスターから右に2マス・下に3マスのところ)に落ちているコインは、データ上40枚落ちていることになっています。ところが、隠しコインを拾ったときのコイン取得処理にバグがあり、実際には20枚しか手に入れることができません。

隠しコインを拾ったときの処理で、以下のように落ちている枚数に応じてコインを増やす処理があります。

  1. 落ちているコインの枚数を調べる
  2. 落ちているコインが10枚なら、6へ進む
  3. 落ちているコインが20枚なら、7へ進む
  4. 落ちているコインが40枚なら、7へ進む
  5. 落ちているコインが上記以外の枚数なら、9へ進む
  6. 手持ちのコインを10枚増やす
  7. 手持ちのコインを20枚増やす
  8. 手持ちのコインを40枚増やす
  9. 手持ちのコインを100枚増やす

4の処理は本来「落ちているコインが40枚なら、8へ進む」ですが、誤って20枚のときと同じ7へ進むようになっています。

拾えないコイン(赤緑青ピカチュウ)

(x = 12, y = 15、右から3列目・一番下のスロット台)にはコイン10枚が落ちています。ここはスロットと同じ場所であり、このマスを調べるとスロットで遊ぼうとするため、このコインを拾うことはできません。これは、調べているマスに隠しオブジェクトが存在するかどうかをチェックする処理と、隠しオブジェクトのリストでの定義順によるものです。

隠しオブジェクトが存在するマップでAボタンを押したとき、マップごとに定義されている隠しオブジェクトのリストを先頭から順に調べます。調べているマスと同じ場所に存在する隠しオブジェクトを見つけたとき、リストの探索を終了し、見つけた隠しオブジェクトに対応した処理を行います。

ロケットゲームコーナーの隠しオブジェクトは、36台のスロットと12個の隠しコインがこの順で定義されています。そのため、スロットと隠しコインが同じ場所に存在するマスではスロットの処理が行われ、隠しコインの処理は行われません。したがって、冒頭の場所にある隠しコインを拾うことはできません。

片方ずつしか取れないコイン(赤緑)

赤緑版には、片方の隠しコインを取得すると、もう片方の隠しコインが取れなくなるというバグがあります[1]。これは、隠しコインを調べたときに誤った場所のフラグを参照することがあるためです。詳細を以下で述べます。

まず、フラグとリストの定義をします。

隠しコイン取得フラグ
各隠しコインごとにbit単位で与えられる。1なら取得済み、0なら未取得。
リストC
隠しコインのあるマップと座標を定義しているリストで、フラグ立て・フラグ参照に使用される。リストCの各エントリはマップ番号(すべて87h)・y座標・x座標(各1バイト)の順で構成される。最後のエントリの直後には、終端を表すFFhの1バイトがある。各エントリの座標を以下の表に示す。
リストCのエントリごとの座標
No. 座標 落ちているコインの枚数(参考)
0 x = 0, y = 8 10枚
1 x = 1, y = 16 10枚
2 x = 3, y = 11 20枚
3 x = 3, y = 14 10枚
4 x = 4, y = 12 10枚
5 x = 9, y = 12 20枚
6 x = 9, y = 15 10枚
7 x = 16, y = 14 10枚
8 x = 10, y = 16 10枚
9 x = 11, y = 7 20枚*1
10 x = 15, y = 8 100枚
11 x = 12, y = 15 10枚*2

隠しコインが置いてあるマスを調べたとき、以下の処理が行われます。

  1. コインケースを持っているかどうかを調べる。持っていない場合は以降の処理を行わない。
  2. 調べている隠しコインが、リストCの何番目にあるかを探し、その位置を返す(この値をaとする)。なお、リストCの先頭は0番目とする。
  3. a番目の隠しコイン取得フラグを参照し、調べている隠しコインが取得済みかどうかを調べる。取得済みの場合は何もせず、未取得の場合はa番目の隠しコイン取得フラグを立ててコインを入手する。

2の処理にはバグがあり、正しくないaの値が返ってくることがあります。以下に、上記2の処理の内容を示します。

※以下の「○○ += n」は、「○○にnを加算する」という意味である。また、以下の処理が終了したときのaの値が、上記2の処理におけるaの値となる。

  1. a = 00h、hl = 「リストCの先頭アドレス」とする。
  2. アドレスhlの値を調べ、hl += 1とする。その値がFFhならa = FFhとして終了する。その値と現在のマップ番号が異なっている場合、hl += 2、a += 1として2に戻る。
  3. アドレスhlの値を調べ、hl += 1とする。その値と調べているマスのy座標が異なっている場合、hl += 1、a += 1として2に戻る。
  4. アドレスhlの値を調べ、hl += 1とする。その値と調べているマスのx座標が異なっている場合、2に戻る。
  5. リストCのa番目のエントリは調べている隠しコインに対応しているエントリなので、終了する。

バグがあるのは4の部分で、2に戻る前に「a += 1」の処理が抜けています。このバグが発生するのはリストCの5・7・8・10・11番目に対応する隠しコインを調べたときで、実際に参照されるフラグ(=aの値)はそれぞれ4・6・7・9・10番目となります。したがって、4と5、6と7、9と10の隠しコインはそれぞれ片方しか取ることができません。

参考文献

[1] おとしもの(隠しアイテム) - ポケモン 赤 緑 青 ピカチュウ 攻略 wiki

http://pokemon1gb2rgbp.wiki.fc2.com/wiki/%E3%81%8A%E3%81%A8%E3%81%97%E3%82%82%E3%81%AE%28%E9%9A%A0%E3%81%97%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%29、2022年5月16日閲覧。

*1:上記の通り、データ上は40枚

*2:上記の通り、取得不可

54個目の隠しアイテムを手に入れる

赤緑版では、正規マップに落ちている隠しアイテムがコインを除いて53個あります[1]*1。これに加えて、バグマップに落ちている隠しアイテムが1個あります。

方法(ピーピーマックスを持っていない場合)

条件

  • タマムシシティかヤマブキジムに1度でも入ったことがある
  • 手持ち道具13~19種類 ※以下で用意する道具を含めて13~19種類にする

用意するもの

  • ニックネームの3文字目の文字コードが(手持ち道具の所持数+128)であるポケモン ※これをPとする
    • 具体的な文字は表1を参照
  • ボール系道具111個 ※14番目セレクトバグなどで用意する*2
  • あなぬけのヒモ1個

ボール系道具とあなぬけのヒモは、手持ち道具の3番目以降に置いておく。また、Pは手持ち2番目~6番目に置いておく。

表1 手持ち道具の所持数ごとの、Pの3文字目に入れる文字
手持ち道具の所持数 3文字目に入れる文字
13
14
15
16
17
18
19

手順

  1. ななしのどうくつ 1階のふしぎなアメが落ちている岩のところに行く。
  2. 道具の13番目でセレクトBB。
  3. 戦闘に入り、ポケモンを選ぶ。
  4. PでAを押す。Pがバグるのでそのまま逃げる。
  5. ボール系道具111個と手持ち道具30番目を入れ替える。
  6. ふしぎなアメが落ちている岩を調べる。ふしぎなアメのかわりにピーピーマックスを手に入れる。
  7. あなぬけのヒモで脱出する。
  8. 手順2~4をもう一度行い、手持ち道具欄を元に戻す。

備考

  • ななしのどうくつ 1階のふしぎなアメを入手済みの場合でもピーピーマックスは手に入れられる。
  • 所持金、主人公のIDなどの値によっては成功しない場合がある。
  • 13番目セレクトバグでバグらせるポケモンのニックネームに指定があるのは、ピーピーマックスを手持ち道具欄の末尾に入れるため。
  • 手順5~7の間は画面の色がおかしくなる。また、この間に戦闘に入った場合、戦闘終了後にフリーズする。
  • 手持ち道具の中に入り込んだバグ道具(00h)は、14番目セレクトバグや手持ち道具31番目と入れ替えるなどで処分する。
  • Pはバグっているので、逃がすことを推奨する。
  • この隠しアイテムはフラグを共有している隠しアイテムではないため、入手は1度きり。

方法(ピーピーマックスを持っている場合)

ピーピーマックスを持っていない場合の方法と比べて、異なる点は以下のとおりです。これ以外はピーピーマックスを持っていない場合の方法と同じです。

条件

  • 手持ち道具13~19種類→手持ち道具13種類以上

用意するもの

  • Pのニックネーム3文字目は、カタカナの濁音以外であれば何でもよい
  • あなぬけのヒモ1個→P以外でテレポートを覚えているポケモン、またはあなぬけのヒモ2個以上

手順

手順7の脱出は、テレポートでの脱出も可

解説

バグマップ6Fhの(x = 14, y = 11)には、隠しアイテムとしてピーピーマックスが置いてあります[2]。このアイテムを取得しようとしてバグマップ6Fhに入ろうとしてもフリーズする[3]ので、別の方法でこのマップに入らないで取得する必要があります。

隠しアイテムを取得するとき、調べるマスの現在地のマップ番号と座標を参照し、それが隠しアイテムの設置場所と一致している場合に取得できます。現在地のマップ番号は、手持ち道具30番目の個数に対応しているため、あらかじめ個数を調整した道具と入れ替えることで現在地のマップ番号を書き換えています。座標は、ななしのどうくつ 1階のふしぎなアメが落ちている岩と同じです。

手持ち道具30番目の個数書き換えによるワープ

手持ち道具30番目の個数を戦闘中に変えるとワープが起こり、非戦闘中に変えてもワープは起こらないというバグ技があります[4]。非戦闘中に書き換えるとフリーズする[4]とされていますが、これは読み込むバンクが異なるマップ番号で書き換えた場合に発生します。ななしのどうくつ 1階とバグマップ6Fhの読み込むバンクは同一であるため、非戦闘中に手持ち道具30番目の個数書き換えを行ってもフリーズしません。

初代ポケモンのマップデータは、いくつかのバンクに分かれてROMに格納されています。マップごとにどのバンクから読み込むかが指定されており、異なるバンクから読み込むマップ番号で書き換えをた場合は、書き換えた瞬間に読み込むバンクが切り替わります。

しかし、書き換えて切り替わるのはバンクのみで、マップ中にいる限り常に実行されるルーチン[5](以下、このルーチンを「マップスクリプト」という。)のアドレスは変更されません。バンクが異なればルーチンの配置も異なるため、マップスクリプトでないものを無理やりマップスクリプトとして実行することになります。このときに未定義命令を読み込むとフリーズします。

同じバンクから読み込むマップ番号で書き換えた場合はバンクの切り替えが発生しないため、マップスクリプトによってフリーズすることはありません。ただし、書き換え後に戦闘した場合はマップデータの再読み込みが行われるため、バグマップの番号に書き換えていた場合はマップの再読み込みによってフリーズします。

参考文献

[1] ガナヒビ、ポケモンの隠しアイテムを全部ゲットしてみた(※バグ要素あり) - YouTubehttps://www.youtube.com/watch?v=lgVuKokKo7I、2022年4月12日閲覧。

[2] Glitch Pokémon League maps 0x6D-0x70, 0x72-0x75 (Red/Blue) - Glitch City Wikihttps://glitchcity.wiki/Glitch_Pok%C3%A9mon_League_maps_0x6D-0x70,_0x72-0x75_(Red/Blue)、2022年4月8日閲覧。

[3] アルク、つれづれなマップ図鑑 | つれづれな日、http://arukuukura.xxxxxxxx.jp/mapdex.html、2023年2月23日閲覧。

[4] ワープ - pokemonbug @ ウィキ - atwiki(アットウィキ)、https://w.atwiki.jp/pokemonbug/pages/12.html、2023年2月23日閲覧。

[5] れんだ、Twitterhttps://twitter.com/waki_renda/status/1276527139257368577、2023年2月23日閲覧。

更新履歴

2022年4月15日 公開

2023年2月25日

  • バグらせるポケモンのニックネームに入れる文字を表で具体的に示す
  • ピーピーマックスを持っている場合の取得方法を追加
  • 解説を強化

*1:このうち1つはマップ外に落ちているので、正規プレイで取得できるのは最大52個

*2:14番目セレクトバグでボールを127個持った状態にして、16個捨てると用意できる。

誤作動するダウジングマシン

ダウジングマシンは、画面内にアイテムが埋まっているかどうかを調べ、埋まっているアイテムがあればそれに反応して知らせてくれるアイテムです。

しかし、赤緑版では埋まっているアイテムが画面内にあるにも関わらずマシンが反応しなかったり、埋まっているアイテムが画面内にないにも関わらずマシンが反応したりすることがあります[1]。

ダウジングマシンを使ったときの処理

※以降に出てくる「隠しアイテム取得フラグ」「リストH」「リストI」については、フラグを共有している隠しアイテムを参照してください。

まず、ダウジングマシンを使ったときの処理を説明します。
ダウジングマシンを使ったときの処理は、以下のようになっています。

  1. リストIの各エントリのうち、主人公がいるマップと同一であるものを対象とする。対象となるエントリに対して以下の処理を行う。
    1. エントリに対応する隠しアイテム取得フラグを参照し、取得状況を調べる。
    2. 主人公の座標とエントリの座標から、隠しアイテムが画面内に存在するかどうかを調べる。
    3. 未取得かつ画面内に存在する隠しアイテムが1つ以上存在する場合は「近くに埋まっている」、そうでない場合は「近くに埋まっていない」とする。
  2. 「近くに埋まっている」「近くに埋まっていない」それぞれの場合について、対応したメッセージを表示する。

ダウジングマシンが誤作動を引き起こすケース

冒頭で書いたように、特定の場面ではダウジングマシンが誤作動することがあります。

リストIの座標が間違って設定されている・リストIにエントリが存在しないもの

該当アイテム

ダウジングマシンは、実際にアイテムが埋まっているリストHの座標ではなく、リストIの座標に対して反応します。5つの隠しアイテムに対応するリストIのエントリは、実際に埋まっている座標と異なる座標が設定されており、1つの隠しアイテムはリストIに対応するエントリが存在しません。このため、本来埋まっている場所ではマシンが反応することはありません。
また、座標の設定ミスにより本来立つはずのフラグが立つことはないため、リストIの座標に対しては常にマシンが反応します。

アイテムが埋まっている座標によるもの

該当アイテム

  • サントアンヌ号 地下1階客室のすごいキズぐすり (x = 0, y = 6)
  • モノマネむすめの家 2階のきんのたま (x = 0, y = 6) ※これは実際に埋まっている位置であり、マシンが反応する位置は(x = 0, y = 1)

これは、ダウジングマシンを使ったときの処理bにおいて、x座標かy座標のどちらかが0の位置に埋まっている隠しアイテムに対しては、誤って常に画面外にあると判定してしまうためです。

参考文献

[1] しづき、ダウジングマシンの誤作動 | 伝説のスターブロブ2、https://hakuda2.web.fc2.com/wario/poke1/k26.html、2022年3月30日閲覧。

フラグを共有している隠しアイテム

赤緑版では、6つの隠しアイテムのどれかを取ると他のものが取れなくなり、グレンタウンで化石を渡そうとするたびに再び取れるという現象が起こります[1]。
ここでは、この現象の仕組みについて説明します。

隠しアイテムを調べたときの処理

まず、隠しアイテムに関するフラグと2つのリストを定義します。

隠しアイテム取得フラグ
各隠しアイテムごとにbit単位で与えられる。1なら取得済み、0なら未取得。先頭アドレスはD66Fh。
リストH
隠しアイテムを含む隠しオブジェクトを定義しているリスト。マップごとに用意される。実際に置かれている隠しアイテムの座標は、このリストに基づく。
リストI
隠しアイテムのあるマップと座標を定義しているリストで、フラグ立て・フラグ参照に使用される。リストIの各エントリはマップ番号と座標で構成される。最後のエントリの直後には、終端を表すFFhの1バイトがある。

隠しアイテムが置いてあるマスを調べたとき、以下の処理が行われます。

  1. 調べている隠しアイテムが、リストIの何番目にあるかを探し、その位置を返す(この値をaとする)。なお、リストIの先頭は0番目とする。
  2. a番目の隠しアイテム取得フラグを参照し、調べている隠しアイテムが取得済みかどうかを調べる。
  3. 未取得だった場合、隠しアイテム入手のメッセージを表示し、a番目の隠しアイテム取得フラグを立ててアイテムを入手する。取得済みの場合は何もしない。

1の処理は、調べている隠しアイテムがあるマップ番号・X座標・Y座標と完全一致するエントリの位置を返します。
そのようなエントリが存在しない場合、1の処理は何番目かという情報のかわりに終端のFFhを返します。

例: トキワシティ(01h)のキズぐすり(x = 14, y = 4)の場合

  1. マップ01h・座標(x = 14, y = 4)はリストIの34番目にあるので、a = 34となります。
  2. 34番目の隠しアイテム取得フラグ(D673hのbit2)を参照し、取得済みかどうかを調べます。
  3. 未取得だった場合は隠しアイテム入手のメッセージを表示し、34番目のフラグを立ててキズぐすりを入手します。

6つの隠しアイテムについて

リストHに含まれるほとんどの隠しアイテムは、マップ・X座標・Y座標が完全一致するエントリがリストIに存在しているため、隠しアイテムを調べたときの処理は正常に行われます。しかし、例の6つの隠しアイテムは、リストHとリストIとの間で座標が一致していないか、あるいはリストIにエントリが存在していません。
そのため、これら6つの隠しアイテムを調べたときは255番目のフラグ(D68Ehのbit7)を参照し、隠しアイテムを手に入れた際は255番目のフラグが立ちます。 6つの隠しアイテムは参照するフラグが同一であるため、どれか1つを取得すると他の隠しアイテムは取得できなくなります。

リストH・リストIにおける6つの隠しアイテムの座標[2][3]
マップ アイテム リストHでの座標(実際に隠されている場所) リストIでの座標
ロケット団アジト 地下3階 きんのたま x = 27, y = 17 x = 22, y = 23
13ばんどうろ リゾチウム x = 16, y = 13 x = 48, y = 8
ポケモンやしき 地下1階 ふしぎなアメ x = 1, y = 9 存在しない
モノマネむすめの家 2階 きんのたま x = 0, y = 6 x = 0, y = 1
ななしのどうくつ 1階 ふしぎなアメ x = 14, y = 11 x = 15, y = 11
ななしのどうくつ 地下1階 ハイパーボール x = 27, y = 3 x = 29, y = 22

例: 13ばんどうろ(18h)のリゾチウム(x = 16, y = 13)を取得してからロケット団アジト地下3階(C9h)のきんのたま(x = 27, y = 17)を取得しようとする場合
※これ以外の4つのアイテムは入手していないものとする

  1. マップ18h・座標(16, 13)はリストIに存在しないため、a = 255となります。
  2. 255番目の隠しアイテム取得フラグ(D68Ehのbit7)を参照し、取得済みかどうかを調べます。
  3. 隠しアイテム入手のメッセージを表示し、255番目のフラグを立ててアイテムを入手します。

↑ここまでリゾチウムが置いてあるマスを調べたときの処理/↓ここからきんのたまが置いてあるマスを調べたときの処理

  1. マップC9h・座標(27, 17)はリストIに存在しないため、a = 255となります。
  2. 255番目の隠しアイテム取得フラグ(D68Ehのbit7)を参照し、取得済みかどうかを調べます。
  3. 3の処理により255番目のフラグが立っており取得済みとみなされるため、きんのたまを入手することはできません。

化石を渡そうとすると再び取れる理由

255番目のフラグがあるアドレスは隠しアイテム取得フラグの領域外であり、ポケモンけんきゅうじょのエラーイ博士に渡そうとしている化石のアイテム番号が格納されます。
化石のアイテム番号は3つともbit7が0であるため、化石を渡そうとするたびに255番目のフラグが降ろされ、6つの隠しアイテムを再度入手することができます。

参考文献

[1] しづき、何度でも取れるアイテム | 伝説のスターブロブ2、https://hakuda2.web.fc2.com/wario/poke2/r38.html、2022年3月18日閲覧。

[2] Broken hidden items glitch - Glitch City Wikihttps://glitchcity.wiki/Broken_hidden_items_glitch、2022年3月18日閲覧。

[3] Broken hidden items - Bulbapedia, the community-driven Pokémon encyclopedia、https://bulbapedia.bulbagarden.net/wiki/Broken_hidden_items、2022年3月18日閲覧。