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ではなくオブジェクトそのものという点に注意。

参考文献は以下の通り。