Site cover image

🐾flag3

ポケットモンスター 赤・緑・青 バイナリエディタ

English version is here:

📄Arrow icon of a page linkRAM Writer in Pokémon Red/Green/Blue (JP)

バイナリエディタは、初代ポケモンにおける任意コード実行の究極の到達点とも言えるツールです。このエディタを使用すると、ゲーム内のあらゆるメモリの読み書きが可能になります。さらに、プログラムを記述し、実行させることもできます。これにより、テトリスやオセロなどのゲームを遊ぶことも可能になる、非常に強力なツールです。

本記事は以下の動画の解説となります。

バイナリエディタ導入手順

環境

ポケットモンスター 赤・緑・青の日本語版のみに対応しています。ポケットモンスター ピカチュウや日本語版以外のバージョンには対応していません。またポケモンスタジアムのGBビルや一部のエミュレータでは動作しません。

バージョンの違い

ポケットモンスター 赤・緑はそれぞれにv1.0とv1.1が存在します。カートリッジの表面のパッケージシール右下に刻まれている刻印によってどのバージョンであるかを判定することができます。

  • 刻印が数字のみであればv1.0。
  • 刻印が数字+Aであればv1.1。

なお3DSのVCはv1.1となります。

以下の手順における23番目のどうぐの種類によってバージョンを判定することもできます。

  • 23番目のどうぐが「ぼチへぴゾの4ぽレ」であればv1.0。
  • 23番目のどうぐが「ぼヂへぴゾの4ぽレ」でなければv1.1。

なおポケットモンスター 青には1つのバージョンしかありません。

手順1: さいしょからはじめる

主人公の名前はなんでも良いですが、ライバルの名前は「レレレオ」にしてください。パソコンからキズぐすりを取り出すか、1ばんどうろのNPCからキズぐすりを入手し、おとどけものを入手するまで通常通りゲームを進めます。

手順2: タマムシデパートへ向かう

  1. 1ばんどうろの一番下の草むらに向かう。セーブをすることをお勧めします。
  2. どうぐの2番目でセレクトボタンを押し、野生のポケモンとエンカウントします。
  3. ポケモン画面で1番目のポケモンを選びます。存在しない2番目のポケモンと1番目のポケモンが自動的に入れ替わります。
  4. たたかうを選んでから逃げます。たたかうを選ばずに逃げると4歩歩くたびにめのまえがまっくらになり詰んでしまいます。
  5. マサラタウンに入ってから48、49歩歩き、ライバルの家に入ります。
  6. 16ばんどうろに移動します。4歩右に進んで民家の右上の角の真上に行きます。その地点からゲートに入るために1歩下に進みます。
  7. ゲートの右側から出ます。ゲートから出た後は右に3歩、下に2歩、右に6歩進んでから下に進みいあいぎりの木の左のマスを通過し、タマムシシティへ向かいます。
  8. タマムシシティに入ったら壁に沿って進み、タマムシデパートへ向かい左のドアから入ります。

手順3: どうぐ欄の操作

タマムシデパートの2階に行き、以下の順番でアイテムを購入します。

🏬
買いものリスト
  • いいキズぐすり×1
  • スーパーボール×1
  • ねむけざまし×1
  • こおりなおし×1
  • やけどなおし×1
  • まひなおし×1
  • どくけし×8

購入を終えたら6~9歩歩いて再度店員に話しかけます。

  • うりにきたを選んでどうぐ欄にねむけざまし×255があることを確認します。
  • おとどけものをどくけし×8と入れ替えます。
  • ねむけざましとおとどけもの以外の全てのどうぐを売ります。どうぐの1番目がねむけざまし×1、2番目以降がねむけざまし×255となります。
  • ライバル戦に勝利した場合は2番目のねむけざましを251個売っておかねを26725円にします。負けた場合は253個売っておかねを26750円にします。

買い物を終えてメニューからどうぐ欄を開きます。

  • 1番目と2番目のねむけざましを4回入れ替えます。
  • どうぐの所持数が255になるので、1番目のねむけざましと22番目のなかよしバッヂを入れ替えます。
  • 25番目のピーピーエイド×0と26番目のどうぐを入れ替えます。
  • 24番目のどうぐと76番目のどうぐと入れ替えます。
    • 70~78番目のどうぐについては以下のようになっているのでこれを目印にして24番目のどうぐと76番目のどうぐと入れ替えると良いです。
      🔍
      70番目のどうぐ:まひなおし×3

      71番目のどうぐ:マスターボール×12

      72番目のどうぐ:モンスターボール×122

      73番目のどうぐ:マスターボール×16

      74番目のどうぐ:マスターボール×124

      75番目のどうぐ:マスターボール×1

      76番目のどうぐ

      77番目のどうぐ:?????

      78番目のどうぐ:マスターボール

エレベーターに入ることでタマムシマンション屋上部屋に移動します。タマムシマンション屋上部屋に着いたらどうぐ欄を開きます。

  • 74番目のハイパーボールを59個捨てて残りを72個にします。

タマムシマンション屋上部屋の入り口でセーブとリセットをすることをお勧めします。またこれ以降は簡易版バイナリエディタを導入するまでセーブしないことをお勧めます。

手順4: 簡易版バイナリエディタ導入

イーブイを入手し、以下の順番でニックネームをつけます。好きなだけイーブイを入手することができる状態になっています。もしイーブイのモンスターボールが消えてしまう場合はリセットして4歩以上歩いてからイーブイを入手するようにしてください。

📛
イーブイに付けるニックネームリスト
  1. ーゆてぽん
  2. ニックネームなし
  3. ニックネームなし
  4. ニックネームなし
  5. ニックネームなし
  6. よメボデの
  7. よザれんん
  8. ぼダメギて
  9. へみんち
  10. だいなひだ
  11. れじよダリ
  12. めしんざダ
  13. ダれチんダ
  14. ダめいんど
  15. ううゾダグ
  16. へにんへ
  17. へにんボぷ
  18. ぱへにんぴ
  19. キづごヅー
  20. てソんダム
  21. ダだギムツ
  22. ぼヂてソん
  23. ゅョダだグ
  24. づよ◯づな
    • 赤緑v1.0: づよそづな
    • 赤緑v1.1(VC): づよむづな
    • 青版: づよワづな
  25. よヂづよく
  26. がんぜルョ

