IntelliPatch — RPG Maker MZ 用の動的リアクティブ A* パスファインディング
ギャラリーファースト




バージョン: 2.0.6
作者: Rpx & Just Dev
GitHub: https://github.com/Rp-ics/RMMZ_IntelliPatch_Plugin
Discord: https://discord.gg/fXcK6u22gQ
Itchio: https://r-px.itch.io/
IntelliPatch とは?
IntelliPatch は、リアクティブで動的なナビゲーションに焦点を当てた、RPG Maker MZ 用のタイルベース A* パスファインディングプラグインです。単に「A から B へ移動する」だけでなく、リアルタイムで再計算を行い、移動中のターゲットにも対応し、パスの計算タイミングと方法を完全に制御できます。
CPU リソースを消費しすぎることなく、賢い NPC を必要とするプロジェクト向けに構築されています。
機能
- バイナリヒープを用いたタイルベース A*(高速、依存関係なし)
- プログラム可能なナビゲーションパッチ — コスト、ブロック、強制、ポータル、条件付き
- フレームごとのラウンドロビン再計算スケジューラ — 制限付き、優先度付き、トークンバケット方式
- パススムージング(ブレンハムの直線視界によるストレージング)
- デバッグオーバーレイ — 緑:パス、赤:ブロック済み、黄:パッチ済み、灰:訪問済み
- 立ち往生ポリシー — 再計算、原点復帰、後退再試行、ランダム、ゴースト、断念
- ゴールシステム — 複合可能なマルチターゲットゴール(任意、すべて、シーケンス、最寄、重み付け、条件付きなど)
- 拡張性 — カスタムヒューリスティック、コスト関数、パッチタイプ、ゴールモード、待機条件、ステアリング動作を登録可能
- VisuStella 互換 — ベースクラスにフックするため、Events & Movement Core との競合なし
クイックスタート
IntelliPatch.jsをjs/plugins/にコピー- プラグインマネージャーで有効化
- ロード順: VisuStella Events/Movement Core の後、
Game_CharacterBase.updateをオーバーライドするプラグインより前に配置
その後、スクリプト呼び出しまたは移動ルートから:
IntelliPatch.moveTo(this, 15, 20);
またはプラグインコマンド(MoveTo、FollowTarget、WanderArea など)を使用。
例:NPC がプレイヤーを追跡
IntelliPatch.moveTo(this, $gamePlayer.x, $gamePlayer.y, {
avoidEvents: true,
allowTouch: true,
diagonal: true,
stuckPolicy: "recalc",
onArrive: function() { $gameMessage.add("Caught!"); }
});
例:低速ゾーンにコストパッチ適用
IntelliPatch.addPatch({
id: "mud",
type: "cost",
area: { x: 3, y: 3, w: 5, h: 5 },
data: { multiplier: 3.0 }
});
IntelliPatch.wander(this, { x1: 1, y1: 1, x2: 10, y2: 10 });
例:スイッチで開くドア
IntelliPatch.addPatch({
id: "door",
type: "block",
area: { x: 12, y: 8, w: 1, h: 1 },
condition: function() { return !$gameSwitches.value(5); }
});
IntelliPatch.moveTo(this, 15, 8);
パッチタイプ
| タイプ | 説明 |
|---|---|
cost |
移動コストを乗算(泥、荒れた地形など) |
block |
タイルを通行不可にする |
force |
特定の方向に押し出す(風、潮流など) |
portal |
タイル A からタイル B へのテレポート |
conditional |
カスタムコールバックでコストまたはブロックを決定 |
立ち往生ポリシー
代替ルートが存在しない場合、IntelliPatch は設定されたポリシーを実行します:
recalc— 再試行を続ける(デフォルト、断念しない)origin— 開始地点に戻り、その後失敗とするback_retry— 軌跡を後退して再試行random— ランダムなタイルにワandering して再試行ghost— N タイル分衝突判定をオフ(パッチは適用される)giveup— その場で停止し、onFailを発火
ゴールシステム
複合可能なゴールにより、NPC を複雑なターゲットへ誘導できます:
IntelliPatch.moveToGoal(this, {
mode: "sequence",
points: [{x: 5, y: 5}, {x: 10, y: 10}, {x: 15, y: 15}]
});
対応モード: any, all, sequence, closest, farthest, random, weighted, conditional, sequenceThenLoop, sequenceThenReverse, eventAt, eventAtAny, guardPost, twoEventsMeet, simultaneous, swap など。
デバッグオーバーレイ
DebugMode を true に設定するか、IntelliPatch.debug() を呼び出します。
- 緑 = アクティブなパス
- 赤 = ブロック済み / 失敗したターゲット
- 黄 = パッチ済みタイル
- 灰 = 訪問済みノード
- 紫 = ゴールポイント
- シアン = キャラクター → ターゲットの直線
タイルをクリック(DebugMode 有効時)または IntelliPatch.debugTile(x, y) を呼び出すと、そのタイルのすべてのパッチ修飾子をログに出力します。
IntelliPatch の拡張
ファイル編集は不要です。ランタイムでカスタム動作を登録します:
IntelliPatch.registerHeuristic("biased", function(x0, y0, x1, y1) {
var base = Math.abs(x0 - x1) + Math.abs(y0 - y1);
if ($gamePlayer.direction() === 6 && x1 > x0) base *= 0.7;
if ($gamePlayer.direction() === 4 && x1 < x0) base *= 0.7;
return base;
});
IntelliPatch.setGlobalConfig("defaultHeuristic", "biased");
利用可能なレジストリ:
registerHeuristic(name, fn)registerCostFunction(name, fn)registerPatchType(name, handlers)registerGoalMode(name, resolver)registerWaitCondition(name, fn)registerSteeringBehavior(name, fn)registerCallback(hook, fn)registerPreRecalc(fn)/registerPostRecalc(fn)registerOnMapChange(fn)/registerOnArrival(fn)
動画シリーズ
IntelliPatch に関するフル動画シリーズを作成中です:
- Ep. 1 — イントロ
- Ep. 2 — 問題点 vs 解決策
- Ep. 3 — セットアップとパラメータ
- Ep. 4 — スクリプト呼び出しとプラグインコマンド
- …その他多数
https://youtu.be/BQJ8TGwz_Bc
フィードバックとバグ報告
バグ、提案、フィードバックはこのスレッドに投稿するか、GitHub でイシューを開いてください。
プロジェクトで IntelliPatch を使用している場合は、ぜひ見せてください!スクリーンショットやクリップを共有してください!
クレジット
- Rpx & Just Dev • プラグイン作者 (任意)
- RPG Maker MZ コミュニティ向けに構築
ライセンス: 詳細は GitHub リポジトリをご参照ください。