敵グループの配置を自動化&ランダム化【RPGツクールMZ&MVプラグイン】

2024年07月04日

 敵グループの配置を自動化&ランダム化するプラグインです。


 ツクールMV〜MZでは敵グループの設定画面に整列機能がありますが、これは基本的にフロントビュー用です。敵を左からまっすぐ並べるだけなので、サイドビューでは全く不自然になります。
 そこでサイドビューでの敵の配置を自動化するプラグインを作成しました。

自動配置の仕様

  • 指定した範囲内に対して、ランダムで敵を配置。
  • グリッド単位で座標を検査し、適切な間隔を確保できれば配置確定。
  • 確保できなければ何度も繰り返して、最もマシな配置を選び出す。
  • 敵が一体の場合は中央に配置。

 仕様上、同じ敵グループでもエンカウントする度に配置が変わります。
 前述の通り基本的にはサイドビュー用ですが、フロントビューにも一応は対応しています。

 バトルイベントをフェードイン前に最速実行するプラグインと組み合わせれば、敵キャラをランダムで生成することもできます(2023/06/25追記)

目次


導入方法

更新履歴

使用方法

注意点

競合情報 2021/06/27

外部連携

プラグインパラメータ(適用条件)

実行条件(condition)

除外条件(exclusionCondition)


プラグインパラメータ(配置範囲)

開始X座標(左)(startX)

終了X座標(右)(endX)

開始頭上Y座標(上)(startHeadY)

開始足元Y座標(上)(startFootY)

終了Y座標(下)(endY)

グリッドサイズ(gridSize)

浮遊分を加算(addFloat)


プラグインパラメータ(敵の並び順)

同列とみなす範囲(sameRowBorder)

基準となるX座標(sortBaseX)


プラグインパラメータ(敵が一体の場合)

単体時の配置(singleEnemyPosition)

単体時のX座標(singleEnemyX)

単体時のX座標(singleEnemyY)


プラグインパラメータ(演算方法)

演算方式(algorithmType)

グループ当たりの試行回数(maxTryNoForTroop)

一体当たりの試行回数(maxTryNoForEnemy)

確定とする距離評価値(distanceBorder)


導入方法


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

 NRP_TroopRandomFormation.js ver1.09(2024/07/04)

競合対策用プラグイン

 NRP_TroopRandomFormation+.js ver1.00(2022/06/10)

 以下プラグインに対応しています。

更新履歴


2024/07/04(ver1.09)


2022/03/17 -> 2024/06/20(ver1.08 -> 1.082)

  • 影プラグインの浮遊処理と仲間を呼ぶプラグインを組み合わせた際、適切に配置できなくなる問題に対処。
  • VanguardAndRearguard.jsとの対策用プラグインを追加。(2022/06/10)
  • 仲間を呼ぶプラグインに対応するため改修。(2024/05/04 ver.1081)
  • 配置座標が小数点になってしまうことがある不具合修正。
    (2024/06/20 ver.1082)
    ※特にNRP_DynamicReturningAction.jsと併用時の不具合を解消します。

2022/03/10(ver1.07)

  • 密になった際、敵画像が横に重なってしまうパターンが頻出する不具合を修正。

2022/03/03(ver1.06)

  • 仲間を呼ぶプラグインに対応するため改修。

2020/11/22 -> 2021/06/26(ver1.05 -> 1.051)

  • animatedSVEnemies.js』と併用できるように調整。
  • プラグインパラメータの初期値をMZ用に調整。(ver1.051)
    ※MVでの初期値が少しズレますが、パラメータで簡単に調整できます。

2020/09/20(ver1.04 -> 1.041)

  • 自動配置後、敵のID(A,B,C…)を正しく振るように修正。
    ※今までNRP_VisualTurnの識別子表示しか対応してなかった模様……。
  • 『開始頭上Y座標(上)』の初期値をMZ用に調整。(ver1.041)

2020/08/21(ver1.03)

  • ツクールMZ版(NRP_TroopRandomFormationMZ)を作成。
    →やっぱり同じJSファイルに統合。

2020/05/31(ver1.02 -> 1.021)


2020/05/15(ver1.01)

  • 処理を『座標総当り方式』へと一新して配置を安定化。
    ※旧処理(ランダム繰り返し方式)も選択できますが非推奨です。
  • グリッドの基準位置を右下に変更。

