- SpellGrid cards move to course/10-spellgrid/cards; start-module and verify-references stage course/cards plus module-local cards up to the module, so M5-M9 workspaces get exactly the pre-M10 card set. - cast() rejects a chosen-target spell without a target (checkCast/checkPlay); new test_10_targeted_spell_needs_target. - Rust CLI pre-validates instead of swapping the global panic hook. - Catalog: CRIER noun; DEATHRATTLE/BATTLECRY note on lexicon vs catalog role. - Lesson: design note on mid-movement reparse. Co-Authored-By: Claude Opus 5.5 <[email protected]>
578 lines
15 KiB
JSON
578 lines
15 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": "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": "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": "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": "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)."
|
|
}
|
|
]
|