ポケモン金銀 バイナリエディタ起動 SRAM Glitch チャート

注意: 2023/12/11 に内容をアップデートしました.

はじめに

ポケモン金銀バイナリエディタを導入する手順について書いていきます.
以前に以下の記事を出しているのですがコガネシティまで行く必要があり若干面倒です.
ポケモン金 バイナリエディタ起動RTA チャート - flag3833753

そこで今回はキキョウシティでセットアップが完了するチャートについて紹介をします.
ただし今回はレポート中にリセットをするチャートとなります.

参考文献

今回ここで述べるのは TimoVM さんによるセットアップと同じものとなります*1
Guides:Glitch Pokédex Mode ACE setup (JP) - Glitch City Wiki

TimoVM さんに上記の RTA の記事を紹介したところ今回のセットアップを思いついたとのことです.

チャート

環境: 金銀版のみ対応しています.

1. データの初期化

タイトル画面で「SELECT」+「B」+「↑」を同時に押して消去してください.

2. オープニング

時間を朝または昼の時間にし,主人公の名前を「てパま」にしてください
曜日は何を選択しても良いです.

3. ライバルのイベントまで進める.

ストーリーを進めてください.最初にもらうポケモンは何でも良いです.
ライバルの名前は何でも良いです.

4. 29 ばんどうろでオタチ, 31 ばんどうろでマダツボミを捕獲する.

オタチは朝または昼に出現することに注意してください.

5. キキョウシティのジムリーダーを倒しトゲピーのタマゴをもらう.

ジムリーダーから貰える「どろかけ」のわざマシンは売ったり捨てないでください.

6. 手持ちのポケモンをボックスに複製する.

以下の手順で手持ちのポケモンをボックスに複製することができます.

a. パソコンの前に立ちセーブを行う.
b. ポケモンを 1 匹預ける.
c. ボックスをかえるを選択し別のボックスに切り替えようとセーブする際に「ポケモンレポートに かきこんでいます」の表示が出ている間に強制リセットをする.
d. 再開後預けたポケモンが手持ちとボックスの両方にいれば成功です.

この手順でマダツボミを最低 5 匹,トゲピーのタマゴを最低 2 つ複製してください.後の作業のためにボックスに預けているポケモンを 20 ~ 25 匹ぐらいにしておくと少し楽となります.また後の作業で手持ちのポケモンのデータを破損させるため破損させても良いように最初にもらえるポケモンやオタチも複製させておくと良いです.

7. レベル 0 バグポケモンを入手する.

複製の方法と似ていますが以下の方法でレベル 0 バグポケモンを入手してください.

a. パソコンの前に立ちセーブを行う.
b. 最初にもらえるポケモン*2を 1 匹預ける.
c. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
d. 再開後ボックスにレベル 0 のポケモンがいれば成功です.

もしポケモンが預けられていない場合は強制リセットのタイミングが早すぎたことになります.もし預けたポケモンが手持ちとボックスの両方に複製されたりレベル 0 ではないが名前が空白のものが複製された場合は強制リセットのタイミングが少し遅かったことになります.預けたポケモンが手持ちからいなくなっている場合は強制リセットのタイミングが遅すぎたことになります.

複製よりもタイミングはシビアで 1 ~ 1.5 フレームらしいです.ボックスに預けているポケモンの数が多いとタイミングの猶予が少し長くなります.

8. 名前が空白のタマゴを入手する.

レベル 0 バグポケモンをひきだし「どろかけ」を覚えさせてください.そして以下の方法で名前が空白のタマゴを入手してください.

a. ボックスにトゲピーのタマゴとレベル 0 バグポケモンを預け,レベル 0 バグポケモンが最後になるようにする.この状態でセーブを行う.
b. トゲピーのタマゴを引き出す.
c. トゲピーのタマゴを預けボックスの最後に配置する.
d. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
e. 再開後ボックスの最後に名前が空白のタマゴがあれば成功です.

再開後ボックスの最後が通常のタマゴになっている場合はやり直しとなります.

タマゴを入手したらそのまま孵化させてください.少し歩けばすぐに孵化するようになっています.こんな感じのポケモンを入手することができます.

9. ふしぎなタマゴ 2 個とスピードボールを入手する.

手持ちのポケモンを以下の順番にしてください.
1. タマゴから孵化させたバグポケモン
2. オタチ
3. 最初にもらえるポケモン
4. マダツボミ
5. マダツボミ
6. マダツボミ

またボックスにはマダツボミ 2 匹以上,トゲピーのタマゴを 2 つ以上,その他ニックネームが正常なポケモンを 1 匹以上用意してください.

上記の状態で以下の通りの手順をしてください.

a. ボックスせいりを使いマダツボミを手持ちの先頭に追加する.
b. 手持ちを開くと 7 匹になっているので 2 番目と 5 番目を入れ替える.
c. ボックスせいりを使いマダツボミを手持ちの最後に追加する.

この手順により先頭の 2 匹がふしぎなタマゴ,3 匹目がスピードボールを持っているので回収してください.

10. 任意コード実行のセットアップをする.

手持ちの 1 番目を正常なポケモンにし 6 番目をトゲピーのタマゴにしてください.

かばんを開きボール欄を以下のようにしてください.

たいせつなもの欄にふしぎなタマゴが2つあるので1つ目のふしぎなタマゴと2つ目のふしぎなタマゴをセレクトボタンで入れ替えてください.
そうするとボール欄の 2 つ目がハイパーボールとなっているのでそれを 6 個になるように捨ててください.
ハイパーボール × 6 を 65 番目にある道具と入れ替えてください.
この入れ替え関係の操作の詳細は以下の動画で述べられている方法とほぼ同じなので参考になるかと思います.

入れ替えをするとポケギアが消えてしまうのですが後の仕上げ作業で元に戻します.

11. 簡易版バイナリエディタを起動する.

ボックス 1 ~ 9 を以下の名前にしてください.

1. ぼギダへマだがヲ
2. ぜナョダだグぼダ
3. ぞてはりダムキづ
4. ごヅまてぱへごま
5. へごまボぷへごま
6. へォひひ ぐとど
7. ダれへりダださざ
8. ダダれャだダだな
9. ぼヂてはり

キキョウシティではながらメールを購入してください.
はながらメールをポケモンにもたせることで以下のメール1~3を作成してください.

メール1

ぼぴがりぜゆづぜゅよダづにひぜ?
ずづぜ8ひラづのののののののだっ

メール2

へロどへュでていりなひだへづまち
ぼダメに0ぞ?ムぞボデのののだっ

メール3

ョぺぶぶぶヅにわがヲぜナへマだ空
ゾそへよだへャだてにわ空空空だっ

後は以下の手順を行うことで簡易版バイナリエディタが起動できます.

1. メール1を読んでバグモード図鑑を開いてすぐに閉じる
2. メール2を読んでバグモード図鑑を開く

12. バイナリエディタを作成する.

簡易版バイナリエディタを起動するとこんな感じになると思います.

左 4 桁がアドレス,右 2 桁がその中身となっています.

文字の表示がおかしいところがあるのですが気にせず使いましょう.
g は A,茶色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.
ちなみに上の画像はアドレスが AB11 で中身は CB です.

以下の操作方法でアドレスとその中身を書き換えることができます.

操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
miniatur_memory_editor_GS.asm · GitHub
簡易版バイナリエディタを使って AA94 から AB4D のアドレスの中身をリンク先のものに書き換えてください.

書き換えたらメール3を読んでバグモード図鑑を開くことでバイナリエディタが起動できます.

バイナリエディタの操作

↓: アドレス+1h
↑: アドレス-1h
→: アドレス+10h
←: アドレス-10h
B+↓: アドレス+100h
B+↑: アドレス-100h
B+→: アドレス+1000h
B+←: アドレス-1000h
A+↓: 中身+1h
A+↑: 中身-1h
A+→: 中身+10h
A+←: 中身-10h
SELECT+↓: バンク+1h
SELECT+↑: バンク-1h
SELECT+→: バンク+10h
SELECT+←: バンク-10h
SELECT+A: 指しているアドレスを実行
START: 終了

「SELECT+A」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

仕上げ操作

以下の 6 つのことをしたいと思います.

1. 分類違いわざマシンで起動できるようにする.
2. どうぐ欄を正常にする.
3. ポケギアを元に戻す.
4. 図鑑を正常にする.
5. 手持ちのポケモンを正常にする.
6. 主人公の名前を変更する.

1. については D5AA からD5AD を 01 D0 01 FF にし DA47 から DA49 を C3 B2 D8 にし D8B2 から D8C8 を以下のようにしてください.

D8B0:       3E 03 CD 9D 30 01 CF 00 11 C6 DC 21 94 AA
D8C0: CD D6 30 CD AD 30 C3 C6 DC

