第2世代における任意コード実行

目次

使用するものについて

第二世代で主に使われる任意コード実行の方法は、バグ図鑑モードと分類違いわざマシンの2つとなる。(他には未定義マップのマップスクリプトを悪用する方法や、海外初期版限定でコインケースを使用する方法もある)

任意コード実行環境の構築には、たいせつなものポケットからボールポケットを破壊することで図鑑モードを弄ったりわざマシンを生成したりする方法が確立されている。

コードを書き込む先として使われるのは、主にボックスの名前やメールとなる。どちらの方法にも一長一短あるので、両方の方法で起動できる環境を作るのがいいだろう。
初代と違って現在ボックスですらsRAM内(セーブデータ内であり、アクセスには一定の手順が必要)に格納されているため、ニックネームでの実行は主流ではない。
非常に長いコードをボックス内のポケモンのデータに格納しておき、必要に応じてwRAM内の一時領域にコピーして運用することがある程度。

なお、金銀とクリスタルではアドレスの参照先が微妙に違ってくるため、同じことをするにもコードを変える必要がある点に注意。

バグ図鑑モード

通常、図鑑モードはしんがたずかんモード(00h)、ふるいずかんモード(01h)、アイウエオモード(02h)の3つ存在するのだが、これが03h以降になると、ジャンプ先のアドレスをしんがたずかんモードのプログラム本体以降から取得してしまう。

さらに、図鑑モードはパソコンの道具のデータの下に格納されており、たいせつなものポケットの個数まとめ処理を悪用するとボールポケットから直接弄ることが可能になってしまう。
図鑑モード(金銀D671h・クリスタルD94Ch)はボールポケット65番目の個数になっているため、この部分を適当な数値に変更することで、図鑑からのコード実行が可能になる。
ボールポケットの65番目を探す場合、種類がラジオのチューニングになっていることと、67番目の種類が便利ボタンに登録したアイテムになっていることを覚えておくと楽。
ただし、金銀クリスタルの道具セレクトは他作品と違い入れ替えではなく移動であるため、ボールポケットから65番目に道具を動かすとパソコンの道具を一つ押し上げてしまう(1番目の道具が消え、個数が預け数になる)こととポケギア機能に異常が出ることに注意。

クリスタル版ではモード0Chが非常に都合のいい場所に飛べるため、こちらの方法が主流。金銀ではミラー領域を使えない(使いたくない)場合や手持ちポケモンに縛りを付けたくない場合に使用することがある程度。

分類違いわざマシン

わざマシンは通常の道具と違い、わざマシンポケットに入っていることでわざマシンとして起動することができる。
何らかの原因で他のポケットに入っているわざマシンは使用すると無関係なデータをジャンプ先として参照してしまう。
ジャンプ先の中にはプレイヤーが操作可能なものがいくつかあるので、それを利用して都合のいい箇所に飛ばしていくことになる。

金銀では手持ちポケモンのステータス周りに飛べるわざマシンがあるため、こちらを使うのが主流。クリスタル版の場合はモバイル関連の領域を使えるが、事前準備が必要になるのが難点。

0x1500制御コード(クリスタル限定)

クリスタル版では15hを文字として表示しようとするとモバイルアダプタ関連の機能を実行する準備をする。
この時、どの機能を使用するかは次の文字で決まり、01h「ィ゛」~0Fh「ダ」が正常なジャンプ先で、10h「ヂ」以降なら無効な命令としてモバイルアダプタ機能が終了するようになっている。

しかし、次の文字が00hだった場合はモバイルアダプタ機能を終了せずにアドレスCD46hを実行してしまう。
ここからどうにかして制御可能な場所まで飛ぶことで任意コード実行を行うことができる。

現状のチャートでは名前に終端文字を持たないポケモンをボックスコピーの要領で生成し、特定のセットアップをしたうえでその名前を見てコードを実行している。

ソフト単体でも(レベル0のバグポケモンを生成するよりは)比較的実行しやすい方法になるが、注意点が多いため、ここでの説明は割愛する。
これで毎回実行するのは手間がかかるため、初回の実行で図鑑モードを0Chに変えてしまうのがいいと思われる。

4F 15 08 05 C9 00 [code] 37 C9
…といった内容のメールを読むことで直接コードを実行することも可能らしい。(37hはキャリーフラグを立てるためのものなので、コード次第では省略可)
まともに書くにはバイナリエディタが必要だが、通信で送ったメールを読むだけで任意コード実行環境を整えるといった事も可能になる。(海外版では使用できる文字数が多い関係でポケモンの名前に仕込めるとか)
一応、
15 0A C0 00 [code] E1 C9
でもできる模様。(E1hはモバイルモードで使用されるスタックを吐き出すためのもの)

ポケモンクリスタル 0x1500 制御コードによる任意コード実行 - flag3(リンク切れ) - 既存データでもできないことはないセットアップ。F000hに飛んでメールからの実行を行える。※削除予定

ポケットモンスター クリスタル バイナリエディタ - flag3 - 画面に表示されるボックス名に向かうことで、はながらメールの入手と図鑑モードの書き換えを行える。

Guides:TMless 0x1500 ACE (JP) - Glitch City Wiki - 海外資料。上記のチャートはここを参考に制作されている。


金銀の場合

金銀ではわざマシン17をわざマシンポケット以外から使用するとアドレスFA47h(DA47hのミラー)に飛ぶ。(クリスタルでもアドレスは同じだが内容が異なる)

ここは手持ちポケモン2匹目のこうげき実数値下桁になっているので、うまいこと余計なジャンプなどを起こさないようにすれば3匹目の中身まで進めることができる。
捕獲直後のアンノーンLv.5ならこうげき~すばやさが9~13(0Dh)に収まるため、大きな影響もなく2匹目のデータまで行くことができる。
アンノーンを開放したくない場合はポッポLv.6あたりがちょうどいい。(金銀ではLv.6の個体が出ないため、赤緑青の3番道路で捕まえたりふしぎなアメを使って調整したりする)

詳しくはデータ構造のページを見てもらいたいが、ポケモンの中身データは種族→持ち物→技と並んでいるため、この中にジャンプ命令を書き込み、操作しやすいところまで飛ばせば好きにコードを書くことができるようになる。
ヌオーやほろびのうたがC3h(jp yyxx)になることを利用し、ジャンプ先を指定していくのが基本。

持ち物をフリーにしたい場合は1バイトのld命令になるリザードン(06h・bレジスタ)、コクーン(0Eh・cレジスタ)、オニドリル(16h・dレジスタ)、ニドリーナ(1Eh・eレジスタ)、ユンゲラー(26h・hレジスタ)、パラセクト(2Eh・lレジスタ)、ニョロボン(3Eh・aレジスタ)のいずれかを使用する。

他には図鑑モード09hがアドレスFA20hに飛ぶが、これは2匹目のポケモンの中身(のミラー)に飛ぶことができるため、こちらから実行することもできる。

図鑑モード11h(17d)だとアドレスFB20h(DB20hのミラー)に飛ぶが、ここは手持ち3匹目の親名5文字目になっている。その直後には手持ち4匹目の親名が並ぶため、親名を「じがまァ」(inc l→ld h,CF→jp hl)にすると、(3匹目の親名5文字目に問題がなければ)最後に読んだメールの本文1文字目に飛べる。基本的に3匹目の親名が4文字以下なら飛べるはず。
(主人公名が「じがまァ」なら自分のポケモン2匹で成立する)

