From c09bcc481d4d867f15d317e0cef555d134090632 Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Mon, 7 Sep 2026 15:51:07 -0500 Subject: [PATCH] An attack tapped onto a slime is cast into it The engine has trapped spells in slime since the card arrived; the board never offered the tap. LIGHTNING BLAST on a slime square now lodges there for the next wizard in, as the card says. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG --- packages/web/src/App.svelte | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 2aba538..da90097 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -912,10 +912,18 @@ return; } const me = view.players.find((p) => p.id === view.you)!; + // "Spells cast at the slime get stuck there": an attack tapped onto a + // slime waits in the gel for whoever enters. + if (selectedCard && view.squareContents[cellKey(cell)]?.kind === "slime" && + cardDef(selectedCard.cardId).cardType === "attack") { + dispatch(withMods({ type: "cast", instanceId: selectedCard.instanceId, target: { kind: "cell", cell } })); + clearSelection(); + return; + } // A card in hand is aimed, not walked with: a tap on a bare square // while holding one is a miss, never a stride into whatever is there. if (selectedCard) { - net.error = `${cardDef(selectedCard.cardId).name} is aimed by tapping a wizard or creature — put the card down to walk`; + net.error = `${cardDef(selectedCard.cardId).name} is aimed by tapping a wizard, a creature, or a slime — put the card down to walk`; setTimeout(() => { if (net.error?.startsWith(cardDef(selectedCard!.cardId).name)) net.error = null; }, 5000); return; }