そうすることでどうぐがわざマシン 17 のみとなり使用することでバイナリエディタを起動することができるようになります.
2. については D5D4 と D5D5 を 00 FF にし D5EE から D5F2 を 00 01 01 05 FF にし D608 から D60A を 00 00 FF にすることで正常になります.
3. については D66D の値を D66F に移し D66D を 00 にすることで元に戻ります.
4. については D670 と D671 を 00 00 にすれば図鑑が正常になります.
5. については手持ちの 1 匹目を正常なポケモンにした状態で D9E8 を 02 にし D9EA と D9EB を 01 FF にし DA20 を 01 にすることで手持ちを 2 匹のみにし 2 匹目をフシギダネにすることができます.このフシギダネは手持ちの 2 番目で置いておき経験値を入れないようにしボックスや育て屋に預けないようにしてください.なお D9EA と DA20 の値を好きな値にすればフシギダネ以外にすることもできます.
6. については D1B5 から D1B9 の値を変更することで好きな名前にすることができます.以下のページで Text の部分に名前を入れることで対応する 16 進数が Hex の下に出現するのでそれを入力すると主人公の名前を変えることができます.ただし名前の終わりには 50 を入れるようにしてください.
Hex Converter for Game Boy Pokémon

*1:このセットアップの日本語訳を書いている訳ではないので是非見てみてください.

*2:チコリータヒノアラシワニノコのことです.進化していても問題ありません.

ポケモンクリスタル 0x1500 制御コードによる任意コード実行

はじめに

ポケモンクリスタルで任意コード実行をするための手段として主に

の2つが知られています.

今回の記事では 0x1500 制御コードによる任意コード実行のやり方について解説しようと思います.

0x1500 制御コードによる任意コード実行とは

仕組みについては後で述べるのですが 0x15, 0x00 を文字列として表示させようとすることがトリガーとなって発生する任意コード実行です.luckytyphlosion さんが発見したそうです.クリスタルのみで行えるもので金銀ではできないものとなります.

注意 (2023/11/28 追記)

手順についてですが以下の記事で簡単に実行できるようになったのでこちらもご参照ください.
ポケモンクリスタル バイナリエディタ起動 チャート - flag3833753

0x1500 制御コードによる任意コード実行の手順

準備 1: 終端記号のないポケモンの入手

1. どうぐ欄にアイテムを 1 種類以上入手しておく.
2. 一度も満タンになったことのないボックス*1に切り替えてセーブをする.
3. ポケモンを 1 匹預ける.
4. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
5. 再開後どうぐ欄を開く.
6. パソコンを開き預けられたポケモンのニックネームが??????のような表示になれば成功です*2
7. ボックス 1 をニックネーム??????のポケモンのみにする.

もしポケモンが預けられていない場合は強制リセットのタイミングが早すぎたことになります.もし預けたポケモンが手持ちとボックスの両方に複製されてしまった場合は強制リセットのタイミングが少し遅かったことになります.預けたポケモンが手持ちからいなくなっている場合は強制リセットのタイミングが遅すぎたことになります.

ボックスに預けているポケモンの数が多いとタイミングの猶予が少し長くなるので複製になってしまう場合でもそのままトライし続ければ成功率が上がると思います.

実際の強制リセットのタイミングとしては以下の動画が役に立つかもしれないので置いておきます.
unterminated_name_pokemon.mov - Google ドライブ

準備 2: 特定のポケモンの入手

まずはオニスズメを入手します.入手方法としては朝または昼に 46 ばんどうろで出現するのを狙うか,コガネシティ北で「ひきゃく」を入手してください.「ひきゃく」を入手する場合は持っているメールを外してください.

もう 1 匹は候補として以下で紹介するイワークかサンドのどちらかを入手してください.

イワーク

1. 31 ばんどうろで野生のマダツボミを捕まえる.
2. マダツボミをキキョウシティのポケモンセンター左の民家で「ブルブル」と交換してイワークを入手する.
3. イワーク単独でイトマルを 3 匹,キャタピーを 2 匹倒す.
4. イワークに道具は何も持たせずに技の順番を「たいあたり」「いやなおと」にする.

イトマルは夜に 31 ばんどうろで出現,キャタピーは朝または昼に 31 ばんどうろで出現しますが,30, 31 ばんどうろのトレーナーが出してくるキャタピーを倒しても大丈夫です.31 ばんどうろのトレーナーと戦闘する場合はしあいのルールをいれかえタイプにすることを推奨します.また経験値が 256 ~ 511 となっていることを確認してください.

サンド

1. つながりのどうくつ等で野生のサンドを捕まえる.
2. サンド単独でイシツブテを 2 匹,ハネッコを 1 匹倒す.
3. サンドに「ミックスオレ」を持たせ技の先頭を「ひっかく」にする.

イシツブテはつながりのどうくつで出現し,ハネッコは朝または昼に 33 ばんどうろで出現します.持っていれば「どろかけ」の技マシンを使うとイシツブテが少し楽に倒せるようになります.

ウパー/ヌオー (2023/11/08 追記)

イワークとサンドの代わりに道具を持たせていないかつ技の先頭が「あまごい」となっているウパーまたはヌオーでも良いです.
つながりのどうくつの水上でウパーとヌオーは出現し,「あまごい」はわざマシン 18 の技でありヤドンのいどで入手するかタマムシデパートで購入することができます.
ウパーまたはヌオーを使う場合はイワークやサンドと異なり野生のポケモンを倒す必要はありません.

手順

1. 手持ちの 1 匹目をオニスズメ,2 匹目を上で用意したイワーク or サンドにする.3 匹目以降は何でも良いです.
2. 手持ちの 1 匹目のオニスズメに任意コード実行用のメールを持たせる.
3. ポケモンセンターのパソコンの前に立ちセーブをしてリセットを行う.
4. 再開後一歩下に移動しメニューを開いてイワーク or サンドのステータスを見る.
5. 一歩上に移動しメニューを開いてオニスズメに持たせているメールを見る.
6. パソコンを開いてポケモンをひきだすで終端記号のないポケモンを表示する.

以上の手順を行うことで任意コード実行用のメールの文面を実行することができます.
ただしメールの 2 文字目と 3 文字目は実行時に 01 に書き換えられること*3とコードを ret 命令で終了させる前に pop hl 命令を実行する必要があることに注意してコードを組む必要があります.

具体例

例えば任意コード実行用のメールとして以下のものを用意するとオニスズメに「そらをとぶ」を覚えさせてフィールドで使うことができるようになります.動画にすると次のような感じとなります.
0x1500.mov - Google ドライブ

444ぼっヅぽりボボぞデヅレわゅ
ぼドデの


以下のコードを実行すると図鑑モードを 0C にすることができそのまま次の記事を用いてバイナリエディタの導入ができるようになります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753

444がるぜがひガぼズづゅの

0x1500 制御コードによる任意コード実行の仕組み

先述の通り 0x15, 0x00 を文字列として表示させようとすることが任意コード実行のトリガーとなっています.実際に 0x15 を文字列として表示させようとするとモバイルアダプタ関連の機能を実行させようとします.0x15 を読むとモバイルアダプタ機能のリストへジャンプするために 0x15 の次のアドレスの中身を使用します.有効な中身は 0x01 ~ 0x0F となっています.0x10 以上を読み取った場合は無効として扱われモバイルアダプタ機能を正常に終了させます.しかし 0x00 を読み取った場合はモバイルアダプタ機能を終了させることなく 0xCD46 を実行させます.

では何故 0x15, 0x00 を文字列として表示させようとしたのかというと,終端記号のないポケモンを表示させたのが理由となります.名前を読む際に 0xD05B 以降にポケモンの名前がコピーされてそこから名前を表示します.終端記号が途中で存在すればそこで名前を表示させるのを終了させますが,終端記号がない場合は名前が読み込まれ続けます.上記の手順を行っていると 0xD0C7 まで読まれその後に 0xD0C8 の中身 0x15,0xD0C9 の中身 0x00 が読まれてしまいます.

0xD0C8 の中身が 0x15,0xD0C9 の中身が 0x00 となっている理由はポケモンの 1 番目のオニスズメに持たせているメールを読んでいるからです.メールを読む流れで 0xD0C8 にオニスズメの種族 ID 0x15,0xD0C9 に 1 番目という情報 0x00 が書き込まれます (プログラムの慣習で 0-indexed).

0xCD46 を実行した後は 0xCD63 までは無害な命令が続き,0xCD64 で 0xC0 (ret nz) が実行されます.この命令が実行されると次は 0xD0CA を実行することになります.このアドレスは文字列を読む際に最後に読んだ 0x15, 0x00 の次のアドレスとなります.ちなみに 0xCD64 に 0xC0 を入れるためにゲームを開始して下に移動して手持ちを開くといった動作を行っています.

