Board
The plate, the pieces, and the hands. Mounted on `mount_board`.
Board
The plate, the pieces, and the hands. Mounted on mount_board.
Everything the apprentice looks at and touches during the night lives here: the seventy cells of the glass, the cursor, the tray at the near end of the table, and every frisket and crystal standing on the plate.
What it draws
| Layer | What it says |
|---|---|
| the emulsion cell | the gelatin at that cell, bone when untouched, true black once the betafite has struck it, and dimmed in a frisket's shadow |
| the target frame under it | gold where the plate wants that cell dark, warming toward the betafite's own green as the exposure climbs; red where a cell that had to stay clear has been spoiled; dark where a frisket covers it; absent where the plate wants nothing |
| the cursor | a viewfinder bracket, breathing, red while a placement has just been refused |
| the preview | the footprint the selected shape would take, green where it will lie and red where it will not |
| the tray | five slots, each with the shape it holds drawn as a brass diagram, what is left in it, and a rim of light on the one selected |
Every quad is one of two materials over art/board_ink.shader, and differs
from its neighbours only in two per-instance lanes — so the whole board is
one pipeline and one material row rather than two hundred materials. The
friskets themselves are real brass and are lit as brass.
What it reads and writes
Reads Core.state.cells (the rules slice writes exposure and masked) and
Core.state.phase. Writes Core.state.pieces, Core.state.tray and
Core.state.cursor.
Emits placed, lifted, rotated, refused, cursor, select, the sfx
names place_crystal / place_frisket / lift / rotate / refused /
select / ui_move, and the two requests the night can raise from the
player's hands: uiRequest("fix") and uiRequest("pause").
On levelStart it fills the tray from the plate the rules slice dealt and
puts the cursor back in the middle of the glass.
A crystal is spawned as crystal_<id> and handed to the hero slice's
Betafite component when that is registered. If Betafite is not there — or
attaches and draws nothing — the crystal wears this slice's own stand-in
instead, because an invisible crystal on the plate is worse than a plain one.
The controls
board.inputMap, group player, live exactly while the phase is the night
and nothing has stood that group down.
| Action | Keyboard / mouse | Touch | Pad |
|---|---|---|---|
| move the cursor | WASD, arrows, or the pointer over the glass | tap a cell, or drag across the plate | left stick or d-pad |
| place | Space, left click, or a second tap on the cell the cursor holds | Place | south |
| lift | X, right click | Lift | east |
| turn | R | Turn | west |
| pick a shape | Q / E, or click a tray slot | tap a tray slot | shoulders |
| fix the plate | F | Fix | north |
| pause | Escape | the HUD's pause pip | start |
The plate and the tray are pointed at and touched directly rather than
through a virtual stick, which is why cursor, prevShape and nextShape
carry touch = false. Where a cell sits on screen is solved against the live
view matrix each frame, so it is right at any aspect ratio and from wherever
the staging slice has moved the camera. Which way the grid runs on screen is
read off that same matrix rather than assumed, so pushing right moves the
cursor right whichever side of the table the camera is standing on.
Public fields
| Field | What it is |
|---|---|
inputMap | the night's control scheme |
repeatDelay | seconds a held direction waits before it starts stepping again |
repeatRate | seconds between steps once it is repeating |
pointerCursor | whether the mouse moving over the glass carries the cursor |
Bench
benchPlate() deals a practice target and a full tray straight into
Core.state so the board can be played with no other slice mounted, and
readout() reports the cursor, the tray, the piece count and whether the
scheme is live. Neither is part of the game; they are how this slice is
proved on its own.
Scoped to this part · feeds back into the world's score.