The Ward is played in the moment (rules rev 31)
'When a player picks up one of your treasures, you may play at that time (out of turn) this card on him' — the owner read the card and is right: no arming ahead. When a treasure whose owner holds WARD is grabbed, the grab hangs (new wardPending phase, outranking all other input) and the owner alone answers: spring it (3 damage, card spent) or let them go (card kept, silence). Automatons always spring it on a thief of their gold. The arming mechanic is refused at rev 31 and its button hidden; rev 3-30 games keep their armed wards and rev 1-2 keep the automatic spring, replaying unchanged. The window does reveal that the owner holds SOMETHING - as it would at any real table when the room turns to look at them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0138A8CjeQRpvzKxuMfz1Bqc
This commit is contained in:
co-authored by
Claude Fable 5
parent
b7f93fe454
commit
75d3d44c6c
@@ -956,8 +956,9 @@ function selfCare(view: GameView, style: AutomatonStyle, tier: TierTraits): Comm
|
||||
// Three or more wizards: LIFESAVER takes elimination off the table.
|
||||
const lifesaver = inHand(view, "lifesaver");
|
||||
if (lifesaver && view.players.length > 2) return { type: "cast", instanceId: lifesaver.instanceId };
|
||||
// The ward guards the gold while its owner is away robbing yours.
|
||||
if (inHand(view, "ward") && !view.yourWardArmed) {
|
||||
// The ward guards the gold while its owner is away robbing yours
|
||||
// (arming retired at rev 31: the window asks in the moment instead).
|
||||
if (view.deckRev < 31 && inHand(view, "ward") && !view.yourWardArmed) {
|
||||
return { type: "armWard", armed: true };
|
||||
}
|
||||
const enemyNear = livingEnemies(view).some(
|
||||
@@ -1086,6 +1087,10 @@ export function automatonCommand(
|
||||
const tier = TIERS[tierName] ?? TIERS.archmage;
|
||||
if (view.phase !== "playing") return null;
|
||||
|
||||
if (view.wardPending) {
|
||||
// A Ward is free damage on a thief of OUR gold: always spring it.
|
||||
return view.wardPending.ownerId === you ? { type: "wardChoice", play: true } : null;
|
||||
}
|
||||
if (view.pendingDiscard === you) {
|
||||
return { type: "discard", instanceIds: worstCards(view, Math.max(1, overLimit(view)), style) };
|
||||
}
|
||||
@@ -1460,6 +1465,7 @@ export function automatonCommand(
|
||||
/** The safe fallback when the automaton's choice was refused. */
|
||||
export function automatonFallback(view: GameView, tierName: AutomatonTier = "archmage"): Command {
|
||||
const you = view.you;
|
||||
if (view.wardPending?.ownerId === you) return { type: "wardChoice", play: false };
|
||||
if (view.pendingDiscard === you) {
|
||||
return { type: "discard", instanceIds: worstCards(view, Math.max(1, overLimit(view))) };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user