0xD0CA ~ 0xD0CD は無害な命令となります.0xD0CE からは最後に見たポケモンの情報が記録されており,上記の手順を行っているとイワーク or サンドの情報が書き込まれています.イワーク or サンドの準備では努力値の調整を行っていてプログラムとして実行をすることで 0xF000 に飛ぶようになっています.

0xF000, 0xF001 は無害な命令となっており,0xF002 からは最後に読んだメールの中身となっていて,任意コード実行をすることができるといった流れとなります.ただしボックスを開くことで 0xF003, 0xF004 にはボックスに関係した情報 (どのボックスを開いているかとボックスに預けているポケモンの数) が記録されるといった形となります.

参考文献

参考文献は以下の 2 つとなります.特に上で紹介した手順については 2 つ目の記事をかなり参考にしています.

Acknowledgements

I would like to thank TimoVM, who has provided me with information about the 0x1500 control code arbitrary code execution and has kindly guided me through the actual process.

*1:VC 版だと満タンになったことがあってもできるらしいという情報を耳にしました.要検証.

*2:今回はニックネームを 0x00 で埋めるのが目的なのでレベル 0 のバグったポケモンを作成する必要はありません.

*3:メールの文面そのものが書き換えられるという意味ではなくて実行する際に 0xD003 (0xF003) と 0xD004 (0xF004) が 0x01 に書き換えられるという意味です.

ポケモン 第二世代 マスターボール ID 調整 (任意コード実行)

はじめに

ポケモン 第二世代 RTA ではラジオ塔の ID くじで 1 等に当選しマスターボールを入手するチャートが存在します.

RTA では途中で入手する「ひきゃく」の ID が 01001 であることを利用してゲームを始める前に乱数調整 (状況再現?) でくじの ID を 01001 になるようにしています.
本記事では乱数調整を使わずに任意コード実行を用いてマスターボールの ID を 01001 に調整する手法について書いていきます.

メリット

乱数調整ではなくて任意コード実行を用いることのメリットは以下の通りかと思います.

  • フレーム技をする必要がないので任意コード実行の環境構築ができれば誰でもできる.
  • 機種に依存しないので 3DSVC でもできる.
  • データをリセットする必要がないのでポケモンスタジアム金銀を用いた 3 倍速 RTA の準備が簡単になる.

任意コード実行の環境構築方法

まずは任意コード実行の環境構築の手順について説明します.

前提:通信交換ができること*1
準備:他のソフトで「じてんしゃを持たせたポケモン」を用意する.

「じてんしゃを持たせたポケモン」を用意する方法についてはいくらでもあるのですが例えばオーキドせんせい研究者さんが出しているこの記事が参考になります.
タイムカプセル輸送時の「持っているどうぐ」変更バグ - オーキドせんせい研究者のページ

手順:
1. パソコンに預けてあるたいせつなものを全て引き取る.
2. コガネシティでじてんしゃを入手する.
3. 通信交換で「じてんしゃを持たせたポケモン」を受け取りたいせつなもの欄にじてんしゃを 2 つ用意したいせつなもの欄の一番下に配置する.
4. ルアーボール*2を入手しボール欄を以下のようにする.

ルアーボール ×1
モンスターボール ×1
やめる
5. たいせつなもの欄の 1 つ目のじてんしゃを 2 つ目のじてんしゃとセレクトボタンで入れ替える.
6. ボール欄の 2 番目がマスターボール × 255 になっているので残り個数を金銀なら 6 個,クリスタルなら 12 個になるように捨てる.
7. マスターボール ×6 or ×12 をボール欄の 65 番目と入れ替える.

この方法は以下の動画で述べられている方法と同じなので参考になるかと思います.
【クリスタル版】誰でも簡単!任意コード実行環境構築チャート解説【ポケモン第二世代 バグ技 任意コード実行】 - YouTube

ポケギアが使えなくなってしまうのですが気にせずにそのまま ID 調整を行います.

マスターボール ID 調整の方法

以上の方法で任意コード実行環境が整ったので実際のやり方について説明します.

準備:メールを購入し以下のメール内容を用意する.

金銀版

ョへマだぼァがあぜウひすづよ?づ
ョぶづへャだてぼガ     だっ

クリスタル版

ョへマぞぼァがッぜテづよ?づョぶ
づへャぞヅ ギブゆの    だっ

ここまでできたらせっていを

  • メッセージ はやい
  • エフェクト とばす
  • せんとう かちぬき

にしてセーブをしておくと良いかと思います.

手順:
1. 用意したメールを読んで図鑑を開いて任意コード実行を行う.
2. すぐにリセットしてさいしょからはじめてようびをにちようびにする.
3. 日付が変わるまでにコガネシティに行き「ひきゃく」を連れて ID くじを引く.

そうすることで ID くじが 01001 になりマスターボールを入手することができます.

注意

任意コード実行をしたら 24 時間*3は ID が固定されるので RTA のやり直し等でリセットする場合でもそのままさいしょからはじめて大丈夫です.24 時間経過すると ID が固定されなくなるのでうまくいかないと思ったら任意コード実行を適宜行うようにしてください.

マスターボール ID 調整の仕組み

説明を簡単にするために以下で使う名前とそのアドレスを表で紹介します.

名前 金銀 クリスタル
sLuckyNumberDay バンク00: B100 バンク00: AC90
sLuckyIDNumber バンク00: B101, B102 バンク00: AC91, AC92
wCurDay D1E5 D4BE
wLuckyIDNumber D9AF, D9B0 DC65, DC66

ID くじの番号について

ID くじの人に話しかけると「こんかいの アイディナンバーは ????? です」と表示されるのですがこの?????の部分に wLuckyIDNumber の値 (を 10 進数に変換したもの) が入ります.マスターボールを入手するためにこのアドレスに 03 E9 (10 進数で 01001) が入ってくれるように調整をしなければなりません.wLuckyIDNumber の値が変わるタイミングは以下の 2 回です.
1. 「さいしょから はじめる」を選択した直後.
2. きんようびになって以降,はじめてラッキーチャンネルを視聴する瞬間 or ID くじの人に話しかけて「こんかいの アイディナンバーは ????? です」の表示が出る直前.

RTA でプレイするときは 2 回とも発生することになります.

wLuckyIDNumber の値の書き換え方法

wLuckyIDNumber の値の書き換え方法はどちらのタイミングでも共通です.

1. sLuckyNumberDay の値 と (wCurDay の値)+1 を比較する.
2. 等しければ sLuckyIDNumber の値をそのまま wLuckyIDNumber に書き込む.
3. 等しくなければランダムに値を発生させてその値を sLuckyIDNumber と wLuckyIDNumber に書き込む.

ランダムに値が発生してしまったら ID を調整することが困難になるので sLuckyNumberDay と wCurDay の値が重要になってきます.「さいしょから はじめる」を選択すると wCurDay の値は 00 になっている*4ので sLuckyNumberDay の値を 01 にするとランダムに値が発生しなくなりそうです.そして実際に sLuckyNumberDay の値が 01 であれば sLuckyIDNumber の値は既存のデータと同じになっています*5.そのため任意コード実行で sLuckyNumberDay の値を 01 にし,sLuckyIDNumber の値を 03 E9 になるようにしています.残る問題は wCurDay の値の挙動になります.

wCurDay の値について

この値は現在のようびを表すもので 7 で割った余りがそれぞれのようびに対応しています.sLuckyNumberDay の値が 01 であり ID くじの人に話しかけたタイミングで sLuckyNumberDay の値 と (wCurDay の値)+1 を一致させる必要があるので wCurDay の値を 00 にする必要があります.00 を 7 で割った余りは 0 でこれはにちようびに対応しています.そのため ID くじの人に話しかけた時点でにちようびでない場合は ID 調整に失敗します.

ポケモン第二世代には RTC (リアルタイムクロック) 機能がありそのデータが HRAM 領域に格納されています.さいしょからはじめるでこの領域は初期化されず 1 日以上データがあると現在がにちようびであっても wCurDay の値が 00 にならなくなってしまいます.RTC のデータが初期化されていればにちようびのとき wCurDay を 00 にすることができるので,RTC のデータをリセットするためのサブルーチンを任意コード実行で行っています.

まとめ

以上の考察から任意コード実行で以下のことをすれば良いことになります.
1. sLuckyNumberDay の値を 01 にし,sLuckyIDNumber の値を 03 E9 にする.
2. RTC 機能を初期化する.

謝辞

