Close Combat-like

2026 · TypeScript · Canvas · Vite

A company-scale WW2 tactical sim in the Close Combat lineage. Orders are requests, not commands: men read the ground themselves and can refuse. Deterministic headless core, 247 soldiers a battle.

A real-time tactical sim at company scale, in the Close Combat lineage: a US rifle company of 138 against a German grenadier company of 109, on 320×240 metres of Normandy. The premise is that you command men rather than units. An order is a request, and every team runs the same danger evaluation you can see before you issue it, then complies, moves cautiously, or refuses outright. A naked charge across open ground balks by construction, which makes smoke and suppression the way through rather than a bonus.

The simulation core is headless and deterministic: the same seed and the same orders produce byte-identical state, which is what makes the whole thing testable. Each soldier carries body parts, morale and suppression, stamina, and discrete magazines rather than an ammo pool. Fog of war is owned by the sim, not the renderer, so the AI commander sees through exactly the same spotting sweep the player does and gets no free information; its troops balk at bad orders too, because it plays through the same order API.

The maps are generated roads-first, which is what keeps a Normandy village legible: an arterial and a cross lane define a crossroads, the buildings turn their doors to face the roads, hedgerow parcels fill in behind, and the woods stands land last. Hedges are real cover with a directional lip, two of them stop a sightline, and buildings have upper floors with stairs, so line of sight is solved as a height profile rather than a flat grid.

Battles sit under a strategic layer where the soldiers persist. The men who came back from the last fight are the men you take into the next one, they carry their experience with them, and the debrief names the ones who did not. That list is the part of it I would defend hardest.

Drag to box-select, right-click to move, 1–9 picks a squad and shift+1–8 arms an order kind for the next right-click. Scroll zooms, WASD pans, Space pauses. It wants a mouse and a keyboard. Zoom in once the shooting starts: at the opening framing the whole battlefield fits on screen and the men are single pixels, which hides most of what is actually being simulated.