PRGツクールMVではプラグインでゲームシステムの変更ができますが、それに伴ってセーブデータに自作のデータを追加したいということもあるかもしれません。
今回はプログラムで新しいデータを追加して、それをセーブデータとして利用(セーブ&ロード)する方法を解説していきます。
RPGツクールMVでは、セーブデータとしては所持金やアクター・アイテムなどをセーブデータとして扱っています。
セーブすることで、その時の状態をファイルに書き出しているのです。
ゲームのプロジェクトフォルダの中にsaveというフォルダがあって、その中には以下のようなセーブファイルがあります。

file1.rpgsave~file17.rpgsaveが個別のセーブデータとなっています。
今回はこれらの個別のファイルにデータを追加する方法と、追加したデータを読み込む方法を解説します。
ゲームデータの生成とセーブ&ロード
初めにゲームデータがどのように生成されるのかと、それらのセーブとロードについて説明します。
DataManager.createGameObjectsでゲームデータ生成する
rpg_managers.jsの200行目にDataManager.createGameObjectsという関数があります。これはゲームで使用るつデータのオブジェクトを生成している関数です。
自作のゲームデータを追加する場合は、ここに処理を追加します。
とはいえ、PRGツクールMVではソースコードを直接変更するのではなく、プラグインでシステムの変更をするので、実際には以下のようなコードをプラグインのソースコードに追加することになります。
var createGameObjects_func = DataManager.createGameObjects;
DataManager.createGameObjects = function() {
createGameObjects_func.call(this);
$myData = new Game_MyData();
};
このソースコードでは、既存のDataManager.createGameObjects関数を呼び出した後に、Game_MyDataという自作のデータを生成しています。
自作のゲームデータは必ずしも、DataManager.createGameObjects関数内で作る必要はありませんが、ゲームデータ生成の処理がいろいろな箇所に散らばってしまうと面倒なので、特別な理由がないならこの関数でやるようにしましょう。
DataManager.makeSaveContentsでセーブデータを作成
次にゲームデータをセーブデータとして保存する方法について説明します。
ゲームデータをセーブする処理はrpg_managers.jsの430行目のDataManager.makeSaveContents関数で行われています。なので、この関数に自作データをセーブする処理を追加すれば、セーブファイルに書き込むことができます。
以下は、$myDataというデータをセーブデータとして書き込む処理です。
var makeSaveContents_func = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
var contents = makeSaveContents_func.call(this);
contents.myData = $myData;
return contents;
};
セーブデータはjson(JavaScriptのオブジェクト)として保存されます。なので、そのオブジェクトにmyDataというデータを作ってあげて、そこに$myDataを代入しています。
こうすることで$myDataオブジェクトがセーブデータとして保存されるようになります。
DataManager.extractSaveContentsでセーブデータをロード
rpg_managers.jsの446行目のDataManager.extractSaveContents関数でセーブデータのロードの処理をしています。
この関数に追加した自作データを取得する処理を追加します。以下は、myDataを取得して、プログラムの変数$myDataに代入するソースコードです。
var extractSaveContents_func = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(contents) {
extractSaveContents_func.call(this, contents);
$gameMyData = contents.myData;
};
$myDataを参照することでプログラムから自作データを利用できます。
サンプルコード
以上が自作データの生成からセーブデータのセーブ&ロードまでの処理になります。
プラグインのソースコードをまとめておきます。
//=============================================================================
// myData.js
//=============================================================================
/*:
* @plugindesc 自作データセーブ用プラグイン
* @author カレーねずみ
*
* @help 自作データをセーブファイルにセーブ&ロードする。
*
*/
(function() {
// 自作データのクラス
function Game_MyData() {
this.initialize.apply(this, arguments);
}
Game_MyData.prototype.initialize = function() {
this._myData = '自作データ';
};
Game_MyData.prototype.myData = function() {
return this._myData;
};
// ゲームデータの生成
var createGameObjects_func = DataManager.createGameObjects;
DataManager.createGameObjects = function() {
createGameObjects_func.call(this);
$gameMyData = new Game_MyData();
};
// セーブデータの展開
var extractSaveContents_func = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(contents) {
extractSaveContents_func.call(this, contents);
$gameMyData = contents.myData;
};
// セーブデータの作成
var makeSaveContents_func = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
var contents = makeSaveContents_func.call(this);
contents.myData = $gameMyData;
return contents;
};
})();
このプラグイン自体はなにもしませんが、プラグイン開発の参考にしてみてください。
コメント