Site cover image

🐾flag3

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

The English version is here:

📄Arrow icon of a page linkPokémon Crystal Any% Glitched Route (JP)

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

本記事は以下の動画の解説となります。

レギュレーション

  • 計測開始前に「B」+「Select」+「↑」でデータクリアが必須。
  • 計測開始は「さいしょからはじめる」を選択したとき。
  • 計測終了はレッド戦後に「THE END」が表れたとき。
  • レッド撃破の定義:シロガネやまにいるレッドに話しかけてイベントをこなすこと。
  • レッドのイベントを任意コード実行で呼び出したり、別のイベントへの書き換えは禁止。

英語版のSpeedrunではレッド撃破後に画面が白くなったタイミングで計測終了となりますが、日本語版では「THE END」が表れたタイミングで計測終了のため、ここでは日本語版の計測終了のタイミングと同一のものにします。

参考

For glitched categories, the following are the common requirements that must be met to qualify as "beating the game": (a) Being in Mt. Silver on the map Red is in.(b) Talking to Red and running his unaltered NPC scripts until the credits roll.

チャート

手順1: 手持ちのポケモンを2匹にする

ポケモンを2匹にしてヨシノシティのポケモンセンターの2階へ行くことが最初にすることです。道中の過程を細かく記述しておきます。

せっていをかえる

はなしのはやさ:はやい

せんとうアニメ:とばしてみる

さいしょからはじめる

主人公の性別:おとこ

時間:10時0分

主人公の名前:ア

曜日:にちようび

電話の使い方:はい

ワカバタウン

ポケモンけんきゅうじょへ行く。ヒノアラシを入手する。きのみをヒノアラシから預かる

ウツギ博士の助手からキズぐすりを入手します。

30ばんどうろ

ポケモンずかんを入手します。

ヨシノシティ

ライバル戦はたいあたり連打をしてわざと負けます。

ワカバタウン

ウツギ博士の助手からモンスターボール×5を入手します。

29ばんどうろ

どうろの下から29ばんどうろに入る。

捕獲チュートリアル:いいえ

ポケモンを1匹捕獲します。

ヨシノシティ

ヨシノシティのポケモンセンターに入りポケモンセンターの2階へ行きます。

手順2: ボックスの名前を変更する

ボックスの名前を以下のようにしてください。

📦
ボックス2:ゅョゥマわてエろ

ボックス4:がわぜォひすよえ

ボックス5:ヅそリひさデづヅ

ボックス6:ろボにきデづゅの

上記以外のボックスの名前は変える必要がありません。

手順3: セーブ中にリセットを行い名前のバグったポケモンの入手を狙う

以下の手順をすることで名前のバグったポケモンを入手することを狙います。

  1. ボックス2に切り替えてセーブを行います。
  2. ポケモンを1匹預けます。「ボックスせいり/メールはずしてね」を選択し、レポートにうえからかいてもいいですか?に対して「はい」を押して、「でんげんをきらないでください」と完全に表示された直後に強制リセットをします。
    • 名前がバグったポケモンの入手に成功するための強制リセットのタイミングは猶予2フレームで、「はい」を押してから149、150フレーム後となります。

手順4: 0x1500制御コードによる任意コード実行を行う

  1. ゲームを再開後、パソコンの前から左に1歩、下に1歩移動しポケモンずかんを開きます。画像のこの場所でポケモンずかんを開くようにしてください。
    Image in a image block
  2. ポケモンずかんでカーソルをオニスズメに合わせます。道中における野生とのエンカウントに応じてずかんでの操作が異なります。
    • キャタピー、ビードル、ハネッコのいずれかと遭遇したことがあるならば右2回、上2回。
    • 上記3匹と遭遇したことがないがオタチと遭遇したことがあるならば右2回。
    • 上記4匹と遭遇したことがないがコラッタと遭遇したことがあるならば右2回、下2回。
    • 上記5匹と遭遇したことがないならば、図鑑をふるいずかんモードに切り替えてから右3回、下1回。
  3. ポケモンずかんを閉じてから、右に1歩、上に1歩進んでパソコンを開き名前がバグったポケモンのニックネームを表示させます。ポケモンずかんを閉じてからはこの順番の通りに進んでください。この移動の順番を守らないと失敗します。

