Corredor

ウェブ、プログラミングの勉強メモ。

ポケモン赤・緑・青で壊れたライバルの名前を元に戻す方法

ココってプログラミングとかウェブとかのブログじゃなかったっけ…?と思われそうだけど、ポケモンのバグ技も、実はプログラミングが絡んでるので、取り上げてみる。

この記事でやりたいこと

初代ポケモン (赤・緑・青) で、バグ技によってライバルの名前がバグってしまったものを元に戻したい。

ここでは 2DS の VC 版で話をするが、仕組み自体は GB 版の実機でも変わらないので同じようにできるはず。

キミはセレクトバグを覚えているか

初代ポケモンで一番有名な裏技といえば、「道具の7番目でセレクトを押し、戦闘で一番下の技でセレクトを押してから敵を倒すと Lv100 になれる」というアレだろう。

道具の何番目かでセレクトを押して、戦闘で技と入れ替えたり、ポケモン入れ替え画面で適当なポケモンと入れ替えたりして行う裏技は沢山あり、それらは総称して「セレクトバグ」と呼ばれている。

事の発端はバグアイテムを取得しようとしたとき

ライバルの名前をバグらせてしまった発端はこうだ。

タマムシまで進めてから、道具の13番目でセレクトをし、「やめる」の下に行ける裏技をやった。道具の31番目は主人公がいる座標と対応していて、これを利用してマスターボールやふしぎなアメを大量入手していたのだが、なみのりができる「?????」というバグアイテムを道具の別の位置で見付けて、これを手に入れた (20番目以前のアイテムと入れ替えた) ところ、ライバルの名前が「グリーン」から「(改行) イ゛ーン」になってしまった。

これを何とかして「グリーン」に直そうと思う。

やり方概説

ライバルの名前を直すには、大きく「1文字目の変更」と「2文字目以降の変更」とで作業が別れている。

  • 1文字目の変更
    1. 道具の13番目のセレクトバグをやる
    2. ライバルの名前の1文字目にしたいアイテムを道具の31番目から取得する (文字によっては不要かも)
    3. 取得したアイテムを道具の23番目に配置する
    4. 道具の13番目のセレクトバグを戻す
  • 2文字目以降の変更
    1. ライバルの名前の2文字目以降をニックネームに付けた捨てポケモン (以降「ライバル名ポケ」) を用意する
    2. 捨てポケ A・ライバル名ポケ・捨てポケ B の順で手持ちポケモンを用意する
    3. パソコンの道具の27番目でセレクトし、戦闘で捨てポケ B を選択し逃げる
    4. 捨てポケ A・ライバル名ポケを入れ替え、ライバル名ポケを先頭に配置する
    5. 手持ちの道具の7番目でセレクトし、戦闘で捨てポケ B を選択し逃げる
    6. もう一度、手持ちの道具の7番目でセレクトし、戦闘で捨てポケ B を選択し逃げる
    7. 捨てポケ A・ライバル名ポケを入れ替え、捨てポケ A を先頭に配置する
    8. パソコンの道具の27番目でセレクトし、戦闘で捨てポケ B を選択し逃げる

これだけで分かれば以降は読まなくてよし。以降は細かな手順を記す。

ライバルの名前の1文字目を変更するには

ライバルの名前の1文字目は、道具の23番目のアイテムの種類と対応している。

手持ちの道具を20個持っておき、「道具の13番目バグ」をやった時に、「やめる」を21番目として数えて、23番目にあるアイテムが、ライバルの名前の1文字目を決めているのだ。ちなみに、このアイテムの個数がライバルの名前の2文字目を決めている。

道具欄を増やす裏技があるよな
あれの20番目以降は、道具のデータの先にある別のデータが道具のように表示されているんだ

たとえば、23番目の道具は
 種類:ライバルの名前1文字目
 個数:ライバルの名前2文字目

つまり、「ライバルの名前の1文字目に付けたい文字」のコード値と同じ、「アイテムの種類」を示すコード値を探し出し、それを道具の23番目に置いてやれば、ライバルの1文字目が変えられるということだ。

文字のコード値と、アイテムの種類を示すコード値をどうやって調べればいいか、だが、以下の2つのページの一覧表を参考にドウゾ。

「(改行) イ゛ーン」となってしまった自分の場合、道具の23番目には「ポイントアップ ×1」があった。上のページを見ると、ポイントアップの道具としてのコード値は「4F」。そして、文字コードの「4F」は何かというのを見てみると、「4F」は「BUG」、つまり特殊文字だった。文字コード 4F は改行 (文字送り) のコードということだ。