イーブイにニックネームをつけ終わったら下に向かい右側の出口から出ることでそだてやさんに移動します。

手持ちの2番目にいるニックネーム「ーゆてぽん」のイーブイを預けます。

なかよしバッヂを使うと簡易版バイナリエディタが起動します。

簡易版バイナリエディタ

これ以降、なかよしバッヂを使うたびに簡易版バイナリエディタを起動することができます。

Image in a image block

左側のD5E3が書き換えようとしているメモリのアドレスで、右の00がその中身です。

🎮
簡易版バイナリエディタ操作方法

B: アドレス-01

A: アドレス+01

↑: 中身-01

↓: 中身+01

←: 中身-10

→: 中身+10

START: 終了

SELECT: D62Cからのコードを実行(プログラム入力するまで押さないように注意)

手順5: バイナリエディタ導入

簡易版バイナリエディタを使用してバイナリエディタのプログラムを入力していきます。入力を終えたらセレクトボタンを押すことでバイナリエディタを起動することができます。バイナリエディタを起動する前に一旦スタートボタンを押して簡易版バイナリエディタを終了させてセーブすることをお勧めします。

アドレス中身
D5E9CD
D5EA赤緑v1.0: 79
赤緑v1.1(VC): 67
青版: 8F
D5EB38
D5ECF0
D5EDB3
D5EE01
D5EF01
D5F000
D5F107
D5F238
D5F318
D5F40B
D5F50B
D5F607
D5F738
D5F813
D5F90E
D5FAF0
D5FB07
D5FC38
D5FD0E
D5FE01
D5FF10
D60000
D60107
D60238
D60308
D60407
D60538
D60603
D60707
D608D0
D609E9
D60AE1
D60BC9
D60C79
D60DCB
D60E43
D60F20
D61006
D611CB
D6124B
D61320
D61405
D61509
D616C9
D61786
D61877
D619C9
D61A84
D61B67
D61CC9
D61DF5
D61ECB
D61F37
D620CD
D62124
D622D6
D623F1
D624E6
D6250F
D626C6
D627F6
D628F6
D62960
D62A22
D62BC9
D62C21
D62D00
D62ED0
D62FCD
D630E9
D631D5
D632E5
D63311
D634F8
D635FF
D63619
D637E5
D638D1
D63921
D63AAB
D63BC3
D63C01
D63D0C
D63E00
D63F36
D6407C
D64123
D6427A
D643CD
D6441D
D645D6
D6467B
D647CD
D6481D
D649D6
D64A36
D64B7F
D64C23
D64D1A
D64ECD
D64F1D
D650D6
D65113
D65236
D6537C
D65409
D6557C
D656FE
D657C5
D65820
D659E5
D65A3E
D65BED
D65CEA
D65D4B
D65EC4
D65FE1
D66018
D661CD

バイナリエディタ

これ以降、簡易版バイナリエディタを起動してからセレクトボタンを押すたびに、バイナリエディタを起動することができます。

Image in a image block
🎮
バイナリエディタ操作方法

↑: アドレス-01

↓: アドレス+01

←: アドレス-10

→: アドレス+10

B+↑: アドレス-100

B+↓: アドレス+100

B+←: アドレス-1000

B+→: アドレス+1000

A+↑: 中身-01

A+↓: 中身+01

A+←: 中身-10

A+→: 中身+10

START: 終了

SELECT: 現在のアドレスからのコードを実行(注意して使用してください)

バイナリエディタを使って以下のように書き換えを行うと、なかよしバッヂを使うたびに、バイナリエディタを直接起動することができるようになります。

アドレス中身
D98400
D98500
D98600
D987C3
D9882C
D989D6

注意: 既存のセーブデータにおける導入

上記の手順はさいしょからはじめるを念頭に置いていますが、既存のセーブデータでも簡易版バイナリエディタを使ってバイナリエディタを導入することができます。サファリゾーンに入ったことがある場合、サファリゾーンに入ってからあなぬけのヒモを使います。そだてやさんに「ーゆてょん」のポケモンを預け、ボックスに預けたポケモンのニックネームを以下のものにしてからなかよしバッヂを使用することで簡易版バイナリエディタを起動することができます。

📛
ボックスのポケモンのニックネーム
  1. がんぜルョ
  2. よヂづよく
  3. づよ◯づな
    • 赤緑v1.0: づよそづな
    • 赤緑v1.1(VC): づよむづな
    • 青版: づよワづな
  4. ゅョダだグ
  5. ぼヂてソん
  6. ダだギムツ
  7. てソんダム
  8. キづごヅー
  9. ぱへにんぴ
  10. へにんボぷ
  11. へにんへ
  12. ううゾダグ
  13. ダめいんど
  14. ダれチんダ
  15. めしんざダ
  16. れじよダリ
  17. だいなひだ
  18. へみんちレ
  19. ぼダメギて
  20. よザれんん
  21. よメボデの
  22. だア
