LINEで送る
Pocket

最初に

この記事は、RPGツクールMV Advent Calendar 2016の5日目の記事です。

アドベントカレンダー?

クリスマスまでをカウントするカレンダーのこと。ADVENTARというサイトがあり、そこで毎年12月、指定した日にブロガーが記事の執筆を予告し、その日になったら記事を公開する、という催し物があるんだ。ツクールMVのアドベントカレンダーも有志が作ってくれている。去年も参加したぞ。

リンク先から他の方の記事も読めるので、ぜひどうぞ。それじゃ、プラグイン自作講座を始めます。

この記事は、以下の人を対象にしています
・ツクールMVのスイッチ・変数・コモンイベントをある程度理解している

・他者のプラグイン素材を導入して使うことができる

・正確なプログラミング知識より、プラグイン素材を制作できる技術を手っ取り早く身につけたい

記事タイトルの通り、これは「自分でプラグインを作れるようなる」記事だ。ただし、ぺーぺーの初心者まで対象にはしていない。ごめん。

ツクールのスイッチや変数、コモンイベントを理解していることが前提なんだね。

うん。だって、まずツクールの基本機能に慣れてから手を出すべきだからね、プラグインは。

解説中も、ツクールの変数やコモンイベントに置き換えた表記をしていくつもりなので、まだよく分からない人は先にツクールMVに慣れてしまおう。

Bracketsを導入する

さて、プラグインはJSファイルで書かれている。拡張子を表示してあるなら、ファイル名の一番後ろに「.js」とあるだろう。

JS……女子小学生!?

使い古されたネタはやめよう!

まあ、要するにテキストファイルで書かれているわけだ。メモ帳でも編集できる。

メモ帳か……Windows10でペイントすら機能が増え続けている中、頑なにシンプルイズベストを貫く標準ソフトだね。

さすがにメモ帳では使いにくいので、JSファイルの編集に特化したプログラミング用のエディタを導入しよう。その名も、Bracketsだ。

Bracketsの導入・解説サイト(外部リンク)

フォトショで有名なAdobeが無料で提供しているソフトだ。有名なので、導入方法は他のサイトの引用で済ませる。

どーーーーしても入れなきゃだめ?

お気に入りのエディタがあるなら、もちろんそれを使ってもいい。だが、Bracketsはそのダークな見た目に反して非常に初心者向けで、並大抵のエディタで編集するより快適だ。面倒な設定も必要ない。特にこだわりがないなら、Bracketsの導入をおすすめするぞ。

さっそくプラグインを作ってみよう

jsフォルダのパスをコピー

まず、Bracketsを起動し、ツクールで制作中のゲームのjsフォルダを開こう。

ソーリー、今なんて言ったの?

「jsフォルダのパスをコピーしよう」って説明で理解できる人は、ここは読み飛ばしてくれ。以下、スクショで説明する。


ツクールMVの上にあるメニューの、[ゲーム] → [フォルダを開く] を選択。



jsフォルダを選択し、上部にあるパスをコピーする。場所はユーザーによって異なるが、設定を変えていないならマイドキュメントにあるはずだ。

以上。同じゲームのプラグインを制作している限りは、この作業は一度でいい。

また新たにゲームを作りたくなった時は、そのプロジェクトのパスをコピーする必要があるのね。

Bracketsでフォルダを開く


Bracketsを起動し、[ファイル] → [フォルダを開く] を選択。先程のフォルダパスを貼り付けて開く。


jsファイルの一覧が左側にズラリと並ぶはずだ。

さて、エディタの解説をするためにこの記事を書いたわけではない。さっそくプラグインの制作に取りかかろう!

お待ちかねだね。

まずは、数字の変更から試してみよう

クリティカルダメージの倍率を変更してみる

すでに数多くのプラグインが出回っているが、その中でも「数値の変更」系が最も手軽で勉強になる。

なんで?

画像の表示の場合、画像ファイルを読み込んだり、座標を指定したり、SpriteやBitmapの説明が必要だったり、いろいろと難易度が高いからな。

それに、プラグイン素材を使用したことがある人なら、パラメータをいじって自分好みに改変した経験がある人も多いのではないかな?

なるほど、すでにやっていることに+アルファで学習していくと、手間が少ないし理解も早いよね。

そういうわけで、まずはクリティカルダメージの倍率から変更してみよう。

最近のツクールの恒例なのでご存知の方も多いと思うが、ツクールはクリティカル時のダメージが3倍になる。ぶっちゃけなくても、これはやりすぎな数値である。中ボスが威力のある攻撃をしてきた時、当たりどころが悪いと即死級のダメージになってしまう。1.5倍とか、もうちょっと現実的な数字にしたい。或いは、10倍まで跳ね上げてプレイヤーを阿鼻叫喚させたい。さっそくやってみよう。

まず、クリティカルダメージの倍率を記述している場所を特定する必要がある。大丈夫、一つずつ目で追っていく必要はない。検索機能を使えばいい。


