Pokémon Emerald (JP) / Arbitrary Code Execution

エメラルド任意コード手帳

日本語版ポケモンエメラルドの実機で、ボックス名に打ち込んだ文字列をコードとして走らせる。 そのコードを、種族名や技名から引いてそのまま打てる形に組み立てる道具。

実機 GBA / 日本語版 0x085F 汎用コード環境 コード16種 最終更新 2026-09-09

PR本ページは広告(アフィリエイトリンク)を含みます。掲載している商品リンクを経由して購入があった場合、運営者が販売元から報酬を受け取ります。

00これは何か

ポケモンエメラルド(日本語版・実機)には、パソコンのボックス名として保存した文字列を そのまま機械語として実行させる手口がある。デテロニー氏が公開している汎用コード環境を組んでおくと、 以後は「ボックス名を書き換えて 0x085F の様子を見る」だけで任意の処理が走る。

目的は珍しいバグ個体を作ることではない。正規の手順でも到達できる個体を、時間をかけずに用意することにある。 最終的にポケモンHOMEまで送れる形で完結させるのが前提。

コードはすべて1マスずつ「文字・字種・16進値」を並べて表示する。 が平仮名かカタカナか、が濁点か半濁点かを、打つ前に画面で確認できる。

01環境を用意する

任意コードを走らせるには2段階の準備が要る。バグポケモン 0x085F を手に入れることと、 そこに汎用コード環境を載せること。ここまで済めば、以後の操作はボックス名の書き換えだけになる。

第1段階 — 0x085F を作る

ザロクの実で手持ちを全滅させて破損バグを起こし、ボックスのポケモンをタマゴに化けさせる。 その化け方は材料にしたポケモンの性格値と努力値で決まるので、条件を揃えれば 0x085F のタマゴが出る。要点だけ書くと次のとおり。

  1. 材料と補助を作る。 カナズミのNPCとラルトスを交換して手に入るタネボー(NN セブン)を バトルタワーの通信マルチで増やす。1匹に HP努力値95・攻撃努力値8 を振ってこれを材料にする。 別の1匹に素早さ努力値を10だけ振ってダーテングまで進化させ、これを補助にする。 努力値を1でも間違えると出ないので、ここが一番慎重にやるところ。

  2. ザロクバグの道具を揃える。 ザロクの実、瀕死にする用のポケモン2匹、のろいを覚えたゴースト、マックスアップ。 のろい役は最大HPが奇数になるまでマックスアップを与えておく。

  3. 並べる。 ボックス2の1〜24番目に材料と補助を交互に置く。実際に当たるのは24番目付近なので、 面倒なら数を減らしてよい。手持ちは1〜2番目が瀕死役、3番目がのろい役、4〜6番目は空き。 のろい役の現在HPは1にしておく。

  4. 101番道路の草むら手前でレポート。 ここが失敗時の戻り先になる。 草むらでエンカウントして逃げ、コトキタウンのポケモンセンターで瀕死役を1匹預ける。 手持ちが2匹になった状態でのろい役にザロクの実を与えると、現在HPが0になって手持ちが全滅する。

  5. 破損バグ。 その状態で再び101番道路でエンカウントすると、味方に「?」のバグポケモンが出る。 手持ち選択画面で2番目の強さを見て戻り、Bで選択を解除し、そのまま十字ボタン↑を2〜3秒長押しする。 長押しが長すぎると別のデータまで壊れる。

  6. 結果を見る。 ボックスの材料が ネストボール入りのタマゴ になっていれば成功。 ダメタマゴやプレミアボール入りタマゴは失敗。1つでも成功があればレポートを書く。 なければリセットしてやり直す。

  7. 孵す前に場所を空ける。 ボックス12の12番目からボックス14の30番目までを全部空にし、 ボックス名を下の2つに変える。これをやらずに孵すとフリーズしたり別のデータが壊れる。

  8. 孵す。 約1536歩。孵化ムービーに入るまでの暗転が1分近く続くことがあるが待つ。 けつばん形のバグポケモンが孵ったらそれが 0x085F。ボックス上の種族名が あ▼ と表示されていれば同定できる。孵化直後はデータが荒れているので、 一度レポートを書いてリセットする。

第2段階 — 汎用コード環境を載せる

