Edge cards light their targets; own casts never wrench the neck

Raising an edge-target card now makes every wall and door face
breathe faint gold in the pane — the cockpit's answer to the board's
edge handles — with hover still brightening the chosen face. And the
director's own-magic aim gains a quarter-turn cap: a deed you aimed
behind you via the keymap stays behind you, while deeds done TO you
may still spin the world.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015RCWSTnb1KYTPyL4GmhGnF
This commit is contained in:
Eric Wagoner
2026-08-27 16:08:51 -04:00
co-authored by Claude Fable 5
parent a4a871592b
commit e2dfbd14e3
3 changed files with 29 additions and 8 deletions
+10
View File
@@ -24,6 +24,7 @@
rubble = [],
ontarget,
litCells = null,
edgeSelect = false,
}: {
view: GameView;
povId: string;
@@ -45,6 +46,9 @@
/** Squares a selected cell-target card may aim at: the pane dims the
* ineligible ground exactly as the board dims its squares. */
litCells?: Set<string> | null;
/** An edge-target card is raised: every wall and door face glows
* faintly, the pane's answer to the board's edge handles. */
edgeSelect?: boolean;
} = $props();
const FOV = Math.PI / 2.9;
@@ -386,6 +390,12 @@
ctx.fillStyle = `rgba(120,70,220,${haze})`;
ctx.fillRect(col, top, 1, wallH);
}
if (edgeSelect && !hit.frame && (hit.kind === "wall" || hit.kind === "door") && hit.edge) {
// The raised edge-card's invitation: faces breathe gold.
const offer = 0.10 + 0.05 * Math.sin(time / 420 + hit.worldU * 3);
ctx.fillStyle = `rgba(201,167,42,${Math.max(0, offer)})`;
ctx.fillRect(col, top, 1, wallH);
}
}
// Sprites, far to near, sliced against the depth buffer.