今回マスターボール ID 調整を任意コードで行うというアイデアをくださり (実際には依頼されたものではありますが) また実際にクリスタル 3 倍速 RTA で検証していただいたプニュタさんに感謝致します.

*1:金銀の場合は通信交換なしでもできますが虫取り大会に参加する必要があり RTA で選択するにちようびと相性が悪いので通信交換を使うと楽だと思います.

*2:ガンテツボールであれば何でも良いですがヤドンのいどの攻略後はじめてガンテツに話しかけるともらえるルアーボールが一番入手しやすいかと思います.

*3:本当に 24 時間かどうかは要検証ですが…

*4:「さいしょから はじめる」を選択するとメインメモリの大部分を 00 にする処理が行われるので既存のデータに依らずに 00 になっています.メインメモリの大部分を 00 にした後 wLuckyIDNumber の値の書き換えの処理が行われます.

*5:sLuckyNumberDay の値が 01 でない場合は wLuckyIDNumber の書き換えの処理によって sLuckyIDNumber が変化します.

ポケモン金 バイナリエディタ起動RTA チャート

注意: 2023/12/11 に内容をアップデートしました.

はじめに

以前,金銀にバイナリエディタを移植した話について記事にしました.

今回ははじめからプレイしてできるだけ早くバイナリディタを導入する方法について紹介したいと思います.

レギュレーション

オーキドせんせい研究者さんもこのRTAを行っていて (逆にオーキドせんせい研究者さんがやっていたから自分もやり始めたのですが) そこで採用されているレギュレーションを用いることにします.具体的には

誰でも出来るチャートが目標のため、機種依存・運ゲーSRAM Glitchは禁止。

です.また「誰でも出来るチャート」ということで途中で導入することになる簡易版バイナリエディタは入力に失敗すると完走できない・リカバリー不可能であるようなものは使用禁止とします.具体的には
バイナリエディタ起動RTA05分56秒【初代ポケモン(黄) ゆっくり解説】 - YouTube
で解説されているようなRTA用プログラミングマシンを開発して使うことは禁止としています.また通信交換も禁止としています.

注意

執筆者は RTA プレイヤーではないことにご留意ください.
チャートについては以下のURLにある Any% Glitchless のものを参考にしています.特にイトタカさんのチャートをかなり参考にしています.

また実際の Any% Glitchless のプレイ動画も参考にしています.

応用

Any% No Save Corruption に応用できるんじゃないかと思います.

実際の記録

オーキドせんせい研究者さんが1:02:24の記録を出しました.更新点もいくつかあるのでいずれ1時間切りが達成されるんじゃないかと期待しています.

動画

オーキドせんせい研究者さんが動画を作成しました.
www.youtube.com

チャート

注意

虫取り大会まで手持ちのポケモンを5匹以下にする必要があります.

敵避けについて

ポケモン金銀ではランダムに向きを変えるトレーナーが存在して

  • 左を向いているとき上,上を向いているとき左
  • 右を向いているとき下,下を向いているとき右

の方向に向きやすい.主人公が1歩歩くごとに最大4回振り向き判定があり通過する際にはメニューを開いて向きを確認しメニューを閉じて通過することで1回振り向き判定を減らすことができる (らしい).
以下では敵避け前にポーズを開くことをポーズバッファと呼んでいます.

初期設定

  • メッセージ はやい
  • エフェクト とばす
  • せんとう かちぬき

オープニング

  • 時間設定 10:00
    • 銀でやるなら野生のビードルがでない夜の時間にすると良いと思います
  • 主人公 てパま
    • (SE) ↑↑→→→A
    • (SE) ↑↑→→A (↑と→の順番不問)
    • (SE) ST↓↓A ST←↑↑A ST A

ワカバタウン

曜日設定 どようび (下1回押してからA)

  • 電話の使い方: はい

(ワニノコ厳選前セーブ)

ワニノコ

  • ニックネーム: ア
  • ステータス: どの個体でも走れる
    • 厳選するなら攻撃12,特攻10,素早さ10
      • 攻撃個体値: 8以上あると良いが (Any% Glitchless と違い) それほど重要ではない
      • 防御個体値: 0,1だとキキョウジムでの被ダメージが増える
      • 特殊個体値: ベイリーフのはっぱカッターのダメージを抑えるため5以上欲しい
      • 素早さ個体値: 5以上あると安定する
  • ステータス確認のついでにきのみ回収

キズぐすりをもらう

29/30ばんどうろ

ポケモンじいさんのいえにつく前に経験値44~53獲得 (47以下だとなお良い)
うまく野生と噛み合わなくても経験値15は絶対に必要

野生ポケモン

ポケモンじいさん前の隠しキズぐすりを拾う
ポケモンじいさんの家の左のどくけしのみを拾う (安定)
ポケモンじいさんの家に入る
民家の左のきのみを拾う

ヨシノシティ

ワカバタウン

ライバルの名前:ア
ウツギ博士に話しかける
モンスターボール5個もらう

29ばんどうろ

下から入る (チュートリアル対策)
捕獲チュートリアル: いいえ
道中で野生は3匹捕獲すること
基本的に捕捉率255を狙う (参考: ポケモン捕獲のコツ 金銀編)

きのみを拾う

30/31ばんどうろ

  • たんぱんこぞう
    • ポッポ: ひっかく×2 (or Lv7ならいかり)
    • コラッタ: ひっかく×3 (or いかり継続)

むしとりしょうねんでポーズバッファする際にきのみを持たせHP14以下なら回復
貯金: いいえ
モンスターボール回収 (捕獲が2匹以下でボールが尽きてしまった場合)
にがいきのみ回収

捕獲: トランセル (捕捉率120)・マダツボミ (つるのムチ持ち) は避ける

キキョウシティ

キキョウジム

(安定セーブ)

  • とりつかい

回復する際ににがいきのみをワニノコに持たせる

  • とりつかい
    • ポッポ×2: いかり連打
      • 被ダメージ: 防御17以上 (防御個体値2~15) 9=3+3+3
      • 被ダメージ: 防御16 (防御個体値0~1) 15=5+5+5
      • 素早さ13 (素早さ個体値0~4) だと同速になってやや不安定

(安定セーブ)

  • ハヤト
    • ポッポ: いかり×3
    • ピジョン: いかり×2 (+ ひっかく)
      • 被ダメージ: 18=3+3+6+6
      • 攻撃19以下 (攻撃個体値0~7) だといかり×2で残る可能性がある (残る確率25%?)

ポケモンセンター

タマゴを受け取る (左から話しかける)
ボックスに行きワニノコ,野生ポケモン1,野生ポケモン2,タマゴの順番に預けてワニノコを引き取ってその後野生ポケモン3も預ける

野生ポケモンを1, 2匹しか捕まえていない場合でも一旦ワニノコ以外全て預ける
野生ポケモン0匹の場合はボックスに寄らない (必要があれば受付に話しかけて回復)

注意

野生ポケモン1はオタチ,キャタピーコラッタにすることが望ましいです

32ばんどうろ

まひなおしのみ回収 (安定)

橋の上の隠しいいキズぐすりを回収 (安定)

(安定セーブ)

つながりのどうくつ

序盤の獲得経験値に応じて以下の野生ポケモンが出てきたら1匹のみ倒す

序盤の狩りの経験値

参考

  • やまおとこ
  • ひふきやろう
    • ロコン: みずでっぽう + ひっかく (赤ゲージならいかり)
      • ひのこでやけどする可能性あり

経験値に関する補足

野生で95以上126以下の経験値を入れるようにしている

  • 95以上の理由:
    • ヤドンのいどのドガース戦でLv16となり特殊個体値が高いとみずでっぽう×3で倒せる可能性が上がる
    • ヒワダジムのパラス戦でLv17となり攻撃個体値が高いとにらみつける + ひっかく×2で倒せる可能性が上がる
  • 126以下の理由:
    • 最終レベルを20に留めるため (21になるとかみつくを覚えようとする)

なお121以上入れるとヤドンのいどのロケット団2人目の時点でLv15となり特殊の個体値が低い場合でもズバットをみずでっぽう×2で倒せる可能性が上がる

33ばんどうろ

(やまおとこ前安定セーブ)

ヒワダタウン

ガンテツと話す

フレンドリィショップ

4532円まで使用可能 (無駄トレ0の場合)

  • モンスターボール×1 (必要なら)
  • キズぐすり×1/×2 (安定,モンスターボールを購入するなら×1)
  • いいキズぐすり×3
  • むしよけスプレー×3
  • どくけし×3
  • まひなおし×1
  • はながらメール×3

いどの上の隠しなんでもなおしを回収 (安定 or やけどしている場合)

ヤドンのいど

むしよけスプレーは使わない