0x085F による任意コード実行の成功率は100%。ここに、ボックス名11〜13の3箇所だけで ボックス名1〜10のスクリプトを実行できるようにするプログラムを仕込む。これが汎用コード。

  1. 1匹目の色フシギダネを作る。 ボックス12の12番目からボックス14の30番目までを空にしたまま、 ボックス名を次のようにして、手持ち3番目を空けて 0x085F の様子を見る。 手持ち3番目に NN ォッいべぞ の色フシギダネが出る。これを ① とする。

  2. 2匹目を作る。 ① を退かして手持ち3番目をまた空け、ボックス名5だけャl(l は英小文字のエル)に変えてもう一度実行する。NN ャl の色フシギダネが出る。これを ② とする。

  3. 配置して固定する。 ① をボックス12の15番目、② をボックス14の28番目に置き、 ボックス名11〜13を次のようにする。以後、① の前3マスと ② の前後2マスにはポケモンを置かない。 ①② の位置とボックス名11〜13は基本固定。

スクリプトとプログラムの呼び分け

ボックス名1〜10に書いたものはスクリプトとして走る。 その中に もけぬうい を置くと、ボックス名5〜10と14に書いたプログラムへ飛ぶ。 乱数値を指定するプログラムのように、他のスクリプトと連携させる必要があるときは もけぬ で打ち止めて終端の 0xFF を第4バイトに使う形(もけぬ終い)を使う。 このページの生成器は、コードごとに正しいほうを出す。

終端とNOP

ボックス名データは9バイトで、9バイト目は必ず 0xFF。7文字以下しか入れなければ 余った可変部にも 0xFF が埋まる。この 0xFF はスクリプトの終了コードとして働くので、 次のボックスへ処理を続けたいときは8文字目に 0x97)を置いて 終端を「画面フェードの引数」に化けさせ、間を か空白で埋める。 生成器が出す […  ビ] という形はこれ。末尾の空白もマスとして数えるので省略しない。

02文字と値

文字コードは1バイト。並びは平仮名 → 小書き → 濁点 → 半濁点 → っ → カタカナ(同じ並びで +0x50)→ 数字 → 記号 → 英大文字 → 英小文字。 同じ音の平仮名とカタカナは、ちょうど 0x50(80)離れている。 濁点と半濁点は 5 離れている。

値 ⇄ 文字 変換

全表

平仮名 カタカナ 数字 記号 英字 薄い=入力不可

入力できないのは 0xB7(¥)・0xB8(,)・0xB9(×)と 0xEF 以降。 記号ブロックのうち実際に打てたことを確認しているのは (AD)・(B5)・(B6)。

03コード生成

04ID一覧

値はすべて pret/pokeemerald の定数から取っている。2バイト入力の欄はそのまま打てる文字列。

名前10進16進入力する文字

05乱数値の出し方

エメラルドの乱数は線形合同法で進む。次の値は seed × 0x41C64E6D + 0x6073(32bit で切り捨て)。 任意乱数値指定では、ボックス名9に書いた値そのものではなく、そこから数回進んだ値が個体生成に使われる。 原典は「指定した seed[n] の [n+2] が使われる」と定数で書いている。

陸上は2回、水中は3回進む

場所ボックス名9に書いた値実際に使われた値進んだ回数
102番道路(陸上)4A0C8C78A91448A22
102番道路(陸上)6DE20A4F59663BD12
さばくのちかどう(陸上)24C16DADDA48895F2
124/126番水道 海底(潜水)7C27918838B2FDBD3
原典の用例(メタモン)EEC6F71691A90F702

生成器の「実行地形」はこの2択。あさせのほらあな・りゅうせいのたき・111番道路・釣り場は未測定。 出会った場所も入手レベルもパルパークで消えるので、陸上の1箇所でまとめて作れば測り直しは要らない。

目標乱数値の探し方

狙う個体の乱数値そのものは、外部の乱数調整ツールで探す。 このページの生成器には 目標乱数値(狙う個体を生成する値)を入れる。 指定乱数値への変換とボックス名9への符号化は生成器がやる。

06作例 — WISHMKR の色違いジラーチ

