Blueprint nodes#
Every APS node you can place in a Blueprint graph, grouped by where it lives. Green nodes are pure (no white execution pins: they only read), blue nodes do something, red ones are events you override. Pins are coloured as in the editor. Search this page with Ctrl + F, or the site search above: every node is in it.
APS Core#
The component on every AI. Its nodes read what the AI believes and change how it behaves. Drag from an APS Core reference, or right-click in its owner's graph and type the node's name.
Config#
Give this AI a different Perception Profile while playing. Called from inside an APS event, the swap waits until that perception pass ends. When the new profile runs the same senses in the same order with the same Max Tracked Targets, the AI keeps everything it believes and only the values change; otherwise the senses are rebuilt and the AI starts fresh. Does nothing when passed None or the profile it already has.
The profile asset you assigned, before its parent and any overrides are applied.
Change one number on this AI's profile now, for this AI only: it gets a private copy, and the asset and other AI are untouched. Property is the setting's override name, shown on the profile reference (for example VisionMaxRange). Returns false, and logs, when no setting has that name. Nothing the AI believes is reset.
Like Set Profile Number, for a tickbox. A tickbox's override name keeps its b, for example bEnablePeripheralCone.
Read one number from this AI's profile by its override name. Returns Fallback when no setting has that name.
Drop every per-agent override and go back to the profile as authored.
Swap the quality profile at runtime. Safe at any moment: no sense is rebuilt, no belief is discarded. Pass none to return to full quality.
View#
Show or remove this AI's Visualizer now.
This AI's Visualizer actor, while it is shown.
Each of this AI's view cones as a flat fan whose edge stops where sight stops: at a wall, past glass as far as sight gets through, at full range in the open. Re-traced when the eyes move or turn, otherwise about twelve times a second, so it is cheap to call every frame. False with no Vision sense.
True while vision is looking the target's way: inside one of its cones and in range. Only then do its sample points mean anything; a clear line to someone outside every cone only says nothing is in between. Why Not says why not (Outside Cone, Out Of Range; No Context for an AI without a Vision sense).
Vision's sample points on a target and how much sight reaches each (Seen, Partly, Blocked): the same points and traces vision uses. A head over a wall is one Seen point and four Blocked. It traces once per point, so ask about one target at a time. False with no Vision sense or no target.
The sounds this AI heard in the last Max Age seconds, oldest first (see Record Heard Sounds).
True when this AI runs the sense, for example Vision, Hearing, Smell. A profile has ranges for every sense; only the ones in Sense Classes run.
The senses this AI runs, in profile order.
How far each sense reaches right now, with any zone the AI stands in applied. 0 for a sense it does not run.
How far a Sound Type carries to this AI right now (cm): its range, scaled by any zone the AI stands in.
The target a view of this AI is about: the local player when this AI holds a belief about them, otherwise its most confident belief that is not a friend or teammate. None when it believes nothing about anyone.
How much detail APS gives this AI right now: 0 full, higher is cheaper (farther from the camera).
Attention#
The one target this AI focuses on, among those it has noticed (Suspected or more). It is sticky (Attention Stickiness Time, Attention Switch Threshold), so a slightly better rival doesn't take it. It can be one the AI only suspects, or a teammate: check Get Awareness Level for Target before chasing it. None when there is no one.
How long, in seconds, it has been focused on its current attention target: for an I've-chased-this-too-long check.
Make this its attention target now, ignoring stickiness: when the player shoots this AI, say. Gives the AI a belief about the target if it had none. If the AI never notices that target, the focus lets go after the stickiness time.
Query#
The target with the best sort score right now, among those the AI has noticed (Suspected or more). It can change often.
Everything this AI believes about its top target (the one it ranks first). Returns false when it believes in no one.
Every actor this AI holds a belief about, best sort score first, even ones still Undetected. Never things (APS Evidence: see Get Perceived Objects), places or Expired beliefs.
Beliefs about things rather than someone: a body, a forced lock (APS Evidence, Set Perceived As Object). Most confident first. Smoothed Confidence says how well the AI has seen each; Target is the thing itself.
Everything this AI believes about one target: its confidence, state, last known position, prediction, threat, loss reason and more. Returns false when it holds no belief about that actor.
How alert this AI is overall, judged from its top target's confidence: Unaware, Peripheral, Suspicious, Alerted or Fully Aware.
How aware this AI is of one target, from that target's confidence. Unaware when it holds no belief about it.
How many actors this AI currently holds a belief about in the Suspected, Detected, Tracked or Lost state. Places, and things marked with APS Evidence, are not counted. When this falls to 0, On AI All Clear fires.
True while this AI's awareness is above Unaware.
Each sense's own confidence about a target, by sense name (Vision, Hearing, ...): did it see you, or only hear you? Returns false when the AI holds no belief about the target.
Everything one sense reported about a target the last time it ran: its confidence, where it placed the target, and for vision the exposure, the visible points, the cone, the light and the blocker. Senses run on their own intervals, so Is Active is false between their updates: use Was Active Last Eval to ask whether it perceives the target now. False when the AI holds no belief about the target or runs no such sense.
Where this AI's eyes are and which way they look, as vision uses them: the eye socket (with Use Eye Socket) or the actor plus Eye Height Offset, facing with Eye Direction Mode and Eye Turn Rate applied. Use it to draw the real cone or aim a head or a flashlight.
Spatial#
Where this AI last placed the target. (0, 0, 0) when it holds no belief about it.
Where this AI expects the target to be by now, from how it was moving. Only moves past the last known position while the target is unsensed and the profile's Enable Prediction is on.
How unsure the AI is of where the target is, as a radius in cm around the last known position: it grows while the target is unsensed, up to the profile's Max Uncertainty Radius, and shrinks when it is sensed again. A ready-made search radius.
The target's velocity as this AI has measured it, smoothed.
How the target's velocity has been changing, as this AI measured it: a sudden sprint or stop.
Cover#
The actor that blocked the AI's view when it lost the target from Detected or Tracked: the crate or wall you slipped behind. None when nothing was found.
True when the target was behind cover at the moment it was lost.
Loss#
Why the AI last lost this target: Occluded, OutOfRange, SoundFaded, ScentLost, SensorDropout or TargetDestroyed. Unknown if it never lost it or has found it again. Branch your search on it.
Which way the target was moving when it was last lost, from its last measured velocity. (0, 0, 0) when it wasn't moving.
Memory#
This AI's last five encounters with the target, oldest first: how each ended, where, which way the target went and how long it lasted. False until the AI has lost the target at least once from Detected or Tracked.
The most recent encounter with the target. False when there is none yet.
Forget this AI's encounter history with a target: a new game, a respawn.
A memory about a person, object or anything else with an actor.
A memory about a place. PlaceTag separates kinds of thing at one spot, so "a body here" and "a fight here" stay distinct memories.
Store something. Writing the same Tag about the same Subject again updates it and increments Count, rather than piling up duplicates.
Every value field is optional — pass only what your game means by this tag.
Everything held about a subject, newest first. False when nothing is.
One specific memory. The usual query: "have I been attacked by this one?"
True if anything at all is held about this subject. Cheapest check.
Drop one tag. Returns false if it was not there.
Drop everything about a subject.
Wipe the lot.
How many subjects are currently held. For budgeting and debugging.
PlayerModel#
What this AI has recorded about how a target plays: crouch, walk and sprint shares, how encounters ended, where it lost them, and whether that is enough data yet. Returns false when the profile's player model is off or nothing has been learned yet.
Forget everything this AI has learned about a target's behaviour.
Brain#
This AI's five emotions, each 0 to 1 (fear, aggression, curiosity, alertness, panic), and the dominant one.
The emotion that leads right now. Panic wins over all others once it passes the profile's Panic Override Threshold.
How much of a threat this AI thinks one target is: None, Low, Medium, High or Critical. None when it holds no belief about it.
The highest threat level among everything this AI believes in.
What this AI takes the target for (enemy, friend, neutral, ...), as its APS Relationship resolved it. Unknown when it holds no belief about it.
Which sense first made this AI notice the target. Unknown when it holds no belief about it.
The combat role this AI holds in its squad, or None.
True when anything this AI believes in is at this threat level or higher.
An outside source of fear, 0 to 1, that lasts until you change it: a horror event, a roar. Above 0 it makes fear rise, faster the higher it is; above 0.9 it raises panic. 0 lets fear fade by the rules.
Set one emotion, 0 to 1, once. The emotion rules carry on from there on the next update; for lasting fear, use Set Fear Input.
Set every emotion, and the fear input, to 0: Calm.
Squad#
Put this AI in a squad, by name; AI with the same squad name share what they perceive. None takes it out of any squad.
This AI's squad name, as set by Set Squad ID. None when it is in no squad.
Tell squadmates about a place and a threat level without sharing a belief about anyone: I heard something over there. On AI Squad Alert fires on them.
Claim a combat role in this AI's squad. Each role is held by one squad member at a time: returns false when another member holds it, when the AI is in no squad, or when the role is not in the profile's Eligible Roles (if that list has any). Claiming a role gives up the role it held before, and fires On Combat Role Assigned.
Give back this AI's combat role, so a squadmate can take it.
Input#
Report a contact yourself: who, what kind (Bump, Grab, Collision, Explosion), how strong (0 to 1), whether it is held (until End Touch Contact) and where. Touch wires the AI's own hits and overlaps by itself; use this for anything else. Needs Touch Sense.
Report a contact from a physics hit: the impulse sets the strength (Touch Max Impulse for Full Strength counts as full).
End a held contact (a grab, an overlap) reported earlier.
Raise this AI's confidence in a target to at least this value, once, at any range: a tip-off, an alarm. It never lowers belief, and afterwards belief fades as usual unless a sense keeps it up. To cap, lower or clear belief, or to make a change last, use Add Target Evidence.
Report a vibration nobody's footsteps made (a grenade, a collapse) at a place. The AI feels the place, not whoever stands near it. Moving actors are felt by themselves. Needs Vibration Sense.
Pain#
Add pain of one type (a Pain Type Definition asset): it dulls the senses the asset lists, and fades at its Decay Rate. On AI Pain Reported fires on the next update. Needs Pain Sense in the profile; an amount of 0 or less does nothing.
Remove all pain of one type: a medkit, an extinguisher.
Remove all pain of every type.
Turn one pain type off or on for this AI: immunity. While off it ignores reports and dulls nothing, and its level waits, unfaded.
One pain type's level now, 0 to 1.
Every enabled pain type's level added up, at most 1.
Evidence#
Hold belief about a target at a floor (Raise), under a ceiling (Clamp), lower than the senses say (Lower) or at zero (Invalidate). It applies every update after the senses, so a Clamp holds even while the AI sees the target. The same Evidence Tag again replaces the entry. Lifetime 0 lasts until removed; Source is a label for your own debugging.
Remove one piece of evidence about a target, by its tag. True if there was one.
Remove every piece of evidence about a target.
The evidence applied to a target now, each with its operation, value, lifetime, age and source.
Debug#
Zero the damage dealt and received on every belief this AI holds.
Write every belief this AI holds to the Output Log.
Flip Pause Perception.
Why one sense reported nothing about a target the last time it ran: out of range, outside the cones, hidden, too few points showing, the reaction window... Only Vision gives reasons; other senses say None. None also when the sense did report the target.
A short text report of what this AI believes about a target: its state by name and how sure it is as a percentage, then each sense, active with its confidence or silent with the reason. For a debug key or the log.
Replication#
Read the replicated perception summary.
On the server this is the authoritative state; on clients it is the copy that replicated with the Pawn. Requires Replicate Perception State on the profile and Replicates on the Pawn.
Fairness#
True when the location is inside a never-search zone registered on the APS Subsystem; always false when this AI's profile has Respect Never Search Zones off. APS doesn't enforce zones: your search logic asks this.
Belief#
Tell this AI something happened at a place with no known author: where, what kind of thing (Tag), how strongly it registered (Confidence, 0 to 1) and how precisely it is placed (Accuracy, 0 to 1). Reports close together with the same tag merge into one belief.
Every belief about a place this AI holds, strongest first.
Its strongest belief about a place. False when it holds none.
Drop a belief about a place: it checked, and there was nothing.
Recording#
Start keeping a rolling record of what this AI believes: the last Seconds of it. Starting again throws away what was recorded. While on, it costs one small frame per believed actor per update.
Stop recording. What was captured stays available until cleared.
True while Start Recording is capturing this AI's belief.
Everything captured, oldest first.
Just the frames about one target, oldest first.
Discard everything captured so far. Does not stop an active recording.
The recorded frame for Target nearest to World Seconds.
Returns false when nothing was recorded for that target. Use this to read what the AI believed at the moment something went wrong, rather than what it believes now that the moment has passed.
Explain Perception, but for a moment already gone.
Reads the recorded frame nearest World Seconds and describes it the same way the live trace does. Returns a note saying so when nothing was recorded.
APS Perception Listener#
Put your reactions in a Blueprint made from APS Perception Listener and add it to every AI that should share them. These are the events you implement there.
Sense Events#
Fires each time vision (or echolocation) reports the target: about every 0.15 s while it is seen.
Fires on each hearing update that hears the target: when a sound of theirs arrives, and again on each update after it while the built-up noise lasts. On those build-up updates Sound Type Name is None and Location is where the target is now, not where the sound was. For one event per sound, use On Sound Heard.
Fires each time smell reports the target: about every 0.25 s while it smells them.
Fires when touch reports a contact from the target.
Fires when vibration reports something: a target's footsteps, or a vibration at a place. No line of sight needed.
Memory Events#
A target entered Suspected: from Undetected, or stepping down from Detected.
A target entered Detected: from Suspected, stepping down from Tracked, or found again after Lost or Remembered.
A target entered Tracked: high, sustained confidence.
A target entered Lost. Gives where it was last placed, where it is predicted to be, and the cover it went behind.
A lost target faded to Remembered. Age Seconds is the time since the AI first noticed it.
The AI let go of a target: it Expired, or dropped back to Undetected.
Brain Events#
A target's threat level changed.
No actor is left at Suspected, Detected, Tracked or Lost (Get Active Target Count fell to 0): time to stand down.
Overall awareness level changed (Unaware / Peripheral / Suspicious / Alerted / Fully Aware).
Fires for each Report Pain from Definition, on the next update: Pain Type (the asset's name), Pain Level (after that report), Threshold Crossed (always -1, kept for older Blueprints) and Pain Def (the asset).
Fires on every Unreal damage call that hits the AI (Apply Damage, Apply Point Damage, Apply Radial Damage), with or without Damage Sense: who did it, how much, the damage type's short tag and where.
The AI's focus moved to a different target. Old Target is none the first time. The new target can be one the AI only suspects, so check its state before reacting; to start a chase, use On AI Detect.
Squad Events#
A squadmate told this AI something new: a shared target, or a place and threat (Broadcast Alert to Squad). It doesn't fire again for the same news.
Fairness Events#
Confidence about a target crossed Telegraph Threshold — the moment for a "huh?" bark or head-turn before the AI commits to full alert. Once per target.
Belief Events#
A belief about a place (a noise nobody made, a blast) changed state.
APS Target Component#
The posture in effect now. With Auto Detect Stance on: what an APSStance Provider or the Character's crouch reports, or this component's Stance when that says Standing. With it off: Stance.
APS Relationship#
What this AI takes an actor for: its override if it has one, else the class rule, else the team rule, else Default Relationship.
Decide what this AI takes one actor for, now, over every rule: the player in a uniform as Friendly, a recruit as Teammate.
APSSubsystem#
World-wide APS settings and lookups. Get it with Get APSSubsystem (any Blueprint) and drag from it.
Subsystem#
Get the APS world subsystem from anywhere in Blueprint.
Drag off any node and search "Get APS Subsystem". Everything world-wide lives here: ambient light, sun direction, weather, the perceivable-actor registry and no-search zones.
Perception › Subsystem#
How many AI with APS Core are running in this world.
Set the world's light level for APS, 0 (dark) to 1 (full daylight): drive it from your day and night cycle.
Set how much the weather leaves of the AI's senses, 0 to 1: 1 is clear, and lower values mean heavier rain (it sets the rain intensity to 1 minus this).
Environment#
Set the world's light, rain, wind, indoors and time of day in one call.
The world's current conditions as APS uses them: light, rain, wind, indoors and time of day.
Set the world's wind: the direction it blows and its speed. Smell uses it outdoors.
Tell APS the world is indoors (or not): indoors concentrates scent and ignores the wind.
Set the time of day, in hours (0 to 24). For your own logic and the Visualizer: APS's senses don't read it.
Tell APS which way the sun points so vision can trace for shadow and work out whether a target is genuinely hidden in the dark. Pass your directional light's forward vector.
The conditions at a point: the world's, with the APS Environment sphere that covers the point applied (only the winning one, where they overlap).
How far a sense reaches at a point, as a multiplier from the APS Environment sphere there (1 elsewhere). Sense ID: Vision, Hearing or Smell; anything else gives 1.
Fairness#
Mark a sphere as a safe place: a save room, a locker. APS doesn't enforce it: your search and chase logic asks Is Location in Never Search Zone before sending an AI there.
Remove the closest registered zone within tolerance of Center.
Clear every registered no-search zone.
True when the location is inside any registered never-search zone, whatever any AI's profile says.
Registry#
Let AI perceive an actor that isn't a Pawn (Pawns are found by themselves). An APS Target Component does this for its actor. Unregister it at End Play.
Stop AI perceiving an actor you registered with Register Perceivable Actor.
Mark an actor as a THING the AI perceives rather than someone: a body, a forced lock, a dropped weapon. APS Evidence does this for its actor.
The AI still sees it, and its belief says how well (Get Belief Data, Get Perceived Objects), but it is never a target: no threat, no attention, and no event names it (On AI Suspect, On AI Detect, On AI See...). Takes effect on each AI's next perception pass, so a guard that dies and becomes a body can be marked then. This does not register it: pawns are found anyway, and any other actor also needs Register Perceivable Actor.
True while Actor is marked as a thing (Set Perceived As Object, APS Evidence).
Performance#
An AI's latest significance score, 0 to 1: what picks its level of detail. For tuning.
Stimulus#
Send your own tagged signal to every AI that listens for it. Skipped: AI beyond Radius, above Max LODTier, on the source's team (with Team Filter) or behind a wall (with Requires Clear Path). Of the built-in senses only Vibration listens; your own C++ senses can.
Perception Sound System#
Make noises the AI can hear. Callable from any Blueprint.
Make a noise someone made (Source): a footstep, a shot, a reload. AI within the Sound Type's Max Range hear it, muffled by walls, and their belief is about the Source. Call it on the server, from any Blueprint.
Make a noise nobody made, at a place: an explosion, a trap, a can landing. AI within the Sound Type's Max Range form a belief about the place, not about anyone. Call it on the server, from any Blueprint.
APSView Library#
Read-only data for drawing what an AI perceives (the APS Visualizer is built only from these). Callable from any Blueprint.
The AI to show in full detail: the nearest one the player's camera can see (in front of it, nothing solid between the camera and the top of its head), or the nearest one when none is in view. Only Visualized: consider only AIs with Show Visualizer on.
True when the player's camera can see this AI: in front of it, nothing solid in between (glass and foliage its profile sees through do not count).
The floor under an actor: its location minus its collision half height. For drawing on the floor under an AI or a target.
The top of an actor's collision: where a label over its head goes.
Every APS Core in the world.
What the APS Visualizer shows: 0 nothing, 1 everything (the default), 2 status only (each AI's state over its head, no cones or rings). The console variable aps.Visualizer.
Set what the APS Visualizer shows: 0 nothing, 1 everything, 2 status only (each AI's state over its head). Sets the console variable aps.Visualizer, so it applies to every Visualizer.
The page the Visualizer's screen panel shows (0 Senses ... ). The console variable aps.VisualizerPage.
Choose the page the Visualizer's screen panel shows: 0 Senses, 1 Memory, 2 Brain, 3 Squad, 4 Events, 5 Player Model, 6 Environment. Sets the console variable aps.VisualizerPage.
APSDebug Helper#
Tools for inspecting squads while you play. Callable from any Blueprint.
Agent's squad: its Squad ID, every member, their distance to Agent, whether they are in share range, and their combat role. Run it on one AI to check a squad is wired up.
Fire On AI Squad Alert on Receiver, to test its response to an alert in isolation.
What every member of Agent's squad believes about Target. Run it after a share to see it landed.
Perception Profile#
Composition#
Names of the fields this asset holds differently from its Parent Profile.
Set the fields an archetype defines, on any profile.
Exposed so a Blueprint can build a profile at runtime — spawn a profile, apply Civilian, override two numbers, hand it to an agent.
One line describing what an archetype is for.
Archetype#
Stamp the chosen archetype's values onto this profile.
Workbench#
Rough per-second cost of running this profile, as text.
An estimate from the settings alone, not a measurement — it says what the asset is asking for, which is the number worth knowing before a level is full of agents rather than after.
Every field where this profile differs from Other, as "Field: theirs -> mine".
Pain Sense#
Not reachable from Blueprint in APS 3.0. These are on the Pain Sense object the APS Core creates, and no node returns it. Use the APS Core's pain nodes of the same names; Set Health Ratio, Get Health Ratio and Get Pain State are for C++ only (the core's GetSenseInstances). From Blueprint, give APS health with the APSHealth Provider interface.
Add pain of one type. From Blueprint, use the APS Core's node of the same name.
One pain type's level, 0 to 1.
Every enabled pain type's level added up, at most 1.
Remove all pain of one type.
Remove all pain of every type.
Turn one pain type off or on.
Set the health fraction, 0 to 1. It sticks only while nothing on the AI answers the health lookup; otherwise the next update overwrites it.
The health fraction the Pain sense uses, 0 to 1: read each update from the APSHealth Provider interface or a health function on the pawn, else as set by Set Health Ratio.
The health band from that fraction: Healthy above 0.75, Wounded above 0.40, Critical above 0.15, Near Death below.
Touch Sense#
Not reachable from Blueprint in APS 3.0. These are on the Touch Sense object the APS Core creates, and no node returns it. Use the APS Core's Report Touch Contact, Report Touch Contact with Impulse and End Touch Contact, which do the same.
Report a contact: who, what kind, how strong (0 to 1), whether it is held, and where. From Blueprint, use the APS Core's Report Touch Contact.
Report a contact from a physics hit; the impulse sets the strength. From Blueprint, use the APS Core's Report Touch Contact with Impulse.
End a held contact. From Blueprint, use the APS Core's End Touch Contact.
Vibration Sense#
Not reachable from Blueprint in APS 3.0. This is on the Vibration Sense object the APS Core creates, and no node returns it. Use the APS Core's Report Vibration Event, which does the same.
Report a vibration at a place: where, how strong (0 to 1) and on what surface. From Blueprint, use the APS Core's Report Vibration Event.
Smell Sense#
Not reachable from Blueprint in APS 3.0. This is on the Smell Sense object the APS Core creates, and no node returns it. For one kind of AI with its own wind, set Wind Direction in the Class Defaults of a Blueprint child of Smell Sense; for everyone, Set Wind State on the APS Subsystem.
Give this smell sense its own wind direction, over the world's: the way the air moves. (0, 0, 0) uses the world's wind.
Sense Unit#
Override it in your own sense: judge one target and fill in Out Result (Is Active, Confidence, Estimated Location, Location Accuracy, Sense ID).
Override it in your own sense: return its name, for example Thermal. It is what Get Sense Contributions and the Visualizer show.
APS Signature#
Set or replace one trait. The usual way to change a disguise at runtime.
Remove a trait entirely — a dropped weapon, a discarded coat.
The full set of traits this actor carries (its Signature), as set in the Details panel or by Set Trait and Remove Trait.
The traits an observer makes out with a look this good (0 to 1): a trait is noticed when its Observability is at least 1 minus the quality, so a poor look gets only the obvious ones.
APS Observer#
Observer#
How good a look this AI has at a target now, 0 to 1, from how sure it is and how far away the target is. It decides which traits it can make out.
File a report now, ignoring the interval and confidence gates. For scripted moments — an alarm pull, a phone call.
Everything this AI has personally filed and not yet had delivered. Cancel it and the report never arrives.
The provenance this observer stamps on its reports.
Observer › Evidence#
Fires the first time this AI notices a given piece of evidence.
By the time it fires, a belief about the place and a memory have already been recorded — so a handler can read them. What it MEANS is yours: raise the alarm, investigate quietly, or step over it.
Everything this AI has already found, so it does not rediscover it.
APS Evidence#
Seconds this has existed. Read it to age a description — "still warm".
Remove it from the world. Hiding the body.
APS Search#
Begin searching from a last known position. Clears any search in progress.
Stop, and release the grid.
True while a search is running (between Begin Search and End Search).
Mark somewhere as checked. Called automatically for wherever the owner goes; call it directly for a look down a corridor the AI did not enter.
The single best place to look next. False when nothing is left.
The best N places, most promising first.
True once everything reachable has been checked — the AI has genuinely looked everywhere rather than merely run out of patience.
How much of the reachable area has been checked, 0 to 1.
Seconds since the search began. What the reachable area is derived from.
APSKnowledge Subsystem#
The Knowledge module's world-wide memory of identities, factions and dispatch. Get it with Get APSKnowledge Subsystem.
The Knowledge module's world subsystem, from any Blueprint. None if there is no world.
Tell a faction something, at once and complete. It merges with an entry about the same actor, or one whose description matches, so ten sightings stay one manhunt. Returns the entry's id, or -1 if nothing was recorded.
The same, but sent along a channel — so it arrives late, vaguer, and missing details, according to what that channel costs.
A radio report is not available the instant it is spoken. Until the delay elapses the faction does not know, and anything that stops the sender in that window stops the message.
Discard everything a sender has in flight but not yet delivered. Silencing the witness before the message lands.
How many messages are still in transit.
Look up one entry of a faction's knowledge by its id (the id Report Observation returned). Returns false when the faction has no such entry: it was forgotten, faded or merged.
What the faction knows about a specific actor, if anything.
Everything the faction currently believes, strongest first.
How many entries a faction currently holds.
Who does the faction know of that fits this description? Returns the best match and how well it fits, 0 to 1; you decide whether that is enough to act on.
Drop one entry — cleared, arrested, proven wrong.
Drop everything a faction knows and reset its alert level, at once.
How alarmed a faction is, 0 to 1: a wanted level.
Add to a faction's alert level (kept between 0 and 1) and fire On Faction Alert Changed. Amounts of 0 or less are ignored.
Set a faction's alert level outright (kept between 0 and 1) and fire On Faction Alert Changed.
APSDescriptor Library#
Build and compare descriptors (what a witness says about someone). Callable from any Blueprint.
Add a trait, or change its value if the key is already there.
Remove the trait with this key, if any.
The value held for a key. False when the descriptor says nothing about it.
How well Description fits Known, 0 to 1. Only keys both have are compared, and each contradiction halves the score: the same rule Match Descriptor uses.
APS Fusion Policy#
Make a Blueprint child of this class and set it on the profile's Fusion Policy to decide how senses combine.
Override it: combine this update's sense readings into one confidence, 0 to 1. Samples has one entry per sense, in the profile's order (Sense ID, Confidence, Weight, Is Active). Corroboration Bonus is the profile's, for reference.
APS Threat Policy#
Make a Blueprint child and set it on the profile's Threat Policy to score threats your way.
Override it: return how dangerous the target is, 0 to 1. Record is everything the AI believes about the target; Relationship comes from its APS Relationship. APS still turns the score into a level with the profile's thresholds, and keeps Friendly, Teammate and Expired targets at None.
APS Attention Policy#
Make a Blueprint child and set it on the profile's Attention Policy to choose what the AI attends to.
Override it: return the target the AI should commit to, Current to keep it, or none. Candidates are the actors it holds beliefs about, best first. Time on Current is how long it has held Current; Stickiness Time and Switch Threshold are the profile's, so you can honour them. It replaces the built-in rule entirely.
APS Significance Policy#
Make a Blueprint child and set it on the APS subsystem to rank which AI get full-quality updates.
Override it: return how important this AI is, 0 to 1. More important AI update more often and win the frame budget. Nearest Viewer Dist is the distance to the closest player camera in cm (0 on a dedicated server); Is Engaged is true while its awareness is Suspicious or higher; Awareness is 0 (Unaware) to 4 (Fully Aware).
APSHealth Provider#
An interface: implement it on your character so APS can read its health without knowing your health system.
Remaining health as a fraction, 1 for untouched and 0 for dead. Values outside that range are clamped.
APSStance Provider#
An interface: implement it on your character so APS can read its stance (standing, crouching, prone) from your own movement code.
Implement it to tell APS the posture: Standing, Crouched or Prone.