ツクールMVでメニューに独自項目を追加する方法

はいどーもこんばんは仕事がなくて餓死しそうなニートです。
たまには人の役に立つことをしようというわけで、本日は「ツクールMVでメニューに独自項目を追加する方法」を解説してみたいと思います。
本記事はノンプログラマさん向けに書かれていますので、プログラマーでないと理解が困難であろう専門用語はなるべく避けています。
なのでプラグインなにそれ書けませんみたいな方でも読めると思いますよ。

なんで急に解説を

ツクマテさんの記事で「AltMenuScreen3を使った上でメニュー項目を追加したい」というものがありました。
質問者さんはメニュー画面上で以下のことをおこないたかったようです。

・オリジナルの名称の項目を追加
・指定したスイッチがオンのときのみ表示
・項目が選択されるとコモンイベントを呼び出し

僕は「メニュー内コモンイベントプラグイン」を使ってみるとよいかもしれないと返事をしました。
ですが自分で軽く試したところ、どうもこれは項目が選択されたときにコモンイベントを実行するタイプのプラグインではなかったようです。

しかし

・オリジナルの名称の項目を追加
・指定したスイッチがオンのときのみ表示

この二点ならわりと簡単に実装できるので、本記事では上記二つの機能を実装するプラグインを作成してみることにします。

コモンイベントについて

コモンイベントについて少しだけ補足しておきます。
先のプラグインについて「項目が選択されたときにコモンイベントを実行するタイプのプラグインではなかった」と書きました。
あてが外れたところで「では自分でコモンイベントを実行するプラグインを作ろう」と普通ならなるところなのでしょうが、そうしなかったのには理由があります。

端的に言えば、メニュー画面でコモンイベントを実行するのはわりと面倒くさい処理が必要です。
仮にコモンイベントを実行できるようにしたとしても、例えばピクチャを表示するためにはさらなる細工が必要です。
つまりコモンイベントは「実行できたりできなかったり」しますし「実行できたとしても見た目がなんかおかしい」とか十分にあり得ます。
そのへんの解説はもっと面倒です。

ちゅーわけでコモンイベントは無視した次第です。
ただ「項目選択後、即マップ画面に戻る」という限定が加わるならコモンイベントの実行も比較的平易かもしれません。

メニューに独自の項目を追加するプラグイン

まずは以下のURLからプラグインをDLして、自分のツクールMV用プロジェクトに導入してください(Rawボタンを押すと生のjsファイルが見れるので、それを保存してもらったらいいと思います)。
https://github.com/Tsumio/rmmv-plugins/blob/master/plugins/MenuCommonSample.js

導入が完了したら、上記のサイトで言う86行目あたりを見てください。
ここから順にプラグインの意味を解説していきます。

独自コマンドを追加する方法

95行目から102行目までが「独自コマンドを追加するコード」です。
この場合だと「メニューに《コモンイベント1》という項目を追加し、スイッチ番号1がONなら有効化する」という意味になります。
だから例えば98行目から100行目を以下のように変更すると「メニューに《全回復》という項目を追加し、スイッチ番号2がONなら有効化する」という意味になります。

さてsymbolNameですが、これはプログラム内で参照するシンボル名です。
ゲーム画面には出てきません。
あとで利用するので頭の片隅にでも「common1」というシンボル名を置いておいてください。

なお、101行目は実際に項目を追加するためのコードです。
addCommandを呼ばないと実際に項目が追加されることはない、といった程度の認識で大丈夫です。

独自項目が選択された際の処理

さてここまでで「メニューに独自の項目を追加」という目的は果たせました。
ですがまだ「独自項目が選択された際の処理」を書いていません。
というわけでそれを書いたのが109行目から133行目です。
順番に見ていきましょう。

まずは113行目から114行目をご覧ください。

先ほどと同じsymbolNameが出てきましたね。
ここのsymbolNameと先ほど書いたsymbolNameを同じにすることで、メニューの項目をプログラム内部で区別している感じです。
つまり先ほど書いたsymbolNameと、ここのsymbolNameは一致させる必要があります(今回だと「common1」)。

さてsetHandlerの中身を見てみると、今度はonSelectedCommon1というものがあります。
独自項目が選択されたとき(決定ボタンが押されたとき)、このonSelectedCommon1が呼ばれ、任意の処理を実行します。
「任意の処理」の具体的な中身は117行目から124行目にあります。

recoverAllMembersは僕が独自に定義したもので、パーティーメンバー全員のHPを全快させる機能です。
127行目から133行目にありますね。

最後に以下の二行を見てください。

この二行はコメントにある通り、今回の場合だと「操作不能になるのを避けるため」と「全快しているのにステータス画面に反映されないのを避けるため」に書いています。
それ以上の深い意味はないので「へー、そういうことも考えないといけないんだなー」くらいに思ってもらえばOKです(これがコモンイベントだと何やかんや面倒な理由でもある)。

以上を簡単にまとめると、onSelectedCommon1の中身を改造していけば、項目が選択されたときに任意のスクリプトを実行できることになります。

改善点

以上で解説は終了です。
平易であることを最優先したのですが、いかがでしたでしょーか。

実際に使いやすいプラグインとするためには、例えば以下の点を考慮する必要があるかもしれません(プログラマさん向けの内容なので難しかったらスルーでOK)。

・項目が一つしか追加できない(のでいくつでも項目を追加できるようにする)
・コードに明らかな重複がある(ので重複部分を何らかの方法でまとめる)
・ハードコーディング部分がある(のでプラグインパラメーター等の利用を検討する)
元の要望ではメニューの末尾に項目を追加したいとのことだったが、今回は別の場所に追加されている(ので必要があれば末尾に項目を追加するように変更する)

僕は特に作る気はないですが、改造の際の指針となれば幸いです。

終わりに

たまにはニートも人様の役に立とうということで、ツクールMVの講座を久しぶりに書きました。
ひょっとすると「《項目が選択されたときに任意のスクリプト》の部分が作れへんのや!」なんて人もいるかもしれませんが、そんなときはTwitterのDMから僕にご依頼ください。
有償で引き受けてます(ゲス顔)。

ほなそんな感じでまた。
仕事は切実に募集中です。今年の夏は超えたい。

フォローする