第3世代で色違いになり得るジラーチは WISHMKRCHANNEL の2種だけ。 日本の第3世代配布ジラーチはすべて非色違いなので、色違いを正規の姿で持つには 海外配布の素性をそのまま作ることになる。乱数調整は要らない。

WISHMKR の仕様

NNJIRACHITNWISHMKR
ID表 20043 / 裏 00000レベルLv5(入手レベル値 5)
ボールモンスターボール出身ルビー固定
親性別国籍北米(英語=2)
出会った場所0xFF(運命的な出会い)リボンなし
持ち物カムラの実 または リュガの実イベントフラグなし

セーブデータのチェックサム2バイトが初期シードになるため、出現し得る個体は65536通りしかなく、 そのうち色違いは9個体。生成方式はリバースメソッド1。

色違いになる9個体

性格PIDHABCDS
てれやBA7DF43524330121611
しんちょうC90E874410010102612
すなお987ED63619710191016
せっかちBCFAF2B0312127119
ようき7B053548118614520
さみしがり2EC1608D31232629185
やんちゃ4633087D213131182419
まじめBF98F1D5291031252321
おくびょうEB0DA543152829307

実行手順

以下は やんちゃ(PID 4633087D) を作る場合のコード。別の性格を選ぶなら 手順01のボックス名1・2と手順04の個体値だけが変わる。値は生成器で出せる。

  1. 準備。 ボックス1の1番目を空きにする。手持ちの3番目も空きにする。 ボックス名11〜13は汎用コード環境のまま触らない。

  2. 性格値 4633087D のダメタマゴを作る。 ボックス1の1番目に生成される。

  3. 強制孵化させる。 ダメタマゴを手持ちに入れてから実行し、手持ち選択でそのタマゴを選ぶ。 性格値だけを引き継いだ 0x019C が孵る。これを手持ち3匹目に置く。 以降のコードはすべて手持ち3匹目を対象にする。

  4. 親IDを 表20043・裏00000 にする。ここで色違いになる。 手持ちデータ書き換えでID値をいじるとダメタマゴ化するが、このコードは暗号化データの 再マスキングまでやるので通る。主人公のIDを変える必要はない。

  5. 種族をジラーチにする。ここで初めて見た目がジラーチになる。 手持ちデータ書き換えコード。0x0199 がジラーチの種族コードで、 ボックス名1の4〜5マス目に下位バイト・上位バイトの順で入る。 ボックス名3・4・7・8は不問。

    はカタカナの濁点(0x99)。半濁点の 0x9E)にすると 5ずれた別の種族になる。

  6. 残りの14項目を埋める。 前の手順のボックス名2・5・9・10はそのまま触らない。 ボックス名1と6だけを上から順に打ち替えて、1行ごとに実行する。 5〜8番はボックス名1が同じなので、ボックス名6の1文字だけ替えれば済む。この並びはそのために組んである。

    項目ボックス名1ボックス名6
  7. 経験値を入れる。これは最後にやる。 4バイト値なので行が1本増え、 もけぬうい がボックス名3へ下がる。先にこれをやると、 ボックス名3に もけぬうい が残ったまま前の手順に戻ったときに余計な行が走る。 下は Lv49(147061)にする場合。

    ボックス名5・9・10は前の手順のまま。Lv5に戻すなら経験値は156。

  8. TN を入れる。 ボックス名9がここだけ変わる(リメういネふいい)。 WISHMKR は7文字ちょうどで、8文字目を入れないことで8バイト目に終端が入る。 ボックス名3に もけぬうい が残っていても、ボックス名2で終端するので読まれない。

  9. NN を入れる。 直前の状態からボックス名6とボックス名14だけ替える。

  10. 出会った場所を運命的な出会いにする。 3文字で打ち止めると、 終端の 0xFF がそのままマップ名IDとして読まれる。 ボックス名1が3文字で終わるので、他のボックス名が残っていても影響しない。

  11. 技を入れる。 ボックス名1だけを4回打ち替える。ROM側の処理を通るのでPPも一緒に入る。 Lv5時点で覚えている技はこの3つだけ(スピードスターはLv10)。

  12. 仕上げと確認。 ねむるにポイントマックスを使うとPPが16になる(基礎10×1.6)。 ステータス画面でボールがモンスターボールであること、色違いになっていること、 トレーナーメモが「運命的な出会い」になっていること、特性が てんのめぐみ であることを目で見る。