図鑑モード06hの場合はアドレスFB0Eh(DB0Ehのミラー)に飛ぶが、ここは手持ち6匹目のとくぼう実数値上桁になっており、その直後に親名のデータがあるため、親名を「てパま」(jp CF40)にすると最後に読んだメールの本文31文字目に飛べ、「だっ」(jr nc,DF)で文頭に飛ぶこともできるが、手持ち6匹目のとくぼうの値に気を使う必要が出てくる。(とくぼう256以上は親名1文字目を巻き込む等)

図鑑モード99h(153d)だとアドレスD659hに飛ぶ。ここはパソコン40番目の道具の個数になっているため、うまく調整するとミラー領域を使わない任意コード実行ができる。しかし、図鑑モード改ざんのためにボールポケットを破壊するとついでにパソコンの道具も壊れてしまうため、事前に他の方法で実行環境を整えてから図鑑モードとアイテムを書き換えた方が無難か。
スーパーボール・モンスターボール・つきのいし・どくけし・すごいキズぐすり・いいきずぐすり・あなぬけのヒモ・むしよけスプレーの8種類はおかあさんが買ってくるため、必要なアイテムに含めないようにしたい。

※ポケスタ金銀のGBビルではE000h~FDFFhがミラー領域になっていないため、この方法では実行できない。

飛ばす先の候補

D8B2h(ボックス1の名前~)

ボックスの名前は8文字(+終端文字)×9ボックス分書けるため、長めのコードを実行するのに向いている。

  • ヌオー(C3h)→にじいろのはね(B2h)→おんがえし(D8h)
    • にじいろのはねは通常持たせられないので、数値を弄る必要がある。
    • わざマシン02(C0h)を持たせるとボックス2の6文字目に飛ぶことができる。
      • わざマシン02はウバメのもり、おんがえし(わざマシン27)はコガネ百貨店で手に入るため、ニューゲームからのセットアップにはこれを使うのが通例。
    • アサギシティまで寄ってなみのりメール(B5h)を持たせ、ボックス1の4文字目に飛ばす手もある。
  • ほろびのうた(C3h)→わたほうし(B2h)→おんがえし(D8h)
    • ほろびのうたとわたほうしは通常両立できないため、技変えをする必要がある。ヌオーからの実行で生成するのが無難か。
      なお、ドーブル(EBh)は未定義命令となるため使用してはいけない。
  • ていり(C3h B2h D8h)
D659hからの場合(図鑑モード99h)
  1. 何か×38(26h)
  2. わざマシン18(D1h)×1(01h)
  3. はながらメール(9Eh)×7(07h)
  4. おいしいみず(2Eh)×20(14h)
  5. なみのりメール(B5h)×9(09h)
  6. わざマシン41(E9h)
26 D1 ; ld h,D1
01 9E 07 ; ld bc,079E
2E 14 ; ld l,14
B5 ; or l(無意味)
09 ; add hl,bc D114→D8B2
E9 ; jp hl

道具を6種類使うが、個数限定品を使わずに費用を抑えるとなるとこれぐらいがちょうどいいと思われる。

CF21h(最後に読んだメール本文1文字目~)

メールは手持ちの6匹分に加え、自分のパソコンに10通まで保存しておくことができる上、ボックスでは書けない文字を使うこともできるのが特徴。
終端文字50h(ld d,b)が文末にのみ来る(正確には文末から差出人の名前までが50hで埋まる)ため「ヅ」(11h・ld de,yyxx)が使いやすい一方、16文字目と17文字目の間(CF31h)に改行として4Eh(ld c,(hl))が入るため、cレジスタを使うケースではケアが必要になる。

  • ヌオー(C3h)→ヨクアタール(21h)→いばる(CFh)
    • いばるはわざマシンで習得可能(ニョロトノからの遺伝も可能)なため、一応バグ無しでも揃う。
  • ほろびのうた(C3h)→たいあたり(21h)→いばる(Cfh)
    • この3つは通常両立できないため、技変えをする必要がある。
  • ヅデまひでゆの(11h 12h CFh CBh 33h D5h C9h)
    • 21hが入力できないため、「デ」(12h)をswap e(CBh 33h)して作る。
    • 「てパま」(C3h 40h CFh・jp CF40)とすると、メール本文31文字目に飛べるため、「だっ」(30h DFh・jr nc,DF)で文頭に飛ばすことができる。
    • 「てぼま」(C3h 3Eh CFh・jp CF3E)とすると、メール本文29文字目に飛べるため、「そぐゃ」(BFh 28h E0h・cp a→jr z,E0)で文頭に飛ばすことができる。
    • 「てがま」(C3h 26h CFh・jp CF26)とすると、メール本文6文字目に飛べる。これはメール内でループを組む時やボックスから参照したい場合に役立つ。
D659hからの場合(図鑑モード99h)
  1. 何か×33(03h)
  2. ヨクアタール(21h)×33(21h)
  3. わざマシン17(D0h)×3(03h)
  4. はながらメール(9Eh)×37(25h)
  5. わざマシン41(E9h)
03 ; inc bc (無意味)
21 21 D0 ; ld hl,D021
03 ; inc bc(無意味)
9E ; sbc (hl)(無意味)
25 ; dec h
E9 ; jp hl

ボックスに飛ばす場合に比べて道具の種類は少なめ。わざマシン17を37個(普通に買うと111000円)用意できれば、はながらメールは省略可能。

D84Ch(わざマシン01の所持数~)

わざマシンポケットには所持数のみが記録されており、50種類分(とひでんマシン7種類分)のデータを扱うことが可能。
あらかじめ所持数を255個にしておけば、好きに個数を調整して自由にコードを書くことができる。入力不能文字が絡んでうまく書けないコードとの相性が良好。視認性は悪いが。
初代と違ってわざマシンは捨てられないことに注意。売ればいいんだけれど

  • ヅとリひでゆの(11h C4h D8h CBh 33h D5h C9h)
    • 4Chが入力不能文字のため、swap e(CBh 33h)で作る。
  • ヌオー(C3h)→やわらかいすな(4Ch)→おんがえし(D8h)
  • ほろびのうた(C3h)→ソーラービーム(4Ch)→おんがえし(D8h)
    • ラプラス(83h・add e)が初代でのみソーラービームをわざマシンで覚えるため、Lv.29でほろびのうたを自力習得すれば、バグ無しでも一応揃う。
    • ププリン(AEh・xor (hl))もほろびのうたを遺伝でき、ソーラービームをわざマシンで覚える。
D659hからの場合(図鑑モード99h)
  1. 何か×38(26h)
  2. わざマシン18(D1h)×1(01h)
  3. スペシャルアップ(35h)×7(07h)
  4. おいしいみず(2Eh)×23(17h)
  5. はながらメール(9Eh)×9(09h)
  6. わざマシン41(E9h)×任意
26 D1 ; ld h,D1
01 35 07 ; ld bc,0735
2E 17 ; ld l,17
9E ; sbc (hl)(無意味)
09 ; add hl,bc D117→D84C
E9 ; jp hl

 

DA50h(手持ち3匹目の中身~)

図鑑モード99h(D659hに飛ぶ)からわざマシン17と同じような感覚でコードを実行できるようにする。
わざマシン17を使ってバッグの中身と図鑑モードを書き換えるのがよさそう。

アイテムの並び(個数限定品無し)
  1. 何か×3(03h)
  2. ヨクアタール(21h)×80(50h)
  3. わざマシン27(DAh)×3(03h)
  4. わざマシン41(E9h)×任意
03 ; inc bc(無意味)
21 50 DA ; ld hl,DA50
03 ; inc bc (無意味)
E9 ; jp hl
ヨクアタール×80が買えそうにない場合
  1. 何か×38(26h)
  2. わざマシン27(DAh)×3(03h)
  3. はながらメール(9Eh)×46(2Eh)
  4. こおったきのみ(50h)×3(03h)
  5. わざマシン41(E9h)×任意
