A slime shows how many spells wait in it, and a peek names them

Every cast into the gel was seen at the table, so the count is public:
a badge on the slime, and the peek lists each spell with its caster.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
Eric Wagoner
2026-09-07 16:00:32 -05:00
co-authored by Claude Fable 5.1
parent 16fac5e6ca
commit 44c7ff8379
3 changed files with 30 additions and 3 deletions
+5
View File
@@ -60,6 +60,8 @@ export interface GameView {
/** Duration spells in play (public knowledge). */
sustained: SustainedEffect[];
squareContents: Record<string, SquareContent>;
/** Spells lodged in slime, oldest first (public: each cast was seen). */
slimeTraps: Record<string, { cardId: string; casterId: PlayerId }[]>;
/** Cells whose contents are glued down (public: the cast was seen). */
gluedCells: Record<string, true>;
/** Safes standing open (their combination entered this turn). */
@@ -156,6 +158,9 @@ export function viewFor(state: GameState, playerId: PlayerId): GameView {
pendingDiscard: state.pendingDiscard,
sustained: state.sustained.map((s) => ({ ...s })),
squareContents: { ...state.squareContents },
slimeTraps: Object.fromEntries(
Object.entries(state.slimeTraps).map(([k, traps]) => [k, traps.map((t) => ({ cardId: t.card.cardId, casterId: t.casterId }))]),
),
gluedCells: { ...state.gluedCells },
openSafes: [...state.openSafes],
groundObjects: Object.fromEntries(