A creature's blow is named on the stack: the counter is played against the fire imp's scorch, not a punch (SC59)

The caster whose creature is countered now sees "your attack, answered"
and the name of their own blow, instead of an incoming punch with the
opponent's counter card standing in the attack slot.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
Eric Wagoner
2026-09-24 21:32:34 -04:00
co-authored by Claude Fable 5.1
parent c3f63d4eb7
commit 7a0a972452
4 changed files with 58 additions and 10 deletions
+5 -1
View File
@@ -52,7 +52,11 @@ export function humanize(e: GameEvent): string | null {
const at = e.target ? ` at ${e.target}` : "";
return `${e.caster} casts ${cardDef(e.cardId).name}${num}${amp}${at}.`;
}
case "counteractionPlayed": return `${e.player} counters with ${cardDef(e.cardId).name}!`;
case "counteractionPlayed": {
// A card's id has no spaces; a creature's blow or the ward's bite is named in words.
const what = e.against === "punch" ? "the punch" : /[ ']/.test(e.against) ? `the ${e.against}` : spellName(e.against);
return `${e.player} counters ${what} with ${cardDef(e.cardId).name}!`;
}
case "counterNullified": return `${cardDef(e.card.cardId).name} is nullified by Anti-Anti!`;
case "attackAbsorbedIntoHand": return `${e.player} absorbs ${cardDef(e.attackCard.cardId).name} into their hand — the card is theirs now!`;
case "attackResolved":