開発日誌

テクニック

[ テクニック ] [ プラグイン/スクリプト ] 敵キャラの複数回行動を細かく制御

2021-06-01 21:04:32

VX Ace以降のRPGツクールでは、特徴の「行動回数追加」で1ターンに2回以上行動する敵キャラを簡単に作成できます。

しかし、複数回行動の内訳を自由に決めることはできないため、場合によっては同じ補助魔法を2回連続で唱えてしまったり、凶悪な全体攻撃を2回連続で放ってきたりといった事態に陥ります。

そこで、複数回行動での条件を設定できるプラグインを作りました。RPGツクールMV/MZ両対応です。

これを使うと、2回行動のうち1回目は通常攻撃で2回目は魔法攻撃とか、1回目は攻撃魔法で2回目は補助魔法とか、強力な全体ブレス攻撃の場合は1回行動で終了とかいった、細かい調整が可能です。

複数回行動の制御にはステートやTPを駆使した方法もありますが、このプラグインを使った方が楽でしょう。

※追記:「敵キャラの変身」に対応したバージョン1.1.0に更新しました。

使い方としては、以下を敵キャラのメモ欄に記述します。

<MultiActionX:行動パターン番号>
指定した行動パターンは複数回行動のうちX回目の行動でのみ選択されます。
<LastAction:行動パターン番号>
指定した行動パターンを選択すると以降の複数回行動は行わなくなります。

行動パターン番号には、行動パターン一覧の順番をカンマ(,)区切りで指定します。

具体的には、敵キャラの行動パターンが以下のように設定されているとします。

  • (1) 通常攻撃
  • (2) ファイア(単体魔法)
  • (3) スパーク(全体魔法)
  • (4) ヒール(回復魔法)

この時、以下の記述をメモ欄にしたとします。

<MultiAction1:2,3>

<MultiAction2:4>

<LastAction:3>

この場合、1番の通常攻撃は設定がないので2回行動のうち1回目でも2回目でも、どちらでも選択されます。2番のファイアと3番のスパークは、MultiAction1の記述により、1回目の行動でのみ選択されます。4番のヒールは、MultiAction2の記述により、2回目の行動でのみ選択されます。また3番のスパークは、LastActionの記述により、選択されたら以降の行動は行わなくなります。

まとめると、2回行動は以下のようなパターンになります。

  • 通常攻撃+通常攻撃
  • 通常攻撃+ヒール
  • ファイア+通常攻撃
  • ファイア+ヒール
  • スパークのみ

こうすることで、2回とも回復してしまうのを避けたり、強い全体魔法は1回だけにしたりと、ある程度のバランス制御を行うことが可能です。

バランス制御だけでなく、例えば魔法戦士的な敵キャラに物理攻撃と魔法攻撃をそれぞれ1回ずつ行わせたり、騎兵のような敵キャラに馬の突進攻撃と兵の物理攻撃を1回ずつ行わせたりと、敵キャラの性格付けなどにも応用できます。

また、2回行動だけでなく、3回以上の行動にも対応しています。

行動回数を増やした場合は、プラグインパラメータの「複数回行動最大値」で、最大の行動回数を設定してください。最大値以上の行動を設定しても無視されます。最大値は何回にでも設定できますが、必要以上に増やしすぎると処理が重くなりますので、ご注意を。

行動パターンを番号で指定しなければいけないのが、ちょっと残念なところではあります。番号が画面上に表示されているわけではないので、行動パターンがたくさんある場合は、数え間違いに注意してください。行動パターンにもメモ欄があったり、もう少し細かい設定がいろいろできればいいんですけどね。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ プラグイン/スクリプト ] 画像の先読みを改善して画像表示のラグ解消

2021-05-29 18:55:56

お久しぶりです。

twitterの方では時々制作状況を紹介していますが、それをするとこちらの方ではあまり語ることがなくなるので、どうしても更新頻度が落ちてしまいますね。それでも、新しいプラグインや小技の紹介などはたまにしていきたいと思っています。

さて今回は、RPGツクールMZにおける画像表示のラグを解消するプラグインを公開します。

