開発日誌

テクニック

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 敵の行動のターゲットを制御する

2025-11-13 01:01:44

敵キャラの行動パターンに、条件によるターゲットの指定や重み付けができるプラグインを公開しました。

RPGツクールMV/MZ両対応です。

敵の行動とターゲット

敵キャラの行動で、HPが減っていない相手に回復魔法を使ったり、既にバフやデバフがかかっている相手に同じバフ・デバフをかけたり、眠らされたアクターに攻撃して起こしてくれたりすると、ラッキーです。

しかし、序盤の敵がこういう動きをするならともかく、終盤の、しかも知能が高そうな敵キャラがそのような無駄行動をすると、ちょっと残念な感じがします。

敵キャラの行動でターゲットを制御する標準機能には「狙われ率」がありますが、狙われ率は基本的に戦士系の前衛職が敵の攻撃を受けやすく、魔法使い系の後衛職が攻撃を受けにくい、といった仕組みを反映させる要素であり、HPの消耗度やバフ・デバフ、ステートの状態などによってターゲットを制御する目的で使うには不向きです。

狙われ率自体は敵キャラにも存在するため、例えばボスの狙われ率を高くすることで、ボスの回復を優先するお伴が表現できます。バトルイベントで常に敵キャラのHPを監視し、HPの減り具合に応じて敵キャラの狙われ率を変更することで、一番HPが減っている味方を回復してくる敵、などというのも表現することは可能です。ですが、標準機能だけで実装しようとするとかなり労力がかかりますし、細かい制御もできません。

そこで、このプラグインを作りました。

以下、使い方を説明します。

ダミースキルの作成

まず事前準備として、ターゲット条件指定用のダミースキルを1つ作成します。

ダミーなのでスキルの内容は特に何も設定しなくて構いません。スキルの名前は任意ですが、分かりやすいように「↑ターゲット条件」などとしておくと良いでしょう。

ダミースキルを作ったら、次にプラグインパラメータの「ターゲット条件用スキル」で、そのスキルを指定します。

以上で事前準備は完了です。

ターゲット条件の設定方法

事前準備が終わったら、いよいよ敵キャラの行動パターンにターゲット条件を設定します。

ターゲットを制御したい行動パターンの下に新しい行動パターンを作成し、「スキル」に先述の「ターゲット条件用スキル」のダミースキルを指定します。

そして「条件」にターゲットの条件を指定し、「レーティング(R)」で優先度を指定します。これによって、その条件に合致するメンバーの、ターゲットとして選ばれる確率が変わります。

ターゲットの条件指定は下にいくつでも追加できます。

条件

「条件」でターゲットの条件を指定できます。

条件に指定できるのは行動パターンのものと同じですが、条件の意味は一部異なるものもあり、それぞれ以下を意味します。

常時
全員が対象となります。特別な指定をしたい場合以外は設定する必要はありません。
ターン
特別な意味を持ち、対象のインデックスやID番号を表します。A + B * Xで指定されるターン数のうち、ABの値によって以下のようになります。
0 + 0 * X
自分自身が対象になります。
A + 0 * X
インデックス(1始まり)がAのメンバーが対象になります。
0 + B * X
アクターIDまたは敵キャラIDがBのメンバーが対象になります。並び順にかかわらず特定のアクターや敵キャラを対象にできます。
A + B * X
A + B * Xで表されるインデックス(1始まり)のメンバーが対象となります。例えば「2 + 2 * X」とすれば偶数番目のメンバーが対象になります。
HP
現在のHPが指定範囲内にあるメンバーが対象になります。
MP
現在のMPが指定範囲内にあるメンバーが対象になります。
ステート
指定ステートが付与されているメンバーが対象になります。
パーティLv
対象がアクターの場合は個別のメンバーのレベルになります。対象が敵キャラの場合は標準と同じくパーティーの最高レベルが基準となりますが、あまり意味のない指定です。
スイッチ
ターゲットの絞り込みには影響せず、後述する行動の採用可否にのみ影響します。

まとめると以下のようになります。

