Files
systemic-game-design-course/course/09-turn-pipeline/reference/ts
Lucas WintherandClaude Fable 5.2 429137a6ef fix(reference): Death Events remember a right-hand neighbour, not a board index
A Deathrattle summon used the dying minion's board index from before the
Death Creation Step removed anything. That index is stale when a minion to
its left dies in the same step, so the token landed one place too far right.

Each Death Event now records `before`: the nearest minion to the right that
is not dying in the same step. The position handed to the effect context is
resolved when the trigger resolves: the current index of `before`, or the
right end. Applied to the Rust and TS references of Modules 3-10.

Module 3 gains two tests, documented in scenarios.md:
test_03_summon_position_after_simultaneous_deaths (fails before the fix) and
test_03_simultaneous_summons_keep_board_order.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
2026-11-11 09:15:48 +01:00
..
2026-10-29 04:28:17 +01:00
2026-10-29 04:28:17 +01:00
2026-10-29 04:28:17 +01:00
2026-10-29 04:28:17 +01:00
2026-10-29 04:28:17 +01:00
2026-10-29 04:28:17 +01:00

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); 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.
    • grid.ts: Module 9 adds Board.setKind.
    • 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.
  • src/harness.ts: the adapter the course tests call. Module 9 adds step, won and lost on Baba.

Run it with the module's tests: node tools/verify-references.mjs 09 from the course repository.