26 DA ; ld h,DA
03 ; inc bc(無意味)
9E ; sbc (hl)(無意味)
2E 50 ; ld l,50
03 ; inc bc (無意味)
E9 ; jp hl
メール利用による書き換え
  1. 道具預け数の変更~末尾の書き換え(43番目個数×1まで)
    がよぜひすヅゴよビ8ざみべじ
    ぶづぼざデの
    • わざマシン41(が入る予定の位置)の個数を1個にしている。
    • パソコンの預け数が43以上ある場合は何もせず終了するようになっている。
  2. 道具書き換え(40番目カビチュウ~43番目わざマシン41まで)
    がまぜびぼメダづよぞづヅカよョぺ
    ざひでてよだギグ空空れパァ
    • hlレジスタ(コピー元)にCF38h、deレジスタ(コピー先)にD695h、bcレジスタに0007hを入れてサブルーチン30D6h(固定長コピー)を実行することで、
      パソコン40番目からカビチュウ×7→ヨクアタール×80→わざマシン27×64→わざマシン41の順にする。
    • hlレジスタの流れは、CF3Bh(がまぜび)→CF3Ah(ぼメダづ)→CF39h(よぞづ)→CF38h(ざ)となっている。
    • 40番目をカビチュウ(06h)にするのは不意の個数変化予防の意味もある。
      7個にしているのはcレジスタに入れるコピー長に使いまわすため。(rlcaなのでジャンプには直接影響しない)
    • 「空空」の部分は実行中に「あ゛終」(21h 50h)に書き換えられる。(見えないけれど)
      A0hをrrca(ぼメダ)で50h、50hから2Fhを引く(よぞ)ことで21hを作っている。
      入力速度を考慮するなら「れれ」でも構わない。
    • 85hをswap eすることで58hにしている。
    • 改行の4Eh[ld c,(hl)]を利用してcレジスタの値を07hにしている。
  3. 図鑑モード切り替え(図鑑モードが02h以下なら99hに、03h以上なら00hに)
    よひびビギギひゲくだガぼハデ
    ョデの

クリスタルの場合

図鑑モード0Chの状態で図鑑を見ると、アドレスD021hに飛ぶ。
ここは最後に読んだメールの本文31文字目であり、「だっ」(jr nc,DF)で文頭まで飛ぶことができる。
これだけでも一通りのコードは実行できるのだが、バグ図鑑モードを使用していると通常の図鑑が使えなくなるデメリットもあるため、分類違いわざマシンの仕込みをしておくのもいいだろう。
わざマシン15がFA10h(金銀ではFA0Fh)、わざマシン17がFA47hに飛ぶのだが、これらはモバイル関連(バトルタワーなど)で使われていた領域で、通常プレイでは書き換わらないため、ここにジャンプ命令を仕込むことで金銀同様の任意コード実行ができる。

図鑑モード42hの状態で図鑑を見ると、アドレスDCC2hに飛ぶ。
ここは手持ち1匹目の捕まえた時間帯及びレベルが記録されており、捕まえた場所(と親の性別)のデータが続くため、この領域に18h E3hと入れることで技1に飛ばすことができる。
後は技欄にジャンプ命令を仕込めば金銀と同等の感覚で任意コード実行ができるようになる。出会った場所はバグ表記になるのでおみとおしばあさんに見せないように。

  • わざマシン15をたいせつなものポケットに加える。
    わざマシン17を加えたい場合は「ほ」を「み」に変える。
    がりぜどぷぽズぺゴべづぼ
    空空空空空空空空空空空空空だっ

飛ばす先の候補

DCD5h(手持ち2匹目の中身~)

わざマシン1つで複数のジャンプ先を管理できるようになる。(わざマシン15をたいせつなものポケットに入れるコードを含む)

  • がれぜデぼづぼわづぼてづがり
    どぷぽズぺゴべづぼほづ
    のだ

DCD7h(手持ち2匹目の技1~)

技指定は多くなるが、2匹目の種族や持ち物をフリーにできる。(わざマシン15をたいせつなものポケットに入れるコードを含む)

  • がれぜデぼづぼわづぼてづがり
    どぷぽズぺゴべづぼほづ
    のだ

DB68h(ボックス1の名前)

始点のアドレスが金銀と違うだけで内容は同じ。

  • メールから飛ぶ場合に最低限必要な文字
    • がろぜどひガ
      • 68hが入力不可能なため、34hをrlcして作る。
      • ボックス4の名前(DB83h)に飛ぶなら「てエろ」でいい。
  • ヌオー(C3h)→ピンクのリボン(68h)→しんぴのまもり(DBh)
    • 図鑑モード09hから作成する場合(2匹目のポケモン書き換え)
      がわぜにセづぼてづぜムづ
      空空空空空空空空空空空空空空
  • ほろびのうた(C3h)→かげぶんしん(68h)→しんぴのまもり(DBh)
    • 図鑑モード09hから作成する場合(2匹目のポケモン書き換え)
      がわぜにセづぼてづ空空空
      空空空空空空空空空空空空空空

D002h(最後に読んだメールの1文字目)

メールの32文字をフルに使いたい場合に重宝する。

  • わざマシン15に仕込む(わざマシン15をたいせつなものポケットに入れるコードを含む)
    • がれぜデぼよほづぼてづがり
      どぷぽズぺゴべづぼほづ
      のだ
  • わざマシン17に仕込む(わざマシン17をたいせつなものポケットに入れるコードを含む)
    • がれぜソひゼぼみづよほづぼてづ
      がりぜどぷぽズペゴべづぼみづ
  • ヌオー(C3h)→ハイパーボール(02h)→ミルクのみ(D0h)
    • 図鑑モード09hから作成する場合(2匹目のポケモン書き換え)
      がわぜよほづぼてづぜムづ
      空空空空空空空空空空空空空空
  • ほろびのうた(C3h)→からてチョップ(02h)→ミルクのみ(D0h)
    • 図鑑モード09hから作成する場合(2匹目のポケモン書き換え)
      がわぜよほづぼてづ空空空
      空空空空空空空空空空空空空空

環境構築

ソフト単体でやる場合はデータずらしで大切なものを複数入手する必要があるため、空データから取られる内部番号00hのポケモン(通称レベル0のバグポケモン)が必要になるが、
他ソフトとの通信(特にセレクトバグが使え、任意コード実行環境の導入も楽な赤緑青がおすすめ)でたいせつなものをポケモンに持たせて持ってくれば、扱いに注意が必要なバグポケモンが不要になり、セットアップは格段に楽になる。

クリスタル版の場合はバグ図鑑モードから直接最後に読んだメールに飛べるため、メールがあればいいが、金銀では他の領域を経由する必要があるため、事前にポケモンを準備しておきたい。
偶然にもその図鑑No.をジャンプ命令として使えるヌオー(の進化前であるウパー)が序盤で入手でき、持ち物と1番目の技でジャンプ先を指定できることから最初のセットアップにうってつけ。

チャート例