条件 意味
常時 全員が該当
ターン 0 + 0 * X 自分自身
ターン A + 0 * X インデックスがAのメンバー
ターン 0 + B * X アクターIDまたは敵キャラIDがBのメンバー
ターン A + B * X インデックスがA + B * Xに合致するメンバー
HP 現在のHPが指定範囲内にあるメンバー
MP 現在のMPが指定範囲内にあるメンバー
ステート 指定ステートが付与されているメンバー
パーティLv アクター そのアクターのレベル
パーティLv 敵キャラ パーティーの最高レベル(行動の採用可否のみ影響)
スイッチ 指定スイッチがONの場合(行動の採用可否のみ影響)
レーティング(優先度)

優先度の考え方は行動パターンのものと少々異なるので、注意が必要です。

優先度はデフォルトが5で、5よりも小さい数字を指定すると優先度がその分だけ下がり(ターゲットとして選ばれにくくなる)、5よりも大きい数字を指定すると優先度がその分だけ上がります(ターゲットに選ばれやすくなる)。

複数の条件に合致する場合、それぞれの条件での優先度の加減が積み重なります。

ただし、レーティングの1と9は特別な意味を持ち、1を指定すると該当するメンバーはターゲット候補から除外されます。また9を指定すると必ずターゲットに選ばれるようになり、それ以外のメンバーはターゲット候補から外れます。同じメンバーに1と9の両方が指定された場合は、後から指定された方が優先となります。

まとめると以下のようになります。

レーティング 意味
1 ターゲット候補から除外
2 優先度を-3
3 優先度を-2
4 優先度を-1
5 デフォルトの優先度
6 優先度を+1
7 優先度を+2
8 優先度を+3
9 必ずターゲットになる
ターゲットの抽選

上記の条件とレーティングから、実際のターゲットが抽選されます。

まずレーティング=9に該当するメンバーがいれば、その中から抽選されます。

9のメンバーがいなければ、レーティング=1の除外対象者を除いたメンバーの中から抽選されます。

この時、最終的に算出された各メンバーの優先度のうち最高値を基準に、優先度が1下がるごとに選ばれる確率が1/3小さくなります。最高値より優先度が3以上小さい場合は、候補外となってターゲットに選ばれなくなります。この考え方は行動パターンの優先度と同様です。

なお、実際のターゲット抽選においては、優先度に加えて「狙われ率」も参照されます。優先度ではキャラAの方が勝っていても、キャラBの狙われ率がそれ以上に高かった場合は、キャラBの方が選ばれやすくなります。これは「挑発」などのターゲット引き付け効果を有効にするための仕様です。

行動の不採用と再選択

ターゲット候補が1人もいない場合、その行動は不採用となります。

ターゲット条件は、ターン初めの行動決定時と実際の行動直前の2回確認されます。ターン内の行動によって実際の行動時に対象者が1人もいなくなった場合、その行動をキャンセルして別の行動が再選択されます。

この仕様により、無駄な行動が抑制できるようになります。

なお、スキルの効果範囲が単体やランダムでなく全体や使用者自身の場合、ターゲットの選択には影響しませんが、条件を満たす対象者が1人もいなければ、その行動は不採用となります。

設定例

特殊な仕様や分かりにくい部分もあるので、以下にいくつか設定例を挙げました。参考にしてみてください。

(1) ダメージによるステート解除を避ける
スキル 条件 R
攻撃
↑ターゲット条件 ステート:睡眠 4
↑ターゲット条件 ステート:混乱 4

睡眠か混乱にかかっているメンバーは、通常メンバーに比べてターゲットになる確率が2/3になります。両方かかっている場合は確率が1/3になります。

(2) ステートの重複を避ける
スキル 条件 R
単体毒攻撃
↑ターゲット条件 ステート:毒 1

毒にかかっているメンバーは対象外となります。全員が毒にかかっていた場合はこの行動自体が不採用となります。

(3) 無駄な蘇生行動を避ける
スキル 条件 R
レイズ(単体蘇生)
↑ターゲット条件 ステート:戦闘不能 9