既存のセーブデータでなかよしバッヂを入手する方法
  • タマムシシティ到達前の場合、手持ちのポケモンを2~5匹にして、どうぐ欄の(手持ちのポケモンの数+1)番目でセレクトボタンを押し、野生のポケモンとエンカウントして、ポケモン画面で(手持ちのポケモンの数)番目のポケモンを選んで、内部番号FFのポケモンを入手し、内部番号FFのポケモンより後ろにニックネーム「アアアゾッ」のポケモンを配置します。
  • どうぐ欄の13番目でセレクトボタンを押し、野生のポケモンとエンカウントして、ポケモン画面でニックネーム「アアアゾッ」のポケモンを選んで、どうぐの所持数を増やします。
  • フレンドリィショップに行き、どうぐ欄の1番目にあるねむけざましを売ることでおかねの1000の位を6に、100の位を7にします。
  • 22番目のなかよしバッヂと3~20番目にある不要なアイテムと入れ替えます。不要なアイテムは内部番号の16進数にA~Fが現れないもので9個以下にするとおこづかいの表示が正常なものとなります。例えばキズぐすり×1にすると良いでしょう。
  • 再びどうぐ欄の13番目でセレクトボタンを押し、野生のポケモンとエンカウントして、ポケモン画面でニックネームが「アアアゾッ」だったポケモンを選んで、どうぐ欄を元に戻します。
  • 内部番号FFのポケモンを入手した場合、どうぐ欄の(手持ちのポケモンの数+1)番目でセレクトボタンを押し、野生のポケモンとエンカウントして、内部番号FFのポケモンを選んで、ポケモンの状態を元に戻します。

手順6: 通常の状態に戻す

既存のセーブデータでバイナリエディタを導入した場合はこの手順は不要です。さいしょからはじめた場合はバイナリエディタの導入で様々な副作用が発生しています。

  • ポケモンずかんの情報
  • どうぐ欄の情報
  • おこづかい
  • 現在地
  • ボックスの情報
  • ライバルの名前
  • 手持ちのポケモンの情報
  • イーブイ取得のフラグ
ポケモンずかんの情報

アドレスD28BとD29Eの中身を00にすることでポケモンずかんからイーブイに関する情報を削除することができます。これを行うことでオーキドはかせにおとどけものを渡すことができるようになります。

どうぐ欄の情報

どうぐ欄の情報はアドレスD2A1以降で管理されています。アドレスD2A1以降の中身を 03 67 00 14 01 46 01 FF にすることで、どうぐの所持数を正常にしどうぐの1番目をなかよしバッヂ、2番目をキズぐすり、3番目をおとどけものにすることができます。

おこづかい

おこづかいの金額はアドレスD2CBからD2CDで管理されています。アドレスD2CBからD2CDの中身を 00 30 00 にすることで現在のおこづかいを3000円にすることができます。

現在地

出入口が1個しかない建物の中に入りアドレスD330、D331、D334、D335の中身を00にしてから外に出るとマサラタウンに移動することができます。

ボックスの情報

アドレスD9B2の中身を00に、アドレスD9B3の中身をFFにすることでボックスに預けているポケモンを0匹にすることができます。

ライバルの名前

バイナリエディタを使ってアドレスD000~D00Dの中身を以下のように書き換えてください。

アドレス赤v1.0緑v1.0赤v1.1(VC)緑v1.1(VC)青版
D0003E3E3E3E3E
D0010101010101
D0022121212121
D0032D2ED2D340
D004696968686A
D005CDCDCDCDCD
D00620200E0E36
D0073636363636
D008CDCDCDCDCD
D00986867474CF
D00A1B1B1B1B30
D00BC3C3C3C3C3
D00CEEEEDCDC02
D00D3D3D3D3D3E

書き変えたらカーソルをアドレスD000に合わせてセレクトボタンを押すことでライバルの名前を決めることができます。

残りの情報

残りの情報についてもプログラムを実行することで元に戻します。バイナリエディタを使ってアドレスD010~D024の中身を以下のように書き換えてください。

アドレス中身
D01021
D0112D
D012D5
D013CB
D014AE
D015AF
D01621
D01723
D018D1
D01922
D01A3D
D01B77
D01CFA
D01D96
D01ED6
D01F47
D0200E
D02105
D022C3
D023赤緑v1.0: 78
赤緑v1.1(VC): 66
青版: 8C
D0243E

書き換えたらカーソルをアドレスD010に合わせてセレクトボタンを押すことで最初のポケモンを再度入手することができます。他にもこのプログラムは以下の効果があります。

  • 手持ちのポケモンを再度入手したポケモンのみにする。
  • イーブイを再度入手できるようにする。

ただし最初にもらったポケモンは手順2で消えたポケモンと同一の個体ではないことに注意してください。これ以降はストーリーを通常通り進めることができます。

使用上の注意

バイナリエディタの導入後はサファリゾーンでボールを投げたり、そだてやを利用しないようにしてください。サファリゾーンでボールを投げてしまった場合は、もう一度サファリゾーンに入りなおしてボールを投げずにすぐに出てください。そだてやを利用してしまった場合は、ニックネーム「アアてじよ」のポケモンを預けてすぐに引き取ってください。またアドレスD5E9~D661とD983~D989はバイナリエディタで編集しないようにしてください。

技術的補足

どうぐの2番目でのセレクト

手順2で2番目のポケモンを1番目のポケモンと入れ替えると、手持ちのポケモンの最後を示す終端コードFFが消えてしまい、7番目以降のポケモンを実際のポケモンだと勘違いします。それによってポケモンではないデータに対してポケモンとしての処理が行われてます。具体的には4歩歩くたびに毒状態のポケモンのHPを1減らすという処理が行われます。

どこかしらドア

どこかしらドアとはライバルの家のドアの移動先が変更されるバグです。

どこかしらドアでは199番目のポケモンが毒状態であることが関係しています。199番目のポケモンに対応するアドレスは以下のようになっています。

番号種族現在HP上位現在HP下位状態異常
199D1EAF334F335F337

199番目のポケモンが毒状態と判定されるためにはアドレスD125からD1EAまでの中身にFFが存在しないことが必要です。最初にもらうポケモンのおやID、経験値、努力値、個体値にFFがあると移動先が変更されません。経験値と努力値についてはライバル戦以外で経験値を入れなければ回避できますが、おやIDと個体値については運が悪いとFFが入ることがあります。

状態異常のアドレスの3ビット目が立っていればポケモンは毒状態だと判定されます。マサラタウンに入るとアドレスF337の中身が0Cとなり3ビット目が立ちます。この中身はオーキドけんきゅうじょのドアのX座標に対応しています。