(どくになったら回復)

  • ロケット団
    • コラッタ: いかり連打
    • ズバット (1匹目):
      • いかりのボルテージが1以上ならいかり
      • そうでなければみずでっぽう連打
    • ズバット (2匹目):
      • いかりのボルテージが2以上or1以上かつこんらんならいかり (+ みずでっぽう)
      • そうでなければみずでっぽう連打

ヒワダタウン

ガンテツに話しかけルアーボールを入手

ヒワダジム

どくになっても回復しない

  • むしとりしょうねん
    • パラス: にらみつける + ひっかく×2/×3
      • にらみつけるを打つ際ににらみつけるとひっかくの順番を入れ替える
      • しびれごな,どくのこな持ち

むしとりしょうねんでポーズバッファ
HP30以下or状態異常なら回復
(持っていれば)どくけしのみを持たせる
(どくけしのみがなければ)まひなおしのみを持たせる

(安定セーブ)

ライバルとの戦闘になるマスの1歩右でメニューを開く

  • (持たせてなければ)まひなおしのみを持たせる
  • むしよけスプレー使用
  • いいキズぐすりでHPを最大まで回復
  • どくになっていればどくけしで回復
  • れんぞくぎりを覚えさせる (にらみつける上書き)

(安定セーブ)

  • ライバル
    • ゴース: みずでっぽう×2
      • したでなめるでまひする可能性あり
      • 素早さ27 (素早さ個体値0) だと同速になってやや不安定
    • ベイリーフ: れんぞくぎり×3 (+ ひっかく)
      • はっぱカッターのダメージ: 特防32以上 (特殊個体値5~15) 22~25
      • はっぱカッターのダメージ: 特防31以下 (特殊個体値0~4) 25~29
        • 急所と最高乱数は考慮していない値
      • 素早さ28 (素早さ個体値0) だと同速になってやや不安定
    • ズバット: みずでっぽう×2/×3
      • かみつくのダメージ5
      • (体力が半分以下どくになっているなら)どくけしを使用
      • HPの回復は (あれば) キズぐすりを使用

急所に当たったときの末路

ウバメのもり

カモネギイベントをこなす
むしよけスプレーがきれたタイミングでいあいぎりをアリゲイツに覚えさせる (れんぞくぎり上書き)
いあいぎりを覚えさせる際もしHPが低ければ回復

34 ばんどうろ

最速は野生のケーシィ (出現率10%) をここで捕獲すること
モンスターボール即投げで26.1%,スーパーボール即投げで33.5%で捕まる
参考: 捕獲処理 - ポケモンWiki
捕獲ができればちかつうろ,ゲームコーナーはスキップ

コガネシティ

ポケモンセンターに入ってすぐに出る (絶対行うこと)
(キキョウシティでボックスに寄ってない場合は捕まえた野生ポケモンを預ける)
じでんしゃを回収し外に出て登録 + 使用

ちかつうろ

  • かいじゅうマニア

コインケースを拾う

ゲームコーナー

コイン50枚購入×4
ケーシィを入手する

35 ばんどうろ

ひきゃくを入手する

  • ピクニックガール
    • ロコン: みずでっぽう + ひっかく (赤ゲージならいかり)
      • ほえるでひきゃくに交代させられたらつつく

やけどになっても回復しない

  • キャンプボーイ

虫取り大会バグ

手持ち調整

  • アリゲイツとケーシィを入れ替え
  • ひきゃくからメールを預かる

ケーシィで虫取り大会に参加する
虫取り大会開始後すぐにゲートへ引き返す
虫取り大会をやめるかどうか聞かれるのでいいえを選択して再び虫取り大会へ
ポケモンを開いてテレポートを使用しコガネシティに移動する

コガネシティ

ポケモンセンター

ケーシィ以外全て預ける

デパート

5Fに行きわざマシン48 (ほのおのパンチ) を購入

35ばんどうろ

(敵避け前安定セーブ)
虫取り大会に戻る
表彰後は左から出てテレポート

34ばんどうろ

ボックス操作

育て屋に行きおじいさんに左から話しかける
バグポケモン (2番目に生成している) を預けてすぐに引き出す
手持ちを開いてケーシィとバグポケモンを入れ替える
ケーシィにほのおのパンチを覚えさせる

パソコンに行き野生ポケモン1,野生ポケモン2,タマゴ,ひきゃくの順番に引き出す
ボックスをかえるでボックス1~9の名前を以下のようにする

ボックスの名前

1. ぼギダへマだがヲ
2. ぜナョダだグぼダ
3. ぞてはりダムキづ
4. ごヅまてぱへごま
5. へごまボぷへごま
6. へォひひ ぐとど
7. ダれへりダださざ
8. ダダれャだダだな
9. ぼヂてはり

ボックスせいりを使い野生ポケモン3を手持ちの先頭に追加する
パソコンを閉じ手持ちを開くと7匹になっているので2番目と5番目を入れ替える
パソコンを開き先頭から2匹預けアリゲイツを引き出す

手持ち操作

ケーシィが自転車を持っているので回収する
1番目と6番目を交換する (アリゲイツを先頭に)

野生ポケモン1がポッポなら5番目と6番目を交換する
野生ポケモン1がオタチ,キャタピーコラッタなら交換する必要なし

簡易版バイナリエディタの起動

かばんを開きルアーボールとモンスターボールを入れ替えて以下の順番にする

たいせつなものじてんしゃが2つあるので1つ目のじてんしゃと2つ目のじてんしゃをセレクトボタンで入れ替える
ボール欄の2番目のアイテムを残り6個になるように捨てる
「残り6個」になったボール欄の2番目のアイテムをボール欄の65番目と入れ替える
詳細は以下の動画で述べられている方法とほぼ同じなので参考になるかと思います

どうぐ欄ではながらメールをもたせることで以下のメール1~3を作成する

メール1

ぼぴがりぜゆづぜゅよダづにひぜ?
ずづぜ8ひラづのののののののだっ

メール2

へロどへュでていりなひだへづまち
ぼダメに0ぞ?ムぞボデのののだっ

メール3

ョぺぶぶぶヅにわがヲぜナへマだ空
ゾそへよだへャだてにわ空空空だっ

後は以下の手順を行うことで簡易版バイナリエディタが起動できる

1. メール1を読んでバグモード図鑑を開いてすぐに閉じる
2. メール2を読んでバグモード図鑑を開く

バイナリエディタの作成

簡易版バイナリエディタを起動するとこんな感じになると思います.

左 4 桁がアドレス,右 2 桁がその中身となっています.

文字の表示がおかしいところがあるのですが気にせず使いましょう.
g は A,茶色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.
ちなみに上の画像はアドレスが AB11 で中身は CB です.

以下の操作方法でアドレスとその中身を書き換えることができます.

操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
miniatur_memory_editor_GS.asm · GitHub
簡易版バイナリエディタを使って AA94 から AB4D のアドレスの中身をリンク先のものに書き換えてください.

書き換えたらメール3を読んでバグモード図鑑を開くことでバイナリエディタが起動できます.

バイナリエディタの操作

↓: アドレス+1h
↑: アドレス-1h
→: アドレス+10h
←: アドレス-10h
B+↓: アドレス+100h
B+↑: アドレス-100h
B+→: アドレス+1000h
B+←: アドレス-1000h
A+↓: 中身+1h
A+↑: 中身-1h
A+→: 中身+10h
A+←: 中身-10h
SELECT+↓: バンク+1h
SELECT+↑: バンク-1h
SELECT+→: バンク+10h
SELECT+←: バンク-10h
SELECT+A: 指しているアドレスを実行
START: 終了

「SELECT+A」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

仕上げ操作

以下の 6 つのことをしたいと思います.

1. 分類違いわざマシンで起動できるようにする.
2. どうぐ欄を正常にする.
3. ポケギアを元に戻す.
4. 図鑑を正常にする.
5. 手持ちのポケモンを正常にする.
6. 主人公の名前を変更する.

1. については D5AA からD5AD を 01 D0 01 FF にし DA47 から DA49 を C3 B2 D8 にし D8B2 から D8C8 を以下のようにしてください.

D8B0:       3E 03 CD 9D 30 01 CF 00 11 C6 DC 21 94 AA
D8C0: CD D6 30 CD AD 30 C3 C6 DC