テストプレイ時やダウンロード版の場合はローカルから読み込むので特に気になるということはありませんが、「ゲームアツマール」などブラウザ版でプレイする場合は、サーバーから画像ファイルをダウンロードしてこないといけないので、特にサイズの大きい画像は画像表示のラグ(遅延)が割と顕著に発生します。

RPGツクールMZのデフォルトでは、イベントの開始時に、イベントコマンドの先頭から200行目までをチェックして、その中に登場する「文章の表示」の顔グラフィック画像と「ピクチャの表示」のピクチャ画像を、先に読み込むようになっています。先に画像を読み込んでキャッシュしておくことで、実際に画像を表示する際に素早く表示できる仕組みになっているわけです。

ですが、長いイベントの場合はイベントコマンドが200行以上になることもあり、そういう場合はどうなるのかというと、特に何もしてくれません。途中で200行目以降を追加で先読みしてくれるというようなことはなく、そのため、イベントの途中から画像表示のラグが目立つようになってきます。

このプラグインを使えば、先読みする行数をデフォルトの200行から、任意の行数に設定することができます。また、行数を0に設定すると、イベントの全行を対象に先読みするようになり、この使い方が普通かと思います。

ただし、1000行を超えるような非常に長いイベントの場合、全行を対象にすると、逆に最初の先読みに時間がかかってしまう可能性があります。特に通信速度が遅い環境だと、イベントの開始が明らかに遅くなるでしょう。長いイベントがある場合は、先読みの行数は200行くらいに抑えて、後で解説する「画像先読み」のプラグインコマンドを併用してみてください。

また、デフォルトでは先読みの対象が「文章の表示」の顔グラと「ピクチャの表示」のピクチャ画像だけですが、それに加えて「遠景の変更」の遠景画像と、「移動ルートの設定」の中の「画像の変更」で使われるキャラ画像も、先読みしてくれるようになっています。「遠景の変更」はあまり使用する機会がないかもしれませんが、遠景画像はサイズが大きいので効果も大きいです。

また、イベント開始時の自動的な先読み以外にも、任意のタイミングで任意の画像ファイルを先読みできるように、プラグインコマンドも用意しました。

プラグインコマンドの「画像先読み」を使用すれば、imgフォルダの下にある任意の画像ファイルを読み込ませることができます。自動的な先読みでは対応していない、タイルセット画像や戦闘背景の画像なども、これを使えば先読みさせることができます。

前述の非常に長いイベントの場合は、自動的な先読みは200行までにしておいて、途中で200行目以降に登場する画像ファイルをプラグインコマンドで先読みさせる、といったことが可能です。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 進行状況ウィンドウプラグインをMVにも対応

2021-01-25 01:23:07

メニュー画面に現在の物語の進行状況等を示す簡単なテキストを表示できるプラグイン「進行状況ウィンドウプラグイン」を、MV/MZ両対応にバージョンアップしました。

ツクールフォーラムで、RPGツクールMV用に同様のものが欲しいという声が上がっていたので、それに応えた形です。

最終的にスクリプト内部でMVかMZかを判別するようにして、同じファイルでMVとMZの両方に対応できるようにしました。

詳しい使い方は「メニュー画面に物語の進行状況を表示」もご参照ください。

MVでは、デフォルトのメニュー画面のコマンドウィンドウと所持金ウィンドウの間に空きスペースがあるので、そこに表示するようにしました。もちろんウィンドウの位置・サイズを指定すれば、好みの場所に配置することができます。

ウィンドウ周りは、MZとMVでコアスクリプトの仕様が異なるため、そのままでは動かないのですが、実際にはウィンドウの初期化(initialize)の呼び出し方が多少違うだけで、後はMZの書き方で基本的に動作することが分かりました。

なお、MVかMZかの判別は、Utils.RPGMAKER_NAMEに文字列でMVかMZかが格納されていますので、それを使用しています。

また、MZで既にご利用の方は、敢えてアップデートする必要はありませんが、テキストに改行(\n)を2つ以上入れても、最初の1つしか認識されないというバグがあったので、もし3行以上のテキストを表示させたい場合は、アップデート版のご利用をお願いします。

