Trigger multipliers as aura data on cards, snapshotted by an Aura Update (Other) after each Death Creation Step and on summon, and applied by one generic routine (activations) when each queued trigger starts. Baron Rivendare is content only (stacking "max"); Brann Bronzebeard is the content-only Expansion Drop. Adds play (now required) and Battlecry. Co-Authored-By: Claude Opus 5.5 <[email protected]>
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, andactivations, 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 (MaxorAdditive) 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 asksactivationsonce, as it starts, and then activates that many times back to back. APlayaction moves a minion from hand to board and raises aPlayedevent, 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.Playedis engine-only:src/harness.rsleaves it out of the course'sGameEventlog, where the played minion'sSummonedalready shows it.
src/content/mod.rs: card definitions. Baron Rivendare is one aura entry:Aura::TriggerMultiplieronTriggerOn::Deathrattle,times2,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.summongoes through the engine's summon, so it runs an Aura Update.play(the Module 1 Expansion Drop) runs one Sequence with aPlayaction.
Run it with the module's tests: node tools/verify-references.mjs 04 from the course repository.