名前のバグったポケモンがいれば成功でいなければ手順3のやり直しとなります。

手順5: レッドに話しかけてTHE ENDをみる

名前のバグったポケモンを表示させた後は階段を降りてください。するとシロガネやまに移動します。そこから上に3歩、右に1歩移動してレッドに話しかけてください。

スタッフロールが流れますのでBボタンを長押ししてTHE ENDが表示されたら終了となります。

Image in a image block

技術的補足

0x1500制御コードによる任意コード実行

0x1500制御コードによる任意コード実行はポケットモンスター クリスタルで発見された任意コード実行の手法でポケットモンスター 金・銀では実行できません。テキスト文字列内の0x15制御文字の後に0x00が続く組み合わせが関係しています。

0x15制御文字を読み込むことで次の文字を引数としてモバイルスクリプトが実行されます。次の文字の内部番号が0x01~0x0Fならばモバイル関数を実行し、0x10以上ならばモバイルスクリプトを終了する処理となっています。しかし0x00については適切に処理されずにアドレスCD46が実行されます。アドレスCD46は一部のモバイル関数で使用されるアドレスとなっています。したがって、テキストが0x15、0x00の組み合わせを見つけることでアドレスCD46を実行することができます。

アドレス機能
D05Bポケモンやアイテムの名前が一時的に格納されるアドレス
D296ポケモンの種族を一時的に格納するアドレス
D297戦闘から逃げることに失敗したときに関連するアドレス

ゲームをリセットするとアドレスD05B以降の中身が0x00となります。名前がバグったポケモンには名前の終端を示す0x50がないために、名前がバグったポケモンのニックネームを表示させようとすると終端を示す0x50を出力するまでテキストを読み込もうとします。

ゲームを再開後上記の手順の通りに行動をすると、アドレスD296の中身は0x15、アドレスD297の中身は0x00となります。アドレスD296の中身0x15をテキストとして読み込もうとする際に、次のアドレスD297の中身0x00を引数としてモバイルスクリプトを実行するためアドレスCD46が実行されます。

指定された位置でずかんを開いて1歩右に移動して1歩上に移動すると、アドレスCD64以降の中身を C2 9B C4 (jp nz, C49B) にします。アドレスCD46からCD63までは0x00が格納されているので、アドレスCD46を実行した後はアドレスC49Bを実行することになります。

画面に関するデータ

アドレスC49BからC49Fまでは00が格納されています。アドレスC4A0以降は画面に関するデータが格納されており以下のようになっています。

