私事ですが、このブログの合計アクセスが10000Hit頂きました!
本当にありがとうございます!
記念として全く関係のない記事を書かせてもらいます
さて、トレーナーの皆様は《カセキ》をご存知でしょうか?
この絵図が思い浮かんだあなた、正解です。
初代ポケモンにおいては、《かいのカセキ》《こうらのカセキ》《ひみつのコハク》の3点セットを持っていくことでグレンタウンの研究所で復元してもらえますね。
それぞれ、《カブト》《オムナイト》《プテラ》に復元できそのまま手持ちのポケモンとして入手することが出来ます。
で、普通に預けようとすると・・・
オムオムナイトフィーバーの化石、ということがわかりますね。
まぁここまでが普通のプレイです、
ここからが本番です、対照実験のようなものですね。
化石を預ける、という箇所までは同じです。
その後、普通なら先ほどのように受け取りに行って終わりなのですが、
ここでおもむろにすぐそこのパソコンを開いて、
自分のパソコンで上から32番目のどうぐでセレクトを押します。
この際間違えないようにわざマシン32(タマムシデパートで1000円)を置いておくといいでしょう。
その後、ポケモンやしきまで入り野生のポケモンとエンカウントします。
そして当然のようにポケモンでAを押して逃げます。
すると、じてんしゃの音楽が鳴り響きます。
このとき、そらをとぶ・あなをほると云った行動はとらないようにしましょう。
フリーズします。
徒歩でトホホと研究所に戻って化石を復元してもらいに行くと・・・
あなた言ってること違いませんか?
このゆうれいがベアビヲ9の姿になります、
ちなみに種族値・タイプはサンダースのデータを参照しています。
手順をまとめると
1・エラーイはかせに化石を預ける
2・32番目のどうぐでセレクト
3・預けた化石がすり替えられている
それでは、一連の流れをお見せしたところで答え合わせをしていきましょうか。
浮かび上がってくる疑問点は以下のものと思われます。
・どうして32番目でセレクトバグ!?
・どうしてじてんしゃの音楽が!?
・どうしてそらをとんじゃいけないの!?
・どうして信じて送り出した化石がすり替えられてるの!?
この4点だと思います。
では、順番に見ていきましょうね。
・どうして32番目でセレクトバグ!?
いきなりですがメモリの話になります。
アドレス0xD68EのアイテムIDに預けた化石とその化石の内部番号を格納しています。
先ほどの画像であれば、化石は《かいのカセキ》内部番号は《オムナイト》ですね。
要はこの化石の内部番号を入れ替えてしまえば別のポケモンの内部番号になります。
ではどうやって入れ替えるのか?
その答えが32番目のポケモンなのです。
実は32番目のポケモンの取得経験値の下位bitと化石の内部番号は同じ数値にあります。
だから、32番目のどうぐでセレクトバグをする必要があったわけです。
・どうしてしてんしゃの音楽が!?
簡単な話です、じてんしゃに乗っているかどうかの判定が0xD68Eの手前である0xD67Fのbitで決まっているからです。
ただしこの値が0x01でないとじてんしゃと同じスピードでは移動しません。
ただ0x00以外の値になった場合じてんしゃのフラグが立つため音楽だけは鳴り続ける、ということでした。
あ、サイドンの内部番号が0x01なので32番目と入れ替える際にサイドンを使えば、じてんしゃと同じスピードになれます。
またこの方法を応用すれば内部番号0x00のィ゛ゃゾ」Aを出せたりします。
・どうしてそらをとんじゃいけないの!?
じてんしゃの音楽事件とほとんど同じ理由です。
そらをとぶフラグがじてんしゃ判定の次である0xD68A~0xD68Bにあるからです。
で、0xD68Aのbit01がマサラタウンとなっておりD68Bの4bit目のヤマブキまで続いているのですが、01のフラグが立っていないと『そらをとぶ』を使った際に最初に表示されるマサラが無いためメモリが暴走してしまいフリーズしてしまう、というわけでした。
一応0xD68Aの上位bitは32番目のポケモンのとくしゅ努力値で決まっているためそこを調整してあげればこの方法を取ってもフリーズしませんがわざわざやる意味も薄いでしょう。
・どうして信じて送り出した化石がすり替えられてるの!?
いよいよ本題ですね。
理論が分かっても、化石はオムナイトと言われたのにベアビヲ9なんて不気味なモンスターが復元されたら困りますもんね。
最初に32番目のポケモンの取得経験値の下位bitと化石の内部番号は同じ数値
と説明しましたが、ひとくちに言われても理解できませんよね。
そんなみなさまのために~
ニャースちゃんを用意しました。
このニャース、取得経験値以外はなにも変哲のないポケモンです。
つまり、どのポケモンを使用しても可能なバグ技であるという証明にもなりますね。
さて、取得経験値を見てみましょう。
5885・・・普通ですね。
16進数に変換すると・・・?
16FDになりますね。
FDは10進数に変換すると253になります
253が内部番号のポケモンといえば?
ベ ア ビ ヲ 9
だから、取得経験値を調整する必要があったんですね。
このように画像と表があれば解説も簡単
1単位での調整となるため、育てやさんを使うのが一番確実だと思います。
奇数必要な場合は、はやぶさバッヂを使うか育て屋さんから出ると1歩扱いとなって奇数経験値が手に入りますよ。
では、話をまとめましょう。
1.エラーイはかせに化石を預けます
2.その後32番目のどうぐでセレクト
3.ポケモンやしきでエンカウントし、取得経験値の下位bitを調整したポケモンでA
4.徒歩でエラーイはかせの元まで戻ります
5.下位bitと同じ数値のポケモンがもらえます
元に戻す場合は、5のあと再び32番目セレクトしてAを押せば戻ります。
ただしニックネーム・おや・ID等は戻りません。
こんな感じになってしまっているため、逃がしてあげたほうが幸せかもしれません。
また、任意コード実行で好きなポケモンとエンカウントするプログラムをしてもポケモンとしては認識されずトレーナー戦になってしまう内部番号であっても、
この方法ならポケモンとして入手ができます。(ベアビヲ9がそれ)
つまり、任意コード実行だけでは出来ない点を補える優秀なバグ技と言えるでしょう。
おまけ
32番目セレクトバグの一種ですが、他にもあるのでここで紹介しておきます。
・じてんしゃがなくてもじてんしゃに乗れる
先ほど、0xD67Fのbitを0x01に設定すればじてんしゃに乗った扱いになると紹介しましたね。それについての補足をば。
まず、32番目のどうぐでセレクトを押し、そのままバトルに入って手持ちのサイドンでAを押してバトルから離脱します。
するとフィールドに帰還したとき、じてんしゃに乗っています。
さらにそのまま、じてんしゃに乗った状態で32番目のどうぐでセレクトを押して(要13番目セレクトバグ)サイドンだったポケモンにAを押せば彼は無事元に戻ります。
ですが、じてんしゃに乗っていない状態だとどうなるでしょう?
0x00となるため、内部番号も0x00のポケモンになってしまいます。
だから、ィ”ゃゾ」A(0x00)が誕生してしまうんですね。
ちなみに、32番目セレクトバグを戻した直後だと、
内部的にはィ”ゃゾ」Aとなっていますが見た目上は別のポケモンとなっています。
具体的には手持ち1番目のポケモンのすばやさ努力値の下位bitの数値に一致するポケモンに変わります。(例:下位bitが66なら、イーブイになる)
見た目と中身が食い違うポケモンは育てやさんに一度預けないと中身と一致しないので注意しましょう。逆に言えば育てやさんに預けなければ、中身のカラーが反映された見た目のポケモンとして育成できます。(中身がピッピならピンクのイーブイになれる)
・どこでも壁抜けができる
任意コード実行による壁抜けと同じ範囲・制約での壁抜けモードに突入できます。
具体的には、32番目に入れ替えるポケモンのこうげき努力値が7~254であることが条件になります。
任意コード実行をしたくない、できないという方はこちらの方法での壁抜けがありますが例によってメモリは元に戻らないためレポートは自己責任でお願いします。
今回は以上となります、閲覧ありがとうございました。