camera: the toy is the subject — a closer chase, an altitude-biased aim, and the shots nobody saw
Chase: framing 2.3 -> 1.7 spans, speedPushBack 0.55 -> 0.3, speedOpenLens 9 -> 5,
positionLag 0.18 -> 0.13, restPullIn 0.55 -> 0.10 so the launcher station stays
where it was while the flight one comes in. Measured on one launch, same method
before and after: the eye stood 15.5 m off the toy at fov 63 and now stands
12.1 m off at fov 60 — 1.36x the toy in the frame — and the gap holds rather
than opening as the toy accelerates.
The aim gains an altitude bias against the STANDING city's own height band
(Cam.cityBounds, from City:bounds() with the seeded layout as the fallback): it
tips down as the toy climbs over the skyline so the city stays in the frame, and
a floor at the table top holds the belly slide, which used to pitch the camera
into the slab.
Director: every station composed against the city now measures it rather than
trusting a constant. The opening's first station lands over the towers (pz 17.1,
inside the city's z band) instead of past the table edge; the end wide aims at
the city's own middle. A new held TITLE wide stands behind the launcher with the
whole skyline across the frame and the toy in the lower third — the shot the
title card is laid over. The wreck cut was filming the inside of a block: at
0.78 spans it was pulled to 56 % of even that by the geometry, 2.6 m off a 5.9 m
toy. It now stands 1.8 spans out at the launcher side, unobstructed (frac 1.00),
with the city behind the toy. A held beat now stands down whenever the state
that opened it has moved on, so an end-card wide can no longer keep the frame at
weight 1 after the machine advanced.
Underneath: cam.module's mutable state moved into modules.state() — the measured
span above all, which an edit of that file used to reset to the default under a
camera that never re-measures; the poses are published in place so both
components keep holding one table across a reload. ChaseCamera's offX: number?
sentinel became seeded + offX = 0 and the four casts went. Both components carry
onModuleReload.
Kept: ChaseCamera is still the only writer of the rig; launch kick, impact shake,
the topple dip to 0.35 released to exactly 1, the orbit-then-cut, skipOpening,
the aspect rules (3:4 -> 58 deg/x1.0, 9:16 -> 66.5 deg/x1.15) and a pause holding
the beat where it is — all replayed after.