◆ボール99個購入バグ 解決編◆
しづき先生の次回作にご期待ください!



昨日と一昨日で、ない知恵を絞って必死に検証したボール99個購入バグですが、
実は前のページではソフトによって違う挙動を示すところの説明のところで
微妙に法則が分からず、赤緑青のどの初期・後期で何が起こるかを明言しませんでした。

そう、分からんからぼかしていたのです。うわー!これはひどい!!
しかし・・・なんと、あの、れんだ博士からこのようなありがたいご指南が・・・。

どうぐらんでは やせいの バグが とびだす!
こちらも メモリマップを もっていれば たたかえるのだが……

お店のバグ、動画に載っていたフォーラムのURLが見れなかったのですが、ちょっとURL直したら見れました。
http://forums.glitchcity.info/index.php?topic=6953.0.html

以下、簡単に解説です。

== 発生条件 ==

・買おうとしたアイテムの、99個の塊を所持している(99個の塊なら何枠でもok)
・「やめる(0xFF)」が買おうとしたアイテムの99個の塊の直後にある
実際にはもうちょっと緩そう。


== 持ってるアイテムを買った時の特別処理 ==

1. 買おうとしたアイテムを99個の塊で持っている場合、その次の枠にいれようとする
2. 今見ている枠が買おうとしたアイテムと同じか判定
2-1. 同じなら、今見ている枠のアイテム数を増やせるか判定
2-1-1. 増やせるなら、増やす
2-1-2. 増やせないなら、2に戻って、次の枠を見る
2-2. 違うなら、今見ている枠の【次の枠が】「やめる」か判定
2-2-1. 「やめる」なら、やめる
2-2-2. それ以外なら、2に戻って次の枠を見る

ここで、買おうとしたアイテムの直後に「やめる」があり、その次が「やめる」でない場合、
2. 今見ている枠が買おうとしたアイテムと同じか判定 → 同じ
2-1. 同じなら、今見ている枠のアイテム数を増やせる(計99以下)か判定 → 増やせないので次の枠を見る
2. 今見ている枠が買おうとしたアイテムと同じか判定 → 違う
2-2. 違うなら、今見ている枠(「やめる」)の【次の枠が】「やめる」か判定 → 違う
3. 道具欄の外に出て自由の身になり、暴走する
という状況が起こります。


== 結果 ==

偶数アドレスに「買おうとしたアイテムの番号」が出てくるまで暴走し続けます。
スーパーボールの場合は「せってい」がたまたま「ふつう/いれかえ/みる(0x03)」になっていると引っかかり、
その次にある「バッジの数」に加算されているようです。
ハイパーボールで店の上下幅が変わる時も直前に02があるはずです。
02固定って何の値を踏んだんだろう・・・

バグる種類がボールだけだったのはたまたまのようですね。
ライバルの名前(奇数文字目)とか所持金(3,4桁目)、IDに引っかかったりもしそうです。

ライバルの名前が「レッド (A7 AC 13 50)」な人が
「いいキズぐすり」を買ったりすると0x50をぶっ壊すことになるわけです。

・・・ところで、これPCに預ける処理とかで発症しないでしょうね・・・


わっかりやす!!スゴイ!真の検証能力をお持ちの方はやはり違う!!
もう、さまざまな謎が一気に解けました・・・これは・・・いい!いいね!!

英語のページは何も読めず10秒と経たないうちに閉じてしまったので、
れんださんの解説をしっかりと読ませていただきました。

というわけで、博士の説明を踏まえたうえで検証能力など持っていないド一般人の説明をどうぞ。



アイテムの情報が入るエリアのデータの順番は、
最初に「何種類アイテムを持っているか(項目がいくつあるか)」、
次に「1番目のアイテムの種類」、次が「1番目のアイテムの数」です。

アイテムの数は買い物をするときは99個が上限ですが、
好きなアイテムを手に入れる裏技などでアイテムを入れ替えて入手した場合、
アイテムの数に当たる数値が100以上のこともあります。

で、アイテム欄最後のアイテムの種類、数の次は「FF」という数値が入ります。

これは「やめる」であり、その「やめる」の下の行は何かあっても表示しないことになっています。
(「やめる」より下までカーソルが動かせるとき、「やめる」を画面外に追いやると
「やめる」の下の何もなかった行にもアイテムが表示されます)

例えば「キズぐすり」を「5個」持っているときのアイテムエリアの数値は、
アイテムが一種類なのでまず01、次に「キズぐすり」の14、「5個」なので05、
最後に「やめる」であり「アイテムエリアの終端」を現すFFが入ります。

ここでモンスターボール(コードは04)を3個買ったときのアイテムエリアの数値は、
02 14 05 04 03 FF 00 00 00・・・となります。

