Josh Taylor

Projects · 05 of 08

Close Combat-like

A WW2 tactical sim at company scale, in the Close Combat lineage. An order is a request: each team reads the ground for itself and can refuse. 247 soldiers a battle.

Close Combat-like, seen from above: a rifle company gathers at a bridge over a small river, with a Normandy village on the far bank.
Year
2026
Built with
TypeScript, Canvas, Vite

A real-time tactical sim in the Close Combat lineage. A US rifle company of 138 meets a German grenadier company of 109 on 320 by 240 metres of Normandy, and you command men where most games give you units. An order is a request. Every team weighs the danger of what you asked, and then it complies, goes carefully, or refuses outright, so a charge across open ground stalls by itself and smoke and suppression become the way through.

The simulation runs with no screen attached and is deterministic: the same seed and the same orders give the same battle to the byte, which is what lets me test it. The computer’s commander sees only what its own men have spotted and plays through the same orders the player has, so its troops refuse bad orders too. The soldiers persist between battles. The men who came back from the last fight are the men you take into the next one, and the debrief names the ones who did not.

The hard part

A game where men can refuse an order owes the player the truth about that order before it is given. The screen shows where each man will go and how much cover he will find there, and all of that is a promise. Twice I caught it lying. A deployment screen reported nine of twelve men in cover while the men stood in a plain grid. Later, arming a smoke order and clicking sent the squad walking to the spot with no smoke at all, and a test had recorded that as the intended behaviour.

How I solved it

The preview and the order now run the same code. One function scores the ground and picks each man’s spot, and both the picture on the screen and the simulation call it, so they cannot disagree about where anyone ends up. A suite of tests holds the two equal. The smoke bug taught me that such a suite can also protect a mistake. Every kind of order now reaches the simulation as itself, and an order the men cannot carry out is refused with its reason on the screen, where before it was swallowed.

Drag to select and right-click to move. It wants a mouse and a keyboard, and it is worth zooming in once the shooting starts.