The full telepath audit: every private glimpse held up, every silence voiced

A sweep of all 142 engine events against the client found three more
telepath-class drops and eight silent chronicle gaps. THOUGHT STEAL's
plunder and a kill's hand-spoils now get the reveal modal (generalized
from the mind-read one — title, note, the cards fanned out); your own
end-of-turn draw names its cards in the log. The mute events speak:
dispels, walls of fire rising/burning/guttering, filled squares,
crashing waterwalls, clattering thrown objects, and REUSE SPELL's
retrieval. Also verified clean: every param-taking card has collection
UI, and every cell/edge-targeting card is aimable on the board.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Eric Wagoner
2026-08-23 11:53:17 -04:00
co-authored by Claude Fable 5
parent 6165d43639
commit 813f92d419
2 changed files with 44 additions and 12 deletions
+11
View File
@@ -88,6 +88,17 @@ export function humanize(e: GameEvent): string | null {
: `${e.player} wasn't holding that card — the erasure fizzles.`;
case "cardsStolen": return `${e.to} steals ${e.count} card(s) from ${e.from}'s thoughts!`;
case "handRevealed": return `${e.to} reads ${e.player}'s mind — their hand is revealed.`;
case "cardsDrawnPrivate": return e.cards.length > 0
? `You draw ${e.cards.map((c) => cardDef(c.cardId).name).join(", ")}.`
: null;
case "creationDispelled": return `The ${e.what.replace(/-/g, " ")} unravels — dispelled!`;
case "firewallCreated": return `A wall of fire roars up (${e.turns} turn${e.turns === 1 ? "" : "s"})!`;
case "firewallExpired": return `The wall of fire gutters out.`;
case "firewallBurned": return `${e.player} steps through the flames!`;
case "squareFilled": return `The square fills with ${e.kind === "stone" ? "solid stone" : e.kind === "slime" ? "green slime" : e.kind.replace(/-/g, " ")}!`;
case "waterwallCrashes": return `A wall of water crashes down!`;
case "objectThrown": return `The ${cardDef(e.cardId).name.toLowerCase()} clatters to the floor.`;
case "spellReused": return `${e.player}'s ${cardDef(e.card.cardId).name} leaps back to their hand!`;
case "doorUnlocked": return `${e.player} unlocks a door.`;
case "doorHeld": return `${e.player} holds the door open.`;
case "doorReleased": return `The held door swings shut.`;