理解できなくても出来る任意コード実行解説【ポケモン金銀ver】 - nakayoshibaddi’s blog
金銀単体でのセットアップ法。ボックス実行用ヌオーの作成がひとまずの目標となる。
バグポケモンの生成にSRAM Glitch(セーブ中リセット)をする必要がある。
初代を絡めた金銀任意コード実行セットアップ - Dynalist
初代での任意コード実行による金銀セットアップ用ポケモンの作成例。ポケスタ金銀でも転送できるよう、金銀技を使わない構成にするなどの工夫をしている。
初代側でIDと親名を金銀側に合わせればいいため、タイムカプセルの開放は必須ではない。
初代とポケスタ金銀を使った金銀任意コード実行環境構築チャート - Dynalist
金銀・初代・ポケスタ金銀の3つを使った図鑑モード99hのセットアップ。初代での準備は任意コード実行推奨。(特にアイテムの大量回収)
ポケットモンスター 金・銀 バイナリエディタ - flag3
主人公の名前指定(「えてびま」)はあるが、ヌオーが不要になるセットアップ。虫取りバグを使用する(ヒワダジムまでは攻略する)ため、そこまでのポケモンの入手に制限がかかる。
図鑑モードを11hにするところまでできれば一応各種コードの実行はできるが、「えてびま」はあくまでバイナリエディタ導入用に最適化された名前(aレジスタをFBhにしつつメール26文字目に飛ぶ)であることに注意。(「てパま」なら31文字目からの実行が可能)
ポケモン金銀 バイナリエディタ起動 SRAM Glitch チャート - flag3※リンク切れ中
こちらはキキョウジム攻略までで組めるセットアップ。主人公の名前指定あり(てパま)。バグポケモンの作成及び孵化のためにシビアなセーブ中リセットを2回使用する場面がある。
【クリスタル版】誰でも簡単!任意コード実行環境構築チャート解説【ポケモン第二世代 バグ技 任意コード実行】 - YouTube
クリスタルの通信ありセットアップ。図鑑モード0Chを目指す。
最速でライバル命名後からできるが、メールを購入できるようになるキキョウシティまでは行った方がいいだろう。
バグポケモンさえ作れれば一応単体でもできないことはない。
ポケモンクリスタル 0x1500 制御コードによる任意コード実行 - flag3※リンク切れ中
クリスタル単体でのセットアップ。名前だけバグらせればいいので、バグポケモンを作るよりはリセットの猶予が長いのがポイント。
ポケットモンスター クリスタル バイナリエディタ - flag3
ヨシノシティ到達までで組めるセットアップ(ボールポケット破壊無し)。図鑑モードを0Chに変えるところまでやればメール実行はできる。
はながらメールは0x1500実行で生成する。

ボールポケット破壊

たいせつポケットのアイテムは個数が管理されていない。通常は同種のアイテムを複数入手することが無いからである。
しかし、各種バグを利用して大切なものをポケモンに持たせた場合、預かった際に同種のアイテムが複数存在してしまう場合がある。
この時、同種アイテムのある所にアイテムを移動しようとすると個数まとめ処理が発生し、直後のアイテム(やめるを含む)を個数として処理してしまうため、以降のデータにずれが生じることになる。
原理そのものは初代のバッジおじさんバグに近い。
たいせつポケットの下にはボールポケットがあり、末尾にある大切なものの個数まとめ処理が発生すると、ボールポケットのやめるまでデータをずらすことになる関係でボールと個数の関係が1バイトずれてしまう。
これは道具欄共通だが1番目のアイテムの上にあるのは所持数のため、ガンテツボール(というかモンスター~マスターは数値が小さすぎる)を1番目に置いておくとボールポケットの所持数が異常になり、やめるの下まで見ることができるようになってしまう。
さらに、やめるが末尾にあったアイテムの個数に移動する関係で、255個のアイテムを手持ちに入れることができる。このアイテムの個数を調整してたいせつなものの個数まとめ処理を再び発生させると、ボールポケットに本来入らないアイテムも自由に加えることができる。(パソコンのアイテムが犠牲になる可能性もあるが)

たいせつなものを複数入手する方法

移動にも使え、コガネシティまで到着すれば無条件で手に入り、内部番号的にも生成しやすいじてんしゃ(07h)が特におすすめ。
他にはマダツボミの内部番号からふしぎなタマゴ(45h)を入手出来たりもする。

  • 初代の23番目バグ等で持たせる。(ポイントアップ無し、PP7の技と入れ替える)
    • ポケスタ金銀だとタイムカプセルの開放に関係なく初代との通信交換が可能。
      さらに、ポケモンのIDと親名を受取先と同じに調整しておけばボックス経由で連れてくることも可能。
  • ほのおのパンチ(07h)をバグポケモンや技入れ替えバグで持ち物に持ってくる。
    • バグポケをボックスコピーの応用(SRAMグリッチ)や虫取りバグで作ることができればソフト単体でもできるのが特徴。
      じてんしゃを発掘したい場合は以下の通り。(IDや努力値・個体値にFFhが含まれていると失敗する)
      1. 手持ち6匹を、バグポケ→技2が「ほのおのパンチ」のポケモン→穴埋め4匹の順にし、ボックスに2匹以上ポケモンを用意しておく。
      2. ボックス整理でボックスから手持ちの先頭に適当なポケモンを持っていくことで手持ちを7匹にする。
        • これの影響でバグポケの中身が00h→FFhになる。
      3. パソコンを閉じ、「ポケモン」メニューから手持ちの2匹目(バグポケ)と5匹目(穴埋め2匹目)を入れ替える。
        • バグポケの中身FFhによってその下にいるポケモンや親名・ニックネームの浸食を防ぐ。
      4. 手持ち2匹を上からボックスに預ける。これでバグポケの上にいるポケモンの情報が2バイトずれる。
      5. ボックスから何かポケモンを引き出す。これで手持ちのデータがずれなくなる。
      6. 「ほのおのパンチ」を覚えていたポケモンが「じてんしゃ」を持っているので預かる。
  • 任意コード実行が可能な他のROMから通信で持ってくる。(1個目だけならポケスタ金銀のボックスにいるポケモンから預かることで手に入れることも可能)
    • 技なども送信元で調整しておけばセットアップはぐっと簡単になる。
      ポケモンの技だけでなく、努力値周りにもコードを書くことは可能。
    • ポケスタ金銀の一覧機能にて64のボックスにいるポケモンから道具を預かる際、移動先をバッグとパソコンから選択できるため、
      バッグとパソコンにそれぞれ預かってGBで引き出しても2個までは重複できる。

手順

  1. パソコンに預けてある大切なものがある場合はすべて引き出す。
    • たいせつポケットに見えないFFhがあってはいけないため。
  2. ボールポケットの中身を2種類にする。(3種以上ある場合は預ける)
    • 極力3種以上持った状態ではじめ、見えないFFhをいくつか用意しておいた方がパソコンへの被害を抑えられる?

以後分岐

わざマシン17を出現させる場合(主に金銀向け)
  1. ボールポケットをモンスターボール×任意(2個以上)→適当なボール×1の順にする。
    • この時、モンスターボールの数を32個にしておくと、1回目の個数まとめ処理でふしぎなアメが発生する。
  2. 同名の大切なものを3個用意し、1つをたいせつなものポケットの末尾に設置する。
  3. 末尾よりも上にある同名の大切なもの(2個目)を、末尾に置いた大切なもののところに移動する。これでボールポケットの中身が1バイトずれる。
    • ボールポケットに出現したふしぎなアメは使っても個数が減らない。(どうぐポケットにふしぎなアメがある場合はそちらが減る)
      単体セットアップに使うヌオーは、ウパーをこれでLv.20まで上げれば進化できる。
  4. ボールポケットに出現したマスターボール×255(やめるがずれた関係でこうなる)を47個捨てる。
  5. 末尾よりも上にある同名の大切なもの(3個目)を、末尾に置いた大切なもののところに移動する。これでボールポケットの中身がさらに1バイトずれる。