アドレスF335はライバルの家の移動先を格納しています。アドレスF335の中身は最初は27が格納されますが、毒の判定が行なわれる度に1ずつ減っていきます。手順2で48、49歩歩く(厳密には12回毒判定を行う)ことで、アドレスF335の中身が1Bとなり、それに対応する16ばんどうろに移動することができます。

アドレスE000~FDFFはEcho RAM領域でありC000~DDFFのミラーとなっています。ポケモンスタジアムのGBビルではE000~FDFFはミラーになっていないため動作しないです。また、ミラーが適切でないエミュレータでも動作しません。

いあいぎりの木の左のマスを通ることができる理由

いあいぎりの木の左のマスを通ることができる理由は132番目のポケモンが毒状態であることが関係しています。132番目のポケモンに対応するアドレスは以下のようになっています。

番号種族現在HP上位現在HP下位状態異常
132D1A7E7B0E7B1E7B3

アドレスE6E8からEBFBまでは背景タイルを格納しています。2×2マスの4マスを1ブロックとしてブロックごとに以下のIDが割り当てられています。

Image in a image block

アドレスE7B1とE7B3に対応するブロックは以下の画像の場所となります。アドレスE7B3に対応するブロックのIDが0Fで3ビット目が立っているので132番目のポケモンが毒状態だと判定されます。そのためアドレスE7B1の中身は毒の判定が行なわれる度に1ずつ減っていきブロックが変化します。ゲートの右側から最短ルートでいあいぎりの木の左のマスを通り抜けようとする際に、アドレスE7B1の中身が6Fから6Dへと変化するためにいあいぎりの木の左のマスを通ることができます。

Image in a image block
Dry Underflow

Dry Underflowはどうぐの所持数が0の状態でさらに所持数を減少させることで、アンダーフロー(より正確には負のオーバーフロー)を起こし、どうぐの所持数を255の状態にするバグです。元々はどうぐの所持数が0の状態でヤマブキシティの警備員に飲み物を渡すという手法だったのが、手順3のようなどうぐの入れ替え操作によってできるようになったため、Dryという名前がついているそうです。

Dry Underflowを実行するためには255個のどうぐを入手する必要があります。255個のどうぐを入手するために196番目のポケモンがどく状態であることを利用します。196番目のポケモンに対応するアドレスは以下のようになっています。

番号種族現在HP上位現在HP下位状態異常
196D1E7F2B0F2B1F2B3

アドレスF2B3は9番目のどうぐの個数を格納しています。手順3の買いものではどうぐの所持数が9になるようにしています。また毒状態と判定されるためには3ビット目が立っていることなので、9番目のどうぐの個数を8個となるようにしています。

アドレスF2B0とF2B1はそれぞれ8番目のどうぐの種類と個数を格納しています。手順3の通りに買いものを行うと、8番目のどうぐはまひなおし×1となるので、中身は 0F 01 となります。6~9歩歩いて毒の判定が2回行われると、中身が 0E FF となるので、8番目のどうぐがねむけざまし×255となります。

どうぐ欄からどうぐを削除する際、残りの個数が0個になる場合、0個になったどうぐを削除し、後続のどうぐを全て繰り上げるという処理が行われます。通常はどうぐの最後を示す終端コードFFまでを繰り上げるという処理となっています。ねむけざまし×255がある場合には、16進数のFFは10進数で255に相当するため、このFFがどうぐの最後であると処理されてしまい、見かけ上ねむけざまし×255が増殖するように見えます。

手順3で1番目と2番目のねむけざましを4回入れ替えることでどうぐの所持数を255の状態にしています。入れ替える前はどうぐの所持数が3であるため、4回入れ替えることでアンダーフロー(負のオーバーフロー)を起こしています。

どうぐの所持数が0のとき、通常はカーソルを2番目以降に移動することはできないのですが、上記の入れ替え操作を行う際にはカーソルを2番目に移動することができます。これにはメニュー内の項目の最大数を表す内部変数が関係しています。どうぐ欄を開いている場合はこの変数に2が格納されていて画面上の3番目のアイテムまで移動させることができます。どうぐの所持数が1または0の場合、やめるよりも下に移動できないようにするため、この変数には1または0が格納されています。

2つのどうぐをまとめてどうぐの所持数を減らす入れ替え処理を行う際、どうぐの所持数が1になったかどうかを確認して、どうぐの所持数が1になった場合はメニュー内の項目の最大数を表す内部変数を1に変更します。通常はどうぐの所持数を0にすることはできないので、どうぐの所持数が0になったかどうかを確認しないため、どうぐの所持数が0になった場合はこの内部変数を変更しません。そのため、カーソルを2番目にすることができます。

イーブイのモンスターボールが消えない理由

イーブイのモンスターボールが消えない理由は25番目のポケモンが毒状態であることが原因です。25番目のポケモンに対応するアドレスは以下のようになっています。

番号種族現在HP上位現在HP下位状態異常
25D13CD54CD54DD54F

アドレスD54D以降は消えるオブジェクトを格納しています。1つの項目につきオブジェクトの番号と消えるオブジェクトのフラグの番号の2バイトで構成されており、終端はFFで表されています。タマムシマンション屋上部屋に入るとアドレスD54D以降は 02 45 FF となっています。アドレスD54Fが FF となっているため、4歩歩くとD54D以降は 01 45 FF となり、イーブイを取得すると別のオブジェクトが消えるようになります。なおアドレスD54Eが変化しないため、イーブイを取得したというフラグは立つのでイーブイを取得した後タマムシマンション屋上部屋に戻るとイーブイのモンスターボールは消えてしまいます。

どうぐの入れ替え操作

タマムシデパートでの操作

どうぐの所持数を255にした後は以下の操作を行っています。

  1. 1番目のねむけざましと22番目のなかよしバッヂを入れ替える。
  2. 25番目のピーピーエイド×80と26番目のどうぐを入れ替える。
  3. 24番目のどうぐと76番目のどうぐと入れ替える。