具体的には、改行コードの置換をreplace("\\\\n", "\\n")としていたのを、replace(/\\\\n/g, "\\n")としました。こうしないと複数の置換ができないんですね……。うーん、素直にmultiline_stringにしておけばよかった……。

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] RPGツクールMZプラグインまとめ

2021-01-22 21:37:22

去年の8月以降、RPGツクールMZ(MVも一部対応)のプラグイン素材をいくつか公開してきましたが、埋もれてしまったものも多そうなので、ここらでまとめて紹介します。

ルビ表示プラグイン

詳しくは「RPGツクールMZでルビを振る」記事参照。

こんな感じでテキストにルビを振ることができるプラグインです。

{九尾|きゅうび}の{狐|きつね}のように、ルビを振りたい文字を{ }で囲んで、 | の手前の漢字、後ろにルビを記述すれば、ルビ付きのテキストとして表示されるようになります。

とてもシンプルな記述でルビを実現できるので便利!

ややルビの文字サイズが小さめですが、1行の高さを標準から変えずにルビ振りができるので、ウィンドウレイアウトに影響しないのが特徴です。文章の表示だけでなく、アクター名、スキル名、敵キャラ名、説明文や戦闘メッセージなど、基本的に全てのテキストに対応しています。

進行状況ウィンドウプラグイン

詳しくは「メニュー画面に物語の進行状況を表示」記事参照。

メニュー画面上部に、現在の物語の進行状況を示す簡単なテキストを表示できるプラグインです。

進行度を管理する変数を1つ用意し、その変数の値に応じたテキストを入力しておけば、メニュー画面を開いた際に常に現在の進行状況が表示されます。日をまたいでプレイ再開した時に、「次は何をすればいいんだっけ?」となるのを防げます。

ウィンドウの位置は好みの場所に調整可能です。

※ MVにも対応したVersion 1.1.1をリリースしました。「進行状況ウィンドウプラグインをMVにも対応」記事参照。

データベースの名前表示プラグイン

詳しくは「文章中にアイテムや敵キャラ等の名前を表示」記事参照。

「文章の表示」コマンドやアイテム等の説明文で、以下の制御文字をそれぞれの名前に置き換えてくれるプラグインです。

\class[n] n番の職業名
\skill[n] n番のスキル名
\item[n] n番のアイテム名
\weapon[n] n番の武器名
\armor[n] n番の防具名
\enemy[n] n番の敵キャラ名
\troop[n] n番の敵グループ名
\state[n] n番のステート名

\item[\V[1]]のように、nに変数を用いることも可能です。また\*skill[n]のように頭に*を付けると、そのスキルのアイコンを表示できます(item、weapon、armor、stateも同様)。

上のように書いておくと、下のように表示されます。

アイテム発見イベント規格化プラグイン

詳しくは「アイテム発見イベント規格化プラグインとサンプルミニゲーム」記事参照。

宝箱やタンス、タルなどを調べるとアイテムが見つかる、というイベントを簡単に組むためのプラグインです。

イベントの名前を例えばi1とすればID1番のアイテムが、w25とすればID25番の武器が、g500とすればお金500Gが、手に入るイベントを作成できます。アイテム入手時の演出やメッセージは、上の「データベースの名前表示プラグイン」と組み合わせたコモンイベントで作成します。

後から宝箱の中身を変更する際に、イベント名を変更するだけで済むので、とても便利です。ちょっと作成方法がややこしいので、上記記事で紹介しているサンプルゲームも参考にしてください。

重要語句の文字色変更プラグイン

詳しくは「重要語句の文字色変更プラグイン」記事参照。

「文章の表示」コマンドや説明文等で <N人名> のようにテキストを囲むと、囲まれた部分の文字色を手軽に変更することができます。人名は青、アイテム名は赤のように、語句のタイプに応じて色を変えることができ、語句のタイプと対応する色は自由に指定可能です。

プラグインがなくても色の変更は制御文字の\C[n]で可能ですが、人名は青にしてたっけ赤にしてたっけとか、色を戻し忘れたりとか、後から人名はやっぱり黄色にしたいとか、このプラグインが役に立つ場面はいくらでもあるはずです。