そうすることでどうぐがわざマシン 17 のみとなり使用することでバイナリエディタを起動することができるようになります.
2. については D5D4 と D5D5 を 00 FF にし D5EE から D5F2 を 00 01 01 05 FF にし D608 から D60A を 00 00 FF にすることで正常になります.
3. については D66D の値を D66F に移し D66D を 00 にすることで元に戻ります.
4. については D670 と D671 を 00 00 にすれば図鑑が正常になります.
5. については手持ちの 1 匹目を正常なポケモンにした状態で D9E8 を 02 にし D9EA と D9EB を 01 FF にし DA20 を 01 にすることで手持ちを 2 匹のみにし 2 匹目をフシギダネにすることができます.このフシギダネは手持ちの 2 番目で置いておき経験値を入れないようにしボックスや育て屋に預けないようにしてください.なお D9EA と DA20 の値を好きな値にすればフシギダネ以外にすることもできます.
6. については D1B5 から D1B9 の値を変更することで好きな名前にすることができます.以下のページで Text の部分に名前を入れることで対応する 16 進数が Hex の下に出現するのでそれを入力すると主人公の名前を変えることができます.ただし名前の終わりには 50 を入れるようにしてください.
Hex Converter for Game Boy Pokémon

ポケモンクリスタルにおけるバイナリエディタ (ver.20230407)

注意: 2023/04/07 に内容をアップデートしました.旧バージョンを見たい方はこちらからどうぞ

簡易版バイナリエディタ導入の方法

まずは簡易版バイナリエディタを導入します.
環境:ポケモンクリスタルでの動作を確認しております.
推奨:任意コード実行可能なソフト (初代でも金銀でも可) と通信交換できること*1
準備:「バグモード図鑑」を用いた「最後に読んだメール*2」による任意コード実行環境

わざマシン」を用いた「最後に読んだメール」による任意コード実行環境も可能ですが注意点があります.

図鑑のモードは「しんがた ずかん モード」,「ふるい ずかん モード」,「アイウエオ モード」の 3 種類がありますが,「4 番目以降」のモードによって任意コード実行させることができます.準備方法についてはこれらの動画を参照すると良いかと思います.

以下の手順を踏むと簡易版バイナリエディタが起動します*3

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2, 3, 4 のメールを用意する.
  3. 表 2 のメールを読んで「バグモード図鑑」を起動する.
  4. 表 3 のメールを読んで「バグモード図鑑」を起動する.
  5. 表 4 のメールを読んで「バグモード図鑑」を起動する.

手順 3. の前にセーブすることをオススメします.
「バグモード図鑑」を起動したら「B」で閉じましょう.

表 1

  1. ぼへへマぞへブ
  2. グだとどグだガム
  3. てサろグだガムよ
  4. だガグだギぼヂキ
  5. づごぱヅまとへゴ
  6. ぴへゴみボぷへゴ
  7. タダだこごョダだ
  8. ざダへャぞダり
  9. だかがヲぜナだィ

表 2

がろぜルョぶづぜ/ひすづぜモぶづ
ぜァひすぶづぜウぼダづの空空だっ

表 3

がろぜミョよダづぼみづぜナづぜゃ
ひゼよろづよたづの空空空空空だっ

表 4

へなづ空ていろなひだヘヂみちぼダ
メに0だガにだにだ空ボデの空だっ

簡易版バイナリエディタを起動するとこんな感じになると思います.

左 4 桁がアドレス,右 2 桁がその中身となっています.

文字の表示がおかしいところがあるのですが気にせず使いましょう.
g は A,青色の線は B,携帯マークは C だと思ってください.
特に 9 と g を混同しないように注意しましょう.
ちなみに上の画像はアドレスが AA94 で中身は CD です.

注意

初期アドレスは AA94 となっています.
これは 9 番目のボックスの 4 文字目「ヲ」と 6 文字目「ナ」に対応しています.
この 2 文字を変えることで初期アドレスを変更することができます.
初期アドレスを変えたくなった場合は 9 番目のボックスの名前を変更して表 4 のメールを実行すれば良いです.表 2, 3 のメールを既に実行した場合再度実行しなくても良いです.

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

以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1
B: アドレス-1
↓: 中身+1
↑: 中身-1
→: 中身+10h
←: 中身-10h
Start: 終了

簡易版バイナリエディタを再度起動する場合は表 4 のメールを読んで「バグモード図鑑」を起動すれば良いです.表 2, 3 のメールを読む必要はありません.

バイナリエディタを起動するまで

簡易版バイナリエディタを使ってアドレス AA94 から AB4C の中身を以下のものにしてください.
2023/12/04 更新: コードを変更しました.

AA90:             CD C5 32 11 C0 4D 21 00 90 01 22 3E 
AAA0: CD C6 0D CD 3B 0E CD 49 0E AF 3C E0 D4 F0 9D F5 
AAB0: 21 00 D0 CD 0F D3 E5 11 F8 FF 19 E5 D1 21 A9 C4 
AAC0: F0 9D D7 CD 9D 2F CD 5D D3 01 0C 00 36 7C 23 7A 
AAD0: CD 5D D3 7B CD 5D D3 36 7F 23 1A CD 5D D3 13 36 
AAE0: 7C 09 7C FE C6 20 E5 CD AD 2F 3E ED EA 4B C5 E1 
AAF0: 18 C1 CD 1B 35 F0 A9 5F 01 01 00 07 38 14 0B 0B 
AB00: 07 38 0F 0E F0 07 38 0A 01 10 00 07 38 04 48 07 
AB10: 38 09 CB 53 28 0F CB 43 28 05 E9 E1 F1 D7 C9 F0 
AB20: 9D 81 E0 9D C9 79 CB 43 20 06 CB 4B 20 0F 09 C9 
AB30: F5 F0 9D CD 9D 2F F1 86 77 CD AD 2F C9 84 67 C9 
AB40: F5 CB 37 CD 64 D3 F1 E6 0F C6 F6 22 C9

次の内容のメールを用意して,内容を読んでから「バグモード図鑑」を起動することでバイナリエディタを起動することができます.

ョぶぺぶぶヅあめがヲぜナヘマぞ空
ゾそへ/ぞへャぞてあめ空空空だっ

バイナリエディタが起動するとこのようになります.

二重線で囲まれた領域の左 4 桁がアドレス,右 2 桁がその中身となっています.
ゲーム画面の上部にも (16 進数で) 2 桁の数字があるのですが,これは SRAM バンクの数字が表示されています.アドレス A000 から BFFF の中身を扱う際に必要になってきます.

バイナリエディタの操作

初代でのバイナリエディタと殆ど同じですが「SELECT」のみ少し違います.

↓: アドレス+1
↑: アドレス-1
→: アドレス+10
←: アドレス-10
B+↓: アドレス+100
B+↑: アドレス-100
B+→: アドレス+1000
B+←: アドレス-1000
A+↓: 中身+1
A+↑: 中身-1
A+→: 中身+10
A+←: 中身-10
SELECT+↓: バンク+1
SELECT+↑: バンク-1
SELECT+→: バンク+10
SELECT+←: バンク-10
SELECT+A: 指しているアドレスを実行
START: 終了

「SELECT+A」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

注意

D2B1 から D36F のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.

わざマシン」を用いた「最後に読んだメール」による任意コード実行環境について (2023/12/04 更新)

基本的には上記の手順とほぼ同様です.ただし表 4 のメールは

ョぶゃやていろなひだヘヂみちぼダ
メに0だガにだにだ空ボデの空だっ

としてください.特に先頭 4 文字が変わります.

わざマシン」を使って簡易版バイナリエディタ及びバイナリエディタを起動するとこんな感じになります.

*1:レポートバグを使えば通信交換できなくても任意コード実行できるらしいのですが執筆者は試したことがありません.

*2:メールの 1 文字目から実行するもの,31 文字目から実行するもの両方に対応しています.

*3:手順 3. と 4. の順番はどちらが先でも良いです.

ポケモン金銀にバイナリエディタを移植したお話 (ver.20230407)

この記事は旧バージョンです.新しいバージョンは以下のものとなります.
ポケモン金銀にバイナリエディタを移植したお話 - flag3833753

注意: 2023/04/07 に内容をアップデートしました.旧バージョンを見たい方はこちらからどうぞ

はじめに

以前,初代でバイナリエディタを導入する記事を出させていただきました.

このバイナリエディタポケモン金銀に移植しました.

そういうことで導入する方法について書こうと思います.

簡易版バイナリエディタ導入の方法

まずは簡易版バイナリエディタを導入します.
環境:ポケモン金銀での動作を確認しております.クリスタル版には非対応です.
準備:「たいせつポケット」の「わざマシン17」を用いた「最後に読んだメール」による任意コード実行環境*1

準備の詳細は次のブログ,動画にお任せします.Teraman64DD さんの動画だと Part.04 で導入しています.

以下の手順を踏むと簡易版バイナリエディタが起動します*2

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2, 3, 4 のメールを用意する.
  3. 表 2 のメールを読んで「わざマシン17」を使用する.
  4. 表 3 のメールを読んで「わざマシン17」を使用する.
  5. 表 4 のメールを読んで「わざマシン17」を使用する.

