RPGツクールMVで用意されている$data変数と$game変数についてのまとめ
RPGツクールMVでは、プラグイン等で使えるデータとして$dataHogeHoge
と$gameHogeHoge
変数が用意されている。
この記事では、これらのデータの使い方についてまとめていく。
$dataHogehoge変数について
ツクールMVには$dataActors
や$dataArmors
などのゲーム中に使える静的データが存在している。
これらのデータはゲームプロジェクトのdata
ディレクトリに存在しているJSONファイルをJavaScriptのオブジェクトに変換したものであり、ゲーム中にいつでも使えるグローバル変数となっている。
実際にゲームを開いてコンソール画面で$daatActors
と入力してデータを見てみよう。
$dataActors
変数は、data/Actors.json
をオブジェクト化したものに過ぎないということがわかる。
$dataActors
(5) [null, {…}, {…}, {…}, {…}]0: null1: battlerName: "Actor1_1"characterIndex: 0characterName: "Actor1"classId: 1cssGauges: []cssbgi: []equips: (5) [1, 1, 2, 3, 0]faceIndex: 0faceName: "Actor1"id: 1initialLevel: 1maxLevel: 99meta: {}name: "ハロルド"nickname: ""note: ""profile: ""traits: []__proto__: Object2: {id: 2, battlerName: "Actor1_8", characterIndex: 7, characterName: "Actor1", classId: 2, …}3: {id: 3, battlerName: "Actor3_8", characterIndex: 7, characterName: "Actor3", classId: 3, …}4: {id: 4, battlerName: "Actor2_7", characterIndex: 6, characterName: "Actor2", classId: 4, …}length: 5__proto__: Array(0)
多くの$dataHogehoge
変数は対応するJSONファイルをJavaScriptのオブジェクトにしたものだが、$dataMap
変数のみ少々異なる動きをする。
$dataMap
変数は現在のマップのMap00X.json
のデータを格納するという役割がある。
つまり、現在のマップによって$dataMap
の中身が動的に変化するわけだ。
逆に言えば、現在のマップのデータを参照したければ$dataMap
を使えばOKといえる。
$gameHogehogeについて
$gameHogehoge
変数は、動的に変化するゲームデータを保持するオブジェクト。
例えば、スイッチを管理する$gameSwitches
や現在のパーティの状況を管理する$gameParty
等がある。
では、主要な変数の特徴をまとめていく。
$gameSwitches
名前の通りスイッチを管理している変数。
使えるメソッドはvalue(switchId)
とsetValue(switchId, value)
であり、以下のように使う。
// スイッチ番号3の状態を返す true or false
const temp = $gameSwitches.value(3);
// スイッチ番号12の状態をセットする
$gameSwitches.setValue(12, true);
以下は参考記事。
$gameParty
パーティに関するデータを管理する変数。例えば、以下のようなデータを管理している。(他にもある)
- パーティのメンバーの
actor
- 所持金
- 持っているアイテム、武器、防具
$gameParty
変数にはデータを取得、保存するためのメソッドが用意されている。
例えば、現在のパーティの一覧を取得したい場合は$gameParty.members()
メソッドを使う。
let partyMembers = $gameParty.members();
// パーティメンバーを順番に処理する
partyMembers.forEach(function(actor) {
console.log(actor.name()); // キャラクターの名前
console.log(actor.level); // レベル
console.log(actor.hp); // 現在のHP
console.log(actor.mhp); // 最大HP
});
また、パーティにメンバーを加える、外すをしたい場合は以下のようにする。
// ID:2のアクターをパーティに追加
$gameParty.addActor(2);
// ID:1のアクターをパーティから削除
$gameParty.removeActor(1);
お金に関する処理だと以下のメソッドを使うとよい。
// お金を1000G増やす
$gameParty.gainGold(1000);
// お金を2000G減らす
$gameParty.loseGold(2000);
// 現在の所持金を取得 int
let currentGold = $gameParty.gold();
アイテムや武器、防具などの管理、取得、削除などをしたい場合は以下のようにする。
多くの場合は$dataItems
や$dataWeapons
変数などと併用して使うようになると思う。
// アイテムの一覧
let items = $gameParty.items();
// 武器の一覧
let weapons = $gameParty.weapons();
// 防具の一覧
let armors = $gameParty.armors();
// 特定のアイテム/武器/防具の所持数を確認
let itemCount = $gameParty.numItems($dataItems[1]); // ID:1のアイテム
let weaponCount = $gameParty.numItems($dataWeapons[1]); // ID:1の武器
let armorCount = $gameParty.numItems($dataArmors[1]); // ID:1の防具
// アイテムの増減(正の値で追加、負の値で削除)
$gameParty.gainItem($dataItems[1], 1); // ID:1のアイテムを1個追加
$gameParty.loseItem($dataItems[2], 1); // ID:2のアイテムを1個削除
// 武器の増減
$gameParty.gainItem($dataWeapons[1], 1); // ID:1の武器を1個追加
$gameParty.loseItem($dataWeapons[2], 1); // ID:2の武器を1個削除
// 防具の増減
$gameParty.gainItem($dataArmors[1], 1); // ID:1の防具を1個追加
$gameParty.loseItem($dataArmors[2], 1); // ID:2の防具を1個削除
アイテムなどのデータの指定が、IDではなくオブジェクトそのものという点に注意。
参考文献は以下の通り。