アイテム獲得メッセージにアイコン表示プラグイン

詳しくは「アイテム獲得メッセージにアイコンを表示」記事参照。

こんな感じで、戦闘終了時のアイテム獲得メッセージにおいて、アイテム名の頭にアイコンを表示させることができるプラグインです。

なお、サンプル画像ではアイテム名の色も変わっていますが、これは「用語」の「メッセージ」で色を変更しているだけです。

バフ・デバフ効果個別設定プラグイン

詳しくは「バフ・デバフの効果を個別に設定」記事参照。

バフ・デバフの倍率を、能力値および強化か弱体かでそれぞれ個別に設定できるプラグインです。

デフォルトだと全て1段階につき25%共通なので、能力値によっては物足りなかったりします。それが柔軟に設定できます。

セルフスイッチ操作プラグイン

詳しくは「任意のセルフスイッチを消去」記事参照。

プラグインコマンドで、対象のマップID、イベントID、スイッチID(A-D)を指定すると、該当のセルフスイッチをOFFにすることができます。マップIDは全てのマップや現在のマップ、イベントIDやスイッチIDは全てのものなども指定可能です。

特定セルフスイッチ消去プラグイン

詳しくは「特定のセルフスイッチをリセット」記事参照。

マップに入った際、そのマップにあるイベントのうち、名前が指定した正規表現にマッチするイベントのセルフスイッチをOFFにできるプラグインです。

マップに出入りするたびに復活する宝箱とか、開けた扉や押したスイッチを元の状態に戻したい時とかに使えます。

メッセージ中にスイッチ操作プラグイン

詳しくは「台詞の途中でスイッチ操作 in MZ」記事参照。

文章表示の途中でスイッチのON/OFFができるプラグインです。

「文章の表示」の制御文字で、\+switch[n]と入れるとn番のスイッチをONに、\-switch[n]でOFFにできます。

スイッチに連動した並列処理を使うことで、台詞の途中の狙ったタイミングでキャラクターを動かしたり、フキダシアイコンを表示したり、効果音を入れたりすることが可能になります。

戦闘終了時特殊処理プラグイン

詳しくは「戦闘終了時に特殊処理」記事参照。

戦闘終了後に直ちにフェードアウトさせたり、BGM/BGSを継続させずに停止したり、勝利時・敗北時など条件によってスイッチをONにできるプラグインです。バトルイベントの0ターン目(戦闘開始時)に、プラグインコマンドで指定するようになっています。

ボス戦後などにイベントを実行したい時、標準だと経験値やお金の獲得メッセージを出している間に元のBGMが流れてしまいますし、イベントが始まる前に一瞬だけ元のマップが表示されてしまいます。このプラグインを使うと、BGMを停止させたり、フェードアウトした状態でイベントに移行することができます。

選択肢表示時SEプラグイン

詳しくは「選択肢表示時にSEを鳴らす」記事参照。

「選択肢の表示」で選択肢ウィンドウが表示される際に、SEを鳴らすプラグインです。

職業名の代わりに二つ名表示プラグイン

詳しくは「職業の代わりに二つ名を表示」記事参照。

ステータス画面等で職業名の代わりに二つ名を、二つ名の代わりに職業名を表示するプラグインです。後者はプラグインパラメータで非表示にすることもできます。

長編RPGなどで、ストーリーに応じて主人公の職業が「村の自警団兵」→「王国兵」→「勇者」などと変化する場合、それを職業の代わりに二つ名の変更で済ますことができます。

イベントスキッププラグイン

詳しくは「イベントスキップを実装した」記事参照。

並列処理イベントと連携して動くプラグインで、指定したラベルの位置(もしくはイベントの最後)までイベントをスキップさせることができます。あまり高機能ではなく、会話だけのイベントを飛ばすといった限定的な使い方を想定しています。

VX方式経験値算出プラグイン

詳しくは「必要経験値の計算をVX方式で」記事参照。

レベルアップに必要な経験値の算出方法をVXでの方式に変更するプラグインです。

