Configuration Reference

Documentation Unreal Engine AI Configuration Reference

Every SEC setting and the one place you set it: project settings, the Enemy AI Config, the data assets, the components.


Every setting SEC reads, grouped by where you set it. Look the value up here, follow the link for what it does.

Where a setting lives

WhereWhat it coversReaches
Project Settings, Plugins, Soulslike Enemy CombatRole slot limits, token budgets, target selection fallbacks, which vital counts as healthThe whole project
Enemy AI ConfigOne enemy archetype: role registration, target selection, the sets it swaps per role, perception, recoveryEvery enemy pointed at that asset
The assets that config namesMovesets, reactions, movement bands, perception ranges, damageWherever an asset is named
Components on the controller and the pawnWhat stays the same whatever role the enemy playsOne Blueprint, or one placed actor
The dividing line: an Enemy AI Config holds what changes with the combat role, a component holds what does not.
No target selector ships turned on. With Target Selector empty on the Enemy AI Config and Default Target Selector empty in Project Settings, an enemy takes the first target it may fight, whether that target was already in the pool or registered long after the enemy started running, as long as Register Combat Target is called with Auto Assign Unassigned ticked. Fill one of the two in once several enemies share a fight or several players are registered. Targeting covers the choices.

Project Settings

Edit, Project Settings, Plugins, Soulslike Enemy Combat. What you set here covers every enemy in the project.

Combat Roles

SettingDefaultSets
Additional RolesemptyCustom role tags evaluated alongside Attacker, Waiter, Flanker, Supporter and Elite.
Role LimitsAttacker 3, Flanker 2, Supporter 2How many enemies hold each role against one target at a time. A role with no row is unlimited.
Fallback RoleSEC.Role.WaiterThe role handed out when every preferred slot is full. Keep it out of Role Limits so it can absorb the overflow.
Timing
Role Reassignment Interval
8
Min Time In Role
8
Reevaluate Targets On Reassignment
SettingDefaultSets
Role Reassignment Interval8 sSeconds between role re-evaluations.
Min Time In Role8 sHow long an enemy holds a role before it can be reassigned, which stops role thrashing.
Reevaluate Targets On ReassignmentoffRe-run each enemy's target selection on every cycle. Fights with one player see no difference.

Combat Tokens

Combat Tokens
Token Budgets
2 Array elements
SEC.Token.Attack
Budget
2
Reissue Delay
0
SEC.Token.Ranged
Budget
2
Reissue Delay
0
Budget caps how many enemies run one class of action against the same target at once. Reissue Delay holds a freed slot out of circulation for that many seconds, which paces how fast one attack follows another. A tag with no row is unlimited, and an action opts in by carrying a Combat Token Gate. See Combat Tokens.

Target Selection

Target Selection
Default Target Selector
None
Default Target Filter
None
Default Target Selector answers for any enemy whose config names none. Default Target Filter decides which actors an enemy is willing to fight at all; left empty, the built-in answer applies (never itself, never a declared ally, never an actor its team excludes, and anything with no team is fair game).

Vitals

SettingDefaultDrives
Health Vital TagSEC.Vital.HealthDeath, the Health Scorer, and the health fraction actions score against.
Stamina Vital TagSEC.Vital.StaminaThe Stamina Gate and the stamina value actions score against.
An enemy with no vitals component, or no row for the named tag, reads as full health and 100 stamina. See Vitals.

Enemy AI Config

One asset per enemy archetype. Create it with right-click in the Content Browser, SEC, Enemy AI Config, then set it on the enemy pawn's AI Config. EnemyConfig_Default and EnemyConfig_Boss ship with the plugin as working examples.
Two settings outside the asset decide whether it is read at all. The pawn's AI Controller Class has to name a controller carrying a SEC Combat Controller component, since a pawn falling back to the project's default controller ignores every field below. And the pawn answers the config question ahead of the controller, so a pawn that carries an AI Config field and leaves it empty ends up with no config; the controller's Default AI Config does not fill that gap.