これにより、ボールポケットのマスターボールがあった場所にわざマシン17が出現する。(最初のモンスターボールが2個以上ないと選択できない)
このままではボールポケットやたいせつポケットが破損したままなので、わざマシン17を使った任意コード実行で修正しよう。

図鑑モードを弄る場合
  1. ボールポケットをガンテツボール×任意→適当なボール×5個以下(2または4を推奨)にする。
    • 5個以下である必要があるのはモンスターボールの内部番号が05hであるため。3個にすると1回目の個数まとめ処理でひかりのこなになってしまい、個数調整ができなくなる。
    • 2個または4個を推奨するのは奇数だとラジオのチャンネルを正常に合わせられなくなるため。1個や5個でやった場合でも後から修正すること自体は可能だが。
    • ガンテツボールにする理由は、通常のボールよりも内部番号がはるかに大きいため。32個にすればふしぎなアメになるが、集めるのはなかなか大変。
  2. パソコンの1番目に適当なメール等を(そのアイテムを除いた)預け総数分入れておく。(しないと後で修正する必要が出てくる)
    • 大事なアイテムがある場合は、1番目以外に退避させる。
  3. 同名の大切なものを2個用意し、1つをたいせつポケットの末尾に設置する。
  4. 末尾よりも上にある同名の大切なもの(2個目)を、末尾に置いた大切なもののところに移動する。これでボールポケットの中身が1バイトずれる。
  5. 大切なものを便利ボタンに登録する。
  6. ボールポケット2番目の個数が255個になっているので、変更したい図鑑モードになるよう捨てる。
    • 金銀の場合は17個、クリスタルの場合は12個にするのがおすすめ。個数の調整は残す個数+1回下キーを押せばいい。
  7. ボールポケットがやめるの下に行けるようになっているため、個数を調整したアイテムを65番目まで移動する。
    • 登録したアイテムがボールポケットの67番目に出現するため、これを目印にするのがいい。
    • ちなみに65番目のアイテムの種類はラジオのチューニング。
      ゲーム中では偶数単位で調整されるため、持ってくるのをハイパーボール(02h)かスーパーボール(04h)にしておくのが本来好ましい。

これで図鑑モードが切り替わるため、準備をして図鑑を見ることで任意コード実行が可能になる。
一連の手順の副作用でパソコンの道具やポケギアがバグる(金銀クリスタルのアイテム整理は「移動」のために間のアイテムを押し上げてしまう)ため、バッグと合わせて修正コードの実行をお勧めする。

修正コード例

金銀(わざマシン17生成ルート)

金銀単体でセットアップを行う場合、

  • じてんしゃ複数入手(データずらし)のために使ったバグポケモン
  • やめるが失われたたいせつポケット
  • 所持数や所持アイテムがおかしくなったボールポケット

が存在するため、これらを修復しつつたいせつポケットにわざマシン17を追加するコードを作るのがいいだろう。

ボックス版

下準備として、

  • ヌオーにわざマシン02を持たせ、おんがえしを技の一番上に置く。
  • 捕獲したてで努力値を振っていないアンノーンLv.5を手持ちの2番目に、ヌオーを3番目に置く。
    • アンノーンを開放したくない場合は、下準備中に生成できるふしぎなアメで捕獲したてのポッポをLv.6にするのがおすすめ。
      (第二世代にLv.6のポッポは野生出現しない)
  • 手持ち6匹のうち、バグポケモン(ずらしの過程でFFhになっていることを前提としている)を手持ちの6番目に置く。

を行っておく。ボックスの名前は以下のようにしておく。

    • ボックス1の名前から来た場合の事故防止用。
  1. そそそそそ
    • わざマシン02からの場合は6文字目からスタート。
    • 終端文字を利用してeレジスタに50hを代入している。
  2. れドにいデがゆ
    • ヌオーの持ち物をにじいろのはねに変更。これで以降はボックス1の1文字目からコードを実行可能になる。
    • 50hからinc deで51hを作り、手持ち3匹目の持ち物(DA51h)を参照している。
    • 「ョにい」は「ぼい」でもいいが、結局文字が余る。
  3. ヅソるひでよ
    • 手持ちを5匹にすることでバグポケモンを消す。バグポケモンを使っていない場合は不要。
    • にじいろのはねで使ったB2hからADhを引くことで05hを作っている。「ぼガ」でも問題はない。
  4. ぜゅひゼべづ
    • ボールポケットを空にする。パソコンに預けてあったボールは後で引き出す。
    • 「ゅ」(E1h)をrrc lすることでF0hを作り、ボールポケット1番目(D5F0h)を参照している。
  5. ぜやどぷぽぺズ
    • inc(hl)でたいせつなものポケット所持数を増やし、bレジスタ経由でcレジスタに所持数を格納。
    • あらかじめ00hにしておいたaレジスタを使ってbレジスタを00hにし、inc cでたいせつなものポケットの末尾を指定可能にしておく。
  6. ゴべづにむづ
    • add hl,bcを利用して大切なものポケットの末尾に移動し、やめるを設置、FFh+D2hでD1hを作ってわざマシン17を生成。「ぼみ」でも問題はない。
    • 00hからdec aでFFhを作っている。

ここまでの準備が終わったら、ボールポケットのわざマシン17を使用。各種修正が行われる。

メール版

メール実行の場合、ヌオーの持ち物変更は不要のため、メール1通でもなんとか修正コードを書ききることができる。

下準備として、

  • ヌオーにヨクアタールを持たせ、いばるを技の一番上に置く。
  • 捕獲したてで努力値を振っていないアンノーンLv.5を手持ちの2番目に、ヌオーを3番目に置く。
  • 手持ち6匹のうち、バグポケモン(ずらしの過程でFFhになっていることを前提としている)を手持ちの6番目に置く。

を行い、以下のメールを(ヌオー以外の)適当なポケモンに持たせ、読んでからわざマシン17を使用する。

がゆぜひゼべづぜやどぺべ
ズゴづぼみづ
ヅソるひでぼガデ

「ぺ」(47h)の後に「べ」(3Dh)が続くことに注意。

ボールポケットを空にし、たいせつポケットの末尾にわざマシン17を追加、最後に手持ちを5匹にしてバグポケモンを消去している。
改行がld c,(hl)であることを利用することでbレジスタの経由が不要になるため、ボックスに比べてコード長を少し削れている。

パソコンの預け数は「がよぜゴ」(ld h,D6→ld l,09)または「ヅゴよ」(ld de,D609)で指定できるので、状況に合わせて修正コードを用意したい。
一応、空にするだけなら、

がよぜザべづぶづの

でいい。


クリスタル(図鑑モード0Chルート)

図鑑モードを弄った際、

  • たいせつポケットの「やめる」が消える
  • ポケギアが消失
  • パソコンの預け数が先頭のアイテムの個数に変わる(事前準備がしっかりしていれば1番目のアイテムが消えるだけで済む)
  • ボールポケットの所持数や所持アイテムが壊れる

といった副作用があるため、この辺りを修正していく。ジャンプ先の都合でメールの文末に「だっ」が必要なことに注意。

がりぜひョヅぽるボデべづぶづぜョ
ズゴべづボぼダデ

ボールポケットを空にし、たいせつポケットの末尾にやめるを追加ポケギアを復帰ついでに全機能開放・ラジオチューニング初期化の3つの動作をする。

パソコンの道具に関しては元のアイテムでも変わるため、コードを別に分ける。

ヅ?りブぼ※ひそデの

※の部分には、変更したい預け数に応じて以下の値を入れる。

対応表(縦が10の位、横が1の位)
  0 1 2 3 4 5 6 7 8 9
00
10
20
30
40
50

コード例

メール・ボックス共に記述の変化がない場合は区別しない。