2020/05/14(ver1.00)

  • 公開!

使用方法


 初期状態では、名前が『#』で始まるグループを自動配置の対象としています。この条件はプラグインパラメータの『実行条件』で変更可能です。パラメータとグループ名を設定し、対象とするグループを決定してください。


 他にも詳細な設定が可能ですが、基本的にはこれだけで即実用可です。最初からサイドビュー用にそれっぽい設定をしてあります。

 詳細は下のプラグインパラメータをご覧ください

注意点


 このプラグインで自動配置を実施すると、敵グループ内のデータ上の並び順も変更されてしまいます。
 バトルイベントで対象を固定した実装をしている場合は、ズレが生じる可能性があります。ご注意ください。

競合情報(2021/06/27)


 当プラグインとGALV_LayerGraphicsMZ、NRP_DynamicMotionMZの二つを併用すると、正しく敵が重なって表示されない模様です。競合を解消するプラグインを作成しましたのでご利用ください。
 http://newrpg.seesaa.net/article/482187330.html

外部連携


 ver1.02で、外部の敵グループランダム生成プラグインとの併用に対応しました。
 その際、必ずNRP_TroopRandomFormation.jsを下に配置してください。敵グループを生成→ランダム配置という順序で処理するためです。

 ちなみに、これらのプラグインはAB_EnemyBook.js(ヱビ様)のように、出現後の敵に対して処理を行うプラグインと競合するので要注意です。
 AB_EnemyBookについては、DarkPlasma_SupponREEより下に配置すればエラーが起きなくなるのを確認しています。

プラグインパラメータ(適用条件)


 自動配置の対象とするグループを決めるための条件を設定します。

実行条件(condition)

 自動配置を実行する条件(JavaScript計算式)です。
 初期値の『name.startsWith("#")』は「グループ名が#で始まる」という意味です。#の部分を好きな文字に変えて使ってください。

 空欄にすると全てのグループが自動配置の対象となります。

 他にも……
  • name.includes("#"):グループ名に#を含む。
  • name.endswith("#"):グループ名が#で終了する。

 などが使えます。
 グループ名の先頭を使うプラグインは他にもあったりするので、競合する場合はこれらを使ってください。ちなみに2文字以上でもOKです。

除外条件(exclusionCondition)

 自動配置を実行しない条件です。実行条件よりも優先されます。

 実行条件を全件有効にした場合でも、これを設定すれば除外するグループを設定できます。あまりこだわらない場合は、全件有効にしたほうが楽なのでオススメです。

プラグインパラメータ(配置範囲)


 自動配置を行う範囲です。この範囲内に敵の画像が収まるようランダム配置を実行します。
 初期値ではサイドビュー用の値が設定されています。

開始X座標(左)(startX)

終了X座標(右)(endX)

 自動配置を行う開始X座標(左端)と終了X座標(右端)です。

開始頭上Y座標(上)(startHeadY)

 自動配置を開始する敵の頭上に相当するY座標です。
 いくら背の高い敵でも、この座標の上に頭が出ることはありません。

 初期値はMZだと20、MVだと0になっています。MZの場合はなぜか20ピクセルほどズレるようなので調整しました。(ver1.041)

開始足元Y座標(上)(startFootY)

 自動配置を開始する敵の足元に相当するY座標です。
 敵の足元の座標がこれより下となるように配置されます。

終了Y座標(下)(endY)

 自動配置を行う終了Y座標(下端)です。

グリッドサイズ(gridSize)

 自動配置する座標の単位です。 
 『終了X座標』と『終了Y座標』ーーつまり右下を基準として、指定値の倍数の地点に配置されます。
 初期値は32です。

 ※グリッドが小さすぎると配置計算の負荷が増大するため、あまり小さくしすぎないように注意してください。

浮遊分を加算(addFloat)

 NRP_ShadowAndLevitate.jsによる浮遊値を敵キャラの高さに含めて配置を行います。
 これにより、敵の頭が隠れてしまう問題に対処できます。

プラグインパラメータ(敵の並び順)


 敵のデータ上の並び順を調整するための項目です。これは対象選択時に名前が表示される順番となります。

 サイドビューでは右上→右下→左上→左下。
 フロントビューでは左下→右下→左上→右上に配置された順に番号を振られます。

 なお、以下2つの項目はサイドビューの場合のみ機能します。