ちなみに、この「ポイントアップ」の個数が1つであるということは、ライバルの名前の2文字目は「01」であるということになる。文字コードの 01 は「イ゛」。つまり、「(改行) イ゛ーン」の2文字目「イ゛」もココで確かに表現されていることが確認できた。

ライバルの名前の1文字目となるアイテムを手に入れる

それでは、ライバルの1文字目を「(改行)」(コード値 4F) から、元の名前「グリーン」の「グ」に戻そう。

「グ」という文字の文字コードは 07。アイテムコード 07 は、「?????」というバグアイテムだ。これはバッジを持っていなくても「なみのり」ができるので便利なアイテムだ。

最終的に、道具の23番目に「?????」というアイテムを置ければ、ライバルの名前の1文字目が「グ」になるというワケだ。

ではまず、「?????」を安全に手に入れよう。

道具を安全に手に入れるには、31番目の道具を20番目以前と入れ替えるのが良い。道具の31番目は主人公の位置を示す座標で、アイテムを入れ替えるとマップがバグるが、「そらをとぶ」で適当な街に移動すれば正常に戻せるからだ。

さて、それでは「道具の13番目バグ」をやろう。

捨ててもいいポケモンを手持ちの2番目以降に入れ、手持ちの道具は20種類フルで持っておく。タマムシシティの右側の7番道路に行き、道具の13番目でセレクト。B でキャンセルし、草むらで野生のポケモンと戦う。捨ててもいいポケモンを選択するとバグるので、キャンセルして逃げる。

これで、道具の「やめる」より下に行けるようになる。

さて、道具の31番目は主人公がいる位置によって決まる。この法則性を完璧には把握していないが、以下のサイトを参考にすると、とりあえずタマムシシティの左端に 01、マスターボールが出る場所があると分かる。

http://hakuda2.web.fc2.com/wario/poke1/k22-9.gif これが 01 マスターボールのある位置。

ここから右に2歩歩くと、値は 02 になり、道具の31番目のアイテムは、アイテムコード表に従って「ハイパーボール」になる。

これはどうも街や道路が切り替わると基準となる座標も変わるらしいので、欲しい文字を示すアイテムが道具の31番目に登場する位置をなんとか探して欲しい。

幸い、「グ」を示す 07 である「?????」は、上記の 01 マスターボールから右に14歩歩いたところ (技マシン41「タマゴうみ」をくれる老人を右側に見ているあたりの位置) で入手できる。

また、例えばライバルの名前を「ブルー」に直したい時であれば、「ブ」は 1B1B のアイテムは「クリムゾンバッジ」というバグアイテムだ。主人公の座標 = 道具の31番目のアイテムの種類として 1B を示す場所は、ハナダシティの下にある5番道路の、左側の道路を下っている最中で見つけることができる。アイテムのコード値の並びをなんとなく把握していければ、大抵のアイテムはゲットできるだろう。

道具の23番目に目的のアイテムを置く

道具の31番目に「?????」を確認したら、これを道具の23番目の「ポイントアップ」と入れ替える。これで、ライバルの名前の1文字目が「グ」になった。そのままだとマップがバグるので、手持ちのポケモンで空を飛び、再びタマムシシティに戻ろう。

ライバルの名前が変わったか確認したければ、マサラタウンに行き、ライバルの家の看板を見ると良いだろう。

あとは「道具の13番目バグ」をもう一度やり、バグっていた捨てポケモンを元に戻す。大抵は Lv0 など、おかしな状態になっているので、このポケモンは逃がしてしまおう。

ライバルの2文字目以降を変更するには

ライバルの名前の2文字目以降は、道具の27番目でセレクトをすることで差し替えることができる。ただし、差し替えられる対象は選択したポケモンの親の名前なので、大抵は主人公の名前に依存してしまい、任意の名前に変更できない。

そこで、ポケモンのニックネームと親の名前を入れ替える道具の7番目でセレクトを間に挟むことで、「ライバルの2文字目以降をニックネームとして付けたポケモン」を「ライバルの2文字目以降を親の名前として保有するポケモン」に変換し、これを「ライバルの名前の2文字目以降」に差し替えてやるのだ。

手順は以下のサイトに載っているものと全く同じ。

