cards
Every card **First Light: Lavic Odyssey** puts in front of the player: `require("game.screens.cards")`.
cards
Every card First Light: Lavic Odyssey puts in front of the player:
require("game.screens.cards").
| Builder | Card |
|---|---|
C.title(lay, focusId) | the crest, the name, and two ways in |
C.howto(lay, focusId, deviceKey, bindings) | the rules in three sentences, then the live control table for one device family |
C.pause(lay, focusId, st) | the canto, where the climb stands, and three ways on |
C.won(lay, focusId, st) | the sunrise, the knights freed, the time |
C.lost(lay, focusId, st) | the tide or the heat, and how far you got |
Each returns { tree, controls } — the widget tree AND the ordered list of
control ids on it. That list is both the focus order a pad walks and the
set of callback ids the component answers, from one source, so a control
can never exist on screen and be unreachable from a controller.
Every shape
Nothing here is sized in pixels. Every measure comes off L.layout(),
which is a proportion of the short side of whatever screen is live.
Cards stack DOWN in a tall frame. In a wide one the how-to card puts its prose and its control table side by side — that is where the room is — and the title card drops its couplet, because a wide frame has far less vertical room than a tall one and a title that overflows reads worse than a title with one line fewer.
The title card leaves the bottom fifth of a tall frame empty: the narrator speaks the title line over it, and the staging slice captions that across the bottom of the frame on a screen above this one.
Scoped to this part · feeds back into the world's score.