敵行動ルーチンの改善【RPGツクールMZ&MVプラグイン】

2021年07月18日

 敵の行動ルーチン(AI)を改善するプラグインです。

初めに(introduction)


 ツクールMZ&MVの初期状態では、敵キャラはあまり賢く行動してくれません。

 例えば、回復魔法を使わせても対象は完全ランダムです。
 高確率で無駄撃ちするので、怖さや鬱陶しさがありません。ドラクエがファミコン時代から実現していたホイミスライムのようなモンスターすら作成が困難です。

 また、蘇生魔法を使わせれば、戦闘不能者がいようがいまいが無駄撃ちする始末。ドラクエ4のブラックマージ(マイナーかも……)のような蘇生を使ってくる敵もまともに作れません。

 一応、HPを行動の条件に使えますが、参照できるのは自分のHPのみ。
 そもそも、ツクールMZ&MVの仕様では行動を決定するタイミングがターンの最初だけです。ターンの途中で自分が瀕死になっても、次のターンまで回復行動は取りません。その隙に、プレイヤーは容赦なく敵を葬ってしまうでしょう。
 
 そんなこんなを改善するのが、このプラグインです。

  • HP&MP回復時に最も減っている対象を選択する。
  • 有効な対象が存在しない場合、回復や治療、蘇生を行わない。
  • ターン開始時だけでなく行動直前にも行動再選択を行う。
  • 既にかかっているステートを重ねがけしない。
  • 既に限界となっている能力変化を重ねがけしない。
  • MPが0の相手にMP吸収スキルを使わない。

 以上のような修正によって、賢く個性的な敵を実現します。

 この動画はその例です。敵は意味のない行動を取らず、的確に回復やステートを使ってきます。