[Ctrl + Shift + F] で、プロジェクト内の全ファイルから検索するコマンドを呼び出せる。頻繁にお世話になるので、覚えておこう。[Aa] と書かれているが、これは検索ワードの大文字と小文字を区別するかどうかだ。このボタンを押した状態で「critical」と検索した場合、「Critical」「CRITICAL」などはヒットしないということになる。今回は探りを入れるための検索なので、チェックは外しておこう。


「critical」と入力し、Enterを押して検索すると、23件ヒットした。クリティカルにまつわる処理をしている箇所が、23個あるという見通しになる。総当たりでチェックしてもいいが、もう少し狙いすましてみよう。


if(critical) と書かれている。これは、もしクリティカルヒットした場合、という条件分岐だ。ツクール本体の機能でもおなじみだろう。クリティカルが発生した時にすべき処理が書いてあるはずだ。怪しい。クリックしてみよう。


[Game_Action.prototype.makeDamageValue] という関数(コモンイベントのようなもの)に行き着いた。DamegeのValueをMakeする……文字通り、ダメージ値をここで設定しているようだ。if(critical) の後を見てみると、[value = this.applyCritical(value);] と書いてある。ようは、applyCriticalという関数を呼び出して、()内のvalue変数の値を元にクリティカルダメージを計算している、ということになる。

特定できたね。applyCriticalで検索すればいいのかな?

それでもいいが、Bracketsにはクイック編集という機能がある。使ってみよう。


applyCritical を右クリックし、[クイック編集]を選択


applyCritical の定義元が表示される。ツクールのイベントエディタから、直接コモンイベントの編集画面を呼び出しているようなものである。

ビンゴ! return damage * 3; って書いてあるな。ここでダメージを通常の3倍にしているわけだ。

じゃあ、この値を100にすれば、クリティカル時に100倍のダメージになるわけだね?

それだけじゃない。return 100000000; と書けば、元のダメージとは関係なく、問答無用で1億ダメージを叩き込むこともできる。

よくそんなエグいことを思いつくね……。

さて、このまま数字を書き換えてもいいのだが、ちょっとタンマ。

ん?

この場所は、ツクールのコアスクリプトと呼ばれる場所だ。ここを書き換えてしまうと、ツクールのコアスクリプトがアップデートされた時に上書きされて、元に戻ってしまう。それに、プラグインパラメータで自在に値を変えることもできず、その都度この場所を検索で訪れなきゃいけない。なにより、素材化していない

そうだった……プラグインを”作る”のが本来の主旨だった! このままじゃ書き換えて満足しただけじゃん。

プラグイン化して、あわよくば素材として配布するにはどうすればいいか、次の項目で解説しよう。

プラグイン化しよう

jsファイルを作成する

個別にjsファイルを作り、そこに変更箇所を記述することで、ツクールMVのプラグイン管理でON / OFFを設定したり、素材として配布できるようになる。ここではその手順を紹介しよう。

cri08
pluginsフォルダ(jsフォルダではない)を右クリックし、新しいファイルを作成。名前は自分が分かればなんでもいいが、ここでは ChangeCriticalDamage.js にしておく。pluginsフォルダは、ツクールMVのプラグイン管理ボタンでON / OFFを設定する際に読み込まれるフォルダだ。ここに置かないと、プラグインとしてツクールMVが読み込んでくれない。

cri09
作成したら、先ほど検索で見つけた applyCritical の部分をコピペしてこよう。右クリックにコピペ用のコマンドはないので、CTrl + C でコピーし、Ctrl + V で貼り付ける必要がある。
保存は、Ctrl + Sだ。これをしないと反映されないので注意。左上のファイルメニューからも保存はできる。

動作確認をしてみよう

cri11
あとは、 3の部分を好きな数字に書き換えれば、それがクリティカル倍率として適用される。テストプレイする前に、プラグイン管理からChangeCriticalDamageをONにすることを忘れずに。

さっそく動作確認をしてみよう。

今回は検証用として、ダメージはステータス関係なく100ダメージ、分散値0%で固定のスキルを用意し、ハロルド君の命中率と会心率(クリティカルが起きる確率)を999%にしてみた。

クソゲーすぎる。

cri01
ツクールMVのデフォルト状態。ダメージ100のスキルで会心が発生したため、3倍の300ダメージを与えている。

cri10
プラグイン適用状態。ダメージを1000倍まで上げたので、100000ダメージまで上がった。きもちいい。

これで、Bracketsから値を書きかえるだけでクリティカル倍率が変わるようになった。ChangeCriticalDamage.jsを配布すれば、素材屋を名乗ることも可能だ。

需要あるんですかね、このプラグイン……。

千里の道も一歩からさ……。

ただ、これだけでは味気ない。プラグインパラメータでツクール側から値を変えることができないし、素材の作者や規約・ヘルプもなにも書かれていない。素材として配布するには雑すぎる。

プラグインの自作という点ではもうクリアしているのだが、もう少しだけ手を加えて、素材配布する際や柔軟な設定が可能になるプラグインにしてみよう。

素材として相応しいプラグインにしてみる

作者名や説明文を書こう

まず、ほとんどのプラグイン素材に書かれている、作者名や説明文の表示の仕方から書いていこう。

