ポケモンクリスタル バイナリエディタ起動 チャート

注意: 2024/03/06 に内容をアップデートしました.ver.2023121 を見たい方はこちらからどうぞ
注意: 2023/12/11 に内容をアップデートしました.ver.20231128 を見たい方はこちらからどうぞ
注意: 2023/11/28 に内容をアップデートしました.これより前のバージョンは残していません.

はじめに

クリスタルでバイナリエディタを導入する動画を作成致しました.
本記事はこの動画の解説チャートとなります.
www.youtube.com

チャート

環境: クリスタル版のみ対応しています.

1. データの初期化

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

2. オープニング

主人公の性別,時間,名前,曜日は何を選択しても良いです.

3. モンスターボールを入手するまで進める.

ストーリーを進めてください.最初にもらうポケモンは何でも良いです.
またライバルの名前は何にしても良いです.
ただし「きのみ」と「キズぐすり」は使わないようにしてください.

4. ポケモンを 1 匹捕獲する.

モンスターボールを入手したら 29 ばんどうろでポケモンを 1 匹捕獲してください.

5. ヨシノシティのポケモンセンターのパソコンでボックスの名前を変更する.

2. ダだギぼヂてクろ
3. よノゥメろてエろ
4. にふゥャろゥヨろ
5. にジヅノるひジデ
6. にテゥキリゅゅの
7. へブひひ ぐとど
8. ダれコろダださざ
9. ダれむをダリだけ

今回ボックス 1 は使用しないのでどういう名前にしていても良いです.

6. 0x1500 制御コードによる任意コード実行を行う.

以下のことを行ってください.

a. ボックス 3 に切り替える.
b. ポケモンを 1 匹預ける.
c. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
d. 再開後スタート地点から左に 1 歩,下に 1 歩の場所でポケモンずかんを開く.
e. 道中で遭遇した野生ポケモンに応じて特定の操作を行った後ずかんを閉じる.
f. 右に 1 歩,上に 1 歩進んでパソコンのボックスを開く*1.名前のバグったポケモンがいれば成功.

e. の特定の操作については以下のどれかになります.この操作ではずかんのカーソルをオニスズメに合わせることを目的としています.

  • 右 2 回,上 2 回ボタンを押す.(ポッポ,ホーホー,コラッタ,オタチ以外の野生のポケモンに遭遇している場合)
  • 右 2 回ボタンを押す.(上記の条件を満たしていないがオタチに遭遇している場合)
  • 右 2 回,下 2 回ボタンを押す.(上記の条件を満たしていないがコラッタに遭遇している場合)
  • 右 2 回,下 4 回ボタンを押す.(上記の条件を満たしていないがホーホーに遭遇している場合)
  • 「ふるいずかんモード」に切り替えて右 3 回上 1 回ボタンを押す.(上記の条件を満たしていない場合)

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

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

名前のバグったポケモンがいるのを確認したらボックス 3 ~ 6 の名前を更に変更します.
ボックス 7, 8 の名前は変更しないようにしてください.

3. ダだゲムよダだガ
4. ぜジダムキづごぱ
5. ヅまとへジみぴよ
6. へジみボぷへジみ

ボックスの名前を変更したら下記の内容のメールをポケモンに持たせます.
メールは 0x1500 制御コードによる任意コード実行で生成しています.

へなづがをョてエろなひだへドみち
ぼダメに0ぞ?ムぞボデのののだっ

メールの作成後はメールの中身を読みます.その後ずかんを開くことで簡易版バイナリエディタを起動することができます.

8. バイナリエディタの作成

簡易版バイナリエディタを起動すると 16 進数で 4 桁の数字と 2 桁の数字が出現します.
4 桁の数字がアドレス,2 桁の数字がその中身となっています.
ただし A の代わりに g,B の代わりに下線,C の代わりに携帯マークが使われています.

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

A: アドレス+1h
B: アドレス-1h
↓: 中身+1h
↑: 中身-1h
→: 中身+10h
←: 中身-10h
Select: DDD1 を実行
Start: 終了
Select はプログラムを入力し終えるまで押さないでください.

