独自のデータをセーブする

はじめに

ツクールMVのセーブデータはjson。正確には以下のコードのようにLZStringライブラリを使って、Base64にしつつ圧縮している。

1
LZString.compressToBase64(json);

自分の好きなデータを保存したい場合、既にある$gameSystemとか$gameVariablesといった変数に付け足す方法がある。
デフォルトで入っているアイテム図鑑プラグインのItemBook.jsは$gameSystemを拡張して、アイテムの取得済みかどうかを保存している。以下のようにGame_System($gameSystem)に_itemBookFlagsを追加している。

1
2
3
Game_System.prototype.clearItemBook = function() {
this._ItemBookFlags = [[], [], []];
};

この方法でも問題ないが、がっつり独自のセーブデータを作った方がいいケースもある。その方法を解説する。

DataManagerを拡張

ツクールのセーブする変数は$gameで始まるのでそれにのっとる。今回は、$gameMyというのを作る。
必要なのは、初期化、セーブ、ロード、の3つ。
以下のような感じになる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(function(){
window.$gameMy = {};

var _createGameObjects = DataManager.createGameObjects;
DataManager.createGameObjects = function() {
_createGameObjects.call(this);
$gameMy = new Game_My();
};

var _makeSaveContents = DataManager.makeSaveContents;
DataManager.makeSaveContents = function() {
var contents = _makeSaveContents.call(this);
contents.gameMy = $gameMy;
return contents;
};
var _extractSaveContents = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(contents) {
_extractSaveContents.call(this, contents);
$gameMy = contents.gameMy;
};

function Game_My(){
this.saveSomething = "aaa"; //自由にデータを追加できる
}
})();

これでGame_My($gameMy)を通して自由にデータを追加して保存できる。

RPGツクールMVカテゴリの記事
アイコンセットの画像が大きすぎると黒い四角が表示される
ゲームループの話
マップのリフレッシュの話
最近制作した細かいプラグイン
ツクールのピクチャ番号の扱いについて
容量の大きい音声ファイルをロードするとクラッシュする
テストのレポートを作るプラグイン
フィルタをかけると画面全体が拡大されてしまう
並列実行中のコモンを最初から実行するプラグイン
メニューとマップのスクリーンショットについて
イベントのテストでエラーになるプラグインのケース
ロードした結果が異なる場合がある
プラグインの使用状況を出すプラグイン
装備を記憶、ロードするプラグイン
ピクチャの色あいを変えるプラグイン
ピクチャの色相を変えるプラグイン
デバッグ画面にショートカットキーを追加するプラグイン
BGSを保存・再開するプラグイン
敵キャラにデフォルトのステートを付与するプラグイン
ゲーム画面外演出を考える
ニコニコっぽいテキストを表示するプラグイン
一括入力がしやすいテキストエディタプラグインの紹介
ウィンドウをたくさん出すプラグイン
マスクを使ってゲージを作る
複雑な計算式はプラグインで記述する
シーンからマップに場所移動
シーンに引数を渡す
ウィンドウに画像を表示する
スプレッドシートからjsonにしてツクールに取り込む
ランダムにアイテムを取得するプラグイン(MV版)
ASCIIアートフィルターを試す
TweenプラグインのTorigoya_Tween.jsが便利
全てのアイテムを取得するプラグイン
loadBitmapを使うときはsmoothに注意する
簡易メッセージプラグイン