あなたが探している情報は、この日記には記されていない可能性が高いです。(検索で来た人用)
にらどんは一杯500円。尚、出前は承っておりません。ご了承下さい。

ポケモン 第3世代 エメラルド 任意コード実行 覚書

ここのところふっと思い立って表題のやつをいろいろ調べたり導入したりしていたのだけど
そこまでやってもう何もやることがないことに気が付いた。
僕としてはまた何かデータ構造を調べてプログラム書いてみようかなというところだったのだけど、もうそうまでしてやりたいことがないんですよね。
先駆者の方々が偉大過ぎる。
しかし折角いろいろ調べたのに何にもしないのももったいない。でも原理説明とかまで全部終わってる。
この状況で僕に有意義な記事が書けるのか・・・?としばらくあれこれ考え、ようやく方向性が決まったので書き始めました。

あまりにも大手が強すぎてそれ以外のガイドとか使用感とかの情報があちこちに散らばっている感じがしたので、
自分が資料として活用したページや実際に使ったときの挙動や注意点をまとめておこう、ということで今回覚書という形になりました。
調べれば出てくるものでしかないので、ただのリンク集+使用感などの補記というスタイルで書いていきます。

チラ裏雑記帳

後乗り勢の全てはここから始まるといっても過言ではない。
バグポケモン0x085Fによる任意コード実行導入を懇切丁寧に解説している。
加えてのセーブデータコピーとバイナリエディタ導入でエメラルドを何でもありにした始点にして終点。

そうは言っても準備大変じゃない?
確かに、理想の環境としては増殖バグが前提となるので殿堂入りをしておきたい。RTAルートを参考にしたり通信環境が整っているなら別ROMでレベル上げというのも手です。
が、自分は中古ROMくじで殿堂入り済みセブン未交換を引きました。(1敗)
セーブデータコピーに使うことを考えると1本余分に持っておくのは損にならないので1回ぐらいは挑戦していいかも?
オークションなどセーブ内容を確認できるものなら多少値が張っても優先的に入手したいところ。

ダブルコラプションについては前提の前提すぎてここには載っていないので別ページ参照。

なんと言ってもバイナリエディタ導入が目玉ですが、これもまた長大。
これに限らずボックス名編集の確認はジャンプ機能を使うと便利。いちいち画面が切り替わらず文字が左揃えになるので見やすいです。
ただ、「任意コードであれこれしたい」というだけならこのプログラムは鶏に牛刀です。後述の汎用コード環境で満足できない開発者向け。

そしてもはやどうしてそうなるのかよくわからないセーブデータコピー。(他のも完全にわかってるかっていうとそうでもない)
やり方がわかっていると大した手間ではないのですが、個人的に詰まりポイントが多かったです。
まず、所持しているGBA本体に問題があった。というか電池を持っていなかった。
充電池を使ってプレイできていたので問題ないかと思ったら、どうやら低電圧が悪いらしくソフトを抜き差しする瞬間にゲームが落ちる。
コードミスなのかなんなのかわからず数回繰り返し、それでもダメなのでDS Liteで試したところ成功。ハードに依らず再現可能なんですね。
また、これについて言及している方が多分いないんですが、コピー先のROMにセーブデータがあると上書きに失敗します
セーブ消去はタイトル画面で「上+B+セレクト」。確認画面も出ますが、くれぐれもROMを間違えて消去しないように。バックアップはメッセージ枠を変えておくと目印になるかも。
知らずに1回、原因がわからずもう1回、うっかり1回やらかしました。僕このコード何回打ったんだろう・・・

最後に最大コンテンツ、システムハック。
これを実行する場合は本当にバックアップをお勧めします。ここまでの道のりをやり直すことを考えるとROM1本は安いもんです。
非常に長いことと、仕様上入力先アドレスが変動するため、自分は誤入力を防止するために表計算ソフトで自動計算・表示するようにして確認しながら入力しました。
記事にはないのですが、(ということはもしかしたら自分の記述ミスなのかもしれませんが)、「ボックス12/25, 28~30、ボックス13/01」に計5つのダメタマゴが生成されます。
しばらくいじってから気づいて、いつの間にこんなのできちゃったんだろうと思って安易に削除したところハック環境が崩壊。
バックアップで復帰できてなかったらどんだけ萎えていたか・・・。それだって面倒ではあるし・・・
このはみだしコードがある状態でもエディタは正常に動いているので多分問題ない。後述の汎用コード環境とも干渉しないのでこのダメタマゴは動かさないようにしましょう。
また、ボックス1にある12+1個のダメタマゴはこの環境が完成したら破棄してOKです。ただバックアップがない場合は復旧用に残しておいた方がいいかも。