WRA0:C4A0 7F               ld   a,a
WRA0:C4A1 7F               ld   a,a
WRA0:C4A2 7F               ld   a,a
WRA0:C4A3 7F               ld   a,a
WRA0:C4A4 7F               ld   a,a
WRA0:C4A5 7F               ld   a,a
WRA0:C4A6 7F               ld   a,a
WRA0:C4A7 7F               ld   a,a
WRA0:C4A8 7F               ld   a,a
WRA0:C4A9 79               ld   a,c
WRA0:C4AA 7A               ld   a,d
WRA0:C4AB 7A               ld   a,d
WRA0:C4AC 7A               ld   a,d
WRA0:C4AD 7A               ld   a,d
WRA0:C4AE 7A               ld   a,d
WRA0:C4AF 7A               ld   a,d
WRA0:C4B0 7A               ld   a,d
WRA0:C4B1 7A               ld   a,d
WRA0:C4B2 7A               ld   a,d
WRA0:C4B3 7B               ld   a,e
WRA0:C4B4 7F               ld   a,a
WRA0:C4B5 7F               ld   a,a
WRA0:C4B6 7F               ld   a,a
WRA0:C4B7 7F               ld   a,a
WRA0:C4B8 7F               ld   a,a
WRA0:C4B9 7F               ld   a,a
WRA0:C4BA 7F               ld   a,a
WRA0:C4BB 7F               ld   a,a
WRA0:C4BC 7F               ld   a,a
WRA0:C4BD 7C               ld   a,h
WRA0:C4BE 7F               ld   a,a
WRA0:C4BF 7F               ld   a,a
WRA0:C4C0 7F               ld   a,a
WRA0:C4C1 7F               ld   a,a
WRA0:C4C2 7F               ld   a,a
WRA0:C4C3 7F               ld   a,a
WRA0:C4C4 7F               ld   a,a
WRA0:C4C5 7F               ld   a,a
WRA0:C4C6 7F               ld   a,a
WRA0:C4C7 7C               ld   a,h
WRA0:C4C8 7F               ld   a,a
WRA0:C4C9 7F               ld   a,a
WRA0:C4CA 7F               ld   a,a
WRA0:C4CB 7F               ld   a,a
WRA0:C4CC 7F               ld   a,a
WRA0:C4CD 7F               ld   a,a
WRA0:C4CE 7F               ld   a,a
WRA0:C4CF 7F               ld   a,a
WRA0:C4D0 7F               ld   a,a
WRA0:C4D1 7C               ld   a,h
WRA0:C4D2 E1               pop  hl
WRA0:C4D3 AF               xor  a
WRA0:C4D4 EA 9D DC         ld   (DC9D),a
WRA0:C4D7 C3 83 DB         jp   DB83

ボックス名

説明

0x1500制御コードによる任意コード実行ではボックス2、4、5、6の名前を利用しています。アドレスC4D2以降は現在のボックスの名前に関する画面のデータが格納されており、手順通りに行うとボックス2の名前となっています。

この任意のコード実行は、さまざまなゲーム状態やフラグを制御するメモリアドレスに特定の値を書き込むことを目的としています。

  • 手持ちのポケモンの数を0匹にする。(アドレスDC9D)
  • ポケモンセンターの階段の移動先をシロガネやまのレッドがいる場所へ変更する。(アドレスDC73とDC74)
  • Bボタンでスタッフロールを早送りできるようにする。(アドレスD83F)
  • イベントフラグを書き換えてシロガネやまにレッドを出現させる。(アドレスDB51)
WRA0:C4D2 E1               pop  hl
WRA0:C4D3 AF               xor  a
WRA0:C4D4 EA 9D DC         ld   (DC9D),a
WRA0:C4D7 C3 83 DB         jp   DB83

WRA1:DB83 26 DC            ld   h,DC
WRA1:DB85 2E F4            ld   l,F4
WRA1:DB87 CB BD            res  7,l
WRA1:DB89 D6 B4            sub  a,B4
WRA1:DB8B 50               ld   d,b
WRA1:DB8C 11 BF D8         ld   de,D8BF
WRA1:DB8F CB BB            res  7,e
WRA1:DB91 12               ld   (de),a
WRA1:DB92 32               ldd  (hl),a
WRA1:DB93 11 50 DB         ld   de,DB50
WRA1:DB96 1C               inc  e
WRA1:DB97 C6 B7            add  a,B7
WRA1:DB99 12               ld   (de),a
WRA1:DB9A 32               ldd  (hl),a
WRA1:DB9B E1               pop  hl
WRA1:DB9C C9               ret  
WRA1:DB9D 50               ld   d,b
バイナリ
C4D2:
E1 AF EA 9D DC C3 83 DB 

DB83:
26 DC 2E F4 CB BD D6 B4 50 
11 BF D8 CB BB 12 32 11 50 DB 
1C C6 B7 12 32 E1 C9 50 

参考文献

https://glitchcity.wiki/wiki/Pokémon_Crystal_any%25_speedrun_route