戦闘不能のメンバーの中からターゲットが抽選されます。誰も戦闘不能になっていない場合はこの行動自体が不採用となります。

(4) 効率的な回復
スキル 条件 R
ヒール(単体HP回復)
↑ターゲット条件 HP:50~80% 6
↑ターゲット条件 HP:0~50% 7

現在のHPが50~80%のメンバーはターゲットになる確率が通常の倍、0~50%のメンバーは3倍となります。

(5) 隊列の後方を狙う
スキル 条件 R
攻撃
↑ターゲット条件 ターン:4 + 0 * X 8
↑ターゲット条件 ターン:3 + 0 * X 7
↑ターゲット条件 ターン:2 + 0 * X 6

後ろのメンバーほど狙われやすくなります。1人目のメンバーは優先度がデフォルトの5となります。4人目のメンバーが戦闘不能でない限り、1人目のメンバーは攻撃されません。

(6) 無駄な全体回復を防ぐ
スキル 条件 R
リカバー(全体HP回復)
↑ターゲット条件 HP:80~100% 1

効果範囲が全体のためターゲット選択としては意味がありませんが、メンバー全員の現在のHPが80%以上であれば、この行動自体が不採用となります。

競合や互換性について

本プラグインは戦闘システムに改変を加えるプラグインのため、主に戦闘システムに関わる他のプラグインとは競合する可能性があります。

プラグインの順序を入れ替えることで解決する場合もありますが、特にターゲットの選択に関わるプラグインや、戦闘の流れを制御するプラグインとは併用できない可能性が高いです。その際の競合対策までは責任を負いかねますのでご了承ください(ご自身での改造はご自由にどうぞ)。

私、panda(werepanda.jp)制作のプラグインとは互換性を確保しており、「行動パターン複数条件プラグイン(PANDA_ActionMultiCondition.js)」や「複数回行動条件設定プラグイン2(PANDA_MultiAction2.js)」などとも併用が可能です。

なお「敵蘇生対象選択修正プラグイン(PANDA_FixedRandomDeadTarget.js)」と併用する場合は、「敵蘇生対象選択修正プラグイン」の後に「ターゲット条件指定プラグイン」が来るようにしてください。

また「バフ・デバフ連動ステート付与プラグイン(PANDA_BuffState.js)」を使うと、能力の強化・弱体状態がステートで管理できるため、無駄なバフ・デバフを防ぐのに便利です。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] ダミーのタイルを透明にする

2025-09-18 17:53:50

指定した地形タグを持つマップチップ(タイル)を実際のゲーム画面で非表示(透明)にするプラグインを公開しました。

RPGツクールMZ専用です。

ダミータイル

過去記事「透明タイルや空イベントを使ったツクールの小技」で、透明のダミータイルを置いて通行設定を制御する小技を紹介しました。

すなわち、そのままでは通行できてしまうところに通行設定を[×]にした透明のマップチップを上のレイヤーに置いて通れなくしたり、逆に本来は通行できないところに通行設定[○]の透明チップを置いて隠し通路や特殊な通行設定を実現したりする方法です。

この方法には欠点があって、透明のタイルであるため置いてあることが目に見えない点です。変なところにダミータイルが残っていても、まず気付きにくいです。

それの対策として、制作中は透明ではなく○や×などの記号を入れておく方法も、当該記事内で紹介していますが、リリース時にタイルセット画像を差し替えるのが面倒ですし、差し替えるのを忘れると目も当てられません。

それを解決する方法として、ダミータイル非表示プラグインを公開しました。

これを使えば、ダミーの透明タイルも安心して設置できます。

プラグインの使い方

使い方は簡単で、まずタイルセット画像はダミータイルに分かりやすい記号を入れて作ります。

次にデータベースの「タイルセット」で、非表示にしたいダミータイルに任意の「地形タグ」を設定します。ここでは仮に1番の地形タグを設定します。

そしてプラグインパラメータの「非表示地形タグ」で、先ほど設定した地形タグの番号を指定します。

以上の設定で、指定された地形タグを持つタイルは、実際のゲーム画面では非表示(透明)になります。