実際に踏んだ落とし穴

特性はスロットを1にすると「なし」になる。ジラーチに第2特性が無いため。0で てんのめぐみ。 ポケルスがバグポケモン由来で付いていることがあるので0に潰す。 やんちゃは特攻ではなく特防を下げる性格。 ねむるのPPは第3世代でも10。

07作例 — ミュウとフラグ付きの5体

ミュウ・デオキシス・ルギア・ホウオウ・孤島ラティは、第3世代では 運命的な出会いフラグが立つ特別な扱いになっている。 このフラグは「リボンと従順」32ビットの bit31 で、立っていない個体はバッジに関係なく必ず言うことを聞かず、 他ソフトへの交換にも出せない。だから、この5体は普通の任意ポケモンエンカウントでは作れない。 専用の フラグ付きポケモンエンカウント を使う。

実行手順

ジラーチと違ってこちらは1回で終わる。データを組み立てるのではなく、 狙った個体をその場で生成して普通に捕まえるだけ。

  1. 目標乱数値を決める。 外部の乱数調整ツールで、狙う性格・個体値になる乱数値を出す。 個体生成はメソッド1。乱数値の出し方のリンクを使う。

  2. 捕獲の用意をする。 ボールと、麻痺か眠りを入れられる要員。 レベル30のミュウなので長期戦になる。

  3. ボックス名を打って 0x085F の様子を見る。 下は原典の用例そのままで、 Lv30 ようき 5VC0 のミュウ@マッハじてんしゃ(目標乱数値 82B03804)が出る。 戦闘BGMは自動でミュウ専用のものに切り替わる。

    ボックス名1が種族(ミュウ 0x0097)、2がレベル(30)、3が持ち物(マッハじてんしゃ 0x0103)と プログラム呼び出し、4が飛び先。5〜9が乱数指定のプログラム部。 別の個体・別の種族にするときはボックス名1〜3と9を替える。生成器の 「フラグ付きポケモンエンカウント」がそのまま出す。

  4. 捕まえる。 普通の野生戦なので、投げたボールがそのまま入る。

  5. 出会った場所を確認する。 トレーナーメモが「運命的な出会い」になっていない場合は、 下のコードで 0xFF にする。3文字で打ち止めると終端がそのままマップ名IDとして読まれる。 手持ち3匹目に置いてから実行する。

  6. 持ち物を外す。 マッハじてんしゃを持たせたままにする理由がなければ取り上げる。 持ち物はどのみちポケムーバー通過時にバッグへ移されて外れる。

他の4体をやるとき

孤島ラティ(みなみのことう・Lv50・こころのしずく)/デオキシス/ルギア/ホウオウ。 種族コードに入力できない文字が混じる場合は加算行が1本増えてボックス名が1つずれるが、 構造は同じで生成器が自動で出す。ホウオウ(0x00FA)とルギア(0x00F9)が該当する。 レジ3体と三竜、徘徊ラティはフラグが立たない側なので、普通の任意ポケモンエンカウント (徘徊ラティは専用の生成コード)を使う。

島へ渡る必要はない

ふるびたかいずやしんぴのチケットで実際に島へ行ってから実行しても、別の場所で実行しても、 できあがる48バイトは変わらない。出会った場所はどのみちパルパークで消える。

フラグが立つことの裏づけ

通常このフラグは配布個体にしか立たない。ただし第3世代の島イベント産は例外として立つ、と Bulbapedia の Fateful encounter に明記がある。 任意コードで生成した個体にも同じフラグが立つことは、 最果ての孤島でミュウを同じ手順で作って第5世代まで送り「運命的な出会い」の表記が付いた、という 個人ブログの実践報告がある。一次資料ではないので、1体目で バッジ8個で言うことを聞くか・交換に出せるかを実機で確かめる価値はある。

08移送で残るもの、消えるもの

第3世代から先へ送ると、個体データの一部は書き換えられる。どこまで作り込む価値があるかはこの表で決まる。

