From c04ed1e0eee02cc5a68a3de48071fe8c2fd0d499 Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Sun, 16 Aug 2026 09:55:04 -0400 Subject: [PATCH] Objects can be set down and picked back up MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The engine always knew how — dropObject and pickUpObject were in the command set from the start — but the table never offered a hand for it. Now selecting a magic stone (or any object card) on your turn shows a "Drop it here" button in the hint bar, and standing on a square with objects lying on it offers a "Pick up " stamp per object, disabled once your actions have ended (picking anything up ends them, per the rulebook). The chronicle narrates both. Co-Authored-By: Claude Fable 5 --- packages/web/src/App.svelte | 16 ++++++++++++++++ packages/web/src/net.svelte.ts | 2 ++ 2 files changed, 18 insertions(+) diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 08ce350..d0b519c 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -457,6 +457,11 @@ view.treasures.some((t) => t.position && t.position.x === me.position.x && t.position.y === me.position.y && !t.carriedBy), ); + const objectsHere = $derived( + view != null && me != null + ? (view.groundObjects[`${me.position.x},${me.position.y}`] ?? []) + : [], + ); const onWarpToken = $derived( view != null && me != null && view.dimWarps.some((w) => @@ -907,6 +912,12 @@ Cast{attachedNumber ? ` with the ${numberTotal}` : ""} {/if} + {#if selectedCard && selectedDef.cardType === "object" && isYourTurn} + + {/if} {#if selectedCard && isNumberCard(selectedCard.cardId)} + {#each objectsHere as obj (obj.instanceId)} + + {/each}