Combat Role

Combat Role
Auto-Register for Combat Roles
Allowed Roles (empty = any)
0 Gameplay Tags
Priority
0
Preferred Role
None
Fitness Evaluators
0 Array elements
Target Selector
None
Target Filter
None
Ignore Target Redistribution
FieldDefaultSets
Auto-Register for Combat RolesonJoin multi-enemy coordination at possession. Untick for ambient wildlife or a scripted boss.
Allowed Roles (empty = any)emptyRestrict this enemy to the roles listed. An archer can allow Waiter and Supporter alone.
Priority0First pick of a limited slot. 0 standard, 50 elite, 100 mini-boss, 200 boss.
Preferred RolenoneTried first when it is free. Must sit inside Allowed Roles, or Allowed Roles must be empty.
Fitness EvaluatorsemptyObjects scoring how well this enemy fits each role. Empty scores by distance, closer being higher.
Target SelectornoneHow this enemy picks among several targets. Empty falls back to the project setting, which also ships empty.
Target FilternoneWhich actors it is willing to fight at all. Empty uses the built-in answer.
Ignore Target RedistributionoffOpt out of the periodic target reshuffle, for a boss with a scripted target.

The sets it swaps per role

Action Sets
Manage Action Sets Automatically
Default Action Set
DA_SEC_ActionSet_Attacker
Role Action Sets
3 Array elements
Reaction Sets
Manage Reaction Sets Automatically
Default Reaction Set
DA_SEC_ReactionSet_Default
Role Reaction Sets
1 Array element
Movement Profiles
Manage Movement Profiles Automatically
Default Movement Profile
DA_SEC_Movement_Attacker
Role Movement Profiles
2 Array elements
Each of the three groups works the same way: a master switch, a default asset, and a per-role list.
FieldDefaultSets
Manage Action Sets AutomaticallyonResolve the moveset by role and grant its abilities. Untick to drive abilities yourself.
Default Action SetnoneThe moveset for any role with no entry of its own.
Role Action SetsemptyOne row per role: the role tag, a Managed tick, and the asset.
Manage Reaction Sets AutomaticallyonSame switch for reactions.
Default Reaction SetnoneThe reactions for any role with no entry of its own.
Role Reaction SetsemptyOne row per role, same shape as above.
Manage Movement Profiles AutomaticallyonSame switch for movement.
Default Movement ProfilenoneThe movement band for any role with no entry of its own.
Role Movement ProfilesemptyOne row per role: the role tag and the profile.
Fill in the default alongside any per-role list. An enemy holding a role you did not list, or holding no role yet, takes the default; with the default empty it gets nothing.

Awareness

Details
Enemy AI Config
Awareness
Manage Awareness Automatically
Awareness Config
DA_EnemyAwareness
Awareness category on the Enemy AI Config asset the enemy pawn points at.
FieldDefaultSets
Manage Awareness AutomaticallyonPush the Awareness Config to the enemy's perception when the controller takes its pawn.
Awareness ConfignoneSight, hearing, damage sense, and memory. Empty senses nothing, which holds every awareness state at Unknown and keeps the brain out of its combat phase.
Stimulus FiltersemptyWhat this enemy can notice before an attack lands. Empty notices everything.
Fill Awareness Config in for any enemy meant to fight. The controller carries a perception component whatever the config says, so an empty asset leaves that component with nothing to sense, and an enemy with every other field correct stands still.
Perception alone does not gate who the enemy fights. Set Target Selector above to an Awareness Filtered Target Selector as well, or the enemy senses a target and engages everything anyway. See Awareness.

Behavior