一方で、ツクールのエディタ上では元の画像のままなので、エディタ上ではダミータイルの存在が分かるようになるのと、実際のゲーム画面では見えないようになるのが、これで両立できます。

▲ 通行不可にしたいところに×のダミータイルを設置。実際のゲーム画面では非表示に。

本プラグインは見た目だけ非表示にするもので、タイルの通行設定はもちろん、茂み属性やダメージ床の効果は維持されます。

また、地形タグはリスト形式で複数指定が可能です。

なお、通常のマップタイルだけでなく、イベント画像にタイル画像を利用した場合でも同様に、実際のゲーム画面では非表示になります。

地形タグ

地形タグを使う都合上、他の用途で地形タグを使い切っている場合は利用できませんので、ご注意ください。

また、番号に空きがあったとしても、他の用途と併用ができるかは、他の用途におけるプラグインやイベントの作りに依存します。一応、本プラグインでは他との併用がしやすいように、地形タグは複数指定可能にしてあるので、うまく活用してみてください。

なおこの「地形タグ」というのは、ツクールの数ある機能の中でもマイナーかつ特殊な立ち位置の機能です。

地形タグはマップチップに0~7の8つ(実質7つ)の番号の1つを割り当てることができ、プラグインやイベントコマンドの「指定位置の情報取得」で取得して使うことができますが、ツクールでは珍しい、本来の用途が定められていない機能となっています。

似たような機能に「リージョン」がありますが、地形タグは直接マップチップと紐付くため、特定のチップに対して何か処理を定義したい時に便利です。

詳しくは過去記事「地形タグで滑る床を実現」もご参照ください。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 足踏み・歩行アニメの速度を速める

2025-09-07 22:31:12

キャラクターの足踏みアニメと歩行アニメの速度を速めて、キャラが走っているように見せるプラグインを公開しました。

RPGツクールMV/MZ両対応です。

よくあるイベントで、キャラクターが走り去って行く、あるいは駆け寄って来るようなイベントを考えます。

イベントコマンドの「移動ルートの設定」で、移動速度をデフォルトの3(1/2倍速)よりも速い4(標準速)や5(2倍速)に変更してから移動させるのが普通ですが、これだと今イチ走っているように見えません。

滑り歩いているように見えるデフォルトの挙動

原因は歩行のアニメーション速度が遅いせいです。

移動の速度に比べて歩行アニメーションの速度が遅いために、走っているというより水平移動しているような違和感があります。

移動速度と足踏み・歩行アニメのグラフィック切り替え頻度は決まっていて、以下のような対応になっていると、最近X(旧twitter)でポストがありました。

出典:はらお絵描き丸
移動速度 かかるフレーム数
1マス移動 歩行アニメ 足踏みアニメ
1(1/8倍速) 128 16 24
2(1/4倍速) 64 14 21
3(1/2倍速) 32 12 18
4(標準速) 16 10 15
5(2倍速) 8 8 12
6(4倍速) 4 6 9

これを見ると違和感の正体がわかります。

移動速度は1段階上がるたびに倍々で速くなっていくのに対して、歩行アニメの方はそこまで速くなりません。特に5(2倍速)の時は1マスの移動で1歩分の歩行アニメーションであり、これが滑り歩いているように見える原因と思われます。

足踏みアニメと歩行アニメの切り替えフレーム数がどうなっているかは、コアスクリプトを見ればすぐに分かり、以下のような計算式で求められます。

足踏みアニメ切り替えフレーム数 = (9 - 移動速度) * 3

歩行アニメ切り替えフレーム数 = 足踏みアニメの 2/3

そこで、この計算式を変えられるプラグインを作りました。

「移動ルートの設定」の「スクリプト」でthis.startRunning();と記述すると、以降で歩行と足踏みのアニメーション切り替え速度が速くなり、this.stopRunning();と記述すると元の速度に戻ります。

イベントコマンドの「移動ルートの設定」だけでなく、自律移動の「カスタム」におけるルート設定の中でも使用可能です。

