Heat: credit the verge to the road, and block the whole corridor

Driving alongside a road accrued no heat at all, so the dominant strategy was
to never actually use one. Heat is now credited to any road within 12m of the
centreline, tarmac or verge.

The cutoff is hard rather than tapered: a taper leaves a gradient to optimise
along, where sitting at 80% of the catchment costs 20% of the heat. A cliff
edge means you either use the route or genuinely leave it.

12m is a balance, not a guess. It puts ~7.5m of verge past the kerb — two car
widths, so hugging the shoulder gains nothing — while leaving 57% of the map
off-route. At 20m two thirds of the map counts as on-route, heat becomes
unavoidable everywhere, and choosing a different route stops meaning anything.

Barricades now span the full corridor for the same reason. Stopping at the kerb
left them free to round on the verge at speed.

Junction heat is still deferred; a point near a junction is credited to the
nearest segment.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dejvino
2026-08-07 09:41:52 +02:00
co-authored by Claude Opus 5
parent 506d07be5d
commit 475db8773c
6 changed files with 202 additions and 27 deletions
+7 -1
View File
@@ -10,6 +10,8 @@ function bar(value: number): string {
export interface HeatReadout {
segmentId: number | null;
/** False while on the verge — still counts as using the road. */
onTarmac: boolean;
value: number;
level: HeatLevel | null;
hottest: number;
@@ -33,7 +35,11 @@ export function createHud(seed: number) {
'',
// Debug only. The real game signals heat through the road itself —
// see the design brief: no numeric meter ships.
`[debug] road ${heat.segmentId === null ? 'off-road' : `#${heat.segmentId}`}`,
`[debug] road ${
heat.segmentId === null
? 'off-route'
: `#${heat.segmentId} ${heat.onTarmac ? '(on road)' : '(alongside)'}`
}`,
`[debug] heat ${bar(heat.value)} ${heat.level ?? '—'}`,
`[debug] hottest ${bar(heat.hottest)}`,
'',