講座02 〜パラメータ改造〜

〜はじめに〜

プログラム改造をメインに話を進めるつもりでしたが、アドレスの概念をすっぽかして解説すると、
後々が大変そうなので、やっぱり基本から説明することにします。

そもそもパラメータ改造とは

ゲームにはどういう形であれ、キャラクターの能力…つまりパラメータが存在します。
RPGで言う「HP」や、アクションゲームで言う「残機」などがそれですね。
そしてプレイ中には、必ずどこかにデータが数値として存在します。
このデータを手動で書き替えることにより、パラメータを任意の数値に変更する作業…
まぁ、これがパラメータ改造の基本概念です。

どんなパターンがあるか?

どこかにデータが数値として存在…と言っても、格納されている場所は色々と種類があります。
例えばセーブデータの場合、パラメータはセーブファイルに存在しますが、
リアルタイムにプレイしているゲームのパラメータはメモリプロセス上に存在します。

セーブファイルの場合

その名のとおり出力先がファイルですので、ファイルを編集するツール…前回紹介した、
バイナリエディタで内容を書き替えることができます。
仮に、キャラのパラメータが…
名前:はむ
HP:270
MP:50

という状態でセーブしたのなら、暗号化でも施されていない限りはファイル内に同様の
メッセージ(名前など)もしくはパラメータ(HPなど)が格納されているはずです。

バイナリエディタごとに操作方法は異なりますが、たにしげさん作のSFXの場合、
「セーブファイルを開く」→「サーチ」→「対象パラメータの入力」
の手順で、どこにデータが格納されているかを知ることができます。
あとは、バイナリエディタの書き替え機能を使って、能力を編集すればOKです。

ちなみに、セーブファイル名を探すときには…
1.ファイル名が SAVE**.DAT 、***.SAV、SAVEDATA、FLAG* などである。
2.ゲームのフォルダ内で、もっとも最新のファイル(たびたび更新されている)である。
などを参考にすれば見つけやすいです。

メモリプロセスの場合

上記と異なり、現在プレイしているゲームをリアルタイムで書き替えることが可能です。
こちらはプロセスエディタ(DBxSTANDなど)を用いて改造します。

で、改造の手順ですが、プロセスエディタの場合は基本的に、
「ゲームとプロセスエディタを起動」→「ゲーム名を選択」→「サーチ」
というパターンが一般的です。
また、セーブファイルのサーチではファイル同士の比較により、差異からデータ格納位置を取得
という方法が多いのですが、プロセスエディタの場合では「リアルタイム」という特性を生かし、
ゲーム上でパラメータを変動させ、複数回、サーチするという方法が多いです。
まぁ、プロアクションリプレイなどを日ごろから使ってる人には馴染み深いかもしれません。

データ格納位置について

バイナリエディタはファイル編集、プロセスエディタはメモリプロセス編集〜…というわけで、
この2つがまったく別物であることは分かったはずです。
ところが、別物であるにも関わらずデータ格納位置を表す用語が同じだったりするという、
微妙に困った部分があります。
バイナリエディタでサーチしたものをプロセスエディタに流用することはできませんし、
もちろんその逆も不可ですので、誤って書き替えてしまうと、データが壊れてしまいます。

データ格納位置のことを、一般的にオフセット、アドレス、番地などと呼ぶのですが、
バイナリエディタとプロセスエディタのデータ格納位置の表記について、どれを使えば良いか〜
などの正しい決まりは無いっぽいです。

とりあえず、一般的には
バイナリエディタ = オフセット
プロセスエディタ = アドレス
って感じに使われてますので、自分もこの方式を採用しています。
以後、このような表記が出たときは迷わないように、覚えておいてくださいな。

さいごに

とりあえず、パラメータ関連のネタはここまでにして、次回からはプログラム改造に入ります。
まぁ、地道〜〜〜にぼちぼちやっていくです。

>>NEXT STEP