ゲームを始めた直後はアイテムエリア、手持ちのアイテム20個を決めるエリアは
全部00で埋まっていて、アイテムを手に入れたときに数字が上書きされていきます。

次に、どくけし(コードは0B)を7個買ったときのアイテムエリアの数値は、
03 14 05 04 03 0B 07 FF となります。これ以降は全部00です。

さて、ここでモンスターボールを3つ全部捨てるとどうなるのか。
普通に考えると、02 14 05 0B 07 FF 00 00・・・となりそうです。

しかし実際には、02 14 05 0B 07 FF 07 FF 00・・・となります。
なんかゴミが残っています。

確かにアイテムの種類は2で、FF以降は必要がないんだけど、

一度アイテムが入ったことがある場所には元々そこにあったアイテムの種類がFFで埋まり、
アイテムの個数はそのまま残っているのです。

このせいで、一度でも20種類のアイテムを持ったことがあるとこの裏技はできなくなります。
そしてちょっとゴミが気になりますが、普通にゲームで遊んでいる分には何も問題はありません。

ただし今回起こった、ボール99個購入バグ事件。れんださんの説明文にある、
買おうとしたアイテムの直後に「やめる」があり、その次が「やめる」でない場合
というケースが、今回のバグの原因です。

一度でもアイテムが入ればそこは01 FF 02 FFなどとFF(やめる)が入っているのですが、
一度もアイテムが入ったことがない場所はFFの次はアイテムエリアが終わるまで00しかありません。

なので道具欄の外に出て自由の身になり、暴走するんですね・・・。
自由の身になってはいけない!アイテムエリアの後ろは大事なデータがいっぱいなんだぞ!!

見た感じ、アイテムエリアの直後にはお小遣いの領域があります。
その直後はライバルの名前。

ライバルの名前が「レッド (A7 AC 13 50)」な人が
「いいキズぐすり」を買ったりすると0x50をぶっ壊すことになる
とのことですが・・・。

ライバルの名前を「レッド」にして、
「いいキズぐすり」を99個、2セット購入しました。

するとライバルの名前が「レッドD」に。
・・・ディレクター?それとも栄養ドリンク?

99個=16進数で63=文字コードでは「D」となり、「レッド」の次の文字がおかしなことになってしまいました。

これを利用すれば、ライバルの名前を冒険の途中でも変えることができる!
ただし非常に限定的!!

ライバルの名前の1、3、5文字目がショップで売られるアイテムと同じ数値でないといけない。
さらに、変えられるのはその文字の次の文字だけであり、しかも1〜99まで。
ボールと同じように文字の数値に足し算されていきます。実用性、皆無。

おこづかいでも同じようなことが起こります。
例えば所持金が30236円だとした場合、データの並びはそのまま 03 02 36 です。
16進数なのに、そういう表記になっています。なんかちょっとコワいです。

さて、ここでまずモンスターボールを99個買うと、19800円が減ります。
10436円になり、データの並びは 01 04 36 になります。

おや、モンスターボールの04がいいところにあります。

ここでさらにモンスターボールを2個買うと、
10436−400円=10036円になるはずです。

しかし 01 04 36 だった所持金。
モンスターボールの数値と同じ04の次にある36に
モンスターボールの個数の2が足し算され、2円増えます。

結果として、10036円となるはずが、10038円になるのです!やったね!
もはや誤差の範囲です。

しかも、99個買った後の2個のモンスターボールは別の数値の足し算に使われてしまったので、
アイテム欄に入りません。つまり398円の損です。

い、意味がない・・・買う個数が多ければ多いほど損・・・。

前のページでは「赤緑だとスーパーボールのバグができない」とか言っていましたが、
それはバッジの数値の前が03じゃなかったから、というだけでした。

マスターボールだとスーパーボールと同じことが起こるとか言っていましたが、
それはバッジの数値の前が01だったから、というだけでした。

「じてんしゃ」や「?????」ではできなかった、とか言っていましたが、
それはアイテムエリアの次の数値が見えている範囲に05や07がなかったから、というだけでした。

その程度の検証力ということです。ついでに英語力も・・・。

ハイパーボールの方が必ず成功したのは、フレンドリィショップの中は必ず
現在のエリアの縦幅の前の数値が02が設定される場所だったからのようです。

原理が分かったので、FFが来るまでは、そして買えるアイテムであれば、
さらに99個までの範囲であれば、好きにその次の数値を足し算して変えられるようになりました。

どう活用しようか・・・。
うーん・・・。

好きなアイテム手に入れる裏技使った方が便利だよな・・・バッジも満タンにできるわけじゃないし・・・。
うーん・・・・・・。

どう役立てるかは、キミ次第だ!!

・・・これでよし。
というわけで、れんださん情報本当にありがとうございました!!



2016年8月16日
◆目次に戻る◆






inserted by FC2 system