Disease makes its caster the carrier (rules rev 7)

The card says it plainly — "You're the carrier! Disease caused by
spell does not affect you, only others" — but the engine cast it AT an
adjacent victim, making them the plague rat. At rev 7 it is a
self-cast on fear's pattern: no target, no counteraction window
("REFLECTIONs have no effect against this"), duration equals the
number, and sharing a square bites in both directions — the carrier
walking in, or anyone walking onto the carrier. Older ledgers hold
targeted disease casts with full stack exchanges, so the legacy attack
path survives for rev ≤6 games and all 33 ledgers replay clean. The
client offers the plain Cast button for it in rev-7 games.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
This commit is contained in:
Eric Wagoner
2026-08-28 12:35:35 -04:00
co-authored by Claude Fable 5
parent db3b14fd51
commit b99c22f14a
3 changed files with 97 additions and 3 deletions
+7 -1
View File
@@ -552,6 +552,12 @@
"shieldstone", "soulstone", "speedstone", "visionstone",
"invisible", "shrink", "mist-body", "strength", "empathy", "big-man", "fear", "adrenaline",
]);
/** Cards cast on yourself via the Cast button. DISEASE joined at rev 7
* ("You're the carrier!"); older games still aim it at a victim. */
function confirmCastable(cardId: string): boolean {
return CONFIRM_CAST.has(cardId) ||
(cardId === "disease" && (view?.deckRev ?? 1) >= 7);
}
function playNumberForMovement() {
if (!selectedCard || !view) return;
@@ -2323,7 +2329,7 @@
<label class="inline">life to trade <input class="num-input" type="number" min="1" max="10" bind:value={runPoints} /></label>
<button class="stamp tiny" onclick={castPowerRun}>Run!</button>
{/if}
{#if selectedCard && CONFIRM_CAST.has(selectedCard.cardId)}
{#if selectedCard && confirmCastable(selectedCard.cardId)}
<button class="stamp tiny" onclick={castSelfWithNumber}>
Cast{attachedNumber ? ` with the ${numberTotal}` : ""}
</button>