Ironspine
README.md
ui/screens.module — the authored UI
Every screen in IRONSPINE, and the routing between them.
| Phase | Screen |
|---|---|
boot / title | ironspine_title (+ ironspine_howto when opened) |
intro | ironspine_intro — letterbox, place card, SKIP |
climb / fall | ironspine_hud — built by ui/hud.module |
won | ironspine_won |
lost | ironspine_lost |
| any, over a climb | ironspine_pause |
How it is put together
- Type.
Antonfor display (the title, the end-card verdicts),BerkeleyMonofor every readout and label,Arimoat a single size for prose. - Colour. Every value comes from
Game.PALETTEthroughassets/ui/art.module, which translates it into CSS strings once. - Art.
assets/ui/art.modulealso draws the Ironspine silhouette, the reticle, the hold ring, the piton and crown glyphs, the mouse diagram and the gauge arcs, as inline SVG. - Motion. Every panel has an entrance with a staggered delay; live things (a gust, a slipping hand, the beacon) have small infinite loops.
Talking to the rest of the game
It reads Game.state and reports the player's choices with
Game.emit("uiAction", { action = … }) — start, retry, resume, quit,
plus pause when the menu opens over a live climb. It calls
require("game.staging").skip() when the player cuts the opening short.
If no slice has claimed an action after a moment, SCREENS applies the smallest phase move that keeps the menus reachable, so a menu is never a dead end. That fallback never runs when another slice answers the event.
Keyboard
Escape is carried by a real button widget's shortcut on the HUD (MENU · ESC),
on the pause card and on the how-to card, so the engine's own shortcut plumbing
fires it.