こんにちは。
繧ゅ≧譖ク縺上%縺ィ縺後↑縺??縺ァ繝舌げ繧翫∪縺。
PS2のチートバグ解説③です。
前回はRTCを導入してバグらせる環境を整えました。
今回はより狙ったバグを発生させる方法を解説します。
↓予防線を張ります。
当記事で紹介している内容でトラブル・機器の故障等があっても一切責任は負いません。
自己責任でお願いいたします。
また、チートバグ中には画面の激しい点滅・大音量の音声などが発生する可能性があります。ご注意ください。
↑張りました。
■RTCの機能
チートバグでよく使う機能に絞って解説します。
各機能の詳細はwikiを参照してください。
①ノーマルモードのメイン画面
RTCがシンプルモードになっている場合、右下の「Switch to Normal Mode」を押して切り替えてください。
RTCをノーマルモードにするとこのような表示になります。
①エンジンの設定
RTCではエンジンにより異なるメモリの破損を行います。
PS2の場合「Vector Engine」が推奨されています。
各エンジンの詳細はwikiを参照してください。私もよく分かっていないので。
②出力パラメータ
Intensity:どれくらい強くバグらせるかの設定です。
Error Delay:Auto Corrupt時にメモリを破損させる間隔設定です。1で1フレーム毎に破損を行います。
Blast Radius:破損させるメモリの範囲を設定できる?みたいですが私はSPREADのままにしています。
③Glitch Harvesterの起動
RTCの目玉機能と言ってもいい「Glitch Harvester」を起動します。
狙ったバグを引き起こすために重要な機能です。
詳細は次の項で解説します。
②Glitch Harvester
狙ったバグを引き起こすための機能が集約された画面です。
①ブラストツール
Corrupt:破損を実行するボタンです。セーブステート管理で選択されているセーブステートを読み込んでからバグらせます。クイックロードとランダムコード生成・実行を行う機能です。
Reroll Selected:同じメモリ領域を値だけ変えてバグらせます。
BlastLayer:クリックでONとOFFを切り替えます。RTCは「バグっている状態」と「バグっていない状態」を両方保持しているため、リアルタイムにバグ状態とフツウ状態を切り替えられます。
②強度設定
メイン画面と共通です。
なお、エンジン等の設定はメイン画面で設定したものが引き継がれます。
Auto Corruptと違い、一度だけ破損を行うため値は大きめにすると効果的です。
③セーブステート管理
エミュレータのクイックセーブと同じような機能です。
「Change」ボタンを押すことで「Load」と「Save」ボタンが切り替わります。
セーブする場合はスロット番号を選択して「Save」ボタンを、
ロードする場合はスロット番号を選択して「Load」ボタンを押してください。
ブラストツールの「Corrupt」ボタンを押すと、ここで選択したセーブを読み込んでから破損が実行されます。
④履歴
これまでのバグらせた結果が記録されます。
履歴をクリックするとその時の状況が再現(同じ場面をロード+同じバグを実行)されます。
「To Stockpile」ボタンで右側のStockpile Managerに保存できます。
■実際にGlitch Harvesterを使ってみよう
ここまで長々と説明を書きましたが、これだけでは何が何やら分からないかと思います。
実際に私がゲームをバグらせる流れを紹介します。
①バグらせるソフトと場面を選ぶ
バグらせて面白くなりそうなシーンを選びます。
今回はドラゴンボールZのこのシーンをバグらせてみます。
バグらせる前にゲームを進めて、面白そうな場面をステートセーブしておくとシーン選びが楽になります。
②Glitch Harvesterにセーブする
PCSX2でバグらせたい場面を表示したら、Glitch Harvesterでセーブスロットを選択して「SAVE」ボタンを押します。
セーブに成功するとスロットの右に四角い枠が表示されます。
ここにはテキストを入力できます。シーンのメモなどを書いておきましょう。
③バグを実行する
今、デスクトップはこのような状態です。
先程のムービーシーンが終わってしまいバトル説明が表示されています。
ですが問題ありません。「Corrupt」ボタンを押してみます。
はいこの通り。先程セーブした場面が読み込まれました。
このように、Glitch Harvesterでは任意の場面を保存して何度でもバグらせる事ができます。
ただ残念ながら今回はバグってくれませんでした。
こういう時は強度を上げたり、エンジンの設定を変えたりすると効果があります。
今回は強度を思い切って100から52149に変更します。
※実際にやる時は500とか1000とか少しずつ刻んだほうが安全です。
この設定でもう一度「Corrupt」を押してみます。
・・・
やりました!今度はいい感じにバグりました。
奥の人(18号)が気持ち悪くなっていますね。
バグらせた記録はStash Historyに保存されます。
面白くバグったけどムービーが終わってしまった、ボタンを連打して流れてしまった、といった場合でも履歴をクリックする事で何度でも同じ場面を再現できます。
RTCを終了すると消えてしまうため、残したい場面はStockpile Managerに移した後「Save as」ボタンで保存しておきましょう。
④バグを絞り込む
18号がいい感じに壊れくれましたが、画面がグチャグチャしていて見えづらいです。
(画像では分かりませんがめちゃくちゃ点滅して目に悪いです。)
これでは美しくないため、18号をバグらせている箇所だけ絞り込みます。
まずは履歴から「Blast Editor」を開きます。
これがBlast Editorです。
各行がバグらせているアドレスとその値です。
この中のどれから1行が18号をキモくしていると思われます。
全部で3246行もあるため、1行1行確認していくと寿命が尽きてしまいます。
こんな時は二分探索で対象の行を絞り込みます。
3246行の内半分を無効化して再度ロードします。
その結果、
バグっていれば :有効状態の半分の中に対象行がある
バグっていなければ:無効状態の半分の中に対象行がある
という事が分かります。
これを繰り返していけば膨大な行数でも簡単に絞り込めます。
とても有り難い事に、RTCには二分探索のための機能が用意されています。
これを活用していきましょう。
まずは「Disable 50%」を押します。
すると、ランダムな行のチェックマークが消えて半分が無効化されました。
この状態で「Load + Corrupt」を押してみましょう。
すると、まだ一部はバグっていますが18号がフツウになってしまいました。
つまり無効化した行のどこかに18号をバグらせるコードがあったという事になります。
この場合は「Invert Disabled」→「Remove Disabled」の順でボタンを押します。
逆に有効行の中にある場合は「Remove Disabled」だけを押します。
これにより無効行と有効行を入れ替えた後、無効行を削除します。
右上のSizeが半減したのが分かると思います。
この状態で再度「Load + Corrupt」を押します。
すると今度はちゃんとバグってくれました!
後はこの作業を繰り返し、最後の1行になるまで続けます。
・・・
はい、無事に18号がキモくなるコードを絞り込む事ができました。
最後に「BlastLayer」>「Save As to File」から保存しておきましょう。
こうする事で、好きな時にこのバグを呼び出せるようになります。
「Load From File」で読み込み(表示中の内容は上書きされるため注意)、「Import Blastlayer」で現在の状態に追加できます。
もしも18号が緑色になるコードとかが見つかれば、今回保存した行と組み合わせて「肌が緑色で腕が伸びている18号」とかを作れますね。
(18号ファンの人ごめんなさい)
完成したバグはこんな感じ。
ノイズがなくなってかなり見やすくなりました。
二分探索の手順をまとめると以下の通りです。
「Disable 50%」→「Load + Corrupt」の順でクリック
バグった :「Remove Disabled」をクリック
バグらない:「Invert Disabled」→「Remove Disabled」の順でクリック
→再度「Disable 50%」→「Load + Corrupt」をクリックして繰り返し
こうやって「Glitch Harvesterでランダムにバグらせる」→「良さそうなバグが出れば絞り込み」を繰り返すのが私のやり方です。
領域を絞り込んだ後は、値だけ変えてみる、メモリエディタで周辺の値を書き換える などのアプローチも有効です。
Blast Editorの「Address」列を右クリックして「Open Selected Address in Hex Editor」からもメモリエディタを表示できます。
今回紹介したのは例のひとつに過ぎないので、色々試行錯誤して自分なりの方法を見つけていただければと思います。
最後に、この方法でバグらせて作った動画を貼っておきます。
よかったら見てください。