22、24、25、26、76番目のどうぐに対応するアドレスは以下のようになっています。

番号種類個数
22D2CCD2CD
24D2D0D2D1
25D2D2D2D3
26D2D4D2D5
76D338D339

1つ目の操作では、なかよしバッヂを1番目にすることを目的としています。なかよしバッヂを1番目にすることで使いやすくなります。22番目がなかよしバッヂとなっている理由はアドレスD2CCになかよしバッヂの内部番号である67が格納されているからであり、おこづかいの1000の位と100の位の2桁に対応しています。手順3でおかねを26725円または26750円に調整しているのはこのためです。

2つ目の操作では、文字送り速度の最大化を目的としています。アドレスD2D4はオプションに関する情報が格納されており、0~3ビットが文字を表示させた後に遅延させるフレーム数に対応しています。はなしのはやさがはやいは1フレームに対応しており、アドレスD2D4の0~3ビットには1が格納されています。25番目と26番目のどうぐを入れ替えることでアドレスD2D4の0~3ビットを0にし文字を表示させた後に遅延させるフレーム数を最も短くしています。アドレスD2D2はライバルの名前の5文字目が格納されており、手順の通りに4文字の名前をつけると名前の終端を示す50が格納されます。

3つ目の操作では、エレベーターの移動先をタマムシマンション屋上部屋にすることを目的としています。アドレスD339はエレベーターの移動先のマップの内部番号、アドレスD338は移動先の出入口の番号が格納されています。一方でアドレスD2D2、D2D3はそれぞれライバルの名前の3、4文字目が格納されています。このためライバルの名前を調整することで移動先を変更することができます。なおライバルの名前の1、2文字目はバイナリエディタ導入では利用していません。

タマムシマンション屋上部屋の内部番号は84であるため、タマムシマンション屋上部屋に移動するためにライバルの名前の4文字目を84に対応する「オ」にしています。タマムシマンション屋上部屋の出入口の番号は00と01が正常なものとなっています。それ以外の番号ではバグった空間に移動しますが、26と27に関しては偶然にもセキチクシティのフレンドリィショップの出入口の座標を参照して移動をすることができます。出入口の番号00、01、26、27のうちイーブイのモンスターボールに最も近い座標は27であり、座標を定める際に6、7ビット目を無視する処理が行われるため、ライバルの名前の3文字目をA7に対応する「レ」にしています。

タマムシマンション屋上部屋での操作

ハイパーボールを59個捨てるという操作は出入口をそだてやさんにするために行っています。59個捨てることでハイパーボールの個数が131個から72個へと変化し、16進数で83から48へと変化することで移動先がタマムシマンション屋上からそだてやさんへと変化しています。

どうぐの13番目でのセレクト

既存のセーブデータにおける導入で使う手法となります。どうぐの13番目でのセレクトでどうぐの所持数を増やすことができる理由は手持ちのポケモンの13番目のニックネームが関係しています。

番号ニックネーム3文字目ニックネーム4文字目ニックネーム5文字目ニックネーム終端
13D2A1D2A2D2A3D2A4

アドレスD2A1はどうぐの所持数、それ以降のアドレスでどうぐの種類と個数を格納しています。ニックネーム「アアアゾッ」のポケモンでセレクトを行うことで、どうぐの所持数を128に、どうぐの1番目をねむけざまし×172に、どうぐの2番目をピーピーエイドにしています。

なかよしバッヂの効果

なかよしバッヂを使うとアドレスD983へジャンプします。アドレスD983はサファリボールの個数を格納しており、アドレスD984以降はそだてやに預けたポケモンのニックネームを格納しています。バイナリエディタ導入後はサファリゾーンでボールを投げたり、そだてやを利用しないようにすることで、これらのアドレスが変化するのを防ぎます。

簡易版バイナリエディタ(さいしょからはじめる)

説明

簡易版バイナリエディタはhlレジスタが指しているアドレスとその中身を出力するプログラムです。キーの入力でhlレジスタの指すアドレスとその中身を変化させるようにしています。

アドレスDE72の中身は赤緑v1.0ではBF、赤緑v1.1(VC)ではD1、青版ではA9となります。

WRA1:D983 00               nop
WRA1:D984 01 E3 D5         ld   bc,D5E3
WRA1:D987 C3 48 DE         jp   DE48

