Staging
Mounted on `mount_staging` by the scene's entrypoint. It owns no camera of its own: it drives `luteway.camera.FollowCam` through that component's shot API, so there is exactly one thing posing the lens and a moment can never fight the follow.
Staging — the three moments the camera takes off the player
Mounted on mount_staging by the scene's entrypoint. It owns no camera of its
own: it drives luteway.camera.FollowCam through that component's shot API, so
there is exactly one thing posing the lens and a moment can never fight the
follow.
The moments
| Beat | Cue | What the frame does |
|---|---|---|
| The opening | phase opening | Holds on the dark rookery crest — the place the run is for — then cranes the whole length of the Luteway down to the penguin on the beach. LW.state.stagingBusy holds the loop until it lands. |
| First light, in play | firstLight, or LW.state.dawn.lightY crossing the penguin | A short push of the LENS only, and back. A breath, not a cut: the follow keeps the frame and the player never loses control. |
| First light, the win | phase won | Pushes in on the penguin at the crest, holds while the sun clears the sea, then cranes up into the light with a drift on the held frame. |
| The sea | phase lost | A kick as the wave lands, then a slow pull back until the whole drowned Luteway is in frame. |
Everything is in world units and seconds. Nothing here reads the screen, so every beat plays the same on a phone held either way and on a television; what changes with the shape is only how much cliff stands beside the climb, which is the follow camera's business.
Skip
The crane holds the loop for about seven seconds. A player seeing the Luteway
for the first time wants that; a player on their ninth run does not, so the
crane is skippable from every device family, through
luteway.camera.stage.inputMap:
| Mouse + keyboard | Space, Enter, Escape |
| Controller | South (A / Cross), East (B / Circle) |
| Touch | a Skip button, added to the far end of the touch band so the penguin's own buttons keep the positions a thumb already knows |
The map is live only while a beat is holding the loop, and it suppresses
nothing — the Skip button simply joins the climb controls for those few
seconds and leaves again. :skip() does the same thing from code.
Rehearsing without play mode
The sequencer ticks in edit mode as well as in play, so a beat can be watched without entering play and locking the VFS for the other slices:
entity.find("mount_staging").component.get("Staging"):rehearse("opening")
"opening" | "firstLight" | "won" | "lost" | "release". :current() names the
beat that owns the frame, or "" when the penguin has it.
Fields
| Field | |
|---|---|
craneSeconds | how long the opening crane takes to fall the length of the Luteway |
stageMoments | off leaves the follow camera alone for the whole run |
inputMap | the map carrying Skip |
A beat that somehow overruns cannot wedge the loop: stagingBusy is released
after 30 seconds whatever happens, with a warning, and Game has a budget of
its own on top of that.
Owned by the camera slice. Lenses and timings live in LW.CAMERA in
luteway.game.
Scoped to this part · feeds back into the world's score.