From f9eff3341bbad34d75a26e863898178003014bfe Mon Sep 17 00:00:00 2001 From: Eric Wagoner Date: Sun, 16 Aug 2026 10:21:27 -0400 Subject: [PATCH] Dimensional warps get the edge-warp treatment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Placing the two tokens worked, but using them asked too much: the only affordance was a "Step through the warp" button in the actions row, easy to miss and far from the board. Now standing on a warp token pulses its twin with the same green dashed ring the lettered edge openings use, and clicking the twin steps you through — one gesture, learned once, working for both kinds of warp. The button stays for those who found it. Co-Authored-By: Claude Fable 5 --- packages/web/src/App.svelte | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index 03f12be..ddd82ea 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -313,6 +313,19 @@ clearSelection(); return; } + const meNow = view.players.find((p) => p.id === view.you); + if (!selectedCard && meNow) { + const pos = meNow.position; + const pair = view.dimWarps.find((w) => + (w.a.x === pos.x && w.a.y === pos.y) || (w.b.x === pos.x && w.b.y === pos.y)); + if (pair) { + const dest = pair.a.x === pos.x && pair.a.y === pos.y ? pair.b : pair.a; + if (dest.x === cell.x && dest.y === cell.y) { + dispatch({ type: "warpStep" }); + return; + } + } + } if (selectedCreature) { const creature = view.creatures.find((c) => c.id === selectedCreature); if (creature) {