はじめに
ツクール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)を通して自由にデータを追加して保存できる。