図鑑モード切り替え(クリスタル専用)

2024/8/15追記:コードの変更により書き換え箇所が少なくなりました!

メールの編集はセーブデータにかかわる部分のため危険が伴います。入力間違いには十分注意してください。

0x1500制御コードによる任意コード実行を利用することで、読むだけで図鑑モードを切り替えるメールを作ることができる。
具体的には、

15 0A C0 00 11 4C D9 1A 06 0C 90 28 01 78 12 E1 C9
50 50 50 50 50 50 50 50 50 50 50 50 50 50 C9 50

(メインのコード部)ld de,D94C→ld a,(de)→ld b,0C→sub b→jr z,01ld (hl),b→ld (de),a→pop hl→ret

といった感じのコードを組めばいいのだが、これでは入力不能文字が多すぎてバイナリエディタが半ば前提になるので、以下の3ステップで作るのがいいだろう。

  1. 以下のメールを手持ちの5匹目に持たせる。(これをベースとする)
    ザたヅとるひでビよズぐガぼズ
    空空デゅのののののののののの
  2. 以下のメールを読んでメール実行。(差出人&4文字目書き換え、青字の部分はお好みで変えてもいい)
    「ゾガ」の部分は「ガ」の濁点を忘れるとバックアップのメールデータまで破壊してしまう点に注意。
    へマぞンルがみぜボぶぺヅのル
    ゾガへ/ぞてずきりかえ
  3. 差出人の変化と4文字目の「?」を確認したら、以下のコードを呼んでメール実行。(1文字目書き換え)
    へマぞよェゥロルてャぞ空空空空
    空空空空空空空空空空空空空空

以上の手順を踏むことで、5匹目のポケモンに持たせたメールの文面が

15 0A C0 00 11 C4 D9 CB 33 1A D6 0C 28 05 3E 0C 4E
7F 7F 12 E1 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9 C9

となり、読むことで以下の効果が得られるようになる。(31文字目が「の」なので、これ自体でメール実行は行われない)

  • 図鑑モードが0Chでなければ0Ch(D021hを実行)にし、
  • ずかんモードが0Chなら00h(あたらしいずかんモード)にする

これをメールボックスに入れておけば、好きな時に図鑑モード0Chを使うことができる。
メールの作成自体は金銀(というか他ROM)で行ってもよく、通信でクリスタルに送ることでお手軽に任意コード実行環境を整えることもできる。
(金銀用のコードは割愛)


メール差出人変更

メールの編集はセーブデータにかかわる部分のため危険が伴います。入力間違いには十分注意してください。

手持ち1匹目に持たせたメールの差出人を特定の場所に書いたもので書き換えるコード。
メールボックスでは差出人の名前が見出しとして表示されるため、わかりやすい名前を付けておくとコードの管理が楽になる。
メールの差出人には終端文字が入らないため、コピーするのは5文字までになる。

ボックス1の名前

金銀(メール)
へマ空空空ヅデルひで
ぺゾガへよだ
クリスタル(メール)
へマみひゼぶヅデルひで
ぺゾガへ/ぞ空空空空空だっ
; 金銀のコードで説明
; ョへマ
AF ; xor a aを00hに。
CD 9D 30 ; call 309D SRAM0オープン クリスタルは2F
; が
26 D8 ; ld h,D8 クリスタルはDB
2E B2; ld l,B2 クリスタルはD0
; ひゼぶ(クリスタルのみ、金銀はすべて空白)
CB 0D ; rrc l D0→68 金銀では7F 7F(ld a,a×2)で何もしない。
3C ; inc a 00→01 金銀では7Fで00hのまま。
; 金銀はD8B2h、クリスタルはDB68hでボックス1の名前1文字目(コピー元)を指す。
; ヅデルひで
11 12 A6 ; ld de,A612
CB 33 ; swap e 12→21
; A621hで手持ち1匹目のメール差出人(コピー先)を指す。
4E ; ld c,(hl) (無意味)
; ぺゾガ
47 ; ld b,a bを00h(クリスタルは01h)に。
0E 05 ; ld c,05
; 0005hでコピー長5バイト(5文字)を指す。
; へよだてャ
CD D6 30 ; call 30D6 クリスタルはF3 2F
; 固定長コピー(コピー元hl、コピー先de、コピー長bc)
; クリスタルは本来2FF2hだが、inc bが飛ばされるだけなので2FF3hでも代用は可能。
CD AD 30 ; call 30AD SRAMクローズ クリスタルは2F
; C9(ret)は飛んだ先のものでまかなう。

手持ち6匹目のニックネーム

金銀(メール)
へマヨひゼヅデルひで
ぺゾガへよだ
クリスタル(メール)
へマ空空ヅデルひで
ぺゾガへ/ぞ空空空空空だっ
; 金銀のコードで説明
; ョへマ
AF ; xor a aを00hに。
CD 9D 30 ; call 309D SRAM0オープン クリスタルは2F
; が
26 DB ; ld h,DB クリスタルはDE
2E A4; ld l,A4 クリスタルは07
; ひゼ(金銀のみ、クリスタルはすべて空白)
CB 0D ; rrc l A4→52 クリスタルでは7F(ld a,a)で何もしない。
; ぶ(クリスタルのみ、金銀は空白)
3C ; inc a 00→01 金銀では7Fで00hのまま。
; 金銀はDB52h、クリスタルはDE07hで手持ち6匹目のニックネーム1文字目(コピー元)を指す。
; ヅデルひで
11 12 A6 ; ld de,A612
CB 33 ; swap e 12→21
; A621hで手持ち1匹目のメール差出人(コピー先)を指す。
4E ; ld c,(hl) (無意味)
; ぺゾガ
47 ; ld b,a bを00h(クリスタルは01h)に。
0E 05 ; ld c,05
; 0005hでコピー長5バイト(5文字)を指す。
; へよだてャ
CD D6 30 ; call 30D6 クリスタルはF3 2F
; 固定長コピー(コピー元hl、コピー先de、コピー長bc)
; クリスタルは本来2FF2hだが、inc bが飛ばされるだけなので2FF3hでも代用は可能。
CD AD 30 ; call 30AD SRAMクローズ クリスタルは2F
; C9(ret)は飛んだ先のものでまかなう。

入力不能文字を入れたい場合は別途他のコードで書き換えておくこと。


ポケギア機能全開放

図鑑モードを弄る過程で壊れてしまうポケギアの修復ついでに。
8Fhにすることで拡張カード含む全機能を開放しているが、80hにすると電話すらないまっさらなポケギアを拝むこともできる。

  • 金銀(D66Fhを8Fhに)
    • 空よひユぼタデの
      • 6Fhが入力できないため、空白(7Fh)からres 4,eで作る。
  • クリスタル(D94Ahを8Fhに)
    • ぽるボボぼタデの
      • 4Ahが入力できないため、「ぽ」(48h)からinc e×2で作る。
; 金銀(ヅ よひユ)
11 7F D6 ; ld de,D67F
CB A3 ; res 4,e 7F→6F
; クリスタル(ヅぽるボボ)
11 48 D9 ; ld de,D948
1C ; inc e 48→49
iC ; inc e 47→4A
; 共通(ぼタデの)
3E 8F ; ld a,8F
12 ; ld (de),a
C9 ; ret

バッジ全取得

ジョウト及びカントーのバッジ16個をすべて入手する。
ライジングバッジを持った状態でウツギ博士に話しかけるとマスターボールが貰える。

  • 金銀(D56FhとD570hをFFhに)
    • べづづの
      • 70hが入力できないため、「ゃ」(E0h)からrrc lで作る。
  • クリスタル(D84AhとD84BhをFFhに)
    • べづづの
      • 4Bhが入力できないため、「ヌ」(96h)からrrc lで作る。
