Files
systemic-game-design-course/course/04-interceptors/expansion
Lucas WintherandClaude Opus 5.5 bcdaca0cd2 feat: module 04 interceptors
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]>
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 Expansion Drop: Brann Bronzebeard

The lesson's Expansion Drop beat explains the task. This file holds the scenario, the test locations and the check.

  • Card: Brann Bronzebeard, 3-mana 2/4, "Your Battlecries trigger twice." (Brann Bronzebeard, hearthstone.wiki.gg).
  • Tests: tests/rust/test_04x.rs and tests/ts/test_04x.test.ts. Copy the one for your track into your workspace's tests/.
  • Reference answer: solution/rust/src/content/mod.rs and solution/ts/src/content/index.ts. Each is the Module 4 reference content with one card added. Nothing under src/engine/ changes, and neither does the harness.
  • Check: commit your workspace before you start, then run node tools/expansion-check.mjs <your-workspace> <that-commit> from the course repository. It fails if any file under src/engine/ changed.

The reference gives Brann the same stacking policy as Baron Rivendare ("max"). The course's sources don't state how two Branns combine, and this test uses one Brann, so the choice isn't checked.

Scenario

test_04x_brann_doubles_battlecry

  • Setup: newGame with a deck of 5 Test Filler for player 0. Summon Brann Bronzebeard for player 0 (id B). Add Novice Engineer ("Battlecry: Draw a card.") to player 0's hand (id E). Call clearLog().
  • Action: play(E).
  • Assertions:
    • hand(0) has 2 cards; call them C1 and C2, in hand order.
    • The log is exactly, in this order: Summoned{id: E}, Triggered{source: E, trigger: "battlecry"}, Drew{player: 0, id: C1}, Triggered{source: E, trigger: "battlecry"}, Drew{player: 0, id: C2}. The Battlecry is queued once and activates twice back to back, exactly as a Deathrattle does under Baron Rivendare.
    • board(0) is [B, E].