第二世代で主に使われる任意コード実行の方法は、バグ図鑑モードと分類違いわざマシンの2つとなる。(他には未定義マップのマップスクリプトを悪用する方法や、海外初期版限定でコインケースを使用する方法もある)
任意コード実行環境の構築には、たいせつなものポケットからボールポケットを破壊することで図鑑モードを弄ったりわざマシンを生成したりする方法が確立されている。
コードを書き込む先として使われるのは、主にボックスの名前やメールとなる。どちらの方法にも一長一短あるので、両方の方法で起動できる環境を作るのがいいだろう。
初代と違って現在ボックスですらsRAM内(セーブデータ内であり、アクセスには一定の手順が必要)に格納されているため、ニックネームでの実行は主流ではない。
非常に長いコードをボックス内のポケモンのデータに格納しておき、必要に応じてwRAM内の一時領域にコピーして運用することがある程度。
なお、金銀とクリスタルではアドレスの参照先が微妙に違ってくるため、同じことをするにもコードを変える必要がある点に注意。
通常、図鑑モードはしんがたずかんモード(00h)、ふるいずかんモード(01h)、アイウエオモード(02h)の3つ存在するのだが、これが03h以降になると、ジャンプ先のアドレスをしんがたずかんモードのプログラム本体以降から取得してしまう。
さらに、図鑑モードはパソコンの道具のデータの下に格納されており、たいせつなものポケットの個数まとめ処理を悪用するとボールポケットから直接弄ることが可能になってしまう。
図鑑モード(金銀D671h・クリスタルD94Ch)はボールポケット65番目の個数になっているため、この部分を適当な数値に変更することで、図鑑からのコード実行が可能になる。
ボールポケットの65番目を探す場合、種類がラジオのチューニングになっていることと、67番目の種類が便利ボタンに登録したアイテムになっていることを覚えておくと楽。
ただし、金銀クリスタルの道具セレクトは他作品と違い入れ替えではなく移動であるため、ボールポケットから65番目に道具を動かすとパソコンの道具を一つ押し上げてしまう(1番目の道具が消え、個数が預け数になる)こととポケギア機能に異常が出ることに注意。
クリスタル版ではモード0Chが非常に都合のいい場所に飛べるため、こちらの方法が主流。金銀ではミラー領域を使えない(使いたくない)場合や手持ちポケモンに縛りを付けたくない場合に使用することがある程度。
わざマシンは通常の道具と違い、わざマシンポケットに入っていることでわざマシンとして起動することができる。
何らかの原因で他のポケットに入っているわざマシンは使用すると無関係なデータをジャンプ先として参照してしまう。
ジャンプ先の中にはプレイヤーが操作可能なものがいくつかあるので、それを利用して都合のいい箇所に飛ばしていくことになる。
金銀では手持ちポケモンのステータス周りに飛べるわざマシンがあるため、こちらを使うのが主流。クリスタル版の場合はモバイル関連の領域を使えるが、事前準備が必要になるのが難点。
クリスタル版では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がミラー領域になっていないため、この方法では実行できない。
ボックスの名前は8文字(+終端文字)×9ボックス分書けるため、長めのコードを実行するのに向いている。
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種類使うが、個数限定品を使わずに費用を抑えるとなるとこれぐらいがちょうどいいと思われる。
メールは手持ちの6匹分に加え、自分のパソコンに10通まで保存しておくことができる上、ボックスでは書けない文字を使うこともできるのが特徴。
終端文字50h(ld d,b)が文末にのみ来る(正確には文末から差出人の名前までが50hで埋まる)ため「ヅ」(11h・ld
de,yyxx)が使いやすい一方、16文字目と17文字目の間(CF31h)に改行として4Eh(ld
c,(hl))が入るため、cレジスタを使うケースではケアが必要になる。
03 ; inc bc
(無意味)
21 21 D0 ; ld hl,D021
03 ; inc bc(無意味)
9E ; sbc (hl)(無意味)
25 ; dec h
E9 ; jp hl
ボックスに飛ばす場合に比べて道具の種類は少なめ。わざマシン17を37個(普通に買うと111000円)用意できれば、はながらメールは省略可能。
わざマシンポケットには所持数のみが記録されており、50種類分(とひでんマシン7種類分)のデータを扱うことが可能。
あらかじめ所持数を255個にしておけば、好きに個数を調整して自由にコードを書くことができる。入力不能文字が絡んでうまく書けないコードとの相性が良好。視認性は悪いが。
初代と違ってわざマシンは捨てられないことに注意。売ればいいんだけれど
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
図鑑モード99h(D659hに飛ぶ)からわざマシン17と同じような感覚でコードを実行できるようにする。
わざマシン17を使ってバッグの中身と図鑑モードを書き換えるのがよさそう。
03 ; inc
bc(無意味)
21 50 DA ; ld hl,DA50
03 ; inc bc (無意味)
E9 ; jp hl
26 DA ; ld h,DA
03 ; inc bc(無意味)
9E ; sbc (hl)(無意味)
2E 50 ; ld l,50
03 ; inc bc (無意味)
E9 ; jp hl
図鑑モード0Chの状態で図鑑を見ると、アドレスD021hに飛ぶ。
ここは最後に読んだメールの本文31文字目であり、「だっ」(jr nc,DF)で文頭まで飛ぶことができる。
これだけでも一通りのコードは実行できるのだが、バグ図鑑モードを使用していると通常の図鑑が使えなくなるデメリットもあるため、分類違いわざマシンの仕込みをしておくのもいいだろう。
わざマシン15がFA10h(金銀ではFA0Fh)、わざマシン17がFA47hに飛ぶのだが、これらはモバイル関連(バトルタワーなど)で使われていた領域で、通常プレイでは書き換わらないため、ここにジャンプ命令を仕込むことで金銀同様の任意コード実行ができる。
図鑑モード42hの状態で図鑑を見ると、アドレスDCC2hに飛ぶ。
ここは手持ち1匹目の捕まえた時間帯及びレベルが記録されており、捕まえた場所(と親の性別)のデータが続くため、この領域に18h
E3hと入れることで技1に飛ばすことができる。
後は技欄にジャンプ命令を仕込めば金銀と同等の感覚で任意コード実行ができるようになる。出会った場所はバグ表記になるのでおみとおしばあさんに見せないように。
わざマシン1つで複数のジャンプ先を管理できるようになる。(わざマシン15をたいせつなものポケットに入れるコードを含む)
技指定は多くなるが、2匹目の種族や持ち物をフリーにできる。(わざマシン15をたいせつなものポケットに入れるコードを含む)
始点のアドレスが金銀と違うだけで内容は同じ。
メールの32文字をフルに使いたい場合に重宝する。
ソフト単体でやる場合はデータずらしで大切なものを複数入手する必要があるため、空データから取られる内部番号00hのポケモン(通称レベル0のバグポケモン)が必要になるが、
他ソフトとの通信(特にセレクトバグが使え、任意コード実行環境の導入も楽な赤緑青がおすすめ)でたいせつなものをポケモンに持たせて持ってくれば、扱いに注意が必要なバグポケモンが不要になり、セットアップは格段に楽になる。
クリスタル版の場合はバグ図鑑モードから直接最後に読んだメールに飛べるため、メールがあればいいが、金銀では他の領域を経由する必要があるため、事前にポケモンを準備しておきたい。
偶然にもその図鑑No.をジャンプ命令として使えるヌオー(の進化前であるウパー)が序盤で入手でき、持ち物と1番目の技でジャンプ先を指定できることから最初のセットアップにうってつけ。
たいせつポケットのアイテムは個数が管理されていない。通常は同種のアイテムを複数入手することが無いからである。
しかし、各種バグを利用して大切なものをポケモンに持たせた場合、預かった際に同種のアイテムが複数存在してしまう場合がある。
この時、同種アイテムのある所にアイテムを移動しようとすると個数まとめ処理が発生し、直後のアイテム(やめるを含む)を個数として処理してしまうため、以降のデータにずれが生じることになる。
原理そのものは初代のバッジおじさんバグに近い。
たいせつポケットの下にはボールポケットがあり、末尾にある大切なものの個数まとめ処理が発生すると、ボールポケットのやめるまでデータをずらすことになる関係でボールと個数の関係が1バイトずれてしまう。
これは道具欄共通だが1番目のアイテムの上にあるのは所持数のため、ガンテツボール(というかモンスター~マスターは数値が小さすぎる)を1番目に置いておくとボールポケットの所持数が異常になり、やめるの下まで見ることができるようになってしまう。
さらに、やめるが末尾にあったアイテムの個数に移動する関係で、255個のアイテムを手持ちに入れることができる。このアイテムの個数を調整してたいせつなものの個数まとめ処理を再び発生させると、ボールポケットに本来入らないアイテムも自由に加えることができる。(パソコンのアイテムが犠牲になる可能性もあるが)
移動にも使え、コガネシティまで到着すれば無条件で手に入り、内部番号的にも生成しやすいじてんしゃ(07h)が特におすすめ。
他にはマダツボミの内部番号からふしぎなタマゴ(45h)を入手出来たりもする。
以後分岐
これにより、ボールポケットのマスターボールがあった場所にわざマシン17が出現する。(最初のモンスターボールが2個以上ないと選択できない)
このままではボールポケットやたいせつポケットが破損したままなので、わざマシン17を使った任意コード実行で修正しよう。
これで図鑑モードが切り替わるため、準備をして図鑑を見ることで任意コード実行が可能になる。
一連の手順の副作用でパソコンの道具やポケギアがバグる(金銀クリスタルのアイテム整理は「移動」のために間のアイテムを押し上げてしまう)ため、バッグと合わせて修正コードの実行をお勧めする。
金銀単体でセットアップを行う場合、
が存在するため、これらを修復しつつたいせつポケットにわざマシン17を追加するコードを作るのがいいだろう。
下準備として、
を行っておく。ボックスの名前は以下のようにしておく。
ここまでの準備が終わったら、ボールポケットのわざマシン17を使用。各種修正が行われる。
メール実行の場合、ヌオーの持ち物変更は不要のため、メール1通でもなんとか修正コードを書ききることができる。
下準備として、
を行い、以下のメールを(ヌオー以外の)適当なポケモンに持たせ、読んでからわざマシン17を使用する。
がゆぜゅひゼョべづョづぜやどぺべ
ズゴづぼみづヅソるひでぼガデの
「ぺ」(47h)の後に「べ」(3Dh)が続くことに注意。
ボールポケットを空にし、たいせつポケットの末尾にわざマシン17を追加、最後に手持ちを5匹にしてバグポケモンを消去している。
改行がld c,(hl)であることを利用することでbレジスタの経由が不要になるため、ボックスに比べてコード長を少し削れている。
パソコンの預け数は「がよぜゴ」(ld h,D6→ld l,09)または「ヅゴよ」(ld
de,D609)で指定できるので、状況に合わせて修正コードを用意したい。
一応、空にするだけなら、
がよぜザョべづぶづの
でいい。
図鑑モードを弄った際、
といった副作用があるため、この辺りを修正していく。ジャンプ先の都合でメールの文末に「だっ」が必要なことに注意。
がりぜひョヅぽるボデべづぶづぜョ
ぺズゴべづボぼダデの
ボールポケットを空にし、たいせつポケットの末尾にやめるを追加、ポケギアを復帰ついでに全機能開放・ラジオチューニング初期化の3つの動作をする。
パソコンの道具に関しては元のアイテムでも変わるため、コードを別に分ける。
ヅ?りブぼ※ひそデの
※の部分には、変更したい預け数に応じて以下の値を入れる。
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,01→ld (hl),b→ld (de),a→pop
hl→ret
といった感じのコードを組めばいいのだが、これでは入力不能文字が多すぎてバイナリエディタが半ば前提になるので、以下の3ステップで作るのがいいだろう。
以上の手順を踏むことで、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を使うことができる。
メールの作成自体は金銀(というか他ROM)で行ってもよく、通信でクリスタルに送ることでお手軽に任意コード実行環境を整えることもできる。
(金銀用のコードは割愛)
メールの編集はセーブデータにかかわる部分のため危険が伴います。入力間違いには十分注意してください。
手持ち1匹目に持たせたメールの差出人を特定の場所に書いたもので書き換えるコード。
メールボックスでは差出人の名前が見出しとして表示されるため、わかりやすい名前を付けておくとコードの管理が楽になる。
メールの差出人には終端文字が入らないため、コピーするのは5文字までになる。
; 金銀のコードで説明
; ョへマだ
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)は飛んだ先のものでまかなう。
; 金銀のコードで説明
; ョへマだ
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にすると電話すらないまっさらなポケギアを拝むこともできる。
; 金銀(ヅ よひユ)
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個をすべて入手する。
ライジングバッジを持った状態でウツギ博士に話しかけるとマスターボールが貰える。
; 金銀(がゆぜゃひゼ)
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
バッジ入手と合わせることで、そらをとぶですべての場所に行けるようになる。
なお、カントーに飛ぶにはセキエイへ飛べるようになる必要がある。
; 金銀(がるぜき)
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
メッセージが一瞬で送られるようになる。
初代と違い、設定を開いただけでは元に戻らない。(見た目は「ふつう」と表示される)
バグ図鑑モードでの実行では図鑑を閉じるときに元の設定に戻ってしまうため、スクリプトから間接的に実行する。
スクリプト実行の性質上、効果が適用されるのはメニューを閉じた後であることに注意。特にメール実行の場合、実行後はすぐにメニューを閉じること。
ポケスタ金銀で倍速を使用可能にするには殿堂入りが必要なため、これでさっさと解禁してしまおう。
殿堂入りの仕様上自動セーブが入り、再開時は自宅前から始まるので注意。
なお、これだけではふねのチケットイベントは発生しない。
※クリスタルのスクリプト終了処理も「チ」(90h)でよかったみたいです。
ポケスタ金銀で他人のポケモンを引き出せる条件を満たすついでに埋めてしまおうというやつ。
64バイトものデータを書き換えることになるため、条件付き絶対ジャンプを使ったループを使用している。
最後に読んだメールのアドレスを前提にしているため、メールで実行すること。
アンノーンずかんには手を出していない。
周囲のマスを歩行可能にすることで、壁を無視して歩くことができる。(NPCは通り抜けられない)
壁判定は1マス歩くとすぐに書き換わってしまうため、抜けられる壁は1マスのみとなる。
2024/12/8追記:金銀用のコードで指定するアドレスが1バイトずれていた(下方向に抜けられなかった)ので修正しました。
わざマシン50の個数を201個にし、1~49は255個にする。
わざマシンの個数を利用したコーディングの補助に。
「ぢ」は絶対打ち間違えないように!
引用:ポケモン 第二世代 時間再設定 (任意コード実行) - flag3※リンク切れ中
参考:ポケットモンスター
金・銀・クリスタル バイナリエディタ 使い方 - flag3 (の「時間の変更」の項目)
金銀クリスタルでは長期間プレイしないでいると電池節約のため内部時計を止めるようになっており、その状態でゲームを再開しようとすると、曜日と時刻の再設定が必要になる。
このコードは、その時刻再設定画面を直接呼び出すものになる。(金銀・クリスタル共に08h:4027hから時刻再設定画面を呼び出せる)海外版では隠しコマンドで呼び出せるようになっているらしい
日数を経過させたい場合は午後11時59分に設定してから1分待つこと。
「へロど」および「へなづ」はバグ図鑑モード用の記述(これをしないと画面が真っ白になる)なので、分類違いわざマシンを使う場合は必要ない。
2つのプロセスを紹介。
マップ移動の他、戦闘やラジオなどのBGMを切り替える処理が挟まった後は元のBGMに戻る。
BGMの数値指定はBGMリストのページを参照。
コード実行後、メニューを閉じると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
; 金銀のコードで説明
; がリぜゆョづぐザ
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 スクリプト終了
スクリプト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には「の」を入れること。(例:「ョよをの」でしぜんこうえん)
; 金銀のコードで説明
; がちぜワ
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 コード終了
日本版ポケモンクリスタルでの任意コード実行 -
cordmx’s blog
ポケモン第二世代任意コード実行解説
- YouTube
金銀の「バグモード図鑑」と「分類違いわざマシン」のジャンプ先リスト
- オーキドせんせい研究者のページ
ポケットモンスター
金・銀・クリスタル バイナリエディタ 使い方 - flag3