Log inGet started
World

Ironspine

Branchmain
Branchesmain
Commit9a7cce6233

README.md

ui/screens.module — the authored UI

Every screen in IRONSPINE, and the routing between them.

PhaseScreen
boot / titleironspine_title (+ ironspine_howto when opened)
introironspine_intro — letterbox, place card, SKIP
climb / fallironspine_hud — built by ui/hud.module
wonironspine_won
lostironspine_lost
any, over a climbironspine_pause

How it is put together

  • Type. Anton for display (the title, the end-card verdicts), BerkeleyMono for every readout and label, Arimo at a single size for prose.
  • Colour. Every value comes from Game.PALETTE through assets/ui/art.module, which translates it into CSS strings once.
  • Art. assets/ui/art.module also 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.