本記事は「ツクールフォーラムアドベントカレンダー Advent Calendar 2020」12月8日分の投稿記事です。
長編RPGをプレイしていてありがちなこと。「次は何をすればいいんだっけ?」
大人になると毎日ゲームして遊ぶというわけにもいかず、忙しくて数日、下手をすると数週間以上も間が空いてプレイ再開ということもあり得ます。
それだけブランクがあると、多くのプレイヤーはこれまでの話の内容や、次に何をすればいいのかをほとんど忘れてしまうでしょう。
ストーリーを百も承知な制作者目線ではなかなか気付きにくいポイントですが、途中で次の目的が分からなくなってプレイを断念するというのはよくある話で、その対策として「思い出すコマンド」や「あらすじノート」など、様々な手法が開発されてきました。
とはいえ、あまり凝った仕組みを作るのはコストがかかりますし、あまりに自己主張が激しい見せ方も抵抗があります。
いろいろ思案した結果、現在の進行状況を示す簡単なテキストを、メニュー画面に表示するようにしました。シンプル!
RPGツクールMZでは、メニュー画面の上部にマウス操作用のボタンスペースがあります。そのままだと1行が収まりきらないのですが、余白を調整することで、何とかこのスペースに1行テキストのウィンドウを表示させることができました。デッドスペースの有効活用!
プラグイン素材として公開します。
※ RPGツクールMVにも対応したVersion 1.1.1をリリースしました。「進行状況ウィンドウプラグインをMVにも対応」記事参照。
使い方は簡単です。
まず物語の進行度を管理する変数を1つ用意し、その変数の番号をプラグインパラメータの「進行度変数」に指定します。
そして、その進行度変数の値に応じたテキストを、「進行度テキスト」にリストの形で入力します。
変数の値がリストの番号に相当していますので、進行度変数の値は1がスタートとなります。値が0の時は何も表示されませんので、オープニングイベントの中で進行度を1にしてやる必要があります。
後は、イベントの時にこの進行度変数の値を順次操作してやればOKです。
数が多いとテキストを用意するのも入力するのもかなり大変ですが、そこは頑張りましょう……。
ウィンドウ系のプラグイン作成にあたって
今回、プラグイン化するにあたって悩んだのが、メニュー画面のレイアウトは様々なプラグインが出ており、各自で変更されていることが多い点です。
そのため、プラグインとして公開しても、ウィンドウの位置がネックとなって、あまり使われないのではないかという懸念がありました。かといって、数あるウィンドウレイアウト系のプラグイン全てに対応させるのは不可能です。
どのようにしたかというと、プラグインパラメータでデフォルトのウィンドウ位置にするかのON/OFFを設けました。
ONの場合はデフォルトの通りにメニューの上部に表示。OFFの場合は別途パラメータで、ウィンドウの左上隅のX座標とY座標、および幅と高さを指定できるようにして、その値に従ってウィンドウを表示させるようにしました。
こうして自由に位置を設定できるようにしておけば、どんなレイアウトでも対応可能ですし、逆にデフォルトでよい場合は何も設定しなくて済みます。
このように、デフォルトレイアウトをOFFにして、ウィンドウの位置とサイズを指定すれば、好きな位置にウィンドウを置けます。ていうか邪魔w
ウィンドウの高さを調整すれば、複数行表示にも対応しています。進行度テキストは\n
で改行できます。\N[n]
や\C[n]
などの各種制御文字も反映されます。
ウィンドウをいじる系のプラグインは競合が厄介ですが、このようにデフォルトか位置・サイズ指定かを選べるようにしておけば、柔軟性が増すのではないかと思います。プラグイン化を検討する際は、ぜひ参考にしてください。
単行テキスト入力で改行したい
パラメータの型(type)で文字列型には、単行のテキストであるstringと、複数行のテキストを入力できるmultiline_stringの2種類があります。
今回のプラグインでは、基本は単行のテキストで、指定の仕方によっては複数行も表示できるよ、という形だったので、パラメータ型は単行テキストのstringを採用し、改行したい場合は改行文字\n
を入れてもらうようにしています。け……決してmultiline_stringがあることを知らなかったわけじゃありません(汗
当然、単行テキストで\n
と入力しても、そのままでは改行だと認識されないため、スクリプト内で改行コードに変換しています。
変数textにパラメータの値が代入されているとして、通常のテキストなら、
text = text.replace("\\n", "\n");
で、\n
が改行コードに変換されます。
今回のようなリスト形式であれば、
text = text.replace(/\\\\n/g, "\\n");
text = JSON.parse(text);
で、textに改行反映済みのテキストの配列が格納されます。\がカオス……。
基本は1行だけど、場合によっては改行も可能、みたいなパラメータを設定する場合は、ぜひ参考にしてみてください。
今回も最後まで読んでいただきありがとうございました。
コメント
ツクールフォーラムでこのプラグインのMV用を作っていただき、
本当にありがとうございます。
早速MVに入れたところ、問題なく動いています。
まずは、中編のRPGを作ってどこかで公開したいと思っています。
こちらこそ、お役に立てたようで良かったです!
公開されるのを楽しみにしています!