plates
Five nights, five signals. A plate is a name, a caption, the target the signal has to carry, what the lead case holds, and how long the dawn takes.
game.rules.plates — the five plates of Lucina
Five nights, five signals. A plate is a name, a caption, the target the signal has to carry, what the lead case holds, and how long the dawn takes.
local Plates = require("game.rules.plates")
Plates.count --> 5
Plates.get(3) --> the third plate
Plates.darkCells(plate) --> how many cells must go dark
| # | plate | what it teaches | case | tray | dawn |
|---|---|---|---|---|---|
| 1 | The Long Dash | a plus is a mark, a mask carves it | 1 crystal | 2 bars | 80 s |
| 2 | L for Lucina | exposure TIME is the shape — a dot is not a plus | 1 crystal | 2 discs | 90 s |
| 3 | The Reef Mark | mask what must survive, then expose around it | 2 crystals | 5 discs | 85 s |
| 4 | Two Ships | two marks close together share a skirt | 2 crystals | 4 bars | 75 s |
| 5 | The Rose of Lucina | all of it, on a dose | 3 crystals | 4 discs | 70 s |
Every target was read off a solution
Each plate carries its own solution — the phases a player lays to expose it
perfectly. That is not documentation. The solution was written FIRST, run
through game.rules.exposure, and whatever the glass held became the target.
So a plate that cannot be played to a full 100% cannot ship.
local checks, ok = Plates.verify()
verify re-derives every claim this file makes from the live numbers in
Core.EXPOSURE and Core.DOSE:
| field | the claim |
|---|---|
solvable | the authored solution leaves not one cell wrong |
frisketsEarned | the SAME crystals without the friskets FAIL — the masks are the puzzle |
trayFits | the tray holds what the solution stands at once |
doseFits | the solution costs less than a full dose |
timeFits | its exposure time fits inside the night, before any handling |
Run it after retuning anything in Core.EXPOSURE or Core.DOSE — a change to
the rate, the radius, the falloff or passMatch moves every plate at once,
and this is what says whether they all still stand.
A solution phase
{ friskets = { { shape = "bar", col = 3, row = 4, rot = 0 } },
crystals = { { 4, 4 } },
seconds = 12 }
The whole board, and how long it is held. Between phases the player lifts and lays; the glass keeps whatever exposure it already has.
Scoped to this part · feeds back into the world's score.