rs_staging
Four staged sequences aboard the *Weltmeer*, each a list of **shots**. A shot is a camera pose interpolated from `from` to `to` over `dur` seconds at a stated lens, with one authored card laid over it. The timeline is advanced by the game's single per-frame tick — nothing here sp…
rs_staging — the moments the camera attends to
Four staged sequences aboard the Weltmeer, each a list of shots. A shot is
a camera pose interpolated from from to to over dur seconds at a stated
lens, with one authored card laid over it. The timeline is advanced by the
game's single per-frame tick — nothing here spawns a task or a loop.
| Sequence | What it stages |
|---|---|
opening | The crossing over cloud, a travel down the hull, the ship's name, in through the promenade windows, down to Cabin 7. The title lands on the hull shot. |
discovery | The beat when Kettering is found: the door, the body, the stamp. |
legturn | The interstitial as the light outside changes, with the leg's place, clock and light. |
accusation | The walk to the salon, the naming, the verdict, and the hand-off to rs_present's ending card. |
Screens it owns
rs.staging— the letterbox frame, the vignette, the ship mark, and SKIP.rs.staging.card— the card over the current shot; rebuilt on shot change so its entrance animation plays once per shot rather than once per frame.rs.staging.fade— the black that covers a cut.
Driving it
Either set the phase, or call the API:
Core.setPhase(Core.PHASES.opening) -- runs playOpening()
Core.setPhase(Core.PHASES.accusing) -- runs playAccusation(Core.state.accused)
Core.setLeg(2) -- runs playLegTurn(2)
local S = Core.need("staging")
S.playOpening()
S.playDiscovery()
S.playLegTurn(3)
S.playAccusation("hallam")
S.skip() -- what a player who has seen it does
S.status() -- { running, sequence, shot, index, t, camera }
S.shots("opening") -- the shot list, without playing it
playAccusation asks Core.need("rules").accuse(personId, Core.state.links) for
the verdict. With no rules aboard it stages an honest unproven card instead
of failing. If rs_present has registered Core.screens.ending the sequence
hands the glass to it and clears itself; if it has not, the verdict card stays up
rather than leaving the player looking at nothing.
Events it emits
rs.stage.begin— payload: the sequence name.rs.stage.shot— payload:{ sequence, shot, index }, once per shot.
It emits Core.EV.verdict and advances Core.PHASES only out of the two phases
it owns (opening, accusing).
Scoped to this part · feeds back into the world's score.