; 金銀(がゆぜゃひゼ)
26 D5 ; ld h,D5
2E E0 ; ld l,E0
CB 0D ; rrc l E0→70
; クリスタル(がリぜヌひゼ)
26 D8 ; ld h,D8
2E 96 ; ld l,96
CB 0D ; rrc l 96→4B
; 共通(ョべづづの)
AF ; xor a
3D ; dec a 00→FF
32 ; ldd (hl),a
32 ; ldd (hl),a
C9 ; ret

そらをとぶフラグ全開放

バッジ入手と合わせることで、そらをとぶですべての場所に行けるようになる。
なお、カントーに飛ぶにはセキエイへ飛べるようになる必要がある。

  • 金銀(D9B4h~D9B7hをFFhに)
    • べづづづづの
  • クリスタル(DC6Bh~DC6EhをFFhに)
    • わひゼべづづづづの
      • 6Ehが入力できないため、「わ」(DCh)からrrc lで作る。
; 金銀(がるぜき)
26 D9 ; ld h,D9
2E B4 ; ld l,B4
; クリスタル(がわぜわひゼ)
26 DC ; ld h,DC
2E DC ; ld l,DC
CB 0D ; rrc l DC→6E
; 共通(ョべづづづづの)
AF ; xor a
3D ; dec a 00→FF
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a
32 ; ldd (hl),a

C9 ; ret

メッセージ送り最速

メッセージが一瞬で送られるようになる。
初代と違い、設定を開いただけでは元に戻らない。(見た目は「ふつう」と表示される)

  • 金銀
    • メール
      • ンむビ?2デの
    • ボックス
      1. ンむプゾタひぢ
      2. ビモデの
  • クリスタル
    • メール
      • たまビ?2デの
    • ボックス
      1. たまプゾタひぢ
      2. ビモデの

バグ図鑑モードでの実行では図鑑を閉じるときに元の設定に戻ってしまうため、スクリプトから間接的に実行する。
スクリプト実行の性質上、効果が適用されるのはメニューを閉じた後であることに注意。特にメール実行の場合、実行後はすぐにメニューを閉じること

  • 金銀
    • メール
      • ぼアゃカでゾヂづま
        ンむビ?2デのののののののだっ
    • ボックス
      1. ぼアゃ
      2. カでゾヂとリ
      3. ンむプゾタひぢ
      4. ビモデの
  • クリスタル
    • メール
      • ぼアゃハぢゾヂドみ
        たまビ?2デのののののののだっ
    • ボックス
      1. ォひゼぼア
      2. ハぢ
      3. ゾヂエろ
      4. たまプゾタひぢ
      5. ビモデの
    • ボックス別解(「てエろ」ルートとも)
      1. ぼアゃ
      2. ハぢゾヂニろ
      3. たまプゾタひぢ
      4. ビモデの

殿堂入り

ポケスタ金銀で倍速を使用可能にするには殿堂入りが必要なため、これでさっさと解禁してしまおう。
殿堂入りの仕様上自動セーブが入り、再開時は自宅前から始まるので注意。
なお、これだけではふねのチケットイベントは発生しない。

※クリスタルのスクリプト終了処理も「チ」(90h)でよかったみたいです。

  • 金銀(メール)※スクリプト9Fh実行
    • ぼアヤてカでム
      • コード実行後、メニューを閉じると殿堂入り画面に入る。
      • 殿堂入りではエンディング後タイトル画面に戻るため、「チ」(90h、スクリプト終了)が無くても動かないことはない。
  • 金銀(殿堂入りプログラム25h:7A51hを直接実行)
    • ひどぜヤひゼぼがべまの
      • 7Ah、51hともに入力できないため、「レ」(A7h)からswap hで7Ahを、「ヤ」(A2h)からrrc lで51hを作っている。
      • 25hが入力できないため、「が」(26h)からdec aで作る。
      • rst 08を使うと、「aレジスタに入れたバンク番号」の「hlレジスタに入れたアドレス」のサブルーチンを実行しつつバンク戻しまでやってくれる。(多分カラーパレットも退避している)
      • バグ図鑑モードでの実行ではエンディング終了時にAを押すとメニューに戻り、メニューを閉じてからリセットされる。
  • クリスタル(メール)※スクリプトA0実行
    • ぼアメてハぢメ
      • クリスタルではガンテツにぼんぐりを複数渡す処理が追加された関係上、殿堂入りのスクリプト番号が1つずれている。
      • 「ョ」は必要ないかも?(念のためxor aをしているだけ)
  • クリスタル(殿堂入りプログラム25h:7BB2hを直接実行)
    • ひどぜぼがべまの
      • 7Bhが入力できないため、「き」(B7h)からswap hで作る。

図鑑完成

ポケスタ金銀で他人のポケモンを引き出せる条件を満たすついでに埋めてしまおうというやつ。
64バイトものデータを書き換えることになるため、条件付き絶対ジャンプを使ったループを使用している。
最後に読んだメールのアドレスを前提にしているため、メールで実行すること。
アンノーンずかんには手を出していない。

  • 金銀(メール)
    • べギパガづガごまぼグ
      きろネろ
      • 3Fhが入力できないため、「パ」(40h)からdec bで作る。
      • 20h(jr nz,xx)が入力できないため、「つごま」(C2h 2Ah CCFh・jp nz,CF2A)で代用している。
        ここは最後に読んだメールの10文字目となる。
  • クリスタル(メール)
    • ひすべギパガづガゼみ
      ぼグヅにんひでデひンデ
      • 6Bhが入力できないため、「ェ」(EBh)からres 7,lで作る。
      • 「つゼみ」(C2h 0Dh D0h・jp nz,D00D)は最後に読んだメールの12文字目に飛んでいる。
      • 6Ch、4Chともに入力できないため、「ゥ」(AEh)は使わない。
        ループ終了時にlレジスタは2Chになっているのだが、set 6,lは入力できないためdeレジスタを使用することにする。
        「に」(C6h)からswap eで6Chを作り、res 5,eで4Chを作る。

1マス壁抜け

周囲のマスを歩行可能にすることで、壁を無視して歩くことができる。(NPCは通り抜けられない)
壁判定は1マス歩くとすぐに書き換わってしまうため、抜けられる壁は1マスのみとなる。

2024/12/8追記:金銀用のコードで指定するアドレスが1バイトずれていた(下方向に抜けられなかった)ので修正しました。

  • 金銀(CE97h~CE9Ahを00hに)
    • ョづづづづの
  • 金銀(直接入力版、9バイト)
    • 21 97 CE AF 22 22 22 22 C9
  • クリスタル(D13Eh~D141hを00hに)
    • ョづづづづの
  • クリスタル(直接入力版、9バイト)
    • 21 3E D1 AF 22 22 22 22 C9 

わざマシンコーディングセットアップ

わざマシン50の個数を201個にし、1~49は255個にする。
わざマシンの個数を利用したコーディングの補助に。
「ぢ」は絶対打ち間違えないように!

  • 金銀(メール)
    • ぼのづぼぢぺぼ9づガ空空
      ずま
  • クリスタル(メール)
    • 空ざざぼのづぼぢぺぼ9づガ
      ヂみ
      • 7Dhが入力できないため、空白(7Fh)からdec hl×2で作る。
         

時計再設定

引用:ポケモン 第二世代 時間再設定 (任意コード実行) - flag3※リンク切れ中
参考:ポケットモンスター 金・銀・クリスタル バイナリエディタ 使い方 - flag3 (の「時間の変更」の項目)

