diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte index e0cf7db..e48cb5b 100644 --- a/packages/web/src/App.svelte +++ b/packages/web/src/App.svelte @@ -420,6 +420,17 @@ view !== null && view.phase === "playing" && view.activePlayerId === view.you && !view.stack, ); const youMustRespond = $derived(view?.stack != null && view.stack.waitingOn === view.you); + /** Another wizard's turn, seen from a phone: the rail that says so sits + * below the fold, and a board moving on its own with no word reads as a + * game running without you. Names the wizard, and whether you're next. */ + const theirTurnCaption = $derived.by(() => { + if (wideScreen || !view || !view.you || net.spectating || local.active || openingRolls) return null; + if (view.phase !== "playing" || view.activePlayerId === view.you) return null; + const alive = view.players.filter((p) => p.alive || p.id === view!.activePlayerId); + const at = alive.findIndex((p) => p.id === view!.activePlayerId); + const next = alive.length ? alive[(at + 1) % alive.length]!.id : null; + return `${view.activePlayerId}'s turn${next === view.you ? " — yours is next" : ""}.`; + }); /** An interruption window (INTERRUPT / OPPORTUNITY FIRE) is your moment: * casting and targeting open up as if the turn were yours. */ const yourMoment = $derived( @@ -3179,6 +3190,11 @@ This is you. Tap a lit square beside your wizard to walk. + {:else if theirTurnCaption} +