← All posts

Combat3 min read

A bullet that misses can hit the man next to you

How shooting in Terminal Leave stopped being just a dice roll: stray bullets, dodging, reacting to threat, armour as an item and the weight of gear.

In the very first version of the simulation a shot worked the way it does in most turn-based games: compute a chance, roll a die, hit or miss. Early in the project (it was UOR then) I rewrote that three times in a row.

The bullet keeps going

The main change: a miss no longer means “nothing happened”. A bullet that misses its target keeps flying along its line, with spread, and hits whatever is in the way — a wall, a piece of cover, or a soldier who was standing behind the target. Including one of your own.

That single rule changes how a squad is positioned. Shooting past a teammate is dangerous. So is standing in a tight group: a burst aimed at one reaches all.

The target doesn’t stand still

Damage variance, dodging and reaction to threat followed. All three put to work stats that had sat on a soldier’s card and done nothing.

Damage variance. A hit no longer deals one fixed number. A weapon has a base damage, and every bullet strays from it by up to 20% either way. A stray bullet that hits a neighbour carries the same damage it rolled when fired. So you can’t say in advance that an enemy goes down on the second hit: sometimes the second, sometimes it takes a third.

Dodging. The target’s Agility is now taken off the chance to hit it. An average soldier gains and loses nothing; an agile one is noticeably harder to hit, a clumsy one easier. It is one of the terms of the chance, next to cover, posture and distance.

Reaction. A soldier on overwatch fires at an enemy who moves in his sector and whom he can see. Not instantly: the delay is a base value adjusted by Reflexes. With good reflexes it is shorter, and on the shared timeline that decides who fires first — the one running out from behind the corner, or the one waiting for him. A reaction happens only if it, together with the shot itself, fits into what is left of the round, and the soldier isn’t busy with another order at that moment.

All of this is drawn from the same seed as the rest of the battle. The same round with the same orders gives the same variance and the same reactions, so a replay repeats the battle exactly.

Armour and weight

Armour became an item rather than a number in the stats. It is put on, it absorbs part of the damage, it wears out and it can be taken off a body. Weapons got wear at the same time.

The last thing in that series was weight. Everything a soldier carries weighs something: the weapon, the armour, every round in the magazines. How much he can carry at no cost depends on his Strength. While the load is well below the limit it changes nothing. Close to the limit every step takes longer, and past it much longer. Rounds get used up, so by the end of a battle a soldier who has been shooting is lighter than at the start.

On a shared timeline that means an overloaded soldier reaches the corner later. The shot itself and the reload don’t depend on weight: once there, he fires as fast as a light one — he just starts later. Heavy armour and spare ammunition are no longer free.

What came of it

None of these rules was designed in isolation. They stack: weight slows you down; a slow soldier takes longer to cross a line of fire, and is easier to hit while he crosses it; under fire dodging and armour matter, and misses fly at whoever is nearby. Simple rules produced combat in which where soldiers stand can matter more than an accuracy figure.

Fire modes and per-weapon accuracy came later — there will be a separate post on those.