Details
Enemy AI Config
Behavior
Default State Tree
StateTree_SEC_Core
Decision Context Params
Aggression Level
1
Window Id Interval Seconds
1.0
LOS Trace Channel
Visibility
LOS Trace Complex
Empty Default State Tree runs the native combat loop. Decision Context Params feed Build Decision Context and the native brain.
Default State Tree picks the brain. Leave it empty and the Fallback State Tree on the StateTree component answers instead; with that empty too, the enemy runs the plugin's own combat loop with no StateTree at all. StateTree_SEC_Core ships with the plugin as a graph to start from. See StateTree.
Decision Context fieldDefaultSets
Aggression Level1.0Baseline aggression handed to scoring. 0 defensive, 1 balanced, 2 aggressive.
Window Id Interval Seconds1.0Seconds between reseeds of the score variation. 0 never advances.
LOS Trace ChannelVisibilityThe channel the line-of-sight check traces on.
LOS Trace ComplexoffTrace per-poly collision instead of simple shapes.

Recovery

Every field defaults to 0, which leaves recovery off.
FieldDefaultSets
Action Recovery Time0 sSeconds every offensive action is held back after one completes or times out. Movement and reactions keep running.
Interrupt Recovery Time0 sThe same window after an interrupt or a cancel. Keep it shorter, so a parry does not double-stun.
Action Recovery Time Randomization0 sPlus or minus jitter on the completion window, so a pack does not act in lockstep.
Global HooknoneA lifecycle hook run around every action this enemy commits, ahead of any per-action hook.
A single action can replace the window: tick Override Recovery Time on that action and set its Recovery Time. See Recovery.

The data assets

Right-click in the Content Browser, SEC, then pick one.
AssetHoldsSet on
Action SetA moveset: one card per action, with its scoring, cooldown and combo linksEnemy AI Config, or a weapon
Reaction SetReactions plus the trigger rules that fire themEnemy AI Config, or a weapon
Movement Behavior ProfileThe distance band and rest behavior for one roleEnemy AI Config
Awareness ConfigSight, hearing, damage sense, and memoryEnemy AI Config
Damage ConfigDamage numbers and what a landed hit doesA melee trace window, or the trace component
Defense Rule SetBlocks, parries and armour, in the order they answer a hitSEC Defense component, or a weapon
Impact Surface SetWhich impact cue plays per surface struckThe Surface Set on a SEC Play Gameplay Cues hit effect
Enemy AI ConfigEverything above, tied together per archetypeThe enemy pawn

Action Set

The asset holds an Actions array. Each action carries these numbers; see the Action System for what to do with them.
FieldDefaultSets
EnabledonUnticking also stops the action's ability being granted.
SelectionScoredHow automatic selection reaches it. Scored puts it in the normal poll, Chain Only limits it to an open chain window, Manual Only leaves a direct call by Action ID as the only route in.
Action IDemptyThe name chain links and logs use. Required.
Execution MethodGameplay AbilityHow the action runs. An action added on the canvas arrives with this one already on it.
Selection Weight1.0Multiplies the score. 2.0 doubles this action against a weight 1 action.
Risk Penalty1.0Divides the final score. 2.0 halves it, 0.5 doubles it.
Tag Score MultipliersemptyPer-tag multipliers, so a stunned target can favour a heavy attack.
ScoringemptyThe Scorers and Gates below. A new action has none, so it fires at any range.
Requires Tags / Block TagsemptyTags that must be present, and tags that block.
Require Line Of SightoffFire only with a clear view of the target.
Add TagsSEC.State.IsMovementBlockedHeld on the enemy while the action runs. Remove the default entry to let it move mid-swing.
Cooldown Duration0 sThe wait before this action runs again. 0 lets it repeat back to back.
Initial Cooldown0 sA wait charged at spawn, so an enemy cannot open with its heaviest hit.
Randomization (%)0Plus or minus jitter on the cooldown. 0.2 turns a 5 s wait into 4 to 6 s.
Interrupt Refund (%)0Share of the remaining cooldown handed back when the action is cut short.
Spawn Cooldown Chance0Chance the action starts on cooldown at spawn, desyncing a group.
Max Consecutive Uses-1Uses in a row before another action must run. -1 is unlimited.
Override Recovery TimeoffGive this action its own recovery window instead of the config's.
HooknoneA lifecycle hook run around this action alone.
Chain LinksemptyFollow-ups this action prefers, each with a Bonus Multiplier (1.5 by default).

