staging
The staging slice owns the camera of ANVIL CROWN: the three beats that give the run a shape, the two endings, and the framing on every frame in between.
staging — the moments
The staging slice owns the camera of ANVIL CROWN: the three beats that give the run a shape, the two endings, and the framing on every frame in between.
The beats
| Phase | Beat | What it does | Ends by |
|---|---|---|---|
OPENING | 14.2 s, four shots | The shaft, the fall down it, then the runner climbing out of the murk into its station. | setPhase(CLIMB) |
CROWN | 4.8 s, three shots | The camera lifts its aim off the runner and onto the mesocyclone turning at 3000 m, drifts so the rotation reads, and comes back. | phase unchanged |
RESOLUTION | 7.6 s, three shots | The crown coming apart, then a fast run down onto the airframe that survived it, fading to ozone white. | setPhase(WIN) + runEnd { won = true } |
LOSS | 3.4 s, one shot | A close on the wreck, off the shaft's centre line. | phase unchanged — the director already set LOSS |
Each beat is a cutscene definition, so it carries its own letterbox, fade,
radio subtitles and cues, and it is skippable. The phase advance lives in
onFinished, which fires whether the beat played out, was skipped or was
stopped — a player who skips the opening still starts the climb.
The camera between beats
A.claims.staging is set at the top of the module, which stands the director's
per-frame camera fit down and hands it here. On every frame that is not a beat
the module puts the camera on the one station where the shaft touches both
screen edges (A.field.fitCamera), and adds two things on top:
- a slow drift while the title screen is up, so the storm behind the card lives;
- shake —
state.shakeis raised by anyone through theshakeevent and is turned into camera displacement here, because nothing else owns the camera.
Dressing
StagingProps is a container under the scene's Staging anchor that lives for
the title and the opening and is struck on the way into the climb. The only
thing in it is the runner's wake during the entry — a bright streak trailing
the airframe as it climbs out of the murk. The weather in the frame is the vfx
slice's, and staging adds no scenery of its own on top of it.
Reading the beats while authoring
Each definition is exported, so a beat can be put on screen without waiting for the run to reach the phase that owns it:
local S = require("game.staging.staging")
cutscene.play(S.crown()):seek(3.2)
S.buildProps() -- a seek does not fire the cue that spawns the dressing
Two rules the shots are written to
- An entity anchor goes into a shot as its ID STRING, never as the entity
proxy —
entityRef()does this. A proxy is read as a polyline and the whole playback fails. - The eyewall is a large body, and the distance it reads at is the distance it is fought at. Pushing the camera into it fills the frame with wisps. The reveal and the resolution hold near the gameplay station and change their aim, not their distance.
Scoped to this part · feeds back into the world's score.