以下の URL にあるプログラムを入力してバイナリエディタを作りましょう.
RAM Writer for Pokémon Crystal (JPN) · GitHub
簡易版バイナリエディタを使って DD0B ~ DDC4 と DDD1 ~ DDE8 の中身をリンク先のものに書き換えてください.

書き換えたら Select を押すことでバイナリエディタを起動することができます.

9. 後始末

バイナリエディタを起動することができましたが現状だとメールを読んで簡易版バイナリエディタを開いてから Select ボタンを押す工程のため若干面倒であり更に正常な図鑑を見ることができないものとなっています.
また簡易版バイナリエディタで書き換えたアドレスは手持ちのポケモンの 3 ~ 6 匹目の領域を使用しているため手持ちのポケモンを増やすことができなくなってしまいます.

上記の問題を解決するために分類違いわざマシンを使って起動できるようにします.
バイナリエディタを使って D886 を D0 に変更してください.更に DA47 以降を

3E 03 01 BA 00 11 00 C8 21 DE AF D5 C3 8C 68

にしてください.

このようにすることでどうぐ欄にわざマシン 17 を生成することができ使用するとバイナリエディタが起動します.
分類違いわざマシンバイナリエディタを起動することができるようになれば手持ちのポケモンを増やしても良いです.

図鑑を正常に戻すためには D94C を 00 に変更してください.

*1:この通りに進んでください.特に順番を逆にした上 1 歩,右に 1 歩ではうまくいきません.

ポケットモンスター クリスタル Any% チャート

はじめに

本記事はポケットモンスター クリスタルの Any% のチャートとなります.
バグありでできるだけ早くレッドを撃破することを目指すカテゴリーとなっています.

レギュレーション

ルールは以下で採用されているものを用います.

要約すると以下のようになります.

  • 開始前に「B」+「Select」+「↑」でデータクリア必須.
  • 計測開始:「さいしょから はじめる」を押したとき.
  • 計測終了:レッド撃破後に画面が白くなったとき.
  • レッド撃破の定義: シロガネやまにいるレッドに話しかけてイベントをこなすこと*1.ただしレッドのイベントを別のイベントに書き換えるのは禁止.

動画

今回は実際に走った動画を用意していますので是非こちらもご覧ください.音が大きくて若干音割れしているのはすみません.後ラップ切る場所を間違えているのもすみません.
www.youtube.com

チャート

  • メッセージ はやい
  • エフェクト とばす

主人公の性別:おとこ
時間:10 時 0 分
主人公の名前:ア
曜日:にちようび

ポケモンヒノアラシを選択する.きのみは外す*2

ライバル戦はたいあたりを連打する.負けた方が早い.ライバルの名前をアにする.

モンスターボールを入手したら 29 ばんどうろでポケモン 1 匹捕獲しヨシノシティのポケモンセンターに入る.

2階に行きパソコンを開いてボックス 2, 4, 5, 6 の名前を以下のようにする.

2. ョよえてエろ
4. がわぜォひすづ
5. にきづョぜマづぜ
6. じがろづゅゅの

名前を変更したらボックス 2 に切り換えてセーブをする.
ボックス 2 にポケモンを 1 匹預け*3ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.

再開後スタート地点から左に 1 歩,下に 1 歩のところでポケモンずかんを開き右 2 回上 2 回ボタンを押してからずかんを閉じる*4

ずかんを閉じた後右に 1 歩,上に 1 歩進んでパソコンのボックスを開く*5.名前のバグったポケモンがいれば成功.

名前のバグったポケモンがいることを確認した後はパソコンを閉じて階段を降りるとシロガネやまに移動するのでそのままレッドに話しかける.

補足

上記の操作では 0x1500 制御コードによる任意コード実行を行っています.詳細については以下でも述べています.図鑑を開いて右 2 回上 2 回のボタン操作でオニスズメにカーソルを合わせて,終端記号のないポケモンを閲覧することがトリガーとなっています.
ポケモンクリスタル 0x1500 制御コードによる任意コード実行 - flag3833753

