You are viewing a potentially older version of this package. View all versions.
CeruleanCutlass-AggroKit-0.1.1 icon

AggroKit

Reusable aggro/threat control tooling for Outward BepInEx mods: patch-free targetability overrides, detection observability, per-pair targeting gates. A library dependency, installed automatically when another mod needs it.

Date uploaded 11 hours ago
Version 0.1.1
Download link CeruleanCutlass-AggroKit-0.1.1.zip
Downloads 24
Dependency string CeruleanCutlass-AggroKit-0.1.1

This mod requires the following mods to function

BepInEx-BepInExPack_Outward-5.4.19 icon
BepInEx-BepInExPack_Outward

BepInEx pack for Outward.

Preferred version: 5.4.19
CeruleanCutlass-ForgeKit-0.4.1 icon
CeruleanCutlass-ForgeKit

Dependency-free dev-tooling for Outward BepInEx mods: file-driven dev command loop, self-test harness, on-screen toasts, player-ready lifecycle wait, embedded/override table loaders, and a shared dev-verb pack (movement/combat/skill/status probes).

Preferred version: 0.4.1

README

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 targetability gate — make one specific character untargetable to one specific other character, without touching the game's global targeting rules.
AggroEvents Observability hooks (opt-in, off by default) plus one always-on engine bugfix: a squad-self-target guard.

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. Detection-side control patches and the
## targetability override gate stay applied regardless — they're inert until a verb activates them.
EnableObservation = false

[Fixes]
## Kill-switch for the always-on engine bugfix in AISCombat.SetPreferredTarget: blocks a
## squad-contagion self-target assignment. Unreachable in vanilla, so default ON is safe.
BlockSquadSelfTarget = true

Dev verbs

AggroKit polls BepInEx/config/ak_cmd.txt (write a line, it runs on the next poll — works while the game is paused). [General] 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 <name|nearest|off> Watch an AI's (state, target) changes
forcetarget [name|nearest] Force an AI onto the player, and auto-watch it
feud <A> <B> [nooverride|both] Make any two AIs fight each other
taunt [radius] / calm [radius] Pull every AI in radius onto the player / calm them
untargetable / targetable Toggle the player's QuestNonTargetable
undetectable / detectable Toggle the player's DetectabilityMult
shieldme / unshieldme Toggle incoming-aggro shielding on the player
stealthme [off] Veto AI detection of the player
decoy <name>|off Redirect detections of the player onto another AI
noaggro [off] The player's hits generate no aggro
clearoverrides Clear all targetability overrides
status One glance: player flags, overrides, controls, watches, aggrolog
restore Undo everything — targetable + detectable, all overrides/controls/watches cleared
selftest Zero-interaction environment checks ([SELFTEST] PASS/FAIL … DONE)

The [General] DumpKey bind (default F3) runs aggrodump without the channel. Keys are a cross-mod resource in this workspace — AggroKit claims its bind through ForgeKit.Keybinds so a collision with another mod is reported rather than silently firing both.

Using it (for modders)

<!-- your .csproj -->
<ProjectReference Include="path\to\AggroKit\AggroKit.csproj" Private="false" />
[BepInPlugin(GUID, NAME, VERSION)]
[BepInDependency(AggroKit.Plugin.GUID)]
public class Plugin : BaseUnityPlugin
{
    // AggroTools / TargetableOverrides / AggroEvents are static entry points —
    // call them directly once AggroKit has loaded (declare it as a dependency above).
}

Private="false" matters — it stops MSBuild from copying a second AggroKit.dll into your mod's own output folder. The kit ships from its own BepInEx/plugins/AggroKit/ folder; your mod just references it and declares the dependency so BepInEx loads it first.

Compatibility

Outward must be on its Mono Steam beta branch, not the default IL2CPP build — like every BepInEx 5 mod for this game. If your game runs but no BepInEx mods load and there's no crash log, this is almost always why (Properties → Betas → select mono in Steam).

License

Apache License 2.0 — see LICENSE in the repository root. You may use, modify, and redistribute this kit (including in commercial mods) provided you keep the copyright/license notice; see the license text for the full terms.

CHANGELOG

AggroKit changelog

0.1.1 — 2026-08-02

  • Logging: answer "why did nothing happen?" without needing LogVerbose on in advance
  • Cleanup: one anchor-collect loop, one ownership side-table
  • Docs sweep: archive, condense, and validate the whole documentation tree