Movement Behavior Profile

FieldDefaultSets
Desired Distance400 cmThe range this enemy fights at.
Distance Tolerance0.2The far half of the comfort band, as a share of Desired Distance.
Crowd Tolerance0.45The near half, how far a target may press in before the enemy gives ground.
Enable Strafe RestonPause after continuous circling.
Strafe Rest Time Limit10 sSeconds of circling before a rest.
Strafe Rest Duration1.5 sHow long that rest lasts.
Swap Strafe On High ThreatoffChange circling side once threat runs long.
Adjust Distance By ThreatoffBack off as threat rises.
Threat Distance Scale1.0How hard threat pushes the distance out. Greyed out until the line above is ticked.
Positioning RulesemptyDirection preferences that stack on top of the band, such as flanking or backstabbing.
Details
Movement Behavior Profile
Threat Response
Swap Strafe On High Threat
Adjust Distance By Threat
Threat Distance Scale
1
Role-swapped fields on the active movement profile. Both switches ship off on a new profile.
The two threat switches need a Threat Detection component on the controller; without one they sit inert. Everything else about movement lives on the Movement Evaluator component, the same for every role. See Movement.

Damage Config

Details
SEC Damage Config
Damage
Damage
10
Additional Vital Damage
0 Array elements
Damage Type
None
Damage Type Class
None
Damage Tags
0 tags
Multi Hit Interval
-1
Max Targets Per Swing Override
-1
Use Authored Hit Direction
Hit Effects
Hit Effects
0 Array elements
Data asset assigned on the montage notify or the trace component Default Damage Config.
FieldDefaultSets
Damage10Base health damage, before anything the target does to it.
Additional Vital DamageemptyExtra pools this attack drains, one row per vital. A target with no matching row ignores that row.
Damage TypenoneA tag naming the kind of damage, for a target that resists or reacts by type.
Damage Type ClassnoneCarried on the point damage fallback. Unset sends the engine default.
Damage TagsemptyExtra tags describing hits from this attack, a backstab or a critical.
Multi Hit Interval-1Seconds before this attack can hit the same target again. -1 uses the trace component's Hit Reset Interval.
Max Targets Per Swing Override-1How many targets one swing cuts through. -1 uses the trace component's own limit, 0 is unlimited.
Use Authored Hit DirectionoffSend a fixed blow direction instead of the attacker-to-target one.
Authored Hit Direction Local(1, 0, 0)That direction in attacker space. (0, 0, 1) launches the target upward.
Hit EffectsemptyWhat the hit does beyond the number: cues, impulses, anything you subclass.
The target decides whether a hit reads as blocked, parried or critical, and reports that back with the result. See Melee Trace and Defense.

Scorers, gates and the curve they share