手順 3. の前にセーブすることをオススメします.

表 1

  1. ぼへへマだへォ
  2. グだとどグだガム
  3. てやりグだガムよ
  4. だガグだギぼヂキ
  5. づごぱヅまてへぐ
  6. ぴへぐまボぷへぐ
  7. タダだこごョダだ
  8. ざダへャだダり
  9. だかがヲぜナだィ

表 2

がりぜォひニョぶづぜすづぶぜェづ
ぶぜうづぜこよゾづのののののだっ

表 3

がりぜふぼダづぜァずョよダづぼま
づぜんづぜけよハづのののののだっ

表 4

ョぶゃよて6リなひだヘぞまちぼダ
メに0だガにだにだ空ボデののだっ

簡易版バイナリエディタを起動するとこんな感じになると思います.

左 4 桁がアドレス,右 2 桁がその中身となっています.

見ての通り表示がおかしいのですが気にせず使いましょう.
■は A,▲は B,携帯マークは C だと思ってください.
ちなみに上の画像はアドレスが AA94 で中身は CD です.

注意

初期アドレスは AA94 となっています.
これは 9 番目のボックスの 4 文字目「ヲ」と 6 文字目「ナ」に対応しています.
この 2 文字を変えることで初期アドレスを変更することができます.
初期アドレスを変えたくなった場合は 9 番目のボックスの名前を変更して表 4 のメールを実行すれば良いです.表 2, 3 のメールを既に実行した場合再度実行しなくても良いです.

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

以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1
B: アドレス-1
↓: 中身+1
↑: 中身-1
→: 中身+10h
←: 中身-10h
Start: 終了

簡易版バイナリエディタを再度起動する場合は表 4 のメールを読んで「わざマシン17」を使用すれば良いです.表 2, 3 のメールを読む必要はありません.

バイナリエディタを起動するまで

簡易版バイナリエディタを使ってアドレス AA94 から AB4C の中身を以下のものにしてください.
2023/12/04 更新: コードを変更しました.

AA90:             CD A8 34 11 B2 4E 21 00 90 01 23 3E
AAA0: CD 76 0E CD 87 0D CD 95 0D AF 3C E0 D6 F0 9F F5
AAB0: 21 00 D0 CD 24 DD E5 11 F8 FF 19 E5 D1 21 A9 C3
AAC0: F0 9F D7 CD 9D 30 CD 72 DD 01 0C 00 36 7C 23 7A
AAD0: CD 72 DD 7B CD 72 DD 36 7F 23 1A CD 72 DD 13 36
AAE0: 7C 09 7C FE C5 20 E5 CD AD 30 3E ED EA 4B C4 E1
AAF0: 18 C1 CD F4 36 F0 AB 5F 01 01 00 07 38 14 0B 0B
AB00: 07 38 0F 0E F0 07 38 0A 01 10 00 07 38 04 48 07
AB10: 38 09 CB 53 28 0F CB 43 28 05 E9 E1 F1 D7 C9 F0
AB20: 9F 81 E0 9F C9 79 CB 43 20 06 CB 4B 20 0F 09 C9
AB30: F5 F0 9F CD 9D 30 F1 86 77 CD AD 30 C9 84 67 C9
AB40: F5 CB 37 CD 79 DD F1 E6 0F C6 F6 22 C9

次の内容のメールを用意して,内容を読んでから「わざマシン17」を使用することでバイナリエディタを起動することができます.起動するとこのページの上の方にある画像のような感じとなります.

ョぺぶぶぶヅにわがヲぜナへマだ空
ゾそへよだへャだてにわ空空空だっ

二重線で囲まれた領域の左 4 桁がアドレス,右 2 桁がその中身となっています.
ゲーム画面の上部にも (16 進数で) 2 桁の数字があるのですが,これは SRAM バンクの数字が表示されています.アドレス A000 から BFFF の中身を扱う際に必要になってきます.

バイナリエディタの操作

初代でのバイナリエディタと殆ど同じですが「SELECT」のみ少し違います.

↓: アドレス+1
↑: アドレス-1
→: アドレス+10
←: アドレス-10
B+↓: アドレス+100
B+↑: アドレス-100
B+→: アドレス+1000
B+←: アドレス-1000
A+↓: 中身+1
A+↑: 中身-1
A+→: 中身+10
A+←: 中身-10
SELECT+↓: バンク+1
SELECT+↑: バンク-1
SELECT+→: バンク+10
SELECT+←: バンク-10
SELECT+A: 指しているアドレスを実行
START: 終了

「SELECT+A」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

注意

DCC6 から DD7F のアドレスを用いてバイナリエディタを作成しているので,
この部分をバイナリエディタでいじると壊れるので注意してください.

「バグモード図鑑」による任意コード実行環境について (2023/08/16 追記,2023/12/04 更新)

基本的には上記の手順とほぼ同様です.ただし表 4 のメールは

へロど空て6リなひだヘぞまちぼダ
メに0だガにだにだ空ボデののだっ

としてください.特に先頭 4 文字が変わります.

バイナリエディタ起動チャート (2023/09/19 追記)

さいしょから始めてバイナリエディタを起動するチャートについて記述しました.

またバイナリエディタのコードを短くしたので以下のURLを参照してください.

参考文献

今回のバイナリエディタを作るにあたって参考にした文献は次の 3 つです.日本語版のポケモン金銀バイナリエディタに関する動画,記事は (執筆者の調べた限りだと) 最初の 2 つぐらいしかない気がします.

pokemonbug @ ウィキさんの記事にもバイナリエディタのコードがあります.こちらは 344 バイトととても長くまた操作が初代でのバイナリエディタと異なります.そのため初代のバイナリエディタを移植するという形でポケモン金銀でもバイナリエディタを使えるようにしました.こちらは 186 バイトとなっています.
pokemonbug @ ウィキさんの記事にあるバイナリエディタは ROM バンクの切り替えもできるようですが,この機能は今回紹介するバイナリエディタの機能にはありません.

*1:ポケットは「わざマシンポケット」でなければ良いです.アドレス CF21 が実行できれば「わざマシン17」である必要もありません.「わざマシン17」でない道具で任意コード実行環境を用意した場合は適宜読み替えてください.

*2:手順 3. と 4. の順番はどちらが先でも良いです.

バイナリエディタ導入チャート ピカチュウ版

注意: 2023/02/17 に内容をアップデートしました.ver.20220806 を見たい方はこちらからどうぞ.
注意: 2023/09/15 に内容をアップデートしました.2023/02/17~2023/09/14のバージョンは残していません.

はじめに

ポケモン赤緑で簡易版バイナリエディタを作ったお話 - flag3833753
という記事を以前出させていただきました.
この簡易版バイナリエディタピカチュウ版でも使えるようにしたため導入するチャートを書かせていただきます.

導入動画 (2024/03/06 追記)

バイナリエディタを導入する動画を作成致しました.
2024/03/06 現在における最新の導入方法となります.
バイナリエディタを使用している領域がここの記事とは違って未使用領域を使用しているのが主な違いで導入方法に関してはこの記事と概ね同じ方法で導入しています.

www.youtube.com

注意

このチャートはレポートバグという猶予数フレームのバグ技を使います.このバグ技が難しいという方向けに森地図チャートも作っていますのでそちらもご参照ください.またそもそもレポートをはじめからにしたくない方向けにも毒サファリ・いあいぎりルートを作っていますのでそちらも合わせてご参照ください.
バイナリエディタ導入 森地図チャート ピカチュウ版 - flag3833753
バイナリエディタ導入 毒サファリ・いあいぎりルート ピカチュウ版 - flag3833753

オーキドせんせい研究者さんの動画

www.youtube.com

バイナリエディタ起動 RTA をやっている方がいてそのチャート作成に全面協力させていただきました.まだ見ていない方は是非 1 度見ておくことをおすすめします.
協力した自分が言うのもあれですがよくこんなチャート走る気になったなぁと思いました.

この動画を見ると分かるのですがバイナリエディタの導入を次の 2 段階に分けて行っています.

1. RTA 用プログラミングマシンを作る.
2. RTA 用プログラミングマシンを使ってバイナリエディタを作成する.

ただこの動画の RTA 用プログラミングマシンは常人向けではなく普通の人が操作するのは不可能に近いです.この RTA 用プログラミングマシンをまともに扱えるようにしたのが今回紹介する記事の内容となります.

チャート

環境: ピカチュウ版のみ対応しています.
ピカチュウ版はバージョンが v1.0 ~ v1.3 とあるのですがどのバージョンにも対応しています.バージョンの見分け方についてはこちらの記事が参考になります.
【VC版対応】ポケットモンスターピカチュウ 任意コード実行下準備チュートリアル : 魚肉の雑記帳

