So-net無料ブログ作成
検索選択

RPGツクールMVのプラグインなるものを作ってみたがぐぐるとプログラム見ればすぐ解るとか言ってるけどオジサンはだいぶ苦労したよ・・・ [ゲーム]

RPGツクールMVっす。

プラグインとかいう自分でプログラム作ってカスタマイズするのに挑戦したのでしたの巻。

以前のVXAceとかでもちょこっと作ってみたりしたんですがね。
VXAceまではRubyなる言語でしたが、MVはJavaScriptになりましたね。

やってみたこと。
宿屋に泊まっても解除されないステートを作る(永続ステート)

ま、ぐぐれば既に誰か作ってると思いますが、ためしにプログラムを作るには簡単そうだったので・・・


1)まず解除されないステータスを設定。
メモ欄に「<permanent>」とか書いておきます。

以前のRPGツクールでも、だいたいメモ欄に拡張パラメータを記述してプログラムでそれを見るってのが定番でしたね。
MVでは<hogehoge>の形式で書くんですか?

NoteTagって言うみたいです。

rpg101.png

「死神の呪い」というステートを作りました。
これは宿に泊まっても解除できないようにします。

で、以下のようなスクリプトファイルを
Project1\js\plugins\B3_PermanentStates.js
などの名前でpluginフォルダに作成。

//=============================================================================
// B3_PermanentStates.js
//=============================================================================
/*:ja
* @plugindesc
* @author
* @help
*/

(function() {
var _Game_BattlerBase_prototype_clearStates = Game_BattlerBase.prototype.clearStates;
Game_BattlerBase.prototype.clearStates = function() {
   if( this._states === undefined) {
      this._states = [];
     this._stateTurns = {};
     return;
   }
   var tmpStates = this._states;
   this._states = [];
   this._stateTurns = {};
   for(var i = 0; i < tmpStates.length; ++i)
   {
     var id = tmpStates[i]
     var meta = $dataStates[id].meta.permanent;
     if(meta) this._states.push(id);
   }
};
})();

プラグイン管理で追加。
rpg102png.png

これで完成っぽい。


さて、イベントを作ります。
話しかけると色んなステートが付くイベントと、簡単作成で宿屋のイベントを用意。

rpg103.png


ゲームをスタートするのだ。

まずステートが付くイベント。
rpg104.png


rpg105.png


何個かステートが付きます。

次に宿屋に泊まる。

rpg106.png

rpg107.png

メモに永続指定<permanent>を付けた「死神の呪い」だけ解除されないで残ります。

おお、何だかできたっぽい。

ボクにもできたよMVのプラグイン。


で、以下はここまでたどり着くまでの道のり・・・
いや同じような初心者の参考になればと。


まずプログラムから宿屋で回復する部分の処理を探します。
宿屋のイベントはどうやら「全回復」のイベントを実行しているようです。
rpg108.png

全回復の処理を探します。
イベントの各処理は Project1\js\rpg_objects.js にありました。
rpg109.png

Game_Interpreter.prototype.command314 ですね。
コメントに Recover All とあるので全回復でしょう。

この command314 の中の actor.recoverAll(); の部分がそれっぽいな?

というわけで今度は recoverAll を検索。
同じファイル内にありました。
rpg110.png

ちなみに 3382行目に
Game_Actor.prototype = Object.create(Game_Battler.prototype);
とあるので、ActorもBattlerも同じクラスを使っているのかと。

ふむ・・・
次は clearStates() のところか・・・
これも同じファイル内にあるな。
rpg111.png

ふーん・・・
this._states というのと this._stateTurns を初期化してるだけっぽいですね。

ということでプラグインは Game_BattlerBase.prototype.clearStates の処理を書き換えればよさげですかね。

で、プラグインのファイルを Project1\js\plugins フォルダに作成。
rpg112.png


① ここに処理のコメントとか記述する。
プラグインにパラメータがある場合は、このコメント部に記述しないとプラグイン管理で登録するときにパラメータが表示されないので注意。
今回はパラメータが無いので省略。

② 元々の処理 Game_BattlerBase.prototype.clearStates を別変数に退避しているが、結局使わなかったのでこれは不要だったりする・・・
Game_BattlerBase.prototype.clearStates = function() ~ 以降で処理の中身を書き換えている。

③ どうやらゲーム開始時の初期化でもこの処理は呼ばれるらしいので、_states === undefined であれば元々あった初期化の処理を実行。
これをやっておかないとエラーで落ちた。

④ this._states の配列に現在アクターに付いているステートの番号が入っているようなので一旦退避して、this._states と this._stateTurns を初期化する。
stateTurns はたぶん自動解除されるステートのデータと思われ?
今回の永続ステートには関係ないっぽいのでただ初期化するだけ。

⑤ 付いているステータスの個数分ループ。

⑥ ゲームのデータベースは $ナントカ~ に入ってるっぽい。
(rpg_managers.js で各データをロードしている。)
ステートは $dataStates にあるので、this._statesをコピーしたtmpStatesからステート番号を取得して、該当するステートのデータを参照する。
メモ欄にタグ形式で記述したもの(今回は<permanent>)は、どうやら自動的に .meta のプロパティに展開されるっぽい。
$dataStates[id].meta.permanent で参照して、あれば再度 this._states に追加する。


これで <permanent> のステートは解除されずに残るわけだ。



ふぅ・・・

たったコレだけをやりたかっただけなのだがだいぶ苦労してしまった・・・

まぁ・・・プログラム自体はもっとシンプルに記述できるのかもしれないがいかんせんロートルなので原始的なif文やfor文で書いてたりする・・・

ドンマイ。


ちなみに他にも作ったプラグインは、任意の変数に値をセットするとゲームオーバー時にその番号のコモンイベントを実行するというもの。

標準機能でもボスキャラとか固定の戦闘イベントでは負けた時のイベントが作れますが、要はシナリオの特定期間ではザコキャラに負けた時でもゲームオーバーじゃなくてコモンイベントを実行したいなぁという時に。


1) シナリオのどこかでフラグをセットします。

2) 何でもいいから戦って負けます。
rpg113.png

3) コモンイベントが実行されます。
rpg114.png


フラグがセットされていない時は普通にゲームオーバー。

こんな感じ。

でもこのプラグインは人に見せられるレベルじゃないんだなぁコレが・・・



疲れたよ・・・
オジサン疲れたよ。

やっぱ誰かがそれっぽいプラグインを作ってくれるのを待とう・・・
てかもうあるのかも知れないが、ぐぐってもヒットしないんだなぁ・・・

んー、
RPG Maker MV で海外で既に色んなプラグインが作られているっぽいんだけどなぁ。
どうも英語とかだとねぇ・・・

何書いてるかわからん。

何議論してるんだかサッパリわからん。

つづく・・・
つづかない・・・
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。