Rev 23: POWER DRAIN drains the number played; the troll punches walls; the first-person stack fits
POWER DRAIN's gain is the number played, BLUNTed or ABSORBed or not (FAQ: the counter blunts the damage done, not the drain), and a wall drained for its points gives them up too. Older games gave only what the opponent lost and nothing from a wall, and replay so. "This rock-hard beast can punch a player (or a wall, etc.)": a commanded troll now punches a wall line beside it for a D4, once a turn — a new command, so no old game changes. Under the first-person pane the board strip could run into the dock on a short or tall window; the pane now takes no more height than the row can spare and the strip shrinks beneath it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
803c51415e
commit
80dd7a7865
@@ -603,8 +603,12 @@
|
||||
const attackVsWall = $derived(
|
||||
selectedCard != null && cardDef(selectedCard.cardId).cardType === "attack" && !EDGE_CARDS.has(selectedCard.cardId),
|
||||
);
|
||||
const trollInHand = $derived(
|
||||
selectedCreature != null && selectedCard == null &&
|
||||
view?.creatures.some((c) => c.id === selectedCreature && c.kind === "troll" && c.controllerId === view!.you) === true,
|
||||
);
|
||||
const edgeSelectMode = $derived(
|
||||
(selectedCard != null && EDGE_CARDS.has(selectedCard.cardId)) || attackVsWall || punchWallMode,
|
||||
(selectedCard != null && EDGE_CARDS.has(selectedCard.cardId)) || attackVsWall || punchWallMode || trollInHand,
|
||||
);
|
||||
const cellSelectMode = $derived(
|
||||
(selectedCard != null && CELL_CARDS.has(selectedCard.cardId)) || pendingCellFor !== null,
|
||||
@@ -1182,6 +1186,11 @@
|
||||
punchWallMode = false;
|
||||
return;
|
||||
}
|
||||
// A commanded troll punches the wall line beside it.
|
||||
if (selectedCreature && !selectedCard) {
|
||||
dispatch({ type: "creatureAttackWall", creatureId: selectedCreature, cell, side });
|
||||
return;
|
||||
}
|
||||
if (!selectedCard || !edgeSelectMode) return;
|
||||
// The attached number rides along for every edge cast: wand charges,
|
||||
// wall-of-fire durations, wall attacks alike.
|
||||
@@ -2712,7 +2721,7 @@
|
||||
<span>Your <strong>double</strong> stands ready — select a card and it casts from the double's square, by the double's sight.</span>
|
||||
{:else}
|
||||
<span>Commanding <strong>{cardDef(sc.kind).name}</strong> — {creatureStats(sc)}.
|
||||
Tap a square beside it to march, a target in its square to attack.</span>
|
||||
Tap a square beside it to march, a target in its square to attack{sc.kind === "troll" ? ", or a wall line beside it to punch" : ""}.</span>
|
||||
{/if}
|
||||
{#if dmWarnCell}
|
||||
<span class="hint-alert">⚠ it will claw YOU the moment it enters your square — tap again if you mean it</span>
|
||||
@@ -4233,7 +4242,14 @@
|
||||
.table-stack { flex: 1 1 0; min-height: 0; }
|
||||
.board-frame { flex: 1 1 0; min-height: 0; display: flex; flex-direction: column; }
|
||||
.board-viewport { height: auto; flex: 1 1 0; min-height: 0; }
|
||||
.fpv-primary .board-viewport { flex: 0 0 30dvh; }
|
||||
/* Under the first-person pane the board is a strip that may shrink
|
||||
further, never overflowing into the dock beneath. */
|
||||
.fpv-primary .board-viewport { flex: 0 1 30dvh; min-height: 5rem; }
|
||||
.fpv-primary .board-frame { min-height: 0; }
|
||||
/* The pane keeps its aspect but never more height than the row can
|
||||
spare above the board strip and the dock. */
|
||||
.fpv-primary :global(.live-fp) { flex: 0 1 auto; min-height: 0; }
|
||||
.fpv-primary :global(.fpv-canvas) { width: auto; max-width: 100%; max-height: calc(100dvh - 34.5rem); margin: 0 auto; }
|
||||
.game:not(.hand-left) .table-edge { margin-top: 0.5rem; }
|
||||
.game.hand-left {
|
||||
grid-template-columns: minmax(17.4rem, 24rem) minmax(340px, 1fr) minmax(250px, 330px);
|
||||
|
||||
Reference in New Issue
Block a user