WRA1:DE64 26 DE            ld   h,DE
WRA1:DE66 2E A6            ld   l,A6
WRA1:DE68 AF               xor  a
WRA1:DE69 50               ld   d,b
WRA1:DE6A D6 10            sub  a,10
WRA1:DE6C 32               ldd  (hl),a
WRA1:DE6D D6 B8            sub  a,B8
WRA1:DE6F 50               ld   d,b
WRA1:DE70 32               ldd  (hl),a
WRA1:DE71 D6 ??            sub  a,??
WRA1:DE73 32               ldd  (hl),a
WRA1:DE74 C5               push bc
WRA1:DE75 50               ld   d,b
WRA1:DE76 E1               pop  hl
WRA1:DE77 AF               xor  a
WRA1:DE78 0F               rrca 
WRA1:DE79 30 07            jr   nc,DE82
WRA1:DE7B 50               ld   d,b
WRA1:DE7C 3E 10            ld   a,10
WRA1:DE7E C3 8E DE         jp   DE8E
WRA1:DE81 50               ld   d,b
WRA1:DE82 0F               rrca 
WRA1:DE83 30 06            jr   nc,DE8B
WRA1:DE85 9F               sbc  a
WRA1:DE86 91               sub  c
WRA1:DE87 50               ld   d,b
WRA1:DE88 C3 8E DE         jp   DE8E
WRA1:DE8B 0F               rrca 
WRA1:DE8C 9F               sbc  a
WRA1:DE8D 50               ld   d,b
WRA1:DE8E 86               add  (hl)
WRA1:DE8F 32               ldd  (hl),a
WRA1:DE90 2A               ldi  a,(hl)
WRA1:DE91 11 E3 50         ld   de,50E3
WRA1:DE94 44               ld   b,h
WRA1:DE95 CD C6 DE         call DEC6
WRA1:DE98 45               ld   b,l
WRA1:DE99 50               ld   d,b
WRA1:DE9A CD C6 DE         call DEC6
WRA1:DE9D 1C               inc  e
WRA1:DE9E 46               ld   b,(hl)
WRA1:DE9F 50               ld   d,b
WRA1:DEA0 CD C6 DE         call DEC6
WRA1:DEA3 CD 50 50         call 5050
WRA1:DEA6 B3               or   e
WRA1:DEA7 B3               or   e
WRA1:DEA8 0E 0F            ld   c,0F
WRA1:DEAA 07               rlca 
WRA1:DEAB 50               ld   d,b
WRA1:DEAC 0F               rrca 
WRA1:DEAD D2 B2 DE         jp   nc,DEB2
WRA1:DEB0 34               inc  (hl)
WRA1:DEB1 50               ld   d,b
WRA1:DEB2 0F               rrca 
WRA1:DEB3 DA 90 DE         jp   c,DE90
WRA1:DEB6 0F               rrca 
WRA1:DEB7 50               ld   d,b
WRA1:DEB8 D2 BC DE         jp   nc,DEBC
WRA1:DEBB 2B               dec  hl
WRA1:DEBC 0F               rrca 
WRA1:DEBD 50               ld   d,b
WRA1:DEBE DA 2C D6         jp   c,D62C
WRA1:DEC1 0F               rrca 
WRA1:DEC2 D8               ret  c
WRA1:DEC3 50               ld   d,b
WRA1:DEC4 30 B2            jr   nc,DE78
WRA1:DEC6 C5               push bc
WRA1:DEC7 CB 30            swap b
WRA1:DEC9 50               ld   d,b
WRA1:DECA CD D0 DE         call DED0
WRA1:DECD C1               pop  bc
WRA1:DECE 50               ld   d,b
WRA1:DECF 50               ld   d,b
WRA1:DED0 3E 0F            ld   a,0F
WRA1:DED2 A0               and  b
WRA1:DED3 06 C3            ld   b,C3
WRA1:DED5 50               ld   d,b
WRA1:DED6 D6 0A            sub  a,0A
WRA1:DED8 DA DE DE         jp   c,DEDE
WRA1:DEDB 50               ld   d,b
WRA1:DEDC D6 A0            sub  a,A0
WRA1:DEDE 1C               inc  e
WRA1:DEDF 12               ld   (de),a
WRA1:DEE0 C9               ret  
WRA1:DEE1 50               ld   d,b
バイナリ
D983:
00 01 E3 D5 C3 48 DE

DE64:
26 DE 2E A6 AF 50
D6 10 32 D6 B8 50
32 D6 ?? 32 C5 50
E1 AF 0F 30 07 50
3E 10 C3 8E DE 50
0F 30 06 9F 91 50
C3 8E DE 0F 9F 50
86 32 2A 11 E3 50
44 CD C6 DE 45 50
CD C6 DE 1C 46 50
CD C6 DE CD 50 50
B3 B3 0E 0F 07 50
0F D2 B2 DE 34 50
0F DA 90 DE 0F 50
D2 BC DE 2B 0F 50
DA 2C D6 0F D8 50
30 B2 C5 CB 30 50
CD D0 DE C1 50 50
3E 0F A0 06 C3 50
D6 0A DA DE DE 50
D6 A0 1C 12 C9 50

簡易版バイナリエディタ(既存のセーブデータ)

説明

上記で述べた簡易版バイナリエディタのプログラムはアドレスDE48からDE63までの中身が00で埋まっている前提でプログラムを組んでいます。既存のセーブデータで実行する場合はjp命令でアドレスDEE2を実行してからjr命令でDE64を実行するようにしています。

WRA1:D983 00               nop
WRA1:D984 01 E3 D5         ld   bc,D5E3
WRA1:D987 C3 E2 DE         jp   DEE2

