前回の記事でメモリ書き換えによるポケモンのステータス変更方法を紹介しましたが、
ちょっと重大な欠陥が見つかったので報告します。


スクリプト:手持ちの先頭をHP1に
11 01 3a 42 02 02 02
・・・で前回紹介してたと思うんですけど、
このスクリプト、手持ちの先頭のHPが256を超えてる場合256+変更後の数値になっちゃうみたいで。
うん、冷静に考えればそりゃそうだって話ですね。

メモリー表示で見るとこんな感じで変化しております。
・・・ということで調べた結果この右の01が256繰り上がった分のHP・・・だと微妙に計算合わないなぁorz
これ16bit表示だから逆順で表示されてるのかな・・・?
というわけで色々試した結果0202423bが256繰り上がってる部分のアドレスだったことが判明しましたので、

スクリプト:今度こそ手持ちの先頭をHP1に
11 01 3a 42 02 02
11 00 3b 42 02 02 02 ff
・・・このスクリプトで手持ちのHPが256を超えていようと容赦なくHP1にできます。
うん、ひどいトラップでしたね・・・
・・・ところでこのスクリプトを悪用すればちょっと面白いことができそうですよね。
というわけで電波にそそのかされるままちょっと組んでみたスクリプトがこちらです。


スクリプト:手持ちの先頭の現在、最大HPを999に
11 e7 3a 42 02 02
11 03 3b 42 02 02
11 e7 3c 42 02 02
11 03 3d 42 02 02 02
ふはははー!すごいぞー!かっこいいぞー!w
というわけであのハピナスでも成し得なかったHP999をついに拝むことができましたw

ちなみにHP1000の場合がこちら。ちゃんと表示されてません。


戯れで最大HPを65535にしてまんたんの薬を使ってみたり。
・・・計算上HPが回復しきるまで20分以上かかりますがもうここまで来るとフリーズと同義ですね。
攻撃を1025にしてみたり。・・・太い骨ガラガラが剣の舞を使うと1024くらいでオーバーフロー起こしたはずなんで
これもオーバーフロー起こすかと思いましたがメモリ書き換えするだけなら意外と大丈夫ですね。
レベルを999にしてみた結果。計算してみたところ999-256-256-256で231なんで
レベル256を越えた分はオーバーフローして反映されないようですね。ぐぬぬ・・・
・・・では前回のスクリプトを今回のデータも加えてまとめましょう。
~手持ち1匹目のステータス変更スクリプト~
11 xx 38 42 02 02 02で現在レベル(101~255にも変更可能、256を超えるとオーバーフロー)
11 xx 3A 42 02 02 02で現在HP、
11 xx 3C 42 02 02 02で最大HP、
11 xx 3E 42 02 02 02でこうげき、
11 xx 3E 42 02 02 02でこうげき、
11 xx 40 42 02 02 02でぼうぎょ、
11 xx 42 42 02 02 02ですばやさ、
11 xx 42 42 02 02 02ですばやさ、
11 xx 44 42 02 02 02でとくこう、
11 xx 46 42 02 02 02でとくぼう、
11 xx 46 42 02 02 02でとくぼう、
11 st 34 42 02 02 02で状態異常
どく:08 まひ:40 ねむり:02 やけど:10 こおり:20 もうどく:80
2バイト以上書き込みたいときは
11 xx 3A 42 02 02 11 xx 3B 42 02 02 ~02で終了
11 xx 3A 42 02 02 11 xx 3B 42 02 02 ~02で終了
※各ステータスの256を超えた分の数値は隣のアドレスで設定されてるのでこちらも変更すること
(例1:手持ち一匹目の現在HP1に→11 01 3A 42 02 02 11 00 3B 42 02 02 02)
(例2:手持ち一匹目の攻撃999に→11 E7 3E 42 02 02 11 03 3F 42 02 02 02)
※2匹目以降に適用するならアドレスを+64h(※16進数で64を足す)
※レベルアップやパソコンに預けることでステータスは元に戻る
※レベルを変更してもステータスは変わらない
※レベルダウン、最大HPを現在HP以下にするなどで音楽バグやブラックアウトの危険有り
※現在HPが0になったポケモンは瀕死、手持ち全員瀕死でも戦闘に入って行動するまでは自由に動ける
※各数値は1000を超えると正しく表示されない(例:1000→?00)
※各数値は1000を超えると正しく表示されない(例:1000→?00)
・・・こんな感じで大丈夫ですよね?今度こそ抜けはないですよね?
というわけで前回は微妙に漏れのあるスクリプト紹介ですいませんでした。
いやしかし早めに判明してよかったよかった・・・w