city: three landmarks, THE TANK's burst, and a city the frame stops paying for
THE TOWER, THE SPAN and THE TANK are elected on every build — the tallest
skyscraper, the bridge, and the water tower nearest the centre line — and each
flies a pennant on the block that stands highest in it, parented so the flag
rides the structure down. City:landmarks(), City:atRest() and City:bounds()
are what the launcher, the HUD and the camera read them through. A landmark's
topple pays its multiple and the called one pays again, applied at the single
place a topple is now recorded. THE TANK bursts when it goes: every live block
inside six metres takes an outward shove that falls off to nothing at the rim,
and the governor bounds it like any other debris.
Underneath, the city stops costing the frame what it used to. The 143 block
ids are bound once at build and every frame's positions arrive in one call
into a typed vec3 buffer, which the sweep then reads as BYTES — measured over
143 blocks and 200 frames on this engine: 0.307 ms per entity, 0.438 ms
through batchRead into Lua tables, 0.077 ms through the buffer's getVec3,
0.036 ms this way. The per-block state moved from 143 tables to arrays indexed
by slot, 0.59 ms of sweep against 0.054 ms. City's update reads 0.11-0.22 ms
where it read 0.40-0.46. The arming pass writes armPerFrame joints a frame
instead of all 126 in one step, so the fifth of a second it used to spend
frozen two seconds into every session is spread across eight frames; the log
line still reports all 126 armed from 50..1885 N. And a block whose joint has
broken sheds its Joint component from the break handler, so a flattened city
ticks no joint pumps at all where it used to tick 126.
blocks.module closes every archetype through one finish(), which names the 3.2
metres a topple tier is worth once instead of six times; PAINT_COUNT and KINDS
are gone, and the layout's zMax clamp stays as the check that Rules.CITY.zMax
is still where the far street is.
Seed 7 builds the same city it did: 17 structures, 143 blocks, 126 joints, the
same x/z/height/tier for every one.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0139MdCaDTnP2jpG8zgk5N2N