AggroKit

v0.1.6·Updated 2026-09-06

Reusable aggro/threat control tooling for Outward BepInEx mods: per-pair targetability gates, detection veto/redirect, taunt and force-target primitives. Inert until a mod uses it — a library dependen

About this mod Author’s original text

AggroKit

📖 Full documentation: AggroKit wiki page

Reusable aggro/threat-control tooling for people writing BepInEx 5 mods for Outward:

Definitive Edition. It doesn't add anything a player sees on its own — it's a library

dependency other mods (CompanionKit, and anything built on top of it) pull in, and other modders

are welcome to build on it too.

Requires: BepInEx 5 (Outward's Mono branch — see Compatibility below) + ForgeKit (hard

dependency, installed automatically).

What's in it

| Piece | What it gives you |

|---|---|

| AggroTools | Patch-free primitives for reading/adjusting engine aggro state without a Harmony patch of your own. |

| TargetableOverrides | A per-pair / per-target targetability gate — make one specific character untargetable to one specific other character (or to everyone), without touching the game's global targeting rules. Pair beats for-all. Since 2026-08-22 it also stops AI acquisition (detection, hurt-aggro, squad hand-outs) and skill sub-effects, not just lock-on and melee. |

| AggroTools.Protect(target, owner) / Unprotect | The convenience over the gate: nobody may attack target (AI, player weapons, lock-on, skill sub-effects); existing AI locks on it are released. Re-allow one attacker with TargetableOverrides.Set(attacker, target, true, owner). |

| AggroEvents | Observability hooks (opt-in, off by default) plus an opt-in squad-self-target guard (also off by default — see BlockSquadSelfTarget). |

Installing (for players)

Drop the AggroKit folder into BepInEx/plugins. It has no effect by itself — install it

because another mod you're using declares it as a dependency.

Configuration

BepInEx/config/cobalt.aggrokit.cfg (generated on first launch):

[Dev]

Poll BepInEx/config/ak_cmd.txt for dev commands (aggrodump/forcetarget/taunt/calm...).

EnableCommandFile = true

Whether DumpKey logs an aggro dump of all AI characters near the player.

EnableDumpKey = true

Key that logs an aggro dump of all AI characters near the player (needs EnableDumpKey=true).

Default value: F3

DumpKey = F3

[Research]

Re-arm AggroEvents' purely-observational Harmony taps that record the event buffer. OFF by

default so these hot AI-tick paths stay un-patched. With EnablePatches on, the detection-side

control patches and the targetability override gate are installed regardless of this key — they're

inert until a verb activates them.

EnableObservation = false

[Fixes]

Master switch for EVERY Harmony patch AggroKit installs. Off = it patches nothing at all, while

the library calls and the ak_cmd.txt verbs keep working — so AggroKit can be ruled in or out of a

mod-conflict bisection without uninstalling it. Applied at load; changing it needs a relaunch.

EnablePatches = true

Opt-in fix for a squad-contagion self-target assignment in AISCombat.SetPreferredTarget.

DEFAULT OFF: the case is unreachable in vanilla, and the block is a skipping Harmony prefix, which

also suppresses any other mod's prefix on the same method. Read live — no relaunch needed.

BlockSquadSelfTarget = false

Dev verbs

AggroKit polls BepInEx/config/ak_cmd.txt (write a line, it runs on the next poll — works while

the game is paused). [Dev] EnableCommandFile = false turns the channel off.

| Verb | What it does |

|---|---|

| aggrodump [radius] | Aggro dump of every AI near the player, plus the player's targetability state |

| aistates [name\|nearest] | Dump one AI's state machine |

| aggrolog [n\|on\|off\|clear] | The [AGGRO] event buffer |

| watch | Watch an AI's (state, target) changes |

| forcetarget [name\|nearest] | Force an AI onto the player, and auto-watch it |

| feud [nooverride\|both] | Make any two AIs fight each other |

| taunt [radius] / calm [radius] | Pull every AI in radius onto the player / calm them |

| truce [seconds] [name\|nearest] / truceoff [name\|nearest\|all] / truces | One AI tolerates the player for N s (your hit on it ends it) / end one or all / list them |

| untargetable / targetable | Toggle the player's QuestNonTargetable |

| undetec

Install & use Install: BepInEx plugin

  1. The archive from playbuff is the mod itself — usually a BepInEx plugin (a .dll or a plugin folder once unzipped).
  2. Recommended: use a community mod manager (such as r2modman) — pick this game, import the mod, and the manager sets up BepInEx and its dependencies for you.
  3. Manual route: install the BepInEx loader in the game folder, then drop the unzipped .dll or plugin folder into BepInEx/plugins/.
  4. Launch the game — the BepInEx console logs every plugin it loads; seeing this mod in the log means it is installed.

Mods with listed dependencies need those installed too, or they will not load. Options are usually changed in-game or in the plugin's config file.

Dependencies

Install these first, or the mod will not work:

BepInEx-BepInExPack_OutwardCeruleanCutlass-ForgeKit

File & checksum

Filename
AggroKit-0.1.6.zip
File size
150.8 KiB