Distance, angle, health, speed and stamina are opt-in. Add an entry to an action's Scoring list, pick a class, tune its one property. Leave it out and that dimension has no say.
Range
Min Value
0
Optimal Min
100
Optimal Max
250
Max Value
500
Exponent
2
Clamp To Zero
Every built-in scorer shapes its dimension through one Range. Below Min Value the score is 0, it ramps to 1 across Optimal Min, holds through the sweet spot, then falls back to 0 at Max Value. Exponent (2.0) sharpens the ramp, and Clamp To Zero (on) holds the score at zero outside the range instead of letting it go negative.
You type the four numbers in. These bands come up often, and the named ones below are where the built-in scorers start:
BandMin, Optimal Min, Optimal Max, Max
Melee distance0, 100, 250, 500 cm
Ranged distance300, 500, 1000, 1800 cm
Frontal angle0, 0, 30, 90 degrees
Low health0, 0, 0.25, 0.5 fraction
No preferenceScores 1 at any value, which drops the factor
ScorerReadsRange default
Distance ScorerDistance to the target in cm, 0 with no targetMelee distance
Angle ScorerAngle to the target in degrees, 0 facing itFrontal angle
Health ScorerThe enemy's own health as a 0 to 1 fractionNo preference
Speed ScorerThe enemy's horizontal speed in cm/sNo preference
Vital ScorerAny named vital, as a fraction (Use Fraction on) or a raw valueNo preference
Attribute ScorerA gameplay attribute, optionally divided by a second one0, 200, 600, 1200
GateBlocks unlessDefault
Stamina GateStamina is at least Min Stamina0
Vital GateA named vital holds at least Min Value0, read as a raw value
Attribute GateAn attribute sits between Min Value and Max Value0 and 0, where a Max of 0 drops the upper bound
Combat Token GateThe target has a free slot in the pool named by Token Tagempty tag, Cost 1
Four more gates read the stimulus that set a reaction off, so they belong on a reaction or a trigger rule rather than an action: Incoming Angle Gate (60 degrees either side), Time To Impact Gate, Stimulus Magnitude Gate, and Source Distance Gate. Every gate carries an Invert tick.
A Vital Scorer or Vital Gate pointed at a pool the pawn does not carry has no effect and passes. One shared Action Set can serve a boss with a stance bar and a grunt without one.

Components

Settings that do not change with the combat role live on components, so they are edited per Blueprint or per placed actor.

On the AI controller

ComponentHolds
SEC Combat ControllerDefault AI Config, role registration, the threat detection switch, Drop Weapon On Death, Auto Handle Death On Health Depleted.
SEC BrainThe plugin's own decision loop: Evaluation Cooldown (0.1 s), Min Phase Duration (0.5 s), and what the enemy does while it walks home.
Action EvaluationChain Followup Window Seconds (0.6 s) and the action debug switches.
Reaction EvaluationFallback Stimulus Filters and the reaction debug switch.
Movement EvaluatorSampling, avoidance, detour, navmesh and ledge guard, strafe feel, facing while travelling.
Threat DetectionHow the player's camera builds and decays threat.
SEC AwarenessThe live perception memory the Awareness Config tunes.
Bot State Tree AIFallback State Tree and Auto Initialize From Config. The brain creates it at runtime once a tree is named; add it by hand on a custom controller.
AI|SEC
Default AI Config
None
AI|SEC|Combat Role
Auto Register For Combat Roles
AI|SEC|Threat Response
Enable Threat Detection
AI|SEC|Weapon
Drop Weapon On Death
AI|SEC|Vitals
Auto Handle Death On Health Depleted

On the pawn

ComponentHolds
SEC Action Set ComponentThe resolved moveset and any runtime override; carries action state to clients.
SEC Reaction Set ComponentThe same for reactions.
SEC Combat RoleCarries the assigned role to clients.
SEC VitalsThe pools: health, stamina, stance, or any tag you author. See Vitals.
SEC Melee TraceTrace channel, Default Damage Config, hit reset interval, targets per swing. See Melee Trace.
SEC DefenseHow the pawn answers a hit. See Defense.
SEC Equipment ComponentThe starting loadout and the sets a held weapon brings. See Weapons.
SEC TeamTeam id, free-for-all, target exclusions.
SEC TerritoryPatrol posts, wander area, leash anchor and radius. See Territory.
SEC ApproachThe approach window that steers an attack in.
SEC Speed ModifierMovement speed multipliers, driven by a watched tag or added by id.
SEC Token Budget ComponentToken budgets for one target, overriding the project numbers. Goes on the actor being attacked.

Debug it