今回の例を織り交ぜながら再掲。

  1. ライバルの名前の2文字目以降をニックネームに付けた捨てポケモン (以降「ライバル名ポケ」) を用意する
    • 今回の場合でいえば、「グリーン」の2文字目以降、「リーン」というニックネームのポケモンを用意する。
  2. 捨てポケ A・ライバル名ポケ・捨てポケ B の順で手持ちポケモンを用意する。
    • 捨てポケ A・捨てポケ B はバグ技の影響を受けるので、後で逃がす。逃がして良いポケモンを捕まえておくこと。
  3. パソコンの道具の27番目でセレクトし、戦闘で捨てポケ B を選択し逃げる
    • トキワシティのポケモンセンターでセレクトしたら、1番道路で戦闘に持ち込むと楽だろう。
  4. 捨てポケ A・ライバル名ポケを入れ替え、ライバル名ポケを先頭に配置する
  5. 手持ちの道具の7番目でセレクトし、戦闘で捨てポケ B を選択し逃げる
  6. もう一度、手持ちの道具の7番目でセレクトし、戦闘で捨てポケ B を選択し逃げる
  7. 捨てポケ A・ライバル名ポケを入れ替え、捨てポケ A を先頭に配置する
  8. パソコンの道具の27番目でセレクトし、戦闘で捨てポケ B を選択し逃げる

1番目と2番目のポケモンを入れ替えるタイミングに注意。手順 5. と 6. で道具の7番目でセレクトしている時はポケモンを入れ替えない。

これらを全部やると、マサラタウンのライバルの家の看板で「ここは グリーンの いえ」と表示されるようになるはずだ。

捨てポケ A・捨てポケ B・ライバル名ポケの3匹はバグりまくっていて、ライバル名ポケは元々のバグっていたライバル名の2文字目以降を引き継いでいるはずだ。今回の例だと、1文字目を変更した時の「?????」が裏で個数を持っており、1文字目を変更し終わった段階ではライバルの名前は「グぬーン」になってしまっていたので、ライバル名ポケは「ぬーン」になっていた。こいつらはすぐに逃がすこと。

また、このバグ技の副作用で、メッセージの速さなどが変更されてしまうことがある。再度オプションを設定しなおせば特に問題ない。

裏技をやった後に確認したいこと

セレクトバグは、選択したアイテムとポケモンに対応するメモリ上のアドレスの値を不正に入れ替えてしまう裏技だ。これにより、意図しない動作を引き起こさせるところ、今回は狙った値を設定することで、意図したバグを実行している。

今回触ったアイテムの位置から言えば影響を受けないと思われるが、以下の要素が破損していると修正が面倒なので、念のためチェックしておきたい。

  • まずは目的のライバルの名前が修正できているか確認しておこう。
    マサラタウンにあるライバルの家の看板を読み、「ここは グリーンの いえ」となっていることを確認する。
  • 図鑑が破損していないか確認する。
    メニューの「ずかん」を開き、捕まえていないポケモンにモンスターボールのマークがあったりしないか見ておく。作業前に「見つけた数」「捕まえた数」は覚えておくと良い。
  • メッセージの速さなどのオプション項目の設定値を保持するアドレスと、バッジの取得状況を保持するアドレスがかなり近いので、主人公のプロフィールも見ておく。
    主人公の名前、所持金、取得したバッジの状況に変化がないかチェックしておこう。
  • 作業前に、自分が捕まえたポケモンを使って適当に戦闘を行う。戦闘後に「(ポケモン) は おおめに xx 経験値を手に入れた」と表示された場合、自分の IDNO が変わってしまっている。これまで自分が捕まえたポケモンが他人のものとみなされてしまうので、その弊害を回避したい場合はやり直そう。
  • 裏技の最中に使った捨てポケを全部捨てる。
    ボックスを移動するとセーブしてしまうので、ボックスは移動せず、預けたら速やかに逃がしてやろう。フリーズしたらやり直しなので、ステータスを閲覧したりすることも控えたい。

自分の場合は、バージョン別に「グリーン」と「ブルー」に戻したのだが、今のところ問題なかったので、セーブしてしまった。


ライバルの名前の2文字目以降は直接やり方が調べられたが、1文字目の変更方法は手順化されていなかったので、なんとか調べ上げてまとめることができた。

これで上手くいかなくてデータが破損しても自己責任で。また、「こうするとバグるが、こうやると回避できる」といったアドバイスなどありましたらコメントください。

異常です (話を終えるときの「以上」とバグった状況を示した「異常」をかけた高度なギャグ)。

ニンテンドー2DS 『ポケットモンスター 赤』限定パック

ニンテンドー2DS 『ポケットモンスター 赤』限定パック

ニンテンドー2DS 『ポケットモンスター 緑』限定パック

ニンテンドー2DS 『ポケットモンスター 緑』限定パック