Files
systemic-game-design-course/course/catalog.json
T
Lucas WintherandClaude Opus 5.5 fb9d0a4eb4 feat: Module 12, Combat (attack as one Sequence, Taunt, defender-first as a queue priority, end of turn; Bonechewer Brawler as the Expansion Drop)
Adds course/12-combat: lesson, scenarios, nine test_12 tests in both tracks,
the cumulative reference (Module 11's plus combat) and the drop. The Damage
action carries per-target hits with a priority; react stable-sorts its Queue by
priority before order of play, so the triggers answering the defender's Damage
Event go first. orderAttack/canAttack/endTurn join the harness (orderAttack
because attack(id) already reads Attack). endOfTurn triggers fire, so Drakkari
Enchanter's data is live. Test Bell is scoped to Module 12's cards. Harness
contract, catalog, research notes and earlier lessons' forward pointers follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 13:34:20 +01:00

656 lines
17 KiB
JSON

[
{
"name": "Armorsmith",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 1,
"health": 4,
"text": "Whenever a friendly minion takes damage, gain 1 Armor.",
"source": "https://hearthstone.wiki.gg/wiki/Armorsmith"
},
{
"name": "Acolyte of Pain",
"kind": "card",
"type": "minion",
"cost": 3,
"attack": 1,
"health": 4,
"text": "Whenever this minion takes damage, draw a card.",
"source": "https://hearthstone.wiki.gg/wiki/Acolyte_of_Pain"
},
{
"name": "Frothing Berserker",
"kind": "card",
"type": "minion",
"cost": 3,
"attack": 2,
"health": 4,
"text": "Whenever a minion takes damage, gain +1 Attack.",
"source": "https://hearthstone.wiki.gg/wiki/Frothing_Berserker"
},
{
"name": "Loot Hoarder",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 2,
"health": 1,
"text": "Deathrattle: Draw a card.",
"source": "https://hearthstone.wiki.gg/wiki/Loot_Hoarder"
},
{
"name": "Baron Rivendare",
"kind": "card",
"type": "minion",
"cost": 4,
"attack": 1,
"health": 7,
"text": "Your minions trigger their Deathrattles twice.",
"source": "https://hearthstone.wiki.gg/wiki/Baron_Rivendare"
},
{
"name": "Bolf Ramshield",
"kind": "card",
"type": "minion",
"cost": 6,
"attack": 3,
"health": 9,
"text": "Whenever your hero takes damage, this minion takes it instead.",
"source": "https://hearthstone.wiki.gg/wiki/Bolf_Ramshield"
},
{
"name": "Twisting Nether",
"kind": "card",
"type": "spell",
"cost": 8,
"text": "Destroy all minions and locations.",
"source": "https://hearthstone.wiki.gg/wiki/Twisting_Nether"
},
{
"name": "Whirlwind",
"kind": "card",
"type": "spell",
"cost": 1,
"text": "Deal 1 damage to ALL minions.",
"source": "https://hearthstone.wiki.gg/wiki/Whirlwind"
},
{
"name": "Unstable Ghoul",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 1,
"health": 3,
"text": "Taunt. Deathrattle: Deal 1 damage to all minions.",
"source": "https://hearthstone.wiki.gg/wiki/Unstable_Ghoul"
},
{
"name": "Harvest Golem",
"kind": "card",
"type": "minion",
"cost": 3,
"attack": 2,
"health": 3,
"text": "Deathrattle: Summon a 2/1 Damaged Golem.",
"source": "https://hearthstone.wiki.gg/wiki/Harvest_Golem"
},
{
"name": "Damaged Golem",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 2,
"health": 1,
"text": "",
"source": "https://hearthstone.wiki.gg/wiki/Damaged_Golem",
"uncollectible": true
},
{
"name": "Brann Bronzebeard",
"kind": "card",
"type": "minion",
"cost": 3,
"attack": 2,
"health": 4,
"text": "Your Battlecries trigger twice.",
"source": "https://hearthstone.wiki.gg/wiki/Brann_Bronzebeard"
},
{
"name": "Drakkari Enchanter",
"kind": "card",
"type": "minion",
"cost": 3,
"attack": 1,
"health": 5,
"text": "Your end of turn effects trigger twice.",
"source": "https://hearthstone.wiki.gg/wiki/Drakkari_Enchanter"
},
{
"name": "Test Bell",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 0,
"health": 3,
"text": "At the end of your turn, deal 1 damage to the enemy hero.",
"fictional": true
},
{
"name": "Bonechewer Brawler",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 2,
"health": 3,
"text": "Taunt. Whenever this minion takes damage, gain +2 Attack.",
"source": "https://hearthstone.wiki.gg/wiki/Bonechewer_Brawler"
},
{
"name": "Novice Engineer",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 1,
"health": 1,
"text": "Battlecry: Draw a card.",
"source": "https://hearthstone.wiki.gg/wiki/Novice_Engineer"
},
{
"name": "Dread Infernal",
"kind": "card",
"type": "minion",
"cost": 6,
"attack": 6,
"health": 6,
"text": "Battlecry: Deal 1 damage to ALL other characters.",
"source": "https://hearthstone.wiki.gg/wiki/Dread_Infernal"
},
{
"name": "Fleshshape",
"kind": "card",
"type": "spell",
"cost": 3,
"text": "Assemble a Deathrattle minion. Give all minions in your hand +2/+2.",
"source": "https://hearthstone.wiki.gg/wiki/Fleshshape"
},
{
"name": "Test Echo",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 5,
"text": "Whenever a minion takes damage, deal 1 damage to the enemy hero.",
"fictional": true
},
{
"name": "Test Reactor",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 5,
"text": "Whenever a hero takes damage, gain +1 Attack.",
"fictional": true
},
{
"name": "Test Filler",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 1,
"text": "",
"fictional": true
},
{
"name": "Test Sponge",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 3,
"text": "",
"fictional": true
},
{
"name": "Test Chorus",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 5,
"text": "Your minions trigger their Deathrattles an additional time.",
"fictional": true
},
{
"name": "Test Workshop",
"kind": "card",
"type": "spell",
"cost": 2,
"text": "Assemble a Battlecry minion. Give all minions in your hand +1/+1.",
"fictional": true
},
{
"name": "BABA",
"kind": "word",
"role": "noun",
"text": "the Baba creature",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "ROCK",
"kind": "word",
"role": "noun",
"text": "a pushable boulder",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "WALL",
"kind": "word",
"role": "noun",
"text": "a wall",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "FLAG",
"kind": "word",
"role": "noun",
"text": "a flag",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "LAVA",
"kind": "word",
"role": "noun",
"text": "lava",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "KEY",
"kind": "word",
"role": "noun",
"text": "a key",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "DOOR",
"kind": "word",
"role": "noun",
"text": "a door",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "SKULL",
"kind": "word",
"role": "noun",
"text": "a skull",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "WATER",
"kind": "word",
"role": "noun",
"text": "water",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "IS",
"kind": "word",
"role": "operator",
"text": "links a noun to a property or another noun",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "AND",
"kind": "word",
"role": "operator",
"text": "joins nouns or properties",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "NOT",
"kind": "word",
"role": "operator",
"text": "negates the property or noun after IS",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "ON",
"kind": "word",
"role": "condition",
"text": "the rule applies to an object while it shares its tile with an object of each listed noun",
"source": "https://babaiswiki.fandom.com/wiki/ON"
},
{
"name": "NEAR",
"kind": "word",
"role": "condition",
"text": "the rule applies to an object while an object of each listed noun is on its tile or one of the eight around it",
"source": "https://babaiswiki.fandom.com/wiki/NEAR"
},
{
"name": "YOU",
"kind": "word",
"role": "property",
"text": "player controls these",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "WIN",
"kind": "word",
"role": "property",
"text": "touching a YOU object wins",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "PUSH",
"kind": "word",
"role": "property",
"text": "can be pushed",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "STOP",
"kind": "word",
"role": "property",
"text": "blocks movement",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "OPEN",
"kind": "word",
"role": "property",
"text": "opens SHUT objects on contact",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "SHUT",
"kind": "word",
"role": "property",
"text": "blocks until opened",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "HOT",
"kind": "word",
"role": "property",
"text": "melts MELT objects",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "MELT",
"kind": "word",
"role": "property",
"text": "destroyed by HOT",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "SINK",
"kind": "word",
"role": "property",
"text": "destroys itself and what shares its tile",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "DEFEAT",
"kind": "word",
"role": "property",
"text": "destroys YOU objects on contact",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "FLOAT",
"kind": "word",
"role": "property",
"text": "shares a tile layer with non-floating objects",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "WEAK",
"kind": "word",
"role": "property",
"text": "destroyed on contact",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "PULL",
"kind": "word",
"role": "property",
"text": "pulled by a mover",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "DOUBLE",
"kind": "word",
"role": "property",
"text": "effects apply twice",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "TEXT",
"kind": "word",
"role": "meta",
"text": "every text object (a noun about text itself)",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "ALL",
"kind": "word",
"role": "meta",
"text": "every object",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "EMPTY",
"kind": "word",
"role": "meta",
"text": "empty tiles",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md"
},
{
"name": "DEATHRATTLE",
"kind": "word",
"role": "meta",
"text": "a trigger type, so DEATHRATTLE IS DOUBLE doubles deathrattles",
"source": "https://github.com/utilForever/baba-is-auto/blob/main/Documents/rule-language.md",
"game": "spellgrid",
"note": "Lexicon role: SpellGrid's words.json lists it as a noun, so it can be the subject of a rule. The catalog keeps role meta: it names the engine's own trigger, which the coupling audit must not flag (only role-noun words are audited)."
},
{
"name": "Powder Keg",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 1,
"health": 1,
"text": "Deathrattle: Deal 1 damage to all minions.",
"game": "spellgrid"
},
{
"name": "Bramble Wall",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 0,
"health": 3,
"text": "",
"game": "spellgrid"
},
{
"name": "Thorn Hedge",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 0,
"health": 2,
"text": "",
"game": "spellgrid"
},
{
"name": "Grave Warden",
"kind": "card",
"type": "minion",
"cost": 3,
"attack": 1,
"health": 1,
"text": "Your minions trigger their Deathrattles twice. (SpellGrid original: a Baron-like card with 1 Health.)",
"game": "spellgrid"
},
{
"name": "Ember Moth",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 1,
"text": "Taunt. Deathrattle: Deal 2 damage to the enemy hero.",
"game": "spellgrid"
},
{
"name": "Rune Scribe",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 1,
"health": 1,
"text": "Deathrattle: Write WIN on this minion's tile.",
"game": "spellgrid"
},
{
"name": "Tin Knight",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 1,
"health": 3,
"text": "",
"game": "spellgrid"
},
{
"name": "Spark",
"kind": "card",
"type": "spell",
"cost": 1,
"text": "Deal 1 damage to a minion.",
"game": "spellgrid"
},
{
"name": "Graft",
"kind": "card",
"type": "spell",
"cost": 2,
"text": "Assemble a Deathrattle minion.",
"game": "spellgrid"
},
{
"name": "KEG",
"kind": "word",
"role": "noun",
"text": "Powder Keg's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "BRAMBLE",
"kind": "word",
"role": "noun",
"text": "Bramble Wall's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "HEDGE",
"kind": "word",
"role": "noun",
"text": "Thorn Hedge's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "WARDEN",
"kind": "word",
"role": "noun",
"text": "Grave Warden's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "MOTH",
"kind": "word",
"role": "noun",
"text": "Ember Moth's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "SCRIBE",
"kind": "word",
"role": "noun",
"text": "Rune Scribe's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "KNIGHT",
"kind": "word",
"role": "noun",
"text": "Tin Knight's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "CRIER",
"kind": "word",
"role": "noun",
"text": "Town Crier's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "Town Crier",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 1,
"text": "Battlecry: Deal 1 damage to the enemy hero.",
"game": "spellgrid"
},
{
"name": "Clay Golem",
"kind": "card",
"type": "minion",
"cost": 2,
"attack": 2,
"health": 2,
"text": "Deathrattle: Summon a Clay Shard.",
"game": "spellgrid"
},
{
"name": "Clay Shard",
"kind": "card",
"type": "minion",
"cost": 1,
"attack": 1,
"health": 1,
"text": "",
"game": "spellgrid"
},
{
"name": "GOLEM",
"kind": "word",
"role": "noun",
"text": "Clay Golem's noun (a SpellGrid minion on the grid)",
"game": "spellgrid"
},
{
"name": "SHARD",
"kind": "word",
"role": "noun",
"text": "Clay Shard's noun (a SpellGrid minion on the grid; a Clay Golem's Deathrattle puts one there)",
"game": "spellgrid"
},
{
"name": "BATTLECRY",
"kind": "word",
"role": "meta",
"text": "a trigger type, so BATTLECRY IS DOUBLE doubles battlecries (the Module 10 Expansion Drop)",
"game": "spellgrid",
"note": "Lexicon role: SpellGrid's words.json lists it as a noun, so it can be the subject of a rule. The catalog keeps role meta: it names the engine's own trigger, which the coupling audit must not flag (only role-noun words are audited)."
}
]