Pick your standee: hotseat wizards choose their color while naming

The naming round now shows the six real wizard standees; each player
taps theirs before typing their name, claimed standees gray out, and
the next player defaults to the first free one. The choice travels as
an optional colors array in the engine config, the view exposes each
player's colorIndex, and the board, score sheet, treasure chests, and
wizard art all follow the chosen color instead of seat order —
persisting through hotseat saves. Verified: Alice claimed the yellow
standee and marched onto the board as the yellow wizard with yellow
treasure chests. (Online rooms still assign by seat order; a lobby
color picker can reuse the same config field later.)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Eric WagonerandClaude Fable 5 committed 2026-08-16 01:15:07 -04:00
1 parent 98d7dee5c7
commit 77ae65b263
5 files changed
+75 -17

No files matched your search

+4 -1
View File
@@ -27,6 +27,8 @@ export interface PlayerPublicView {
lostTurns: number;
extraTurns: number;
displayed: CardInstance[];
/** Which of the six physical wizard colors this player plays. */
colorIndex: number;
}
export interface GameView {
@@ -85,8 +87,9 @@ export function viewFor(state: GameState, playerId: PlayerId): GameView {
turn: state.turn,
activePlayerId: state.players[state.turn.activeIndex]!.id,
board,
players: state.players.map((p) => ({
players: state.players.map((p, i) => ({
id: p.id,
colorIndex: state.config.colors?.[i] ?? i,
position: p.position,
home: p.home,
life: p.life,