VX Ace以降、MV、MZの算出方法だと、序盤はなかなかレベルが上がらない一方、中盤以降はどんどんレベルアップしてしまい、バランス調整が非常に難しいです。VXでの算出方法に変えることで、調整をやりやすくすることができます。


以上、全部で15個ありました。思ったより作ってましたね。

あまり派手なものはないですが、ツクールのちょっと物足りないところや融通の利かない部分を補う、便利なプラグインだと思います。ぜひご利用ください!

質問やアドバイスなどはコメント欄まで、お気軽にお願いします。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ テクニック ] 透明タイルや空イベントを使ったツクールの小技

2020-12-18 00:00:12

本記事は「ツクールフォーラムアドベントカレンダー Advent Calendar 2020」12月18日分の投稿記事です。

今回は、透明タイルや空イベントを使った小技について紹介します。

割と基本的で伝統的な小技なので既にご存じの方も多いと思いますが、基本的ゆえにあまり解説されていなかったりもしますので、改めてご紹介したいと思います。

ツクールのバージョンに関わらず共通して使えますので、応用範囲も広いです。

透明タイルで通行制御

例えば次のような、段差に橋が架かったマップを考えます。

しかしこのままでは、この橋は渡れません。

段差の縁には自動的に四方向通行設定がなされていて、下方向以外は通行不可に設定されています。赤線の間は互いに行き来ができません(当然、壁面の部分はもともと通行不可なので、階段部分以外の下方向にも行けません)。

したがって、下方向にある階段とは互いに行き来ができますが、横方向にある橋とは互いに行き来ができないのです。

これを解決するには、小石や草花といった通行可能な装飾タイルを上に置けばOKです。

RPGツクールの通行判定は、レイヤーが上のタイルの通行設定(ただし[☆]のタイルは無視)が優先される仕組みになっています。なので、下層レイヤーのタイルが通行不可でも、上層レイヤーに通行可のタイルを置けば通行可能になります。

とは言え、橋のたもとにいつも小物が置いてあるのは、景観的に問題があります。

そこで活躍するのが、透明タイルです!

タイルセットの画像にわざと透明のタイルを作り、通行設定を[○]にします。

そしてこの透明タイルを橋のたもとに置くのです。こうすれば外観を変えることなく通行設定を制御することが可能です。

注意点としては、Bタイルの一番左上に透明タイルがありますが、これは上層レイヤーに何もないことを表すタイルなので、通行設定をデフォルトの[☆]から変更してはいけません。必ず別のタイルを透明にして使いましょう。

また、透明なので、実際にタイルが設置されているのか分かりづらいです。なので、開発段階では透明ではなく、分かりやすく○などの記号を入れておくのがお勧めです。リリース時に透明に直すのを忘れないようにしてください。

また通行可にするのとは逆に、通行設定を[×]にした透明タイルで、通行不可にすることもできます。

よくある使い方としては、段差の縁に草花などの小物を置くと、前述の通り上層レイヤーの通行設定が優先されるため、段差の四方向通行設定は無視されて、上側に通り抜けられてしまいます。

そんなところに小物を置かなきゃいいという話でもありますが、置きたい場合もあるでしょう。マップの構造上、上側に立ち入れる必要がないのなら、上側に通行不可の透明タイルを置けば、この問題は解決します。

モブキャラの移動範囲を制御

マップ上にモブキャラを設置して、全く動かないのは味気ないので、自律移動を「ランダム」にして歩き回らせるとします。

そうした時によく起こる問題として、気付いたらキャラクターがとんでもない位置にいたとか、狭い通路に入り込んでプレイヤーの邪魔になるといったことがあります。

前者の問題に対しては、元の位置からあまり離れすぎた場所に行かないようにするプラグインなどもありますが、後者の狭い通路に入り込んでしまう問題には、基本的に無力です。

しかし、後者の問題も解決できる、もっと簡単な方法があります。

「すり抜け」でないイベント同士は重ならない性質を利用して、立ち入ってほしくない場所に空のイベントを設置するのです。

こうしておけば、その場所にはキャラクターが行かないようになります。もちろんプレイヤーキャラクターは普通に通行が可能です。

