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:
co-authored by
Claude Fable 5.1
parent
c3f63d4eb7
commit
7a0a972452
@@ -931,15 +931,37 @@ describe("the imp's fire is a spell (rev 8)", () => {
|
||||
if (!r.ok) throw new Error(r.error);
|
||||
state = r.state;
|
||||
if (!state.stack) state = must(state, "imp-owner", { type: "endTurn", draw: 0 });
|
||||
// The scorch rides the stack now: a counteraction window, spell-kind.
|
||||
// The scorch rides the stack now: a counteraction window, spell-kind,
|
||||
// named for the imp so the counter is played against the scorch, never a punch.
|
||||
expect(state.stack?.creatureId).toBeTruthy();
|
||||
expect(state.stack?.kind).toBe("spell");
|
||||
expect(state.stack?.sourceName).toBe("fire imp's scorch");
|
||||
giveCard(state, "mark", "full-shield", "FS", 0);
|
||||
state = must(state, "mark", { type: "counteract", instanceId: "full-shield#FS" });
|
||||
state = drain(state);
|
||||
const countered = applyCommand(state, "mark", { type: "counteract", instanceId: "full-shield#FS" });
|
||||
if (!countered.ok) throw new Error(countered.error);
|
||||
expect(countered.events).toContainEqual(expect.objectContaining({ type: "counteractionPlayed", against: "fire imp's scorch" }));
|
||||
state = drain(countered.state);
|
||||
expect(state.players.find((p) => p.id === "mark")!.life).toBe(15);
|
||||
});
|
||||
|
||||
it("an uncountered scorch is dealt in the imp's name", () => {
|
||||
let state = impRig();
|
||||
const owner = state.players.find((p) => p.id === "imp-owner")!;
|
||||
const mark = state.players.find((p) => p.id === "mark")!;
|
||||
mark.position = { ...owner.position };
|
||||
const impCard = giveCard(state, "imp-owner", "fire-imp", "FI", 0);
|
||||
const spot = emptyNeighborCell(state, owner.position);
|
||||
let r = applyCommand(state, "imp-owner", {
|
||||
type: "cast", instanceId: impCard.instanceId, target: { kind: "cell", cell: spot.cell },
|
||||
});
|
||||
if (!r.ok) throw new Error(r.error);
|
||||
state = r.state;
|
||||
if (!state.stack) state = must(state, "imp-owner", { type: "endTurn", draw: 0 });
|
||||
const done = applyCommand(state, "mark", { type: "pass" });
|
||||
if (!done.ok) throw new Error(done.error);
|
||||
expect(done.events).toContainEqual(expect.objectContaining({ type: "damaged", player: "mark", amount: 2, source: "fire imp's scorch" }));
|
||||
});
|
||||
|
||||
it("soulstone's floor holds from below: a bearer at 2 takes nothing from the flame", () => {
|
||||
let state = impRig();
|
||||
const owner = state.players.find((p) => p.id === "imp-owner")!;
|
||||
|
||||
Reference in New Issue
Block a user