任意コード実行では以下の 3 つのことをしています.
1. 階段の移動先の変更
2. レッドの存在フラグの変更
3. 手持ちのポケモンの数を 0 匹に変更

それぞれの詳細
1. ポケモンセンターの 2 階は共通のマップが使われています.このためどの場所から登ってきたかを管理するアドレスがあるのですがそこを書き換えることによってシロガネやまのレッドがいる部屋にワープするようにしています.
2. ゲーム開始時点ではレッドがシロガネやまにいません*6.このためレッドが存在するためにフラグを書き換える必要があります.
3. 手持ちのポケモンの数を 0 匹にした状態で戦闘をすると勝利したことになります.

参考文献

https://glitchcity.wiki/wiki/Pok%C3%A9mon_Crystal_any%25_speedrun_route
英語版クリスタル Any% Speedrun Route の記事となります.任意コード実行の部分でかなり参考にしています.

*1:このためレッドのイベントを任意コード実行で呼び出すのは禁止となっています.

*2:運が良ければ外さなくても早くなることがあるが基本外した方が早いはずです.

*3:動画ではヒノアラシを預けているがポッポやオタチ,コラッタを預けた方が鳴き声の関係で早いかもしれない.

*4:道中でポッポ以外の野生のポケモンに遭遇していない場合は右 2 回上 2 回のボタン操作で目的の場所まで移動ができません.そのためこの場合は「ふるいずかんモード」に切り替えて右 3 回上 1 回ボタンを押してからずかんを閉じる必要があります.また道中でオタチに遭遇しているがポッポ,コラッタ,オタチ以外の野生のポケモンに遭遇していない場合はスクロールの関係で右 2 回のボタン操作となり,道中でコラッタに遭遇しているがポッポ,コラッタ以外の野生のポケモンに遭遇していない場合は右 2 回,下 2 回のボタン操作となります.

*5:この通りに進んでください.特に順番を逆にした上 1 歩,右に 1 歩ではうまくいきません.

*6:通常プレイではワタルを撃破してでんどういりをすることでシロガネやまに出現します.

ポケモンクリスタル バイナリエディタ起動 チャート (ver.20231211)

注意: 2023/12/11 に内容をアップデートしました.ver.20231128 を見たい方はこちらからどうぞ
注意: 2023/11/28 に内容をアップデートしました.これより前のバージョンは残していません.

はじめに

先日 0x1500 制御コードを用いた任意コード実行の紹介を行いました.

今回の記事ではこれを用いてバイナリエディタを導入するチャートについて書きます*1

チャート

環境: クリスタル版のみ対応しています.

1. データの初期化

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

2. オープニング

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

3. モンスターボールを入手するまで進める.

ストーリーを進めてください.最初にもらうポケモンは何でも良いです.
またライバルの名前は何にしても良いです.
ただし「きのみ」または「キズぐすり」を温存してください.

4. 46 ばんどうろに行きオニスズメを入手する.

オニスズメは朝または昼に出現することに注意してください.

5. ヨシノシティのポケモンセンターに入る

この時点で最低限の準備が終了しているためバイナリエディタの作成に取りかかれます.

6. 終端記号のないポケモンを入手する

以下のことを行ってください.

a. パソコンの前に立ちセーブを行う.
b. ポケモンを 1 匹預ける*2
c. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
d. 再開後どうぐ欄を開く.
e. パソコンを開き預けられたポケモンのニックネームが??????のような表示になれば成功です*3
f. ボックス 1 をニックネーム??????のポケモンのみにし,いまのボックスをボックス 1 にする.

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

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

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

なおこの後メールを持たせる必要があるためもし複製されてしまったポケモンがいる場合は f. で手持ちに加えておくと良いです.

7. 0x1500 制御コードによる任意コード実行を行う.

以下の通りに行動をしてください.
a. 手持ちの 1 匹目をオニスズメにする.
b. ボックス 1, 4, 5 の名前を以下のようにする*4

