The tear waits for counteractions (rules rev 6)
STRENGTH's card says the grab "would be an attack," but the engine resolved it instantly while punches opened counteraction windows — the defender never got their say. At rev 6 the tear rides the stack like any physical attack: the clutch roll waits out the counters, and only an unstopped grab still in arm's reach of a still-laden defender gets its wrestle. A TELEPORT escape now genuinely saves the chest (FULL SHIELD does not — the card stops spell attacks only, and the grab is physical). The automatons counter tears at their carried gold by not being there when the hand closes. Narrowing, so rev-gated: games pinned at rev 5 keep their instant tears and replay unchanged — all 29 ledgers verify. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
This commit is contained in:
co-authored by
Claude Fable 5
parent
cbd4d80dea
commit
e388691858
@@ -775,6 +775,16 @@ function respond(view: GameView, style: AutomatonStyle, tier: TierTraits): Comma
|
||||
const atk = attackId ? ATTACKS[attackId] : null;
|
||||
const affliction = attackId ? AFFLICTIONS[attackId] != null : false;
|
||||
|
||||
// A tear at the treasure in my arms outranks its zero damage: the stake
|
||||
// is the chest, not the bruise. The grab is PHYSICAL — shields part
|
||||
// around it; the only real answer is to not be there when it closes.
|
||||
if (stack.tearTreasure && me(view).carriedTreasureId != null) {
|
||||
const tp = find("teleport");
|
||||
const out = tp ? escapeCell(view, me(view).position) : null;
|
||||
if (tp && out) return { type: "counteract", instanceId: tp.instanceId, params: { cell: out } };
|
||||
return { type: "pass" };
|
||||
}
|
||||
|
||||
if (attackId && UTILITY_ATTACKS.has(attackId)) {
|
||||
const stopper = find("full-shield") ?? find("force-field");
|
||||
const stakes =
|
||||
|
||||
Reference in New Issue
Block a user