Support 2-6 players: the L, the cross, and the 3x2 from the rulebook

Three player counts join the square and the column: 3 players get the
stair/L with the AUTO WARP joining the two openings that face the
concave notch (convex openings pair geometrically — flagged as
interpretation of the diagram's letters); 5 players get the plus/cross
with tip-to-tip wraps and aisle-warp corners; 6 players get the 3x2
rectangle with straight-across wraps. All six verified layouts are
drawn on, so no count repeats a sector. Rooms accept up to six seats;
the lobby copy follows. 122 tests passing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Eric Wagoner
2026-08-16 00:08:15 -04:00
co-authored by Claude Fable 5
parent 8d10dfee67
commit 85b40be113
4 changed files with 98 additions and 7 deletions
+2 -2
View File
@@ -103,7 +103,7 @@ export function joinRoom(
return { error: "that wizard name is taken in this room" };
}
if (room.state) return { error: "game already started" };
if (room.players.length >= 4) return { error: "room is full" };
if (room.players.length >= 6) return { error: "room is full" };
const fresh = randomBytes(16).toString("hex");
room.players.push(playerId);
room.tokens.set(playerId, hashToken(fresh));
@@ -113,7 +113,7 @@ export function joinRoom(
function startInMemory(room: Room, expansion: boolean): { events: GameEvent[] } | { error: string } {
const n = room.players.length;
if (n !== 2 && n !== 4) return { error: "supported player counts: 2 or 4" };
if (n < 2 || n > 6) return { error: "supported player counts: 2 to 6" };
const { state, events } = createGame({
playerIds: room.players,
seed: room.seed,