※画面が小さい場合は右下の全画面表示をクリックしてください。

  • 導入方法(install)
  • 更新履歴(history)
  • パラメータ(parameter)

    導入方法(install)


     以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
     ※このプラグインはMV、MZの両方で有効です。

     NRP_EnemyRoutineKai.js ver1.07(2021/07/18)

    更新履歴(history)


    2021/07/18(ver1.07)

    • MPが0の相手にMP吸収/ダメージスキルを使わない機能を追加。
    • 『戦闘行動の強制』などで有効な対象が存在しないスキルを実行した場合、対象なしのまま実行する仕様を修正。普通に無効な対象に対して実行します。
      ※DynamicAnimationと組み合わせた場合、自分にアニメーションを表示してしまう問題への対処です。

    2020/10/04(ver1.06)

    • MVでエラーになる不具合修正。

    2020/09/13(ver1.05 -> 1.051)

    • MZのタイムプログレスで行動が不発する不具合修正。
    • タイムプログレスで速度補正技が選択されない不具合修正。(ver1.051)

    2020/09/06(ver1.04 -> 1.042)

    • 『行動直前の再設定』が有効なら、複数回行動時も毎回考慮するように修正。
    • 1.04で行動が不発する不具合修正。(ver1.042)

    2020/08/22(ver1.03 -> 1.031)

    • ツクールMZ向けにヘルプを修正。
    • 『行動直前の再設定』が有効だと、複数回行動の敵が無限に行動してしまう不具合修正。(09/03 ver1.031)

    2020/06/14(ver1.02)

    • 英語対応。

    2020/01/27(ver1.01)

    • ツクールMVの本体verが古い場合でも動作するよう修正。

    2020/01/24(ver1.00)

    • 公開開始!

    パラメータ(parameter)


     以下のプラグインパラメータで、敵全体の初期値を設定します。
     基本的にはほとんどONでいいと思いますが、CTBプラグインと併用する場合、『行動直前の再設定』はOFFにしてください。
     また『対アクターの使用効果制御』をONにすると、わりと嫌らしくなるので取り扱い注意です。

     個別の敵キャラごとに設定したい場合は、メモ欄に記述することで切替可能です。

    パラメータ(基本設定)


    行動直前の再設定(resetAction)

     ONならば、行動直前にも再度の行動決定を行います。
     ※一人ずつ行動するCTBでは無意味なので、OFF推奨です。
     ※CTBでも複数回行動時には有効です。(ver1.04)

     ※ターン開始時に速度補正技が選ばれた場合は、行動再選択を行いません。また、行動再選択時に速度補正技を選ぶこともありません。速度補正の処理はターン開始時に行われるため、整合性が取れないためです。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineReset:[true or false]>

     <RoutineReset:true>でON、<RoutineReset:false>でOFFという意味です。
     ちなみに、<RoutineReset>と省略しても、trueと同じ扱いになるみたいです。

    行動判定の実行(testApply)

     Onならば効果の得られないスキルは使用しなくなります。
     例えば、HPの減った仲間が存在しなければ回復を行いません。
     戦闘不能の仲間がいなければ、蘇生を行いません。
     既に仲間の全員がステートにかかっていれば、同一のステートをかけません。

     この設定がOFFの場合、以下の回復関連や使用効果関連の制御がONでも優先されます。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineTest:[true or false]>

    パラメータ(回復関連)


    回復系行動の制御(controlRecover)

     ONならば回復系スキルの制御を行います。
     HP(MP)が最も減った仲間に対して回復スキルを使います。また、減った仲間がいなければ、優先度によらずスキルを使いません。

     ※タイプが『HP回復』『MP回復』のスキルが対象となります。使用効果などに回復値を設定するだけでは、制御を行いませんので注意してください。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineRecover:[true or false]>

    HP回復行動の条件(ifHpRecover)

     指定した条件式でHP回復を行います。
     『回復系行動の制御』がONの時のみ有効です。
     初期値の『b.hpRate() < 1.0』は、誰かのHPが100%未満になった時を意味します。
     例えば、50%以下に変更したい場合は、『b.hpRate() <= 0.5』にしてください。

     参照できる値はスキルの計算式と同じで、aは行動主体、bは対象者を意味します。基本的には『b.hpRate()』以外を使う必要はありません。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineIfHp:[条件式]>

    MP回復行動の条件(ifMpRecover)

     指定した条件式でMP回復を行います。
     『回復系行動の制御』がONの時のみ有効です。
     初期値の『b.mpRate() < 1.0』は、誰かのMPが100%未満になった時を意味します。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineIfMp:[条件式]>

    MP吸収の制御(controlMpDrain) ver1.07

     ONならばMP吸収/ダメージスキルの制御を行います。
     MPが0の相手に対してスキルを使用しなくなります。
     ※項目名は吸収になっていますが、MPダメージにも対応しています。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineMpDrain:[true or false]>

    蘇生系行動の制御(controlForDead)

     ONならば戦闘不能者を対象にしたスキルの制御を行います。
     行動の優先度を高めに設定しておけば、戦闘不能者が出るなり即座に蘇生を行う厄介な敵も作れます。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineForDead:[true or false]>

    パラメータ(使用効果関連)


    対エネミーの使用効果制御(controlEnemyEffect)

     ONならば仲間(エネミー)サイドに対する使用効果系スキルの制御を行います。
     例えば、支援系ステートの無意味な重ねがけをせず、かかっていない対象を選ぶようになります。

     ※タイプが『なし』のスキルが対象となります。タイプが『HP回復』などの使用効果にステートを設定しても、制御を行いませんので注意してください。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineEnemyEffect:[true or false]>

    対アクターの使用効果制御(controlActorEffect)

     ONならば相手(アクター)サイドに対する使用効果系スキルの制御を行います。

     例えば、異常系ステートの無意味な重ねがけをせず、かかっていない対象を選ぶようになります。
     つまり、一人ずつ着実に異常スキルをしかけてきます。行動異常の場合、必然的にハメ殺しが発生しやすくなります。取り扱いには若干の注意が必要です。

     ※タイプが『なし』のスキルが対象となります。タイプが『HPダメージ』などの使用効果にステートを設定しても、制御を行いませんので注意してください。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineActorEffect:[true or false]>

    ステート耐性を見るか(watchResist)

     ONならば対象の耐性を確認し、無効なステートを使用しなくなります。

     ちなみにツクールMVの仕様では、命中タイプが『必中』だと、有効度が0%の相手にまでステートがかかります。
     必中スキルを無効化したい場合は、ステート無効化を設定する必要があります。

     個別設定時は以下をメモ欄に記入してください。
    <RoutineWatchResist:[true or false]>


     >RPGツクールMZ&MV目次に戻る
  • posted by 砂川赳 at 19:06 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする