Baba.undo() restores the level before the last step or move (board snapshot: objects in age order with ids, the id counter, and won; rules recompiled). place clears the history. SpellGrid's undo throws/panics 'not supported'. stackAt / stack_at lists a tile's kinds oldest first, on Baba and SpellGrid. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
20 lines
2.6 KiB
Markdown
20 lines
2.6 KiB
Markdown
# Module 9 reference engine (TypeScript)
|
|
|
|
The course's own engine as of the end of Module 9. Part I's card engine is unchanged, and all of its tests still pass. The Part II engine in `src/engine/puzzle/` now plays a whole turn: movement, parse, conversion, parse, hazards, win, parse. Module 8's reference was the starting point, so a diff between the two shows what this module adds.
|
|
|
|
- `cards/` (at the package root; not in this directory): Part I's card data, a copy of `course/cards/` staged by `tools/verify-references.mjs`. Part II doesn't read it.
|
|
- `src/engine/puzzle/`: the Part II engine. It names no noun: the engine's own words are the operators `IS`, `AND`, `NOT`, the meta-noun `TEXT`, the property `PUSH` of the base rule `TEXT IS PUSH`, the property `YOU`, which picks the objects that move, and from Module 9 the properties `WIN` (the win check) and `FLOAT` (which objects share a tile).
|
|
- `turn.ts` (new): the turn. `Phase`, `TURN` (the phases in order) and `Hazard` (content's rule for what destroys what).
|
|
- `level.ts`: a level in play. Module 9 adds `Level.step`, which runs the phases of `TURN`; the conversion phase (`X IS Y` in place, `X IS X` locks, `X IS NOT X` deletes, and `... IS NOT Y` keeps every object it names from becoming a `Y`, as `hasProperty` settles negation per object); the hazards phase, which runs content's hazards in order; the win check; `Level.sharing` (the other objects on a tile at the same float level); `won` and `lost`. The `Level` constructor takes the hazards. `moveYou` is now movement, then a reparse. `Level.undo` puts back the snapshot saved before the last `moveYou` or `step` (the board and `won`) and reparses; `place` clears the history.
|
|
- `grid.ts`: Module 9 adds `Board.setKind`, and `Board.snapshot` and `Board.restore` (every object, oldest first, and the id counter) for undo.
|
|
- `word.ts`: Module 9 adds `Lexicon.thingNamed` (what a conversion into a noun makes).
|
|
- `movement.ts`, `parse.ts`, `resolve.ts`: unchanged.
|
|
- `index.ts`: the module's exports.
|
|
- The rest of `src/engine/`: Part I, unchanged.
|
|
- `src/content/hazards.ts` (new) and `src/content/index.ts`: the hazards, in the order the engine runs them: `SINK`, `HOT`/`MELT`, `DEFEAT`. What destroys what at the end of a turn is content, not engine.
|
|
- `src/content/movement.ts`: unchanged.
|
|
- `src/content/words.json`: Module 9 adds `HOT`, `MELT`, `SINK`, `DEFEAT` and `FLOAT`, and `ALL`, the Module 7 Expansion Drop, which the Module 9 tests need.
|
|
- `src/harness.ts`: the adapter the course tests call. Module 9 adds `step`, `won`, `lost` and `undo` on `Baba`.
|
|
|
|
Run it with the module's tests: `node tools/verify-references.mjs 09` from the course repository.
|