《RPGツクールMV》プラグインでセーブデータを改造・編集する方法

セーブデータの改造・編集 RPGツクールMV

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;
  };
  
})();

このプラグイン自体はなにもしませんが、プラグイン開発の参考にしてみてください。

コメント

タイトルとURLをコピーしました