パルパーク
3 → 4
出会った場所は 消去 され、表示は出身ゲーム基準の地方になる(RSE産はホウエン)。 入手レベルは 到着時のレベルに書き換え。なつき度は70にリセット。 OT名・ID・ボール・持ち物・出身バージョン・運命的な出会いフラグは保持。
ポケシフター
4 → 5
入手レベルが 再び到着時のレベルに書き換え。入手日も転送日になる。 第3世代産は地方表示のまま「はるかなときをこえて」が付く。
ポケムーバー
ポケモンバンク
持ち物はバッグへ移されて外れる。合法性チェックが入るが、 すべての不正個体を止めるわけではなく、正規個体を止めることもある。
ポケモンHOME
第3・第4世代から来た個体は「ポケシフター」で出会ったと表示される。
ここから導かれること

出会った場所を合わせても HOME での見え方には効かない。 HOME まで残って判定され得るのは、性格値と個体値の対応・出身バージョン・OT名・表裏ID・ 親性別・ボール・特性スロット・リボン・運命的な出会いフラグ・言語。作り込むならこちら側。

第3世代のデータに無いもの

48バイトの内訳は Growth / Attacks / EVs&Condition / Miscellaneous の4つ。 Miscellaneous に入っているのは ポケルス・出会った場所・出身情報・個体値/タマゴ/特性・リボンと従順 だけで、 「野生か固定シンボルか」「贈り物か化石復元か」を記録する領域は無い。 受け取り処理も個体データに印を付けない。記録が残るのはセーブ側のイベントフラグで、これは移送されない。

副作用として、任意コードで作った場合はイベントフラグが立たないため、 スティーブン宅のボールや化石が手つかずで残る。整合を気にするなら実物も回収しておく。

09リボン

リボンは手持ちデータ書き換えコードで直接付けられる。コンテストリボンだけはデータサイズが3ビットで、 値が「達成した最高ランク」を表す。生成器の項目に入っている。

種別サイズ
コンテストリボン5系統3ビット0=なし / 1=ノーマル / 2=スーパーまで / 3=ハイパーまで / 4=マスターまで。5以上は不正値で次の部門のダミーリボンが付く
一般リボン5種1ビット0=なし / 1=付与。チャンプ・ウイニング・ビクトリー・ブロマイド・がんば
特殊リボン7種1ビット0=なし / 1=付与。マリン・ランド・スカイ・カントリー・ナショナル・アース・ワールド

ダミーリボンが付いた個体は、リボン表示欄に収まりきらずフリーズすることがある。 第4世代以降に送ると不可視化されるが、内部データへの影響は不明。

第6世代で集約される

第6世代以降金色版の条件
ホウエンのコンテストリボン20種
シンオウのスーパーコンテストリボン20種
おもいでコンテストリボン 1個 40種すべてを持っていた個体
タワー系8種
(第3世代2種+第4世代アビリティ系6種)
おもいでバトルリボン 1個 8種すべて。ワールドは Wi-Fi 終了で入手不可のため事実上そろわない。SV以降は7種でも金色
リーグリボン/メモリアルリボン/ギフト系そのまま保持

元々持っていたリボンの数はリボン名の横に表示される(BDSPを除く)。第7世代は条件にコーディングミスがあり別物になっている。

第4世代でしか取れない4グループ

  • シンオウのスーパーコンテスト20種 — ヨスガシティ。DP/プラチナのみ。
  • アビリティ系6種 — DP/プラチナ/HGSS のどれでも可。ワールドのみ入手不可。
  • レジェンドリボン — HGSS のみ。シロガネやまでレッドを倒す。
  • シンオウチャンプリボン — 第4世代と BDSP のみ。

それ以外(ゴージャス系3種・曜日リボン7種・あしあとリボン・がんばリボン・ホウエンチャンプ)は ORAS で代替できる。ORAS は所持金の上限が 9,999,999 円で、第4世代と BDSP の 999,999 円より 10倍多い分だけ金策が楽になる。ゴージャス系3種は順番縛りがあり1体あたり 1,109,999 円かかる。

10使っている物PR

この作業に実際に要る物。以下のリンクは広告リンクを差し込む枠で、現時点ではリンク先が未設定。

広告リンクを含むページは広告であることを明示する必要がある(景品表示法のいわゆるステマ規制)。 実際の運用にあたっては消費者庁の告示・運用基準を確認すること。

11出典