金銀クリスタルでは長期間プレイしないでいると電池節約のため内部時計を止めるようになっており、その状態でゲームを再開しようとすると、曜日と時刻の再設定が必要になる。
このコードは、その時刻再設定画面を直接呼び出すものになる。(金銀・クリスタル共に08h:4027hから時刻再設定画面を呼び出せる)海外版では隠しコマンドで呼び出せるようになっているらしい
日数を経過させたい場合は午後11時59分に設定してから1分待つこと。
「へロど」および「へなづ」はバグ図鑑モード用の記述(これをしないと画面が真っ白になる)なので、分類違いわざマシンを使う場合は必要ない。

  • 金銀(メール)
    • ロどぼゲがパぜぎまの
  • クリスタル(メール)
    • なづぼゲがパぜぎまの

BGM変更

2つのプロセスを紹介。
マップ移動の他、戦闘やラジオなどのBGMを切り替える処理が挟まった後は元のBGMに戻る。
BGMの数値指定はBGMリストのページを参照。

スクリプト80h使用

コード実行後、メニューを閉じるとBGMが変わる。
スクリプト80hはBGMをフェードアウトさせて次のBGMを流す処理で、流すBGMの番号とフェードアウトの時間を指定する。
緑字の部分でBGMを指定。ここではしぜんこうえん(23h)を例にしている。

金銀(メール)
ばざざよを空づぼア
カで空アアアガチ
クリスタル(メール)
よを空づぼアメ空空
ハぢ空アアアガチ
; 金銀(がまぜばざざ)
26 CF ; ld h,D0
2E 3A ; ld l,3A
2B ; dec hl 3A→39
2B ; dec hl 39→38
; クリスタル(がみぜバ)
26 D0 ; ld h,D0
2E 19 ; ld l,19
; 共通、数値指定(ョづよを空づぼア)
AF ; xor a aを00hに。
32 ; ldd (hl),a 3つめの「ア」(80h)を00hに。
D6 DD ; sub a,DD 00→23
7F ; ld a,a 数値調整用スペース
32 ; ldd (hl),a 2つめの「ア」(80h)を23hに。
3E 80 ; ld a,80
; 金銀(ゃヤてカで)
E0 A2 ; ld (FF00+A2),a スクリプト実行予約
4E ; ld c,(hl)(無意味) この時点のhlはCF36h
C3 85 33 ; jp 3385 スクリプト実行準備
; クリスタル(ゃメてハぢ)
E0 A0 ; ld (FF00+A0),a スクリプト実行予約
7F ; ld a,a(無意味)
7F ; ld a,a(無意味)
4E ; ld c,(hl)(無意味) この時点のhlはD017h
C3 99 31 ; jp 3199
; 実行スクリプト(ア※[00h]ガチ)
; (金銀CF36h~、クリスタルD017h~)
80 ; musicfadeout
23 ; music
00 05 ; fadetime
90 ; end
金銀(ボックス)※ボックス2の名前でBGMの数値を指定
  1. づぐザ
  2. よをの
  3. さリづぼア
  4. づじてカで
  5. ガチ
クリスタル(ボックス)※ボックス5の名前でBGMの数値を指定
  1. づぐザ
  2. よをの
  3. スろづぼア
  4. づじてハぢ
  5. ガチ
; 金銀のコードで説明
; がョづぐザ
26 D8 ; ld h,D8 クリスタルはDB
2E D5 ; ld l,D5 クリスタルはA6
AF ; xor a aを00に
32 ; ldd (hl),a D8D5(クリスタルDBA6)を00に
28 0A ; jr z,0A D8C4(ボックス3の名前)へ クリスタルはDB95(ボックス6の名前)
; よをの(数値調整部)
D8BB:
; クリスタルDB8C:
D6 DD ; sub a,DD 00→23
C9 ; ret サブルーチン終了
; へさリづぼアゃ
CD BB D8 ; call D8BB クリスタルは8C DB
32 ; ldd (hl),a D8D4(クリスタルDBA5)を調整した値に
3E 80 ; ld a,80
E0 A2 ; ld (FF00+A2),a スクリプト実行予約 クリスタルはA0
50 ; ld d,b(無意味)
; づじてカで
32 ; ldd (hl),a D8D3(クリスタルDBA4)を80に
2C ; inc c D2→D3でhlをD8D3に クリスタルはA3→A4でhlをDBA4に
C3 85 33 ; jp 3385 スクリプト実行準備 クリスタルは99 31
50 ; 以降の文字を表示しないための蓋
; 以下の文字は実行時に書き換え
D8D3:
; クリスタルDBA4:
(80) ; musicfadeout
(23) ; music 例はしぜんこうえん
(00) ; ここは00にしないといけないっぽい
; ガチ
D8D6:
; クリスタルDBA7:
05 ; 00と合わせてfadetime
90 ; end スクリプト終了

次に流すBGMを直接書き換え

スクリプト80hで起こる結果を直接メモリに書き込んでBGMを切り替える。
あらかじめボールポケットに2種以上のボールを用意しておくこと。
ボールポケット2番目の個数が92(102)でない場合は1・2番目の個数を92(102)にし、
92(102)の場合はボールポケット1番目の個数に応じたBGMを流す。

金銀(メール)
せづざはだまづのば
ぼガ
クリスタル(メール)
せづざはヅみづのば
ぼガ
; 金銀のコードで説明
; が
26 D5 ; ld h,D5 クリスタルはD8
2E F3 ; ld l,F3 クリスタルはCE
; ョよせづざ
AF ; xor a aを00hに。
D6 A4; sub a,A4 00→5C クリスタルは9Aで00→66
BE ; cp (hl) ボールポケット2番目個数が92(102)かチェック
CA 30 CF ; jp z,CF30  クリスタルは11 D0
; づの ボールポケット2番目個数が92(102)だったら飛ばす箇所
32 ; ldd (hl),a ボールポケット1番目個数を92(102)に
C9 ; ret 終了
; ばゥワ
CF30:
; クリスタルD011:
3A ; ldd a,(hl) ボールポケット1番目個数を取得
4E ; ld c,(hl)(無意味)
EA A9 C1 ; ld (C1A9),a BGM番号書き込み クリスタルはC2
; ぼガゥレ
3E 05 ; ld a,05
EA A7 C1 ; ld (C1A7),a クリスタルはC2
C9 ; ret コード終了

ボックス9の名前で制御するバージョンも。ボックス9には「の」を入れること。(例:「よをの」でしぜんこうえん)

金銀(メール)
ぜワへ4リくみづざど
クリスタル(メール)
ぜワへくみづざど
; 金銀のコードで説明
; がぜワ
26 C1 ; ld h,C1 クリスタルはC2
2E A9 ; ld l.A9
; へ4リ
CD FA D8 ; call D8FA ボックス9の名前へ(クリスタルはB0 DB)
; 金銀(ギ)
06 D5 ; ld b,D5
CB 30 ; swap b D5→5D
; クリスタル(ギ)
06 CE ; ld b,CE
CB 08 ; rrc b CE→67
; くみづざどの
B8 ; cp b ボックス9で作ってきた値を5Dh(67h)と比較
D0 ; ret nc 正常なBGM番号でなければ中止
32 ; ldd (hl),a C1A9(C2A9)にBGM番号を代入
2B ; dec hl C1A8→C1A7(C2A8→C2A7)
34 ; inc (hl) C1A7(C2A7)をインクリメント(00→01)。
4E ; ld c,(hl)(無意味)
C9 ; ret コード終了

その他参考資料

タグ:

+ タグ編集
  • タグ:
最終更新:2024年12月08日 13:16