Files
systemic-game-design-course/course/04-interceptors/reference/rust
Lucas WintherandClaude Opus 5.5 638549161f
CI / Tool tests and sync-check (push) Successful in 13s
CI / Verify references (all modules, Rust and TS) (push) Successful in 1m32s
CI / Verify Expansion Drop solutions (all modules, Rust and TS) (push) Successful in 1m35s
CI / Coupling audit on references (push) Successful in 13s
CI / Site build (push) Successful in 25s
CI / Naive engine tests (Module 0) (push) Successful in 32s
feat(ci): verify Expansion Drop solutions; README quick start, disclaimer link; Rust reference lockfiles
- verify-references --expansion overlays expansion/solution on each reference and runs the
  cumulative tests plus the drop test; refuses a solution that touches src/engine/
- CI job verify-expansions
- README: workspace-template + git init step, tool list, repo disclaimer link
- Cargo.lock for every Rust reference (staged with the reference, pins serde for rustc 1.85.1)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-29 19:13:11 +01:00
..
2026-10-29 02:54:37 +01:00
2026-10-29 02:54:37 +01:00
2026-10-29 02:54:37 +01:00
2026-10-29 02:54:37 +01:00
2026-10-29 02:54:37 +01:00

Module 4 reference engine (Rust)

The course's own engine as of the end of Module 4. It adds auras as card data and one routine that decides how many times a queued trigger activates, so "Your minions trigger their Deathrattles twice." is a card, not a change to Deathrattle. It also adds playing a minion from hand, and Battlecries. Module 3's reference was the starting point, so a diff between the two shows what this module adds. Module 5's reference starts from this one.

  • src/engine/: generic machinery. Names no cards.
    • aura.rs: the Aura Update (Other), which snapshots the auras of every minion in play, and activations, the one routine that reads the snapshot and returns how many times a trigger of a given kind activates for a given player. Stacking policy (Max or Additive) is a field of each multiplier.
    • queue.rs: actions, the context an effect sees, and the resolver. The end of the outermost Phase runs the Death Creation Step, then the Aura Update (Other). Summoning a minion also runs the Aura Update; playing one does not. Each queued trigger asks activations once, as it starts, and then activates that many times back to back. A Play action moves a minion from hand to board and raises a Played event, which the minion's Battlecry answers.
    • death.rs: the Death Creation Step, unchanged from Module 3.
    • world.rs: entities, zones, order of play, heroes, stats, Armor, the pending-destroy flag, the aura snapshot and the log.
    • card.rs: card definitions (stats, triggers, auras, a spell's effect) and the library.
    • event.rs: the engine's events. Played is engine-only: src/harness.rs leaves it out of the course's GameEvent log, where the played minion's Summoned already shows it.
  • src/content/mod.rs: card definitions. Baron Rivendare is one aura entry: Aura::TriggerMultiplier on TriggerOn::Deathrattle, times 2, Stacking::Max. Twisting Nether (the Module 3 Expansion Drop) is here because the Module 4 tests use it.
  • src/harness.rs: the adapter the course tests call. summon goes through the engine's summon, so it runs an Aura Update. play (the Module 1 Expansion Drop) runs one Sequence with a Play action.

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