WRA1:DE64 26 DE            ld   h,DE
WRA1:DE66 2E A6            ld   l,A6
WRA1:DE68 AF               xor  a
WRA1:DE69 50               ld   d,b
WRA1:DE6A D6 10            sub  a,10
WRA1:DE6C 32               ldd  (hl),a
WRA1:DE6D D6 B8            sub  a,B8
WRA1:DE6F 50               ld   d,b
WRA1:DE70 32               ldd  (hl),a
WRA1:DE71 D6 ??            sub  a,??
WRA1:DE73 32               ldd  (hl),a
WRA1:DE74 C5               push bc
WRA1:DE75 50               ld   d,b
WRA1:DE76 E1               pop  hl
WRA1:DE77 AF               xor  a
WRA1:DE78 0F               rrca 
WRA1:DE79 30 07            jr   nc,DE82
WRA1:DE7B 50               ld   d,b
WRA1:DE7C 3E 10            ld   a,10
WRA1:DE7E C3 8E DE         jp   DE8E
WRA1:DE81 50               ld   d,b
WRA1:DE82 0F               rrca 
WRA1:DE83 30 06            jr   nc,DE8B
WRA1:DE85 9F               sbc  a
WRA1:DE86 91               sub  c
WRA1:DE87 50               ld   d,b
WRA1:DE88 C3 8E DE         jp   DE8E
WRA1:DE8B 0F               rrca 
WRA1:DE8C 9F               sbc  a
WRA1:DE8D 50               ld   d,b
WRA1:DE8E 86               add  (hl)
WRA1:DE8F 32               ldd  (hl),a
WRA1:DE90 2A               ldi  a,(hl)
WRA1:DE91 11 E3 50         ld   de,50E3
WRA1:DE94 44               ld   b,h
WRA1:DE95 CD C6 DE         call DEC6
WRA1:DE98 45               ld   b,l
WRA1:DE99 50               ld   d,b
WRA1:DE9A CD C6 DE         call DEC6
WRA1:DE9D 1C               inc  e
WRA1:DE9E 46               ld   b,(hl)
WRA1:DE9F 50               ld   d,b
WRA1:DEA0 CD C6 DE         call DEC6
WRA1:DEA3 CD 50 50         call 5050
WRA1:DEA6 B3               or   e
WRA1:DEA7 B3               or   e
WRA1:DEA8 0E 0F            ld   c,0F
WRA1:DEAA 07               rlca 
WRA1:DEAB 50               ld   d,b
WRA1:DEAC 0F               rrca 
WRA1:DEAD D2 B2 DE         jp   nc,DEB2
WRA1:DEB0 34               inc  (hl)
WRA1:DEB1 50               ld   d,b
WRA1:DEB2 0F               rrca 
WRA1:DEB3 DA 90 DE         jp   c,DE90
WRA1:DEB6 0F               rrca 
WRA1:DEB7 50               ld   d,b
WRA1:DEB8 D2 BC DE         jp   nc,DEBC
WRA1:DEBB 2B               dec  hl
WRA1:DEBC 0F               rrca 
WRA1:DEBD 50               ld   d,b
WRA1:DEBE DA 2C D6         jp   c,D62C
WRA1:DEC1 0F               rrca 
WRA1:DEC2 D8               ret  c
WRA1:DEC3 50               ld   d,b
WRA1:DEC4 30 B2            jr   nc,DE78
WRA1:DEC6 C5               push bc
WRA1:DEC7 CB 30            swap b
WRA1:DEC9 50               ld   d,b
WRA1:DECA CD D0 DE         call DED0
WRA1:DECD C1               pop  bc
WRA1:DECE A7               and  a
WRA1:DECF 50               ld   d,b
WRA1:DED0 3E 0F            ld   a,0F
WRA1:DED2 A0               and  b
WRA1:DED3 06 C3            ld   b,C3
WRA1:DED5 50               ld   d,b
WRA1:DED6 D6 0A            sub  a,0A
WRA1:DED8 DA DE DE         jp   c,DEDE
WRA1:DEDB 50               ld   d,b
WRA1:DEDC D6 A0            sub  a,A0
WRA1:DEDE 1C               inc  e
WRA1:DEDF 12               ld   (de),a
WRA1:DEE0 C9               ret  
WRA1:DEE1 50               ld   d,b
WRA1:DEE2 30 80            jr   nc,DE64
バイナリ
D983:
00 01 E3 D5 C3 E2 DE

DE64:
26 DE 2E A6 AF 50
D6 10 32 D6 B8 50
32 D6 ?? 32 C5 50
E1 AF 0F 30 07 50
3E 10 C3 8E DE 50
0F 30 06 9F 91 50
C3 8E DE 0F 9F 50
86 32 2A 11 E3 50
44 CD C6 DE 45 50
CD C6 DE 1C 46 50
CD C6 DE CD 50 50
B3 B3 0E 0F 07 50
0F D2 B2 DE 34 50
0F DA 90 DE 0F 50
D2 BC DE 2B 0F 50
DA 2C D6 0F D8 50
30 B2 C5 CB 30 50
CD D0 DE C1 A7 50
3E 0F A0 06 C3 50
D6 0A DA DE DE 50
D6 A0 1C 12 C9 50
30 80 50

バイナリエディタ

説明

バイナリエディタはhlレジスタが指しているアドレスを含む18個のアドレスとその中身を出力するプログラムとなっています。アドレスD62Cを実行することでバイナリエディタを起動することができるようになっています。アドレスD5E9からD66Eまでの134バイトは未使用領域であり、この領域にバイナリエディタのプログラムを記述しています。

アドレスD5EAの中身は赤緑v1.0では79、赤緑v1.1(VC)では67、青版では8Fとなります。

WRA1:D5E9 CD ?? 38         call 38??
WRA1:D5EC F0 B3            ld   a,(ff00+B3)
WRA1:D5EE 01 01 00         ld   bc,0001
WRA1:D5F1 07               rlca 
WRA1:D5F2 38 18            jr   c,D60C
WRA1:D5F4 0B               dec  bc
WRA1:D5F5 0B               dec  bc
WRA1:D5F6 07               rlca 
WRA1:D5F7 38 13            jr   c,D60C
WRA1:D5F9 0E F0            ld   c,F0
WRA1:D5FB 07               rlca 
WRA1:D5FC 38 0E            jr   c,D60C
WRA1:D5FE 01 10 00         ld   bc,0010
WRA1:D601 07               rlca 
WRA1:D602 38 08            jr   c,D60C
WRA1:D604 07               rlca 
WRA1:D605 38 03            jr   c,D60A
WRA1:D607 07               rlca 
WRA1:D608 D0               ret  nc
WRA1:D609 E9               jp   hl
WRA1:D60A E1               pop  hl
WRA1:D60B C9               ret  
WRA1:D60C 79               ld   a,c
WRA1:D60D CB 43            bit  0,e
WRA1:D60F 20 06            jr   nz,D617
WRA1:D611 CB 4B            bit  1,e
WRA1:D613 20 05            jr   nz,D61A
WRA1:D615 09               add  hl,bc
WRA1:D616 C9               ret  
WRA1:D617 86               add  (hl)
WRA1:D618 77               ld   (hl),a
WRA1:D619 C9               ret  
WRA1:D61A 84               add  h
WRA1:D61B 67               ld   h,a
WRA1:D61C C9               ret  
WRA1:D61D F5               push af
WRA1:D61E CB 37            swap a
WRA1:D620 CD 24 D6         call D624
WRA1:D623 F1               pop  af
WRA1:D624 E6 0F            and  a,0F
WRA1:D626 C6 F6            add  a,F6
WRA1:D628 F6 60            or   a,60
WRA1:D62A 22               ldi  (hl),a
WRA1:D62B C9               ret  
WRA1:D62C 21 00 D0         ld   hl,D000
WRA1:D62F CD E9 D5         call D5E9
WRA1:D632 E5               push hl
WRA1:D633 11 F8 FF         ld   de,FFF8
WRA1:D636 19               add  hl,de
WRA1:D637 E5               push hl
WRA1:D638 D1               pop  de
WRA1:D639 21 AB C3         ld   hl,C3AB
WRA1:D63C 01 0C 00         ld   bc,000C
WRA1:D63F 36 7C            ld   (hl),7C
WRA1:D641 23               inc  hl
WRA1:D642 7A               ld   a,d
WRA1:D643 CD 1D D6         call D61D
WRA1:D646 7B               ld   a,e
WRA1:D647 CD 1D D6         call D61D
WRA1:D64A 36 7F            ld   (hl),7F
WRA1:D64C 23               inc  hl
WRA1:D64D 1A               ld   a,(de)
WRA1:D64E CD 1D D6         call D61D
WRA1:D651 13               inc  de
WRA1:D652 36 7C            ld   (hl),7C
WRA1:D654 09               add  hl,bc
WRA1:D655 7C               ld   a,h
WRA1:D656 FE C5            cp   a,C5
WRA1:D658 20 E5            jr   nz,D63F
WRA1:D65A 3E ED            ld   a,ED
WRA1:D65C EA 4B C4         ld   (C44B),a
WRA1:D65F E1               pop  hl
WRA1:D660 18 CD            jr   D62F

