clone

a browser grid puzzle game where you push words around to rewrite the rules of each level

main
miau-is-true / docs / worlds / README.md
README.md 4.6K rendered
1# Worlds program: brief23Owner: **design** (Claude session `miau-is-true-9e`), managing a small team of4world-builder subagents. Engine questions go through5[`docs/worlds-inbox.md`](../worlds-inbox.md).67## Why89Baba Is You's modding scene works because a creator can package a **world**:10a themed collection of levels that explores one idea, with or without custom11tiles and custom rules. Miau Is True should support the same pattern. This12program is the **proof of that pattern**. We build a few real worlds, ship the13good ones as default packs, and write down every point of friction a creator14or player hits along the way.1516## Worlds in flight1718| World | Pack id | Explores | Custom tiles | Custom rules |19| --- | --- | --- | --- | --- |20| Crate Works | `crate-works` | Sokoban pushing: crates, goals, dead ends, rules that change what can be pushed | yes | no (documents what a real Sokoban goal would need) |21| Tidewater | `tidewater` | Hazards and identity: SINK, DEFEAT, and becoming something else to cross them | yes | no |22| Crossword | `crossword` | Pure grammar: shared words across axes, AND chains, scarce words, stacked words | no (core nouns only) | no |23| Clockwork | `clockwork` | **Custom rules**: new properties a mod defines (for example MOVE, OPEN/SHUT) | yes | **yes** (drafted against a proposed mod behavior API) |2425## Status (2026-09-23)2627| World | Levels | Verified by design | Bundling |28| --- | --- | --- | --- |29| Crate Works | 7 (15 to 48 steps) | yes, `mustForm` proven on 3 | **ready**, in CI and green |30| Crossword | 7 (16 to 35 steps) | yes, reworked for W6, `mustForm` proven on 6 | **ready** (handed off for CI and bundling) |31| Tidewater | 7 (9 to 26 steps) | yes, `mustForm` proven on 3 | **ready**. W8 fixed (`c3537ca`) and re-solved green |32| Clockwork | 6 (10 to 29 steps) | yes (`mouse-keeps-time` has `allowBypass`) | in CI and green. W11 landed; bundling after W12 (custom property tiles and the beat strip). OPEN/SHUT waits on W13 |3334The engine asks W1 to W13 are in [`docs/worlds-inbox.md`](../worlds-inbox.md), and35the design decisions from this program are D20 and D23 to D24 in36[`docs/design.md`](../design.md).3738## Files3940- `mods/worlds/<pack-id>.cjs` is the pack. It must load with `loadMod` (see41 [modding.md](../modding.md)).42- `docs/worlds/<pack-id>.md` is the world bible: the theme, the mechanic, and43 a level table (id, what it teaches, solver length, flags), plus design notes.44- `docs/worlds/friction.md` is the **shared friction log**. It's append-only;45 use its entry template.46- **Do not edit** `src/`, `tests/`, `index.html`, `openspec/`, or other47 people's files. The engine team owns them. Scratch experiments go in `/tmp`.4849## Tools5051- `node tools/solve.mjs mods/worlds/<pack-id>.cjs` runs a breadth-first solve52 on the real engine. It prints the shortest solution and flags **BYPASS** (the53 level is winnable without moving any word) and **TRIVIAL** (under 6 steps).54 Use `--level <id>` for one level and `--max <n>` to raise the search cap.55- `node tools/solve.mjs core` solves the built-in levels.5657## Quality bar for a world58591. **6 to 8 levels**, ordered to teach, then twist, then combine. Mark each60 level's `category` as `required`, `optional`, or `challenge`, and fill in61 `introduces`.622. **Every level solves.** The solver output goes in the world bible.633. **No accidental bypass.** A BYPASS is allowed only when it's the point of64 the level (for example "you don't need to touch anything"), and the bible65 has to say so.664. **One idea per level.** The first level of an idea is small and safe; a67 later level makes the player *use* it. Include at least one `challenge`68 level of 25 steps or more with a non-obvious rule edit.695. **Board size:** at most 14×10 (it has to read on a phone), and keep blank70 rows between stacked sentences where possible (design's spacing rule).716. **Titles and hints follow the design copy deck:** sentence-case titles, a72 hint that nudges without giving the answer, no `·`, and no "garden".737. **Palette:** every custom noun gets an emoji that reads at 60% of a cell on74 a near-black board. Directional actors can declare facing:75 `{ glyph, faces: 'left' }`.7677## Friction: what to log7879Log **anything** that made authoring or playing harder than it should be.80That includes coordinates you had to count by hand, missing helpers,81validation messages that didn't help, vocabulary you needed but didn't have,82presentation that would confuse a player, and engine behaviour that surprised83you. Log it the moment you hit it, including small things. Every friction84entry needs a proposed fix and a suggested owner (`engine`, `design`, or85`content`).