blackout
The grid dying, in four waves, each shaped like the shot that photographs it.
carrington.light.blackout
The grid dying, in four waves, each shaped like the shot that photographs it.
The seam
Nobody exposes a function. Whoever builds a light that is part of the grid names
it prac_* (yard practicals), win_* (lit windows, at the station and in the
town) or beacon_* (aircraft warning on the pylons), and this module finds them
by those names.
What "killing" one means, exactly, so a builder can meet the contract:
- every
Light/SpotLight/DirectionalLighton the entity and on every descendant is set to zero and disabled; - the entity's mesh is hidden if it is a leaf, or if it is a
win_*orbeacon_*— those names mean the emissive thing itself. Aprac_*carrying children is taken to be a mast: its light dies and its steel stays in the silhouette.
Nothing is despawned and every kill is reversible, so stage.seek() backwards
puts the station's lights back on.
What it cannot reach: an emissive material inside a merged mesh. If a window
wall is one quad of a hundred-part merged station mesh, hiding it would hide the
station, so the slice that authored that material has to take its own
emissive_intensity down at the blackout beats. Only entities named by the
convention are this module's to kill.
The four waves
| t | what | order | why that order |
|---|---|---|---|
| 76 | 40% of the yard practicals | outer | shot 11 looks straight down into the yard: the lit ground has to SHRINK inward, not develop holes |
| 118 | every yard practical, then the station windows | blast | shot 17 is at ground level beside the wreck: the lights die in a wave OUT from the blast |
| 124 | every pylon beacon, over 5.5 s | north | shot 18 pushes north up the line: the blackout travels away from camera to the horizon |
| 137 | the town's windows, over 6.5 s | blocks | shot 20 is 1.7 km out: the settlement goes out a street at a time |
win_* serves both the station and the town, and they go out thirteen seconds
apart. They are told apart by position: within 200 m of the origin is the yard,
everything else is the town.
Armed from time, not from beats
The schedule is a table keyed on film time and arm(t) reads it every frame. A
beat fires exactly once and stage.seek() past one never fires it at all — a
module that only listened to beats would show every inspection of Act IV a
station whose lights never went out. Seeking backwards past a wave re-arms it
and restores what it killed.
A wave that has finished is re-swept once a second, so a practical another slice spawns late — or a population that resolves a frame after the beat — does not come back on.
Scoped to this part · feeds back into the world's score.