またルート設定中でなくとも、通常のイベントコマンドの「スクリプト」でも使用可能です。その場合はthisの部分を$gameMap.event(1)などとして、対象のマップイベント(キャラクター)を指定してください。

変更後の計算式は以下の通りです。

足踏みアニメ切り替えフレーム数 = (7 - 移動速度) * 3

歩行アニメ切り替えフレーム数 = 足踏みアニメの 2/3(変わらず)

歩行アニメの切り替えフレーム数が4(標準速)で6、5(2倍速)で4となり、ちゃんと走っているようなアニメーションに見せることが可能です。

一瞬だし細かい部分なのでそこまで気にするほどのことはないかもしれませんが、走り去ったり駆け寄って来たりといったシーンは割と緊迫感のあるシーンなので、できれば違和感は避けたいものです。

歩行アニメだけでなく足踏みアニメも速くなるため、走るシーンだけでなく歓声に沸く群衆やはしゃぐ子供といった表現でも使えるかと思います。

ただ試してみると分かりますが、かなりちょこまかとした動きになってしまうこともあり、実際の動きを確認しながらのご利用をお勧めします。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 飛行船の影を消す

2025-08-01 18:01:09

飛行船の影の表示・非表示を切り替えられるプラグインを公開しました。

切り替えをプラグインコマンドで行う都合上、RPGツクールMZ専用となります。

※ 2025-08-21追記:プラグイン導入前のセーブデータで始めるとデフォルトで影が表示されない不具合を修正しました

デフォルトだと遠景にも影がついてしまう

ツクールの乗り物の1つである飛行船は、乗り込むと地面に影が描画されます。

これはごく自然な描写であり、標準でこの機能が備わっているのは非常にありがたいことです。

しかし、はるか高い上空を飛んでいる場面や、遠景の上を通過するようなシーンなど、影があると不自然に見えてしまうケースも存在します。

飛行船の影は img/system/Shadow1.png の画像が使われるので、飛行船の影は常に非表示でよい、という場合にはこの画像を透明なものに差し替えるという手もありますが、状況によって影を付けたり消したりしたいというケースには、標準で実現できる手段はありません。

飛行船の影が消せる!

このプラグインを導入すると、飛行船の影の表示・非表示をプラグインコマンドで切り替えることができます。

プラグインコマンドの「飛行船の影を消去」で影が消え、「飛行船の影を表示」で表示されるという、ごく単純なものです。デフォルトは影が表示されている状態です。

例えば遠景の有無で影の有無を切り替えたい場合、並列処理で「指定位置の情報取得」を使ってプレイヤーの位置のタイルID(レイヤー1)を取得し、その値が0(レイヤー1が透明=遠景が見えている)であれば飛行船の影を消去、そうでなければ影を表示、とすれば簡単に実現できます。

特別なイベントシーンで、影を自前で制御したい場合にも便利です。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 画面シェイクの永続化

2025-07-30 20:39:55

画面のシェイクを永続化できるプラグインを公開しました。

RPGツクールMV/MZ両対応です。

以前にRPGツクールVX用に公開した「画面シェイクの永続化スクリプト」のMV/MZ版プラグインで、基本的な使い方は当時と同じです。

時間を999フレームに設定し、「完了までウェイト」のチェックを外す

このプラグインを導入し、イベントコマンドの「画面のシェイク」で時間を999フレーム(設定できる最大値)、「完了までウェイト」のチェックを外すと、画面を永続的にシェイクさせられます。

シェイクを直接的に停止する方法はありませんが、時間を1フレームなど、ごく短い時間に設定した「画面のシェイク」コマンドを実行すれば、そこでシェイクがストップします。

地震や建物の崩壊といった演出で画面を揺らしたい場合、途中でメッセージの表示やプレイヤー操作を入れると、通常のシェイク設定では時間切れでシェイクが止まってしまいます。

このプラグインを使えば、操作中でも揺れ続ける演出が可能になります。

ただ、ずっと画面が揺れ続けているというのはけっこう目が疲れるものなので、揺れの強さを弱めるとか、イベントの時間を短くするなど、適度な演出バランスにご配慮ください。

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