1. ゅゅョにミてエろ
4. ヅキりデボデぼズ
5. ヅノるひジデの
c. ポケモンセンターの 2 階に行き下の写真の場所でセーブをしてリセットを行う.
d. 再開後右に 1 歩,上に 1 歩進みメニューからポケモンを開きオニスズメで A を押す*5
e. パソコンを開いてポケモンをひきだすで終端記号のないポケモンを表示する.

以上の動作を行うことでどうぐの 1 番目をはながらメールにし図鑑モードを 0C にすることができます.

ここまで来れば後は以下で紹介している方法と全く同じ手順でできるようになります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753
今回はバイナリエディタを起動するチャートということでこの後の動きも紹介をします.

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

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

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2, 3 のメールを用意する.
  3. 表 2 のメールを読んで任意コード実行を行う.
  4. 表 3 のメールを読んで任意コード実行を行う.

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

表 1

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

表 2

ぼぴがろぜシづぜネよヂづにふぜフ
づぜヨづののののののののののだっ

表 3

へなづへつぢておろなひだへドみち
ぼダメに0ぞ?ムぞボデのののだっ

9. バイナリエディタの作成

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

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

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

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

操作方法

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

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

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

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

補足

0x1500 制御コードによる任意コード実行の仕組みについては
ポケモンクリスタル 0x1500 制御コードによる任意コード実行 - flag3833753
で述べている通りなのですが今回のセットアップでは 0xCD64 以降が D2 9B C4 となっていて 0xC49B にジャンプするようになっています.この領域はグラフィックを表示するために使う領域でボックスを開く際に名前が表示されることを利用した任意コード実行となっています.

Acknowledgements

Thanks to TimoVM for showing me how to set up 0x1500 control code arbitrary code execution!

*1:0x1500 制御コードを用いた任意コード実行の記事を投稿してから 9, 10 時間後に新手法が見つかったためこの記事を書いています.

*2:オニスズメまたは最初にもらうポケモンを持っていると思いますがどちらでも良いです.

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

*4:ボックス 2, 3 の名前は何にしていても良いです.

*5:この通りに進んでください.特に順番を逆にした上 1 歩,右に 1 歩ではうまくいきません.またオニスズメで A を押す際にはつよさをみるなどが表示されれば良いです.

ポケモンクリスタルにおけるバイナリエディタ

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

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

まずは簡易版バイナリエディタを導入します.
環境:ポケモンクリスタルでの動作を確認しております.
準備:「最後に読んだメール」による任意コード実行環境*1

準備については以下をご参照ください.

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

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2, 3 のメールを用意する.
  3. 表 2 のメールを読んで任意コード実行を行う.
  4. 表 3 のメールを読んで任意コード実行を行う.

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

表 1

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

表 2

ぼぴがろぜシづぜネよヂづにふぜフ
づぜヨづののののののののののだっ

表 3

へなづへつぢておろなひだへドみち
ぼダメに0ぞ?ムぞボデのののだっ

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


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

見ての通り表示がおかしいのですが気にせず使いましょう.
「分類違いわざマシン」を使っている場合は ■は A,▲は B,携帯マークは C だと思ってください.「バグモード図鑑」を使っている場合は g は A,青色の線は B,携帯マークは C だと思ってください.特に 9 と g を混同しないように注意しましょう.ちなみに上の画像はアドレスが AB11 で中身は CB です.

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

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

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

簡易版バイナリエディタを再度起動する場合は表 3 のメールを読んで任意コード実行をすると良いです.表 2 のメールを再度読む必要はありません.

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

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

次の内容のメールを用意して,内容を読んでから任意コード実行を行うことでバイナリエディタを起動することができます.

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

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

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

バイナリエディタの操作

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

↓: アドレス+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」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

注意

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

*1:「分類違いわざマシン」と「バグモード図鑑」の両方に対応しています.またメールの 1 文字目から実行するもの,31 文字目から実行するもの両方に対応しています.

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

注意: 2023/12/11 に内容をアップデートしました.ver.20230407 を見たい方はこちらからどうぞ
注意: 2023/04/07 に内容をアップデートしました.ver.20220817 を見たい方はこちらからどうぞ

はじめに

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

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


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

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