WRA1:D983 00               nop
WRA1:D984 00               nop
WRA1:D985 00               nop
WRA1:D986 00               nop
WRA1:D987 C3 2C D6         jp   D62C
バイナリ
                           CD ?? 38 F0 B3 01 01
00 07 38 18 0B 0B 07 38 13 0E F0 07 38 0E 01 10
00 07 38 08 07 38 03 07 D0 E9 E1 C9 79 CB 43 20
06 CB 4B 20 05 09 C9 86 77 C9 84 67 C9 F5 CB 37
CD 24 D6 F1 E6 0F C6 F6 F6 60 22 C9 21 00 D0 CD
E9 D5 E5 11 F8 FF 19 E5 D1 21 AB C3 01 0C 00 36
7C 23 7A CD 1D D6 7B CD 1D D6 36 7F 23 1A CD 1D
D6 13 36 7C 09 7C FE C5 20 E5 3E ED EA 4B C4 E1
18 CD

ライバルの名前変更のプログラム

説明

ライバルの名前を選択するプログラムを直接呼び出しています。ただし呼び出した後に姿がポケモンのアイコンになったりマップの表示が壊れたりするので、元に戻すための処理を入れています。

赤v1.0

WRA1:DA00 3E 01            ld   a,01
WRA1:DA02 21 2D 69         ld   hl,692D
WRA1:DA05 CD 20 36         call 3620
WRA1:DA08 CD 86 1B         call 1B86
WRA1:DA0B C3 EE 3D         jp   3DEE

緑v1.0

WRA1:DA00 3E 01            ld   a,01
WRA1:DA02 21 2E 69         ld   hl,692E
WRA1:DA05 CD 20 36         call 3620
WRA1:DA08 CD 86 1B         call 1B86
WRA1:DA0B C3 EE 3D         jp   3DEE

赤v1.1(VC)

WRA1:DA00 3E 01            ld   a,01
WRA1:DA02 21 D2 68         ld   hl,68D2
WRA1:DA05 CD 0E 36         call 360E
WRA1:DA08 CD 74 1B         call 1B74
WRA1:DA0B C3 DC 3D         jp   3DDC

緑v1.1(VC)

WRA1:DA00 3E 01            ld   a,01
WRA1:DA02 21 D3 68         ld   hl,68D3
WRA1:DA05 CD 0E 36         call 360E
WRA1:DA08 CD 74 1B         call 1B74
WRA1:DA0B C3 DC 3D         jp   3DDC

青版

WRA1:DA00 3E 01            ld   a,01
WRA1:DA02 21 40 6A         ld   hl,6A40
WRA1:DA05 CD 36 36         call 3636
WRA1:DA08 CD CF 30         call 30CF
WRA1:DA0B C3 02 3E         jp   3E02
バイナリ

赤緑v1.0

3E 01 21 2E 69 CD 20 36 CD 86 1B C3 EE 3D

赤緑v1.1(VC)

3E 01 21 D2 68 CD 0E 36 CD 74 1B C3 DC 3D

青版

3E 01 21 40 6A CD 36 36 CD CF 30 C3 02 3E

残りの情報に関するプログラム

説明

残りの情報に関しては以下のことを実現するプログラムを記述しています。

  • アドレスD52Dの5ビット目を降ろしてイーブイ取得のフラグを折る。
  • アドレスD123の中身を00、アドレスD124の中身をFFにし、手持ちのポケモンを0匹にする。
  • 最初のポケモンの内部番号が格納されているアドレスD696を利用してポケモンを入手する。

アドレスD013の中身は赤緑v1.0では78、赤緑v1.1(VC)では66、青版では8Cとなります。

WRA1:D000 21 2D D5         ld   hl,D52D
WRA1:D003 CB AE            res  5,(hl)
WRA1:D005 AF               xor  a
WRA1:D006 21 23 D1         ld   hl,D123
WRA1:D009 22               ldi  (hl),a
WRA1:D00A 3D               dec  a
WRA1:D00B 77               ld   (hl),a
WRA1:D00C FA 96 D6         ld   a,(D696)
WRA1:D00F 47               ld   b,a
WRA1:D010 0E 05            ld   c,05
WRA1:D012 C3 ?? 3E         jp   3E??
バイナリ
21 2D D5 CB AE AF 21 23 D1 22 3D 77 FA 96 D6 47
0E 05 C3 ?? 3E

参考文献

日本語

英語