- 哀しき獣の村

2大巨頭のもう1つ。ここの汎用コード環境とサンプルコードによりお手軽になんでもできるようになっている。
本来暗号化のために面倒になっているステータス変更を直接操作できる点が非常に優れている。
中でも手持ちポケモンデータ書き換えはもうこれだけで全て完結してしまう。
他のコードで一通り楽しむもよし、このコードで任意のポケモンを生み出すもよし、Em任意コードの花形と言ったところ。

また、ダブルコラプションについても画像付きで分かりやすく説明されているので方法がわからない場合はこちらがオススメ。

魚肉の雑記帳

各種細かいデータや没データ調査などかなり深くまとめられているのみならず
コードの補助ツールも公開されており、まさに至れり尽くせり。僕がやることないと諦めた所以

PokemonMaker

http://www.ppnstudio.com/maker/PokemonMakerHelp.txtにて使い方が説明されているその名もずばりポケモンメーカー。バルバから直リンあるのすげーよ。
おそらく各種エミュレータや改造ツール用のコードを生成してくれる。
最大のポイントは実機でのバイナリデータを直接出力できる点。
おそらく普通に(?)満喫する上でのバイナリエディタを導入する最大のメリットはこれだろう。
出力タイプを「80-bytes」にし、手持ちに直打ちするこで自由にポケモンを生み出せる。ちなみに80バイトの入力はぶっちゃけダルい。
「^-Samples to Code-^」で左側に出力してから「V-Code to Samples-V」で4バイト毎に改行できるので若干見やすくなる。
また、ポケモンの名前と親の名前について日本語に対応していないので00…の部分にしっかり入力しないといけない。
面倒ならまっさらなとこに記述するのではなくそのポケモンを別途入手しておいてそこに上書きすればTN・NN・表裏IDは入力を省ける。

需要なさそうだけどこれはないから作るかーと思ったらめっちゃしっかりしたのがあった。
これを見つけて実際に使えることを確認して僕の第3世代任意コード実行は終わった。

各種データまとめ

改造ポケモン制作資料 Wiki*

各種数値データがあらかた揃っている。FrLg用とのことでイベントなどは一部Emに対応していないがよっぽど深堀りしないかぎり関係ない。

Pokémon data structure (Generation III) - Bulbapedia, the community-driven Pokémon encyclopedia

英語圏ポケモンwikiだがいつもながら情報が濃い。ポケモンのデータ構造について詳しい。

Research Pokemon Emerald Flags List (90%)

海外の掲示板だが、各種フラグがほぼまとまっている。汎用コードのフラグ操作と合わせて。

出身ゲーム - ポケモンWiki

こちらは日本のポケモンwiki。出身バージョンについて細かく載っており、最大のポイントは第4世代の数値が第3世代で設定できる点。
これを利用してHGSSの出身バージョン指定イベントである「もえぎいろのたま」イベントを発生させることができるらしい。
これについて自分でも検証しようと思ったんだけど自分のメインロムのHGでまだレッド倒してなくて道のり険しすぎて諦めた。手持ち最強Lv60ぐらい。
逆に言うとイベントをすっ飛ばせるのではなく、イベントを正規に進めたうえで初めてHGSS産グラカイであることの判定をチートできるということだけは確認できたってことね。(ポジティブ)
一応出身SS出身地うずもれのとうに変更済みのはすなんですがパルパーク通したHGでの表記は「ジョウト地方でであった」になってます。

その他コードまとめ

https://twitter.com/GEN4pomeg/status/1406940952384532484

バトルタワー受付の手持ちセーブ&ロードのスクリプト。お手軽すぎるので事故防止に実行前にセーブは必須。

https://twitter.com/twi11red/status/1431769738795835395

教え技の復活コード。一部だがフラグ一覧と合わせて。

https://twitter.com/twi11red/status/1394575273278857222

ポワルンウソッキーダンバルのフラグ。ダンバルは未検証とのことですがこちらで有効であることを確認しました。

https://twitter.com/GEN4pomeg/status/1397110282254655489

グラカイの出身地チートについての記述。
ソース元的にはかなり信用できるけども自分では未確認なのでちゃんと確認してからってのがこの記事書いたときの考えだったんだけど
その状態で1年放置しちゃったらもうどうでもよくなるよね…