このチートテーブルおよびLua Scriptを使用するには、
OSないしコンピューターそのものを破壊 しうる、
非常に危険なプログラムを実行する必要があります。
少なくとも、適当に弄ってたらブルスク連発やらOS再インストールやらは日常茶飯事です(n敗)。
実行は 自己責任 にてお願いします。
PSP用エミュレータ“PPSSPP”と、
Windows用メモリエディタ/デバッガ“Cheat Engine”
を併用します。
後者に関しては、最新版=英語版ということになりますが、 OSやCPUの動作にさえ干渉する非常に不安定なプログラムのため、 英語苦手勢であっても最新版を利用することを強く強く推奨します。 スマホの翻訳アプリでも使いながら利用してください。私はそうしました(英語苦手勢)。
CheatEngine初回起動時のチュートリアルは、最初のほうだけでも真面目にやっておくことを推奨します。
あと、エミュレータで実行可能なFate/EXTRAのゲームデータが必要です。 手持ちのゲームをエミュレータ用に取り出す方法?ググれ。
“Cheat Engine”は、起動中の他のWindowsタスクプロセスに対して、
特定のメモリアドレスの値を書き換えたり、
Lua Scriptを使ってマクロを実行したり、
アセンブラコードを表示したりデバッグしたり、
その他なんかすげー色々な事ができる解析用ソフトウェアです。
PSPエミュレータであるPPSSPPもWindows用ソフトには違いないため、 Cheat Engineを使用して、やや強引にチートコードの解析や実行が可能です。
配布しているチートテーブルには、HPや手番、その他調査に必要だった各種パラメータの、 実際の値を格納しているアドレスリストと、それらを監視/改竄しつつ、 キーボードの押下処理を実行するLua Scriptを含んでいます。
なお、PPSSPPにはデフォルトでチート実行機能やメモリデバッガがついていますが、 (2021年時点では)機能的に貧弱で使い物にならなかったので、見なかった事にします。
初手でいきなり配布されているチートテーブルを読み込んではいけません。 ましてやLua Scriptを実行してはいけません。最悪OSが破壊されます。マジで。
ダウンロードした直後のチートテーブルは、ほぼ100%動作しません。 何故かというと、Cheat EngineはPPSSPPがエミュレートしている「ゲーム」ではなく、 PPSSPPという「ソフトウェアそのもの」のメモリ開始アドレスしか知らないためです。
つまり、PPSSPPのバージョンが違う、実行しているパソコンが違うなどの理由で、 HPなどの情報が格納されるメモリアドレスがズレると、まったく正常に動作しなくなるという事です。
よって、まず最初に
「『ゲームデータが格納されているアドレス』の基準となるアドレス」
を探して、設定する必要があります。
- 一応、アセンブラコードの並びから自動検索させるような手法が無いわけでは無いっぽいけど、過ぎた魔術は身を滅ぼすと言いますか…(上手くいかなかったので投げた)
- PPSSPP上でFate/EXTRAを起動し、「デバッグ」→「メモリビューワ」を開きます。
- PSP上で使用されるメモリ領域の種類ごとにショートカットがあるはずなので、「0x08800000 (User memory)」にジャンプします。
- PSP上で「ゲームが」使用可能なアドレス領域はこれ以降なので、この先頭のアドレスが基準としては最適です。
- より厳密にいえば先頭のほうは予備アドレスで、ゲーム側は使用できないので、高度なチートプログラムを実行する場合に変数領域代わりに使ったりできます。
- PSP上で「ゲームが」使用可能なアドレス領域はこれ以降なので、この先頭のアドレスが基準としては最適です。
- 後々目印にするため、08800000の行をすべて「11」や「22」などで埋めます。
- 「11 45 14 19 19」とかにするとエンディアン変換で混乱します(1敗)
- 以下、“Cheat Engine側の準備”を完了するまで、ゲームを起動したままにしておきます。
- 諸々の確認のため、ゲームはある程度進めておくとベターです。鯖はたぶんキャスターがええ。他の鯖で動くか試してないし。
- Cheat Engineを起動します。
- 起動直後にチュートリアルが実行されるので、せめてアセンブラコード云々のあたりまでは指示に従ってチュートリアルを行うことを強く強く推奨します。
- 英語が読めない?スマホの翻訳アプリ使え。
- 以下、チュートリアルやってりゃ理解できることは説明を省きます。
- Edit > Settings > Scan Settingsから「MEM_MAPPED」を有効にします
- これは、検索のし易さや処理負荷軽減のために「あまり有用でないと思われるアドレス領域」がデフォルトで検索対象外になっており、今回探したいゲームデータがそこに含まれているためです。
- 余裕がある場合はほかの設定項目も確認するべきですが、前述したように下手すりゃOSごとぶっ壊れるような代物なので、変更する場合は必ず設定項目の意味を1つ1つ調べながら行って下さい。
- PPSSPPのプロセスにフックします。
- 「Array of byte」「Exact Value」で「11111111111111111111111111111111」など、先ほどPPSSPP側で入力した値で検索します
- メモリの中身は、厳密には行ごとに区切られたりしてる訳じゃないので、開始位置がズレないようにキッチリ同じ値で検索しましょう
- PPSSPP側で値を書き換えるなどして値を4つぐらいまで絞り込みます。
- その中のいずれかが「現在の」ゲームの先頭アドレス(ベースアドレス)なので、メモっておきます。
- New Scanで「8 Bytes」「Exact Value」で、先ほどメモったアドレスを検索します。
うまくいけば、 PPSSPPWindows64.exe+XXXXXX 的な、静的アドレス(ソフトウェアを起動し直しても変動しないアドレス)が得られるはずです。その値をメモっておきます。
上記の手順を完了したあと、以下を実行します。
- 配布中のチートテーブルを開きます
- 初回実行時のスクリプトは開くたびに1回だけ実行して下さい
- 中身はLua Script書いたりチートコード調べたりするために、投稿者が適当に書いたりCEフォーラムから拾ってきたりしたやつで、害は無いです。
- というか害があるかを判断できない人はこんなソフト触っちゃダメなのでは…?
- 中身はLua Script書いたりチートコード調べたりするために、投稿者が適当に書いたりCEフォーラムから拾ってきたりしたやつで、害は無いです。
- 初回実行時のスクリプトは開くたびに1回だけ実行して下さい
- Address Listの「BaseAddress」のAddress(Valueではありません)を、先ほど調べた PPSSPPWindows64.exe+XXXXXX に置き換えます。
- 上手くいけば、「PlayerHP」などのValueに、現在HPなどが表示されるようになっているはずです。
- Enemy関連などはおかしな値が表示されたままだと思いますが、少なくとも「PlayerHP/MP」「PPT」「Player Status」あたりは、基本的に常に正常な値になっているはずです。
この時点で、HPなどが正常に表示されていない場合、何かしらの異常が発生しているため、 絶対にこの先の手順を実行しないで下さい。
- 上手くいかなかった場合、その原因は投稿者には特定しようがないので、頑張って!(無責任)
- Cheat Engineのチュートリアルの中でやったように、現在HPなどを検索してそのアドレスをFind out what writes to this addressして、引っかかったログの中からベースアドレスっぽいものを探していくのも一手です。
- 一応補足しておくと、Fate/EXTRAは恐らくほぼすべての主要データに「BaseAddress+XXXXXX」という1段階の相対アドレスでアクセス可能なため、割とわかりやすいです。たぶん。
- ゲームによっては「BaseAddress+XXXXXXに格納されているデータをメモリアドレスとして扱い、そこからさらに+XXXXXX」みたいなことを何度も繰り返して漸く目的のデータにたどり着くようなのもあるらしい。めんどくせえ。
- 一応補足しておくと、Fate/EXTRAは恐らくほぼすべての主要データに「BaseAddress+XXXXXX」という1段階の相対アドレスでアクセス可能なため、割とわかりやすいです。たぶん。
- バージョン違いによってアドレスがズレるかは未確認ですが、そもそも早期に出荷されたUMD版を直接吸い出した場合を除いてver1.01しか出回ってないと思う。念のために言うと日本語版です。
- もしかしたら「吸い出し方」によってアドレスがズレる可能性はあるかも。少なくとも投稿者は何種類か吸い出し方を試して全部同じハッシュ値にできたので、色々試してみて下さい。
- Cheat Engineのチュートリアルの中でやったように、現在HPなどを検索してそのアドレスをFind out what writes to this addressして、引っかかったログの中からベースアドレスっぽいものを探していくのも一手です。
以下は 事前準備 を終わらせ、自分のサーヴァントのHPなどが Cheat Engine上で正常に表示されるようになっていることを前提とします。 そうでない場合、 最悪OSが破壊されます。マジで。
- PPSSPPの設定で、○ボタンを「C」キー、×ボタンを「X」キー、十字キーを矢印キーに割り当てていることを確認します。
- 気に入らん場合は自分でLua Script書き換えてくだち
- PPSSPP上でゲームを進行し、ボス戦までゲームを進めます。
- 配布中のチートテーブルでは2回戦以降にしか対応していません
- まあHPチートとか駆使すれば一瞬じゃろ?
- 配布中のチートテーブルを開き、PPSSPPのプロセスにフックします。
- Cheat Engine上でPlayerHPとかがちゃんと表示されてるか確認!(しつこい)
- ボス戦の最中に、おもむろに「Auto battle BOT」を有効化します。
- うまくいけば、スクリプトウィンドウに「経過ターン,残りHP,最大HP,1手目,2手目,3手目,4手目,5手目,6手目」と表示されます。
- エラーが出た場合、すみやかにAuto battle BOTのチェックを外し、無効化して下さい。
- PPSSPPのウィンドウにフォーカスすると、戦闘が自動で開始され、相手の行動パターンがメモされます。
ソースコードとかテーブルとかめっちゃ綺麗に整理してるし(当社従来品比)、見ればわかるじゃろ?
大半の設定はAuto battle BOTのスクリプトの上部に纏めてるんで、適宜調整して下さい。
自分で色々弄ってみたくなった場合は、とりあえずCheatEngineの公式wiki読むのがおすすめ。 あとCheat Engineフォーラム。