同列とみなす範囲(sameRowBorder)

 互いのX座標の差が指定の数値内に収まる場合、同じ列とみなして番号を振ります。
 つまり「ちょっとぐらい横に位置がずれていても、同列として上から順番に番号を振るよ」という意味です。


 この画像では、ケルベロスよりオークのほうが左にいますが、番号はオークのほうが小さくなっています。

基準となるX座標(sortBaseX)

 並び替えの基準とするX座標です。
 『0:画像中央』『1:画像右端』が選択できます。初期状態では画像右端となっています。

プラグインパラメータ(敵が一体の場合)


 敵が一体の場合に、どのように配置を行うかを設定する項目です。
 「敵が一体の時までランダム配置したら、変な隙間ができて違和感あるんじゃね?」というわけで、この項目があります。

 そんなわけで、初期設定では有効範囲の中央に配置します。

単体時の配置(singleEnemyPosition)

 敵が一体の場合に配置する方法です。
 『0:ランダムに配置』ならば、二体以上の場合と同様にランダム配置します。
 『1:指定座標に配置』ならば、以下で設定した座標に配置します。

 初期値は『1:指定座標に配置』に配置です。

単体時のX座標(singleEnemyX)

 指定座標に配置する場合のX座標です。
 初期値の『(startX + endX) / 2』は配置範囲の中央を表す数式です。

単体時のY座標(singleEnemyY)

 指定座標に配置する場合のY座標です。
 初期値の『((startHeadY + startFootY) / 2 + endY) / 2 + a.height/2』は中央らへんにそれっぽく見えるようにした数式です。
 ※X座標とは異なり、大きさに関わらず敵を中央付近に表示する数式は地味に難しいです。気に入らなかったら適当に調整してください。

プラグインパラメータ(演算方法)


 内部的に配置を計算する方法と、その試行を繰り返す回数と、およびその基準値を設定します。
 試行回数が小さい場合、不自然に敵が重なって配置されてしまうことがあります。回数を多くするほど配置が安定しますが、それだけ戦闘開始時の計算負荷が増大します。

 よく分からなかったら初期値のままが無難だと思います。

演算方式(algorithmType)

 自動配置を行う演算方式です。

0:座標総当り(推奨)

 グリッド単位で全座標を検査し、適切な間隔が取れる座標の中からランダムで選択します。
 高い精度で敵同士の重なりを防止できるため、基本的にはこちらの使用を推奨します。

1:ランダム繰り返し

 ランダムで配置を繰り返し、その中で最もマシな座標を選びます。
 運が悪いと敵が不自然に重なってしまうのであまり推奨しません。

グループ当たりの試行回数(maxTryNoForTroop)

 自動配置を繰り返すグループ当たりの最大回数です。(初期値は50)

 演算方式に従って比較&配置を終えた後、さらにグループ全体として配置をやり直す回数です。このプラグインはそうやって最適な全体配置を求めています。

 この値を増やすと適切な配置になる可能性が高まりますが、同時に計算量も増大します。

一体当たりの試行回数(maxTryNoForEnemy)

 ※この項目は『1:ランダム繰り返し』の場合のみ有効です。基本的には無視してもらって構いません。

 自動配置を繰り返す一体当たりの最大回数です。(初期値は50)

 内部的には、一体毎にランダム配置を繰り返し、互いの座標を比較して間隔を確保できる配置を探しています。これはその配置を繰り返す回数です。
 敵の配置数が増えれば増えるほど、互いの比較を繰り返すのでこの値に乗算する形で試行回数も増えます。

確定とする距離評価値(distanceBorder)

 この値を超える距離評価値を得た場合、配置を確定します。

 値を大きくするほど間隔を確保します。
 基本的には、値が100なら100ピクセル間隔を取ると考えればよいです。敵の数が多い場合など間隔を確保できなければ、比較的間隔の広い配置を選びます。

 値をマイナス値にすると、下の画像のような縦に重なったパターンも許可するようになります。なるべく自然に見せるため、上半分が隠れずに見えているパターンを優先的に選んでいます。


 実用性はありませんが、-10000を下回ると不自然に重なったパターンも出現するようになります。

 また、数式も使用可能です。
 例えば『$gameTroop.members().length == 2 ? 100 : 0』なら、敵が2体の時のみ間隔を100とります。

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