1. データの初期化

タイトル画面で「SELECT」+「B」+「↑」を同時に押して消去してください.

2. せっていの変更

以下のせっていにしておくと良いです.

はなしのはやさ:はやい
せんとうアニメ:じっくりみる
しあいのルール:かちぬきタイプ
サウンド:イヤホン2

3. 主人公の名前を「がんョぜメ」,ライバルの名前を「てんんオオ」にする.

4. レポートバグを行う.

レポート中の特定のタイミングで強制リセット*1をすることで手持ちポケモンのメモリに異常を生じさせます.失敗したら 1. データの初期化からやり直してください.

特定のタイミングについてはオーキドせんせい研究者さんが布教している動画が参考になります.
ピカチュウ版レポートバグのすすめ(図鑑完成RTA実演)【ポケモン初代(黄) ゆっくり解説】 - YouTube

またレポートバグについて詳しく知りたい方はまへっちさんの記事が参考になります.
レポートバグ(SRAM glitch) (初代) - まへっちのポケモンメモ

5. せっていの変更

はなしのはやさを「おそい」にしてください.
以下のようになっていると思います.

はなしのはやさ:おそい
せんとうアニメ:じっくりみる
しあいのルール:かちぬきタイプ
サウンド:イヤホン2

6. ポケモンの 1 番目と 9 番目を入れ替える.

レポートバグを成功させると手持ちポケモンが開けるようになっているので 1 番目と 9 番目のポケモンを入れ替えます.
そうすることで道具欄のメモリに異常を生じさせます.

7. 主人公の部屋にあるパソコンを開き道具の操作を行う.

具体的には以下のことをします.

a. 道具の 1 番目の「やめる」を 1 個預ける.
b. 道具の 14 番目のバグアイテムを 26 番目の「はやぶさバッヂ」と入れ替える.
c. 道具の 22 番目の「カードキー」を預ける.これを 6 回行う.
d. 道具の 23 番目の「ポケモン」を 1 個預ける.
e. 道具の 24 番目の「わざマシン22」を 1 個預ける.
f. 道具の 25 番目のバグアイテムを 34 番目にある道具と入れ替える.

a. について,もし道具の 1 番目が「やめる」になってなければ 1. データの初期化からやり直してください.

b. について,14 番目でなくても「やめる」から下を入力してバグアイテムが出現したらセレクトで入れ替え対象にすれば良いです.もし道具の 26 番目が「はやぶさバッヂ」になってなければせっていを見直してください.ただし b. は文字送り速度を最大にするためなので必須ではありません.

f. について,道具の 35 番目は「モンスターボール」になっていると思うのでこれを目印にすると良いです.道具の 34 番目はこの「モンスターボール」の 1 個上となります.

v1.0 の場合は b. f. の操作ができれば良いです.そのため部屋のパソコンではなく道具欄で操作すれば良いです.

8. タマムシマンションの屋上のイーブイの部屋へとワープする.

7. によって主人公の家の玄関はタマムシシティの屋上のイーブイの部屋と繋がっています.家から出ましょう.

9. 無限イーブイ編にする.

道具欄の 14 番目に「はやぶさバッヂ」があるはずです (7. で b. の操作をしていなければ 26 番目).以下のことをしてください.

1. ニックネーム「ヅずゆデの」のイーブイを取得し「はやぶさバッヂ」を使う.
2. ニックネーム「ゴづ」のイーブイを取得し「はやぶさバッヂ」を使う.
3. ニックネーム「がやぜカ」のイーブイを取得し「はやぶさバッヂ」を使う.

イーブイは本来 1 匹しか手に入らないのですが「はやぶさバッヂ」を使うことでボールが再配置されてイーブイを再取得することができるようになります.

3. の「はやぶさバッヂ」で以降イーブイを取得するとき,イーブイのボールが消えなくなるのでイーブイを無限に取得することができるようになります.

10. イーブイを取得しニックネームをつけていく.

無限に取得できるようになったイーブイを使ってプログラムを組みます.
以下の順番でニックネームをつけてください.
2024/04/13 更新: 名前を付ける順番になるように記述し直しました.

1. よメボデの
2. よザれりん
3. ぼダメギて
4. へはんち
5. だいなひだ
6. れゃわダり
7. めかんざダ
8. ダれサんダ
9. ダめッんど
10. ううゾダグ
11. へたんへた ← v1.0 の場合は「へたんへそ」
12. へたんボぷ
13. ぱへたんぴ
14. キづごヅー
15. てケんダム
16. ダだギムツ
17. ぼヂてケん
18. ぜゃダだグ
19. づひせがわ
20. よヂづよく

11. 簡易版バイナリエディタを実行する.

上のニックネームを入力した後,「はやぶさバッヂ」を使用すると簡易版バイナリエディタが起動します.こんな感じになるかと思います (画像は D9B2 が表示されていますが実際には DCE0 が表示されるかと思います).

起動しない場合はリセットしてレポートバグ直後からやり直してください.

起動できたら一回セーブしておくと良いかもしれません.

簡易版バイナリエディタの操作方法
以下の操作方法でアドレスとその中身を書き換えることができます.
操作方法

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Start: 終了
Select: DCE0 からプログラムを起動
Select はバイナリエディタのプログラムを入力し終えるまで押さないでください.

12. バイナリエディタを実行するまで

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
memory_editor.asm · GitHub
簡易版バイナリエディタを使って DCE0 から DD58 のアドレスの中身をリンク先のものに書き換えてください.

ただし DD17 の中身は v1.0 の場合は 3F に,それ以外のバージョンの場合は 40 にしてください.書き換えたら一回 Start で終了してセーブしておくと良いかもしれません.書き換えをした後に Select を押すとバイナリエディタが起動できます.

バイナリエディタの操作

↓: アドレス+1h
↑: アドレス-1h
→: アドレス+10h
←: アドレス-10h
B+↓: アドレス+100h
B+↑: アドレス-100h
B+→: アドレス+1000h
B+←: アドレス-1000h
A+↓: 中身+1h
A+↑: 中身-1h
A+→: 中身+10h
A+←: 中身-10h
SELECT: 指しているアドレスを実行
START: 終了

簡易版バイナリエディタよりも操作できることが増えて快適になるかと思います.

「SELECT」は不用意に押すとフリーズする可能性が高いので気をつけましょう.
慣れてないうちは「SELECT」はないものと思って良いかもしれません.

仕上げ操作

以下の 6 つのことをしたいと思います.

1. 手持ちの情報を正常にする.
2. 図鑑の情報を初期化させる.
3. 道具欄を正常にする.
4. マサラタウンに戻る.
5. 「かいがらバッヂ」でバイナリエディタを起動できるようにする.
6. パソコンの道具欄を正常にする.

1. については D123 の中身を 00 にすることで正常になります.
2. については D27B から D2A0 の中身を全て 00 にすることで図鑑が初期化されます.初期化しておかないとオーキド博士から図鑑をもらえなくなります.オーキド博士から図鑑がもらえなくてもバイナリエディタを使えばどうにかなったりはしますが.
3. については D2A1 から D2A4 の中身を

01 65 01 FF

にしてください.そうすることで道具を「はやぶさバッヂ」のみ所有にすることができます.バイナリエディタ終了後はカーソルがまだ 26 番目にあるので 1 番目になるまで「↑」を押すことで道具欄が正常 (バグアイテムがあるのは正常と言えるのか?) になります.
4. についてバイナリエディタを起動した際にいる場所はイーブイの部屋となっていると思いますがそのままタマムシマンションから出ようとするとバグマップを踏みます.バグマップを踏むのを防ぐためにもイーブイの部屋からスタート地点のマサラタウンに直接戻りましょう.イーブイの部屋にいる状態から D331 と D335 の中身を 00 に書き換えてからイーブイの部屋を出ることでマサラタウンに戻ることができます.
5. については D9B2 から D9B6 の中身を

1E 66 C3 E0 DC

にしてください.これを行った後 D2A2 の中身を 65 から 63 に変更してください.そうすると手持ちの道具は「かいがらバッヂ」のみとなりますがこれを使用するとバイナリエディタを起動することができるようになります*2
6. については D4B9 から D4BC の中身を

01 14 01 FF

にしてください*3.こうすることでパソコンの道具欄を元に戻すことができます.

*1:「A」+「B」+「Start」+「Select」によるリセットではなくハードごとリセットをする必要があります.

*2:はやぶさバッヂ」については v1.1 ~ v1.3 の場合パソコンの道具をプログラムとして実行するためパソコンの道具を変更することができないという欠点があります.

*3:v1.0 の場合 7. で b. f. の操作のみ実行しているのであれば元々こうなっているはずです.