- commit
- 2c90f31cafe4a97b3fda0167a7a8eb4a4887261c
- parent
- 98b4918bde6f9d9169fe68d8ce889549b875b28a
- author
- Dami <dami.etoile@gmail.com>
| M | docs/ | 11 | +++++++---- |
| M | progress.md | 4 | +++- |
@@ -43,7 +43,8 @@ API.
4343 | --- | --- | --- |4444 | `cell` | One integer grid coordinate | A cell can hold zero or more entities and terrain layers. |4545 | `entity` | A runtime instance with identity and position | Identity survives movement; two entities may share a cell. |46-| `kind` | Entity type, such as `baba`, `wall`, `rock`, or `text_baba` | Rules target kinds, not individual IDs, unless a mod opts into IDs. |46+| `kind` | Whether an entity is a physical `object` or pushable `word` | Rule matching uses an object's noun or a word's text, never an instance ID. |47+| `noun` | Semantic type of a physical object, such as `MIAU`, `WALL`, or `ROCK` | Rules target nouns, so every object of the same noun gains the same derived properties. |4748 | `layer` | Terrain, actor, item, text, or effect ordering | Rendering order must not silently change collision order. |4849 | `direction` | Facing or movement vector | Cardinal movement is the baseline; diagonal support is an explicit extension. |4950 | `occupancy` | Entities currently in a cell | Never encode occupancy as a single sprite slot: stacked words and objects are valid. |@@ -196,11 +197,14 @@ claims are optional metadata, not a requirement for a fun level.
196197 197198 ## CommonJS mod boundary198199 199-Mods should export data and pure hooks through a narrow CommonJS contract:200+The first playable release accepts trusted local CommonJS modules containing a201+manifest, levels, noun vocabulary, and an emoji palette. Its concrete shape and202+limits are in the [modding guide](modding.md). A later engine milestone should203+add pure hooks through a narrow, versioned contract such as:200204 201205 ```js202206 module.exports = {203- id: 'garden-01',207+ manifest: { id: 'garden-01', name: 'Garden', version: '2.0.0' },204208 vocabulary: { nouns: [], verbs: [], properties: [] },205209 levels: [{ id: 'intro', width: 9, height: 7, cells: [] }],206210 systems: {@@ -244,4 +248,3 @@ and limited player access to the worst cases, while treating `IF` as not worth
244248 the implementation pain at that stage ([GDC talk PDF](https://media.gdcvault.com/gdc2020/presentations/Reading%20the%20rules_Teikari_Arvi.pdf), pp. 19–21).245249 That is a useful product constraint: keep the grammar deliberately small and246250 make quirky extensions opt-in and testable.247-@@ -6,4 +6,6 @@ Original prompt: I want to create a web app game engine that supports 'baba is y
66 77 2026-09-23: Engine, three teaching levels, CommonJS loader, UI, and audio assets implemented in parallel. `npm test` and `npm run build` pass at this point. First Playwright canvas screenshot exposed a missing MIAU emoji mapping and interface gaps; fixes are in progress.88 9-TODO: Re-run browser checks after UI and level updates; verify mod import and win progression; reconcile OpenSpec task checklist with shipped behavior; archive the change after verification.9+2026-09-23: Playwright browser checks pass for rule breaking, keyboard and touch movement, undo, reset, valid and invalid CommonJS imports, victory, and continuing to the next level. Inspected the rule-break and victory screenshots and the text game state; the rule table updates when STOP moves. Level 2's wall-rule shortcut was sealed and its intended push solution still passes. The designer requested richer settled turn events (E1/E2); source IDs and axes are implemented, and the event payload is receiving a final ordering/contact review before OpenSpec archival.10+11+TODO: Complete the E2 event review and focused fixtures, rerun tests/build/browser smoke, then mark and archive the OpenSpec change. Keep visual design changes coordinated through docs/design-inbox.md.