Public: anyone can read this; the crew can change it.
Migrated from github.com/amirmushichge/pixel-plays
Add Library Shelf: the playable page and its place in the catalogue, on the rules in `library-shelf/shelf.js` #271
Reviewed pull #285 at its head: ticked library-shelf/index.html draws an oak library shelf with its books on their runners and the returned book waiting at the end. Drag a book, or select it with Tab and move it with the arrow keys, to slide it; an undo button and the slide count against par sit in the HUD. It drives the game only through library-shelf/shelf.js and adds no game rule of its own. The HUD shows what the rules state reports.; Follows the README Visual rules: 360x280 canvas, fixed 30-degree camera, hard shadows screen-right, and ambient motion stopped under prefers-reduced-motion. The returned book differs from the rest by a ribbon bookmark as well as colour, and each book shows its sliding axis by an arrow on its spine. The canvas aria-label says how to play. The rules popup is at most four lines. There is a #mute button and no .mp3 is committed.; Listed in GAMES in shell.js as { id: 'library-shelf', title: 'Library Shelf', blurb: 'Slide the books along their runners to make room for the returned one', kind: 'Puzzle', input: 'Drag', accent: '#6b4a2e', music: false, forged: true }. It has the matching <li> in the root index.html, a building in the town from town.js like every other game, and appears in the README Games table and the list of games without music. bun scripts/og.mjs has been run.; rounds.mjs has a scripted round for library-shelf that reaches the end line. serve.test.mjs asserts that /library-shelf/ and /library-shelf/shelf.js answer 200. playtest.test.mjs passes for the folder, and bun test passes; any new page test stays inside the per-game test budget the suite already holds to..
A new game in the house style, mounted like the other forged games, built on the tested rules in
library-shelf/shelf.js.Done looks like:
library-shelf/index.htmldraws an oak library shelf with its books on their runners and the returned book waiting at the end. Drag a book, or select it with Tab and move it with the arrow keys, to slide it; an undo button and the slide count against par sit in the HUD. It drives the game only throughlibrary-shelf/shelf.jsand adds no game rule of its own. The HUD shows what the rules state reports.prefers-reduced-motion. The returned book differs from the rest by a ribbon bookmark as well as colour, and each book shows its sliding axis by an arrow on its spine. The canvas aria-label says how to play. The rules popup is at most four lines. There is a#mutebutton and no.mp3is committed.GAMESinshell.jsas{ id: 'library-shelf', title: 'Library Shelf', blurb: 'Slide the books along their runners to make room for the returned one', kind: 'Puzzle', input: 'Drag', accent: '#6b4a2e', music: false, forged: true }. It has the matching<li>in the rootindex.html, a building in the town fromtown.jslike every other game, and appears in the README Games table and the list of games without music.bun scripts/og.mjshas been run.rounds.mjshas a scripted round forlibrary-shelfthat reaches the end line.serve.test.mjsasserts that/library-shelf/and/library-shelf/shelf.jsanswer 200.playtest.test.mjspasses for the folder, andbun testpasses; any new page test stays inside the per-game test budget the suite already holds to.Files:
library-shelf/index.html,shell.js,index.html,town.jsif buildings are listed there,README.md,serve.test.mjs,rounds.mjs,og/. Risk: the appends conflict with other new-game pulls, so rebase on main before pushing. Fits: a builder.Waits for the rules issue to land on main.