Source metadata
- Type: Professional anthology (collected articles)
- Author/Editor: Steve Rabin (ed.), with chapters by Mark Botta, Travis McIntosh, Max Dyckhoff, Jeet Shroff, John Manslow, Phil Carlisle, Sebastian Hanlon, Cody Watts, Mieszko Zieliński, Sergio Ocio Barriales, Robert Zubek, Hendrik Skubch, Mike Lewis, James Ryan, Michael Mateas
- Published: 2020, CRC Press / Taylor & Francis
- Coverage: 13 chapters on character AI from AAA and indie studios, case studies from The Last of Us, Dragon Age: Inquisition, Paragon (Epic Games), FINAL FANTASY XV, and Project Highrise
Key takeaways
- Skills/behaviours split (The Last of Us): High-level skills decide what to do; low-level behaviours implement it. Skills are prioritised FSMs; behaviours are modular and reusable. Data-driven design via tunable variables rather than character-type conditionals in code.
- Perception design: Logical sound events (not raw audio) decouple AI hearing from the audio engine. Variable-angle vision cones (angle inversely proportional to distance) outperform simple frustum checks. Single-point raycasts with context-specific body positions (chest in stealth, head in combat) are simpler and more predictable for players than per-joint weighted casts.
- Exposure maps: A 2D bitmap overlaid on the navmesh representing what an entity can currently see. Used as a pathfinding cost to produce cover-aware or threat-aware routes.
- Utility AI (Dragon Age: Inquisition): A Behaviour Decision System (BDS) enumerates behaviour snippets, scores each via an evaluation tree, selects the highest, and executes it via a separate execution tree. Designers use a scoring convention (Basic 10pts, Offensive 20–40, Support 25–45, Reaction 50–70) to keep scores consistent.
- Influence maps (Paragon): A 2D cell grid where each cell stores enemy/friendly influence. Applied in a radius around each agent (rather than propagated to neighbours) for performance. Feeds into UE4’s Environment Query System (EQS) for bot positioning.
- Parameterised behaviour trees (Paragon): A single behaviour tree for all bots, with blackboard values driving which EQS query and ability to use at runtime. Behaviour moods communicated via service nodes.
- Buddy AI (The Last of Us — Ellie): Core principle: keep buddy close to the player. Follow system uses navmesh ray fans to generate and rate candidate positions. Avoid teleportation. Invert the shooting permission model (default is not to shoot; grant permission contextually). Suppress visibility to enemies when player is in stealth.
- Combat Coordinator (The Last of Us — Hunters): A global object managing NPC roles (Flanker, OpportunisticShooter, Approacher, Investigator, StayUpAndAimer). Only one NPC holds each role at a time. Uses a combat vector (average of NPC positions weighted by recent shots) to shape flanking cost.
- Dynamic accuracy / token systems: Rather than gating shooting, allow all NPCs to shoot but only the token holder actually hits. Token delay is calculated as
base × ∏ rule_multiplierswhere rules respond to distance, player stance, cover, velocity, and facing. - 1000 NPCs at 60 FPS (Project Highrise): Open-loop action queue — NPCs only re-evaluate world state when their queue is empty. Domain-specific hierarchical pathfinding reduces a 15,000-cell grid to ~100 graph nodes. Daily script schedules preferred over planning when NPC lives are stereotyped.
- Ambient interactions (FINAL FANTASY XV): Smart Locations own props and govern multi-NPC interaction using STRIPS-like declarative rule scripts operating on a shared blackboard (tuple space). Role allocation assigns NPCs to roles to satisfy cardinality constraints.
- Stochastic grammars: Weighted context-free grammars generate structured-but-random action sequences. Analogous to behaviour trees but without world-state queries — cheap for low-fidelity agents. Can be seeded with utility scores at runtime to blend deliberate and random behaviour.
- Character knowledge simulation (Talk of the Town): Full ontological mental models per NPC with 11 evidence types (observation, statement, lie, confabulation, transference, mutation, forgetting, etc.). Belief strength, decay, and revision modelled explicitly. Expensive but enables social-deduction gameplay.
Notable claims
- “Not stupid before smart” (Botta): Characters give the illusion of intelligence primarily by not doing stupid things. Eliminating glitches is worth more than complex decision-making.
- “The goal was to make the player believe that their enemies are real enough that they feel bad about killing them.” (McIntosh, The Last of Us human AI design driver)
- “Avoid cheating [in buddy AI]. Even if the player never notices, it still moves you away from creating a living, breathing character.” (Dyckhoff) — with the noted exception that stealth invisibility was ultimately necessary.
- “The utility of detailed NPC representation is inversely proportional to the number of NPCs the player has to manage.” (Zubek, Project Highrise)
- “Keep It Simple.” (Zieliński, Paragon bots) — a single parameterised BT outperformed per-hero trees given time constraints.
- “Game AI is an art of smoke and mirrors — everything is permitted as long as we create a spectacular and fun experience.” (Barriales, on dynamic accuracy)
Relevance
Directly informs:
- utility-ai — Chapter 7 (BDS, Dragon Age: Inquisition)
- influence-maps — Chapter 8 (Paragon bots)
- npc-perception-systems — Chapters 1, 2 (The Last of Us)
- buddy-ai — Chapter 3 (Ellie, The Last of Us)
- combat-coordinator-pattern — Chapter 2 (Hunters, The Last of Us)
- npc-performance-at-scale — Chapter 10 (Project Highrise)
- game-ai-agent-design — general architecture patterns; data-driven design; skills/behaviours split
- ai-state-machine-pattern — FSM skills/behaviours structure in The Last of Us
Updates or contextualises:
- behaviour-trees — parameterised BTs (Paragon), evaluation/execution tree split (Dragon Age)
- steering-behaviours — exposure-map-weighted pathfinding as an alternative/complement to steering
Open questions raised
- How does UE4’s Environment Query System (EQS) interact with the blackboard and behaviour trees in practice? A dedicated Unity equivalent would be worth building.
- The Smart Locations / STRIPS-rule approach in FFXV is compelling for ambient city scenes — how feasible is this in Unity without a custom scripting compiler?
- Talk of the Town’s character knowledge system is expensive by design. Is there a lightweight version that provides enough “gossip” depth for mainstream games without the full ontological model?
- Stochastic grammars are underused in game AI. The connection to weighted behaviour trees and utility scoring is interesting and worth prototyping.
Links
utility-ai · influence-maps · npc-perception-systems · buddy-ai · combat-coordinator-pattern · npc-performance-at-scale · game-ai-agent-design · ai-state-machine-pattern · steering-behaviours