まずは簡易版バイナリエディタを導入します.
環境:ポケモン金銀での動作を確認しております.
準備:「最後に読んだメール」による任意コード実行環境*1

「分類違いわざマシン」で準備をする場合は次のブログ,動画にお任せします.Teraman64DD さんの動画だと Part.04 で導入しています.

「バグモード図鑑」で準備をする場合は次をご参照ください.

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

  1. ボックスの名前を表 1 の通りにする.
  2. 表 2, 3 のメールを用意する.
  3. 表 2 のメールを読んで任意コード実行を行う.
  4. 表 3 のメールを読んで任意コード実行を行う.

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

表 1

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

表 2

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

表 3

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

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


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

見ての通り表示がおかしいのですが気にせず使いましょう.
「分類違いわざマシン」を使っている場合は ■は A,▲は B,携帯マークは C だと思ってください.「バグモード図鑑」を使っている場合は g は A,青色の線は B,携帯マークは C だと思ってください.特に 9 と g を混同しないように注意しましょう.ちなみに上の画像はアドレスが AB11 で中身は CB です.

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

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

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

簡易版バイナリエディタを再度起動する場合は表 3 のメールを読んで任意コード実行をすると良いです.表 2 のメールを再度読む必要はありません.

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

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

次の内容のメールを用意して,内容を読んでから任意コード実行を行うことでバイナリエディタを起動することができます.起動するとこのページの上の方にある画像のような感じとなります.

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

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

バイナリエディタの操作

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

↓: アドレス+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」は不用意に押すとフリーズする可能性が高いので気をつけましょう.

注意

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

*1:「分類違いわざマシン」と「バグモード図鑑」の両方に対応しています.またメールの 1 文字目から実行するもの,31 文字目から実行するもの両方に対応しています.

ポケモン 第二世代 時間再設定 (任意コード実行)

はじめに

ポケモン 第二世代では一度設定した時間を変更することは不可能だとされています.

3DSバーチャルコンソールに関しては 3DS の本体設定で日付と時刻を大幅に進めて時計の時刻をオーバーさせることで再設定することはできますが 3DS のゲームでペナルティが発生するというデメリットがあります.

本記事では (本体設定で時刻を進めずに) 時間を再設定する方法について解説します.

方針

以下の 2 通りの方針を紹介します.

1. ゲーム起動時に時計の時刻を不明にする.
2. 時間を再設定するプログラムを直接呼び出す.

方針1 ゲーム起動時に時計の時刻を不明にする.

ゲーム起動時に時計の時刻を不明にするというのはこういう状態のことです.

この状態のままゲームを開始しようとすると時間を合わせてくださいと言われ以下の画面が現れます.

この画面で時間を設定することで時間を再設定することができます.

方針1のやり方

金銀ではバンク 00 のアドレス B000,クリスタルではバンク 00 のアドレス AC80 の中身を 80 にしてセーブを行わずにリセットをすることで時計の時刻を不明にすることができます.バイナリエディタを導入している場合は数字を書き換えてください.

バイナリエディタを導入していないが「最後に読んだメール」による任意コード実行環境を導入していれば以下のメールを読んで任意コード実行をしてください.

金銀版

ョへマだぼアヅアィひさデへャだの
              だっ

クリスタル版

ョへマぞぼアヅアッデへャぞの  
              だっ

方針2 時間を再設定するプログラムを直接呼び出す.

上記の時間を設定する画面を任意コード実行で直接呼び出すという方針です.

方針2のやり方

金銀とクリスタル共通で ROM バンク 08 の アドレス 4027 を実行することで呼び出せます.バイナリエディタ*1から実行する場合には時間の再設定後に Start を押して処理を終了させる必要があることに注意してください.

バイナリエディタを導入していないが「最後に読んだメール」による任意コード実行環境を導入していれば以下のメールを読んで任意コード実行をしてください.

金銀版

へロどぼゲがパぜぎまの
              だっ

クリスタル版

へなづぼゲがパぜぎまの  
              だっ

*1:ROM バンク切り替え機能付きのものを使う必要があることに注意してください.2023/12/04 現在公開されている記事のバイナリエディタは全て ROM バンク切り替え機能に対応しています.

