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

赤緑版では、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日閲覧。