diff --git a/packages/web/src/App.svelte b/packages/web/src/App.svelte
index 7465edf..ebc9a04 100644
--- a/packages/web/src/App.svelte
+++ b/packages/web/src/App.svelte
@@ -541,6 +541,15 @@
return sighted;
});
+ /** Creatures awaiting your orders this turn (yours + any democratic monster). */
+ const idleCreatures = $derived(
+ view != null && isYourTurn
+ ? view.creatures.filter((c) =>
+ (c.controllerId === view!.you || c.kind === "democratic-monster") &&
+ (c.movementUsed < c.movesPerTurn || (!c.attackUsed && !c.justCreated)))
+ : [],
+ );
+
const objectsHere = $derived(
view != null && me != null
? (view.groundObjects[`${me.position.x},${me.position.y}`] ?? [])
@@ -913,6 +922,15 @@
{view.activePlayerId} is taking their turn…
{/if}
+ {#each idleCreatures as c (c.id)}
+ {@const moves = c.movesPerTurn - c.movementUsed}
+
+ 🜲 {c.controllerId === view.you ? "Your" : "The"} {cardDef(c.kind).name} awaits orders —
+ {#if moves > 0}{moves} move{moves === 1 ? "" : "s"}{/if}{#if moves > 0 && !c.attackUsed && !c.justCreated} · {/if}{#if !c.attackUsed && !c.justCreated}attack ready{/if}.
+ Tap its token to command it.
+
+ {/each}
+
{#if view.yourAmbushes.length > 0}
{#each view.yourAmbushes as a (a.id)}
@@ -1520,6 +1538,7 @@
gap: 0.5rem;
height: 1.55rem;
}
+ .slip.creature-note { background: #e7edda; border-color: #7d8a5a; }
.score-row.active .score-name { font-weight: 700; }
.table-cards {
display: flex;