ポケモンクリスタル バイナリエディタ起動 チャート (ver.20231128)

この記事は旧バージョンです.新しいバージョンは以下のものとなります.
ポケモンクリスタル バイナリエディタ起動 チャート - flag3833753

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

はじめに

先日 0x1500 制御コードを用いた任意コード実行の紹介を行いました.

今回の記事ではこれを用いてバイナリエディタを導入するチャートについて書きます*1

チャート

環境: クリスタル版のみ対応しています.

1. データの初期化

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

2. オープニング

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

3. モンスターボールを入手するまで進める.

ストーリーを進めてください.最初にもらうポケモンは何でも良いです.
またライバルの名前は何にしても良いです.
ただし「きのみ」または「キズぐすり」を温存してください.

4. 46 ばんどうろに行きオニスズメを入手する.

オニスズメは朝または昼に出現することに注意してください.

5. ヨシノシティのポケモンセンターに入る

この時点で最低限の準備が終了しているためバイナリエディタの作成に取りかかれます.

6. 終端記号のないポケモンを入手する

以下のことを行ってください.

a. パソコンの前に立ちセーブを行う.
b. ポケモンを 1 匹預ける*2
c. ボックスせいりを選択しセーブする際に「でんげんを きらないで ください」の表示が出た少し後に強制リセットをする.
d. 再開後どうぐ欄を開く.
e. パソコンを開き預けられたポケモンのニックネームが??????のような表示になれば成功です*3
f. ボックス 1 をニックネーム??????のポケモンのみにし,いまのボックスをボックス 1 にする.

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

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

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

なおこの後メールを持たせる必要があるためもし複製されてしまったポケモンがいる場合は f. で手持ちに加えておくと良いです.

7. 0x1500 制御コードによる任意コード実行を行う.

以下の通りに行動をしてください.
a. 手持ちの 1 匹目をオニスズメにする.
b. ボックス 1, 4, 5 の名前を以下のようにする*4

1. ゅゅョにミてエろ
4. ヅキりデボデぼズ
5. ヅノるひジデの
c. ポケモンセンターの 2 階に行き下の写真の場所でセーブをしてリセットを行う.
d. 再開後右に 1 歩,上に 1 歩進みメニューからポケモンを開きオニスズメで A を押す*5
e. パソコンを開いてポケモンをひきだすで終端記号のないポケモンを表示する.

以上の動作を行うことでどうぐの 1 番目をはながらメールにし図鑑モードを 0C にすることができます.

ここまで来れば後は以下で紹介している方法と全く同じ手順でできるようになります.
ポケモンクリスタルにおけるバイナリエディタ - flag3833753
今回はバイナリエディタを起動するチャートということでこの後の動きも紹介をします.

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

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

  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だガにだにだ空ボデの空だっ

9. バイナリエディタの作成

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

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

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

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

操作方法

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

簡易版バイナリエディタを使ってアドレス AA94 から AB4C の中身を以下のものにしてください.

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

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

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

補足

0x1500 制御コードによる任意コード実行の仕組みについては
ポケモンクリスタル 0x1500 制御コードによる任意コード実行 - flag3833753
で述べている通りなのですが今回のセットアップでは 0xCD64 以降が D2 9B C4 となっていて 0xC49B にジャンプするようになっています.この領域はグラフィックを表示するために使う領域でボックスを開く際に名前が表示されることを利用した任意コード実行となっています.

Acknowledgements

Thanks to TimoVM for showing me how to set up 0x1500 control code arbitrary code execution!

*1:0x1500 制御コードを用いた任意コード実行の記事を投稿してから 9, 10 時間後に新手法が見つかったためこの記事を書いています.

*2:オニスズメまたは最初にもらうポケモンを持っていると思いますがどちらでも良いです.

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

*4:ボックス 2, 3 の名前は何にしていても良いです.

*5:この通りに進んでください.特に順番を逆にした上 1 歩,右に 1 歩ではうまくいきません.またオニスズメで A を押す際にはつよさをみるなどが表示されれば良いです.

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