Phase 6: an inhabited world, and a war to drive through

Nothing on a road simply appears any more. A road that turns notorious gets a
patrol dispatched to it: it starts at a junction a few hundred metres away,
drives there, sweeps the road for about a minute, and while it works the road it
brings the heat down — then leaves. Checkpoints are built rather than placed. At
turret level an engineer is sent, the tower rises over forty seconds of someone
standing on site, and a gunner mans it once it stands, up on top so he clears his
own barricade. Let the road cool and the whole thing is abandoned. heat.ts now
only pours concrete; everything living has to arrive.

Civilian traffic routes across the network with somewhere to be, people wander on
foot, and both scatter when shooting starts.

Skirmishes break out between the two armies on contested and occupied ground
regardless of where the player is. Rounds are real objects in flight rather than
instant hits between combatants — that is the point of the feature. If shots
resolved instantly, driving through a battle would cost nothing and "the only
road to the target runs through a firefight" would not be a decision. Strays hit
bystanders, civilians and the player alike; buildings stop them, so cover means
something; hits go through the same wear model as a crash, so being shot costs
ceiling too.

The enemy does not shoot at an undercover driver by default. They open up only
past the line and only on a road they have already checkpointed.

Reload was being counted in stepUnits while firing lived in stepCombat, so combat
stepped on its own never reloaded. A test caught it; ownership now sits with the
module that fires.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dejvino
2026-08-07 15:49:11 +02:00
co-authored by Claude Opus 5
parent 405f1b0dfe
commit 4feae2c731
11 changed files with 1500 additions and 51 deletions
+3
View File
@@ -37,6 +37,8 @@ export interface HudModel {
bearing: number;
} | null;
control: Control;
/** Rounds in the air nearby. Not a health bar — a reason to keep moving. */
danger: number;
completed: number;
parts: number;
notice: string;
@@ -98,6 +100,7 @@ export function createHud(seed: number) {
...(model.quest ? questLines(model.quest) : ['no mission — find a base']),
'',
CONTROL_WORDS[model.control],
...(model.danger > 0 ? [`⚠ rounds in the air nearby (${model.danger})`] : []),
'',
// Debug only. The real game signals heat through the road itself —
// see the design brief: no numeric meter ships.