これ以上進んでほしくないところや、1マスしかない通路の入口、ドアや宝箱の前などに空のイベントを設置すれば、元の位置からあまりに離れたところまで行ったり、狭い通路でプレイヤーの邪魔をすることもなくなります。

イベントの内容はデフォルトの状態で構いません。画像は「なし」、「すり抜け」がOFF、プライオリティが「通常キャラの下」になっていればOKです。

注意点としては、空とは言えイベントには違いないので、むやみやたらと置くと重くなります。斜めに置いたり、壁や樹木、テーブルなど通行不可のオブジェクトを上手く利用したりして、設置する数を節約しましょう。

宝箱をカウンター越しに開けられなくする

カウンター属性を利用すると、お店などでカウンター越しに店員と話ができるので便利です。

ただ仕様的には、「カウンター越しにキャラクターと話せる」という機能ではなく、「カウンター越しにイベントを起動できる」というものに過ぎません。

したがって、宝箱などをカウンターに隣接して設置すると、それもカウンター越しに開けられてしまいます。これだとちょっとマズいですね。

そもそもそんなところに宝箱を置かなきゃいいと言われればその通りなのですが、マップを作っていると案外こういうことはよく起こります。

これを解決するには、カウンター部分に空のイベントを置けばOKです。

ただし今回は「モブキャラの移動範囲を制御」とは違い、デフォルト状態だとイベントが無視されて、カウンター属性が効いてしまいます。

無視されないようにするには、プライオリティを「通常キャラと同じ」にすることと、実行内容が空でないことが必要です。実行内容は空でさえなければ何でもよく、例えば「注釈」だけにしておけば、他に何も影響しないのでオススメです。

こうしておけば、カウンター上にあるイベントが優先的に起動するので、カウンター越しに宝箱が開けられることはありません。

宝箱以外にも、カウンター裏のスイッチとか、カウンターの奥に倒れている人とか、カウンター越しに発動すると違和感のあるイベントに使えます。

ポイントは、設置する空イベントのプライオリティを「通常キャラと同じ」にすることと、実行内容が空でないことです。

逆に、実行内容が空であれば、イベントが設置されていても無視してカウンター属性が発動するため、カウンターの上にイベントで小物等を置いても、問題なくカウンターとして機能します。

タッチUIで額縁や貼り紙を調べる

2マスある壁の上側に置いた額縁や貼り紙を調べるイベントを考えます。

壁の上側だと直接は触れないので、壁の下側にイベントを設置するのが普通です。キーボードやコントローラーの操作ならば、これで何の問題もありません。

しかし、MVから導入されたマウスやタッチ操作の場合、このやり方だとちょっと不都合があります。額縁や貼り紙自体をタッチしても、そこにはイベントが設置されていないので反応しません。その下をタッチしないと反応しないという、やや直感的でない操作を要します。

かといって、額縁や貼り紙自体にイベントを設置しても、壁が邪魔なので、やはりイベントは起動しません。

それを解決するには、カウンター属性付きの透明タイルを利用しましょう。

まず先述の「透明タイルで通行制御」と同様に、タイルセットに透明のタイルを作って、そこに「カウンター属性」を付与します。もちろん通行設定は[×]にしてください。

そしてイベントは額縁や貼り紙自体に設置し、その下のマスの上層レイヤーに、このカウンター属性付きの透明タイルを置きます。

こうすることで、望み通りの動作をさせることができます。

先述の通り、やはり透明タイルのままだと分かりにくいため、開発段階では◆などの記号にしておき、リリース時に透明タイルにすることをオススメします。

おわりに

いかがだったでしょうか?(キュレーションサイト風)

いずれも少しの工夫で、仕様上の不都合が解決したり、プレイしやすくなったりするので、オススメです。

この手のテクニックは、知っている人にとっては基本的すぎるため、あまりしっかりと解説されていない印象があります。

昔はゲームデータの暗号化機能がなく、エディターを持っていれば中身を開いて見られたため、この手のテクニックも自然と広まっていきましたが、XP以降、暗号化アーカイブが作れるようになってからは、敢えて解説しないと広まっていかないような気もしたので、書いてみました。

それでは今回も長くなりましたが、読んでいただきありがとうございました。