《RPGツクールMV》プラグイン開発の基本

RPGツクールMV

PRGツクールMVでツールでできないことをする場合、JavaScriptで書かれたシステムの部分を書き換える必要があります。

プログラミング言語でシステムを変更するということは、RPGツクールXPからできるようになりましたが、MVではプログラミング言語にJavaScriptが起用されたことで、プラグインという形式でよりシステムの変更がしやすくなりました。

今回はPRGツクールMVのプラグインの開発についての基本を解説していきます。

ゲームシステム変更はプラグインでやろう!

ゲームシステムの変更する場合、JavaScriptで書かれたシステムのプログラムを書き換えることでもできるのですが、ツクールMVではシステムのソースコードを直接書き換えるのではなく、プラグインの利用が推奨されています。

ソースコードを直接変更してしまうと、不具合があって元に戻そうとしたときに、元の状態に戻すのが難しい場合もあります。プログラムになれていない人ならなおさらです。

プラグインを使うことで、問題が起きてもプラグインを停止/削除するだけで元に戻すことができます。

また、システムのプログラミング言語にJavaScriptを使用することで、既存のソースコードを書き換えることなく、既存の処理を変えることができるようになりました。

ゲームシステムプログラムの基礎知識

RPGツクールMVでは、ゲームで利用されるマップやイベントの処理などをJavaScriptで記述しています。

プラグインの開発において、既存のJavaScriptプログラムを理解することは重要になってくるので、ここで解説していきます。

システムを構成するJavaScriptプログラムのソースコードは8つのファイルがあります。

main.js最初に実行されるプログラムです。これを変更する必要はありません。
plugins.jsプラグインの情報が書かれたファイルです。ツールでプラグインを追加すると、このファイルに情報が追記されます。
rpg_core.js描画処理などの基本的な処理を担当します。プラグインの開発で使いことはほぼありません。
rpg_managers.jsゲームを制御するプログラムが記述されています。場合によっては変更することもあります。
rpg_objects.jsゲームで使用する様々なデータを扱います。ツールで作成した各種データはjsonファイルとして保存されて、このファイルに記述されたオブジェクトとして利用されます。
rpg_scenes.jsタイトル画面やマップ画面などをシーンという単位で管理するプログラムです。プラグイン開発ではこのファイルに記述されたシーンを元に新しいシーンを作ったりします。
rpg_sprites.jsゲームで使われる画像を扱います。プラグイン開発ではあまり利用しません。
rpg_windows.jsゲームで利用されているウィンドウを担当するプログラムです。シーンと同様にプラグイン開発ではよく利用されます。

プラグイン開発でよく利用するのは、rpg_scenes.jsとrpg_windows.jsで、ゲーム全体の制御に関してはrpg_managers.jsとrpg_objects.jsを確認することが多いです。

なので、rpg_scenes.js/rpg_windows.js/rpg_managers.js/rpg_objects.jsをよく理解することでプラグイン開発はやりやすくなります。

プラグイン開発で覚えておきたいJavaScript

プラグインを開発するにあたって覚えておきたいJavaScriotの知識を説明します。

関数を変数として利用する

プラグイン開発すると次のようなソースコードを見かけると思います。

var plugin_command_func = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
  plugin_command_func.call(this, command, args);

};

関数を変数として利用しているのは1行目です。JavaScriptでは関数を変数へ代入して利用することができます。

変数から関数を呼び出しているのは3行目です。この書き方はプラグイン開発でよく使うので是非覚えておきましょう。

このようにすることで、変更する前の関数を上書きしている関数の中で呼び出すことができます。

つまり、既存の処理を変更することなく、追加の処理を記述できるということです。

既存のクラスを継承する

JavaScriptはオブジェクト指向プログラミングができる言語です。PRGツクールMVでもオブジェクト指向なプログラミングがされています。

ここでは、オブジェクト指向の詳しい解説はしませんが、データと処理のまとまりをクラスと言い、その実態をオブジェクトやインスタンスと言います。

プラグイン開発では、このクラスを拡張していくことが必須になっていて、クラスを継承することで既存のクラスを利用しつつ新しい処理を追加していきます。

クラスを継承するソースコードは次のようになります。

function Scene_MPWF_MENU() {
  this.initialize.apply(this, arguments);
}

Scene_MPWF_MENU.prototype = Object.create(Scene_MenuBase.prototype);
Scene_MPWF_MENU.prototype.constructor = Scene_MPWF_MENU;

Scene_MPWF_MENU.prototype.initialize = function() {
  Scene_MenuBase.prototype.initialize.call(this);
};

このコードではScene_MenuBaseというクラスを継承してScene_MPWF_MENUという新しいクラスを定義しています。

この書き方はプラグイン開発で非常によく使います。是非覚えておきたいところです。

まずはシーンとウィンドウの使い方を覚えよう

ゲームシステムでメインとなってくるのは、ゲームの進行に合わせて画面を変更するシーンとその中で使われるウィンドウです。

まずは、この2つの関係を理解するとプラグイン開発がやりやすくなります。

ここでは、よく利用するシーンとウィンドウを説明します。

Scene_Mapマップ画面を処理するシーンです。マップ画面で自作のウィンドウを表示したりするときは、Scene_Mapに処理を追加します。
Scene_Menuメニュー画面のシーンです。メニューに自作の項目を追加するときなどは、Scene_Menuに処理を追加します。
Scene_Battleバトル画面のシーンです。バトルの処理を変更するときに使います。
Window_BaseWindow_Baseは継承させて利用されます。自作のウィンドウを作るときに使います。
Window_SelectableWindow_Selectableは選択肢があるウィンドウを作るときに使います。継承させて使います。
Window_MenuCommandメニューウィンドウです。Window_Selectable→Window_Commandと継承されて作られています。

シーンの中でウィンドウが使われるという関係があります。開発したいシーンとその中で使われているウィンドウを把握すると開発がやりやすいです。

まずは、上に挙げたシーンとウィンドウのソースコードを読んでみましょう。ゲームがどのようになっているのか理解することができれば、プラグイン開発はグッとはかどるようになります。

プラグインコマンドでイベントから呼び出せる!

開発したプラグインはイベントエディターからプラグインコマンドを使うことで呼び出すことができます。

例えば、自作のウィンドウをイベント処理の中で呼び出すことができるということです。

プラグインコマンドに自作のプラグインを追加するためには、プラグインの中で次のように書きます。

var plugin_command_func = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
  plugin_command_func.call(this, command, args);

  if ( command == 'NEW_COMMAND' ) {
    /* プラグインの処理 */
  }
};

このコードはNEW_COMMANDというプラグインコマンドを追加するプログラムです。

こうすることで、イベントエディターのプラグインコマンドでNEW_COMMANDを指定することで呼び出すことができます。

プラグイン開発は慣れが重要

という感じで一通り説明してきましたが、プラグイン開発をやっていく上で一番大事なことは、《慣れ》ではないでしょうか。

既存のシーンやウィンドウのソースコードを読んで、仕組みを理解して、それを自分のプラグインに取り入れていく。

これの繰り返しによってプラグイン開発が上達します。

プラグイン開発は間違えても元に戻すことは簡単なので、間違えを恐れずにどんどんチャレンジしてみてはいかがでしょうか。

コメント

タイトルとURLをコピーしました