Run these in the console during Play to see what an enemy resolved:
SEC.Debug.Role 1                 // Name and combat role above each enemy
SEC.Debug.Decision 1             // Distance, angle, sight, speed and threat it scores against
SEC.Debug.Scoring 1              // What each action scored and which one won
SEC.Debug.Awareness 1            // Awareness state, meter fill, age of the last-known location
SEC.Debug.LogRoleAssignments 1   // Role registration and every reassignment
SEC.Debug.All 1 turns every overlay section on at once, and SEC.Debug.WatchPawn <name> narrows them to one enemy. Each section also has a matching checkbox on the component that feeds it, so one enemy can draw without the console.
Saving an Action Set runs validation and reports into the Asset Check message log listing, naming any action with nothing to run.
AdvancedWhich AI Config an enemy ends up with
The controller asks the pawn first. A pawn that answers the config question at all wins, even when its answer is empty, and the controller's Default AI Config is read only for a pawn that does not answer.
An enemy built on the plugin's character base answers, returning its own AI Config field. So for that enemy, leaving the field empty gives it no config; Default AI Config on the controller does not fill the gap. Fill in the pawn's field.
Default AI Config is for a pawn of your own that carries no config field, or a controller class you want to answer for a whole squad.
AdvancedWhich set a role ends up with
Action sets and reaction sets resolve in order, and the first answer wins:
  1. A runtime override set from Blueprint.
  2. The set an equipped weapon supplies for that role.
  3. The role's entry in Role Action Sets or Role Reaction Sets.
  4. Default Action Set or Default Reaction Set on the config.
  5. The component's own Default Action Set or Default Reaction Set, which answers only when the controller found no AI Config at all.
  6. Nothing, which leaves the enemy moving but not attacking.
Movement profiles skip the weapon step: the role's entry in Role Movement Profiles, then Default Movement Profile.
Untick Managed on a role's row and that role is left alone, so an enemy playing it keeps whatever the previous role gave it. That is the switch for a role you drive from Blueprint. A row that stays managed with an empty asset applies nothing, which reads the same way in play and is almost always a mistake.
AdvancedSettings that apply nothing
Four switches leave a filled-in field inert:
  • Manage Action Sets Automatically off ignores the default and every role row.
  • Manage Reaction Sets Automatically off does the same for reactions.
  • Manage Movement Profiles Automatically off does the same for movement profiles.
  • Manage Awareness Automatically off leaves the Awareness Config unread, so the perception set on the component stands.
Two more depend on a component being present: the profile's threat switches need Threat Detection on the controller, and a role row needs that role assigned before its assets are applied.
AdvancedWhen each setting is read
  • Project Settings are read as the subsystem needs them, so a role limit or a token budget takes effect on the next evaluation.
  • The AI Config is resolved once, when the controller possesses the pawn. Swapping the asset at runtime needs Refresh Brain on the SEC Brain component to pick up a different StateTree.
  • Awareness Config is pushed to the perception setup at possession.
  • Action sets, reaction sets and movement profiles resolve at possession and again on every role change.
  • Values inside an Action Set can be tuned during Play In Editor and the running enemy picks them up. Adding, deleting or renaming an action goes through, and the editor warns once in the message log that Play In Editor needs a restart before the change is safe to run.
AlternativeReading and writing config from Blueprint
The config is a data asset, so a Blueprint can read any field off it. Three helpers on the SEC Combat Controller component answer the questions worth asking at runtime:
NodeAnswers
Resolve AI ConfigThe config this controller ended up with.
Resolve Combat RoleThe role tag it is playing.
Get Cached AI ConfigThe same config, off an instance you already have.
The config asset itself exposes Get Action Set Config For Role, Get Reaction Set Config For Role and Get Movement Profile For Role, each running the same resolution the plugin runs, so a debug panel reports the asset the enemy ends up with rather than guessing at it.
To change a set without touching the config, use the runtime override on the pawn's SEC Action Set Component. It sits above every other source and clears back to the config when you clear it.