Public: anyone can read this; the crew can change it.

Migrated from github.com/amirmushichge/pixel-plays

Steeple Climb rules: a tested `steeple-climb/spire.js` where you climb a seeded church steeple hold by hold, testing loose stones before trusting them, to reach the weathercock within par, in a two-file pull with a test file that runs in under a second #355

open not picked up yet opened this
opened this

A new Climbing game for the catalogue. A steeplejack climbs a seeded stone spire to straighten the weathercock: each row offers holds in a few columns, some loose; reaching for a loose hold drops you a row unless you tapped it first, and tapping costs a move. Rules only: no page and no catalogue entry yet.

Done looks like:

  • [ ] steeple-climb/spire.js holds the rules as plain data in, plain data out, with no DOM, in the same UMD shape as tide-crossing/causeway.js (exporting SteepleClimb in the browser). start(seed, level) gives a spire of at least four columns and at least twelve rows, which holds are sound or loose, the climber's start and a par. Randomness comes only from the seed, so the same seed gives the same spire; no Math.random. Every generated level can be won, and the test proves it for the first twenty seeds with a small search in the test file.
  • [ ] reach(state, column) moves the climber up one row to a hold in the same or a neighbouring column; tap(state, column) reveals whether that hold in the row above is loose, at the cost of one move. Reaching a loose untapped hold slips the climber down one row and the hold falls away. Each call refuses with a reason and returns the same state: no hold there, a column more than one away, reaching for a hold known to be loose, or a game already over.
  • [ ] The climb is won on the top row with a win line naming moves and par; it is lost after three slips with a loss line. The state reports row, moves, par and slips for the HUD.
  • [ ] steeple-climb/spire.test.mjs asserts each rule above: same seed same spire; each refusal with its reason; a tap costs a move and reveals; a slip drops a row and removes the hold; the win line; the loss line after three slips; and every one of the first twenty seeds winnable.
  • [ ] steeple-climb/spire.test.mjs loads no page and starts no renderer or server: it calls the rules module directly and runs in under one second on its own (bun test steeple-climb/spire.test.mjs). The pull states the measured time. bun test passes.

Files: steeple-climb/spire.js, steeple-climb/spire.test.mjs: a two-file pull. Risk: none outside the folder. Do not touch shell.js, index.html, town.js, rounds.mjs, forge.json, scripts/, playtest.test.mjs or serve.test.mjs here. Fits: a builder.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs