MZのコアスクリプトは、膨大な関数の集合体です。
そしてその関数はオブジェクトのプロパティというかたちで定義されています。
本項では、ついにコアスクリプトの関数の利用方法を学びます。
ゲーム変数の内容を取得するスクリプトは以下の通りです。
デベロッパツールで『$game』まで入力すると『$gameVariables』が候補にでてきます。
$gameVariables.value(1);
まず『$gameVariables』ですが、これはゲーム変数を扱うための『オブジェクト』でコアスクリプトで定義されています。
次に『value』ですが、これは『$gameVariables』が持つプロパティであり、関数です。
これもコアスクリプトに定義されています。
引数の『1』は変数番号です。
つまり上記スクリプトを実行すると、1番の変数の値が戻り値として返ってきます。
もし、この説明で何を言っているのか分からない部分があれば、『関数』の項目をもう一度読み直してみましょう。
グローバル変数
プログラム上のどこからでも参照できる変数のことを『グローバル変数』と呼びます。
コアスクリプトにもいくつか定義されていて、『$gameVariables』など記号『$』から始まる変数はほぼグローバル変数と思って間違いありません。
JavaScriptではトップレベル(何らかの関数ブロック内部ではない場所)で宣言した変数はグローバル変数として扱われます。
(宣言せずに使用した変数もグローバル変数になりますが、この方法でグローバル変数を使おうとするのは無関係の場所でエラーを引き起こす可能性があり非常に危険です)
$を先頭に付けているのはグローバル変数であることを明示する意味もありますが、前々作であるRPGツクールVXAce以前で使われていたRGSSに『$を先頭に付与した変数はグローバル変数になる』というルールがあったためその名残でもあります。
次にゲーム変数に値を設定するスクリプトについて解説します。
$gameVariables.setValue(1, 3);
『setValue』も『value』と同じく『$gameVariables』が持つ関数です。こちらは引数を二つ取ります。
最初の引数は変数番号、次の引数は設定値です。
設定のスクリプトを実行後に、再度取得のスクリプトを実行すると、設定値が反映されていることを確認できると思います。
MZには膨大なデータベースがあります。
ここで入力した値はすべて『$dataXXX』というグローバル変数に格納されています。
たとえば、以下のスクリプトを実行してみましょう。
$dataActors[1].name;
すると、データベース『アクター』で登録した一番目のアクターの名前が返ってくると思います。
『$dataActors』はコアスクリプトで定義された配列の変数で、添字はデータベースのID、要素はアクターのデータベースの登録値が格納されたオブジェクトです。
ただし、添字が0の要素だけはnullが入っていますので気を付けましょう。
『name』というのは『$dataActors』の各要素であるオブジェクトが持っているプロパティのひとつで『名前』の入力値が格納されています。
他のデータベースについても同じ要領で定義されていて、以下が一覧です。
| 変数名 | 説明 |
|---|---|
| $dataActors | アクター |
| $dataClasses | 職業 |
| $dataSkills | スキル |
| $dataItems | アイテム |
| $dataWeapons | 武器 |
| $dataArmors | 防具 |
| $dataEnemies | 敵キャラ |
| $dataTroops | 敵グループ |
| $dataStates | ステート |
| $dataAnimations | アニメーション |
| $dataTilesets | タイルセット |
| $dataCommonEvents | コモンイベント |
| $dataSystem | システム、用語 |
| $dataMapInfos | マップツリー情報 |
| $dataMap | マップ情報 |
全てのデータベースの全てのプロパティについて、この場では列挙できないので別途リファレンスを用意してあります。
リファレンスを参照すれば、データベースで入力した全ての情報を思いのままに取得できます。
ゲーム中で扱われる変数は、ゲーム変数以外にもたくさんあります。
例えば、パーティメンバーのHPや持っているアイテム、敵キャラの残りHPなどです。
それらはデータベースと異なり、ゲームの進行状況によって値が変化します。
本項では便宜的にゲームオブジェクトと呼びます。
ゲームオブジェクトは『$gameXXX』という変数に格納されています。
ゲーム変数が入っていた『$gameVariables』もそのひとつです。
| 変数名 | 含まれる情報の説明 | セーブデータに含まれるかどうか |
|---|---|---|
| $gameTemp | 一時的に格納したい情報 | × |
| $gameSystem | システム設定情報 | 〇 |
| $gameScreen | 画面効果に関する情報 | 〇 |
| $gameTimer | タイマーに関する情報 | 〇 |
| $gameMessage | メッセージや選択肢に関する情報 | × |
| $gameSwitches | スイッチ情報 | 〇 |
| $gameVariables | 変数情報 | 〇 |
| $gameSelfSwitches | セルフスイッチ情報 | 〇 |
| $gameActors | 全アクターの情報 | 〇 |
| $gameParty | パーティに関する情報 | 〇 |
| $gameTroop | 敵グループに関する情報 | × |
| $gameMap | マップに関する情報 | 〇 |
| $gamePlayer | プレイヤーに関する情報 | 〇 |
| $testEvent | イベントテストの情報 | × |
| DataManager | データベースの読み込みを扱う関数群 | × |
| ConfigManager | オプション設定を扱う関数群 | × |
| StorageManager | ファイル入出力を扱う関数群 | × |
| FontManager | フォントファイルを扱う関数群 | × |
| ImageManager | 画像の読み込みを扱う関数群 | × |
| EffectManager | パーティクルエフェクトを扱う関数群 | × |
| AudioManager | BGMなどの音声の再生を扱う関数群 | × |
| SoundManager | システム効果音を再生する関数群 | × |
| TextManager | 用語を扱う関数群 | × |
| ColorManager | システムカラーを扱う関数群 | × |
| SceneManager | シーン制御を扱う関数群 | × |
| BattleManager | 戦闘全般を扱う関数群 | × |
| PluginManager | プラグインを扱う関数群 | × |
各オブジェクトを通じて情報を取得する具体的な方法もリファレンスにまとめています。
上の表におけるゲームオブジェクトは大きく二つに分けられています。
『$gameXxx』というオブジェクトと『XxxManager』というオブジェクトです。
『$gameXxx』は、関数とデータをまとめて保持しています。
例えば『$gameParty』は、現在のパーティに関する情報を保持しているのと同時に、パーティにメンバーを追加する関数を提供しています。
一方、Managerは原則として関数のみを提供します。
表に示したとおり、用途ごとに分かれていて、画像の読み込みは『ImageManager』、音声に読み込みは『AudioManager』といった具合です。
オブジェクト指向
スクリプトに興味をもった人なら、オブジェクト指向について一度くらいは聞いたことがあると思います。
オブジェクト指向を簡潔に説明することは難しいですが、あえて言うと『$gameXxx』のように関連する『関数』と『データ』とをひとまとめにして扱うことがオブジェクト指向です。
オブジェクト指向では関数のことを『メソッド』と呼びます。
データは原則として隠されていて、メソッドを通してのみ外部から取り扱いできます。データをどのように扱うかはメソッドが決めます。
この考え方は、スクリプトを扱ううえで必ずしも知る必要はないですが、いつかプログラム設計が必要になるほど大規模なプラグインを作ろうとしているなら知っておくべき考え方です。