When we look at tactical sims, AI has historically been pretty straightforward: navigating from one node to another. It makes movements as path-efficient as possible, but it doesn’t take into account much beyond basic geometry like collision boxes, lines of sight and obstructions, with little consideration for things like angles or avenues of advance.

As a result, for years we’ve had bots sprinting down open roads, often made artificially proficient at shooting to compensate for their complete lack of environmental consciousness.

The interesting thing is that when you start thinking in terms of what an object offers (what it affords us for action, rather than its abstract shape) and when you put a verb to the objects a subject looks at, you start seeing completely different options for the AI.

This way, for a unit, an obstacle like a stone barrier isn’t necessarily just a blockage to pathfind around. It can be seen as a cover you can fire from. A blind corner isn’t just the edge of a mesh anymore; it’s an opportunity to slice the angle incrementally, like in CQB pie-slicing.

Figure 1: Dynamic PeekAffordance. Instead of rounding the apex in a straight sprint, the agent uses the corner geometry to carve the unknown space into 5 progressive angular steps, pre-aiming sightlines before stepping forward.
Figure 2: From geometry to affordances. The agent identifies a StanceAffordance (evaluating obstacle height against body silhouette) while computing an ExposureCone to avoid blindly crossing open streets without team overwatch.

So I’ve been working on a small ontology that provides a conceptual vocabulary to define core tactical infantry representations: things like threat vectors, cover shadows, stances, and affordances. It’s a way to model what an AI should actually consider when presented with options in its environment.

Now, this is an architectural concept. In a simulation engine like Arma, formal OWL is famously not built for performance, so we’re not talking about querying heavy logical reasoners at runtime. Instead, there are ways to ground this in real time using spatial math and utility optimisation (which is where AI coding agents have been extremely useful for me.)

Some of these techniques already exist in the industry at scale, but they can be notoriously hard to implement cleanly. Things like dynamic cover shadows, biomechanical stance alignment, trigonometric pie-slicing, or mutual bounding all benefit immensely from having a common semantic core shared between agents.

In practice, this allows infantry AI to perform a much more methodical, disciplined clearance that actually resembles human combat practice. But that’s almost a byproduct. The real point is to have better coherence between the AI and its environment, so the environment actively provides a rich set of affordances. Instead of an AI blindly rushing down a fatal funnel, an affordance-enabled unit provides a safer, more methodical clearance for its team. Each agent develops a spatial consciousness of the others as they maintain proper dispersion and tactical cohesion.

Is there a genuine opportunity here for semantics to give structure to heuristics? Instead of writing hundreds of brittle if/else checks, we could model tactical affordances through a clean design language.

It also brings real explainability to the table: each decision is grounded in an explicit concept, like CompromisedCover (which tells the unit their status needs urgent reprocessing), which helps us understand what the agent was actually “thinking” at the moment of action. And down the road, this could be the bridge that lets LLMs translate high-level strategic intent into low-level motor execution.

Figure 3: Timelapse of tactical movement. Left side represents the affordance-based AI. Right side represents Arma 3 base AI.

Posted in