これはツクールMVの仕様なので、理屈ではなくそういう物だと覚えてしまおう。テンプレを作って丸コピ&素材に合わせて修正でも問題ない。

//=============================================================================
// ChangeCriticalDamage.js
//=============================================================================

/*:
 * @plugindesc Change the damage when critical occurs.
 * @author Yumineko
 *
 * @help This plugin does not provide plugin commands.
 *
 * This plugin is released under the MIT License.
 */

/*:ja
 * @plugindesc クリティカルが発生したときのダメージを変更します。
 * @author 弓猫
 *
 * @help プラグインコマンドはありません。
 *
 * このプラグインはMITライセンスです。
 */

Game_Action.prototype.applyCritical = function(damage) {
    return damage * 1000;
};

下の方の英文が、プラグイン本体だよね。さっき書いた改造部分。

その通り。今回はその
上の説明文についてだ。

ん? もしかして、英語と日本語で同じことを2回書いてる?

よく分かったな。5行目から12行目が英語版ツクールMVで表示される文章で、14行目から21行目が日本語版ツクールMVで表示される文章だ。

行数で決まってるの!? なんかめんどい。

いや、違う。14行目に /*:ja ってあるでしょ。jaってのはもちろん日本語版を表す。何も書かないと英語版になる。

つまり、日本語版だけを対象にした素材なら、jaを忘れずに書いて、14行目から21行目の内容だけを書けばいいのね?

ああ。その場合、英語版で読み込むと何も表示されなくなる。プラグイン本体の部分は読み込むけどな。

さて、言語の違いによる表記だということを念頭に置いた上で、順番に説明していこう。

//=============================================================================
// ChangeCriticalDamage.js
//=============================================================================

このプラグインのファイル名を書こう。書かなくてもいいかどうかは分からない。とりあえず書いておく。

  • @plugindesc
  • どんなプラグインなのかを(なるべく)一行で書く。プラグイン管理の一覧などで表示される。

  • @auther
  • プラグインの作者。君のハンドルネームを書こう。

  • @help
  • プラグインの設定ウィンドウにある「ヘルプ」ボタンを押した時の説明文。詳しい使い方や、規約などはここに書こう。

    上記のように記載したプラグインをツクールMVで読み込むと、下の画像のようになる。

    だいぶそれっぽくなったね。MITライセンスってのはなに?

    主にプログラムのソースコードで、世界規模で使われている規約だ。正確な内容は公式サイトを読んでほしいが、要するに作者名さえ残しておけばどんな使い方をしてもいいよってこと。プラグイン素材でも一般的な規約として普及している。

    ずいぶんと寛容な規約なのに、浸透しているんだね。一昔前だと、営利目的はダメとか利用報告が必須とか、そういう素材も多かったのに。

    今でもそういう素材はたくさんあるが、1番のメリットは責任を負わなくていいから気楽ってことだな。例えば営利目的がダメだとして、じゃあ実況によるクリエイター奨励プログラムはどうなのか、アフィリエイト記事で紹介するのはどうなのかなど、挙げたら突っ込みどころはキリがない。数年後にはまた新たな稼ぎ方が生まれているかもしれない……ってなった時に、いちいち管理するのが面倒だろ? 放置しても時代の流れに対応しやすいからじゃないかな。

    さて、これで晴れて素材として公開できる。jsファイルを好きなところに配布しよう。なんならツクマテでもいいぞ。

    宣伝乙。

    まとめ

    まとめ
    ・Bracketsは便利。ぜひ使おう。

    ・変更したい部分を探す → 書きかえる が基本の流れ。単語で全文検索すると見つけやすい。

    ・変更は直接行なわず、新しいjsファイルを作成してコピペしてから。素材として配布できないし、また変更したい時にどこにあったか忘れてしまうぞ!

    プラグインパラメータの説明ができなかったが、記事が6600文字を超えてしまい、初心者向けじゃなくなるのでまた今度。ツクールMVに標準で付属しているプラグイン素材を眺めて、書き方を学ぶのも一興だぞ。

    やってみるよ。

    最後に。大事なのは膨大な知識じゃなく「分からない箇所があった時にどう調べるか」の対応力だ。クリティカルダメージの処理は、どのjsファイルの何行目にあるのか。ツクールMVのコアスクリプトを完全に熟知している人はいない。書いた本人ぐらいだろう。記憶することは重要じゃない。分からない・覚えられないことは調べる。そのための検索だ。

    文法もそう。正しい記法なんてお手本を見ればすぐ思い出す。身につけるべきは「怪しい単語を推測して全文検索」などの対処法。他の素材を覗いてお手本にするのもいいだろう。僕だって、JavaScriptの文法や作法はろくすっぽ把握していない。プラグインを作るに限った話なら、重要なのはそこじゃないからね。

    本職として活動するなら、言語ルールは覚えなきゃだけど、そうじゃないもんね。

    趣味に留めたプログラミング全般に言えることだ。分からないままでいい、とにかく調べる技術を磨こう。何度も検索を繰り返すうちに慣れてくるだろう。知識なんざ後でいいんだよ!

    それはさすがに本職から怒られそう。

    LINEで送る
    Pocket