From fcd93ca252d42efc80f63a0416afa82830e40994 Mon Sep 17 00:00:00 2001 From: Quintine <15965533+Quintine@users.noreply.github.com> Date: Tue, 27 Oct 2026 23:29:04 +1100 Subject: [PATCH] Support agreed extended turns in Basic and Advanced --- components/game-table.tsx | 2 +- components/victory-progress.tsx | 2 +- docs/ADVANCED_PREVIEW.md | 30 ++- docs/CURRENT_STATUS.md | 15 +- docs/IMPLEMENTATION_STATUS.md | 11 + docs/RULE_DECISIONS.md | 47 ++-- game/admin-seat-ai-shape.ts | 6 +- game/engine.ts | 32 ++- game/reference.ts | 4 +- game/victory-calendar.ts | 35 +++ game/victory-continuation.ts | 12 +- game/victory-quote.ts | 12 +- tests/admin-seat-ai-extended-turn.test.ts | 48 ++++ ...vanced-victory-stronghold-tiebreak.test.ts | 29 ++- tests/victory-calendar.test.ts | 38 ++++ tests/victory-continuation-runtime.test.ts | 15 +- tests/victory-continuation.test.ts | 22 +- tests/victory-extended-turn-runtime.test.ts | 212 ++++++++++++++++++ 18 files changed, 506 insertions(+), 66 deletions(-) create mode 100644 game/victory-calendar.ts create mode 100644 tests/admin-seat-ai-extended-turn.test.ts create mode 100644 tests/victory-calendar.test.ts create mode 100644 tests/victory-extended-turn-runtime.test.ts diff --git a/components/game-table.tsx b/components/game-table.tsx index a7aff641..d7f57627 100644 --- a/components/game-table.tsx +++ b/components/game-table.tsx @@ -1149,7 +1149,7 @@ export function GameTable({ automaticSequence: automaticEvents.reduce((last, entry) => Math.max(last, entry.seq), -1), }} /> - {g.status === 'lobby' ? 'Gathering players' : `Turn ${g.turn} / 10`} + {g.status === 'lobby' ? 'Gathering players' : `Turn ${g.turn} / ${g.victoryFinalTurn}`} Git revision: {buildRevisionLabel} diff --git a/components/victory-progress.tsx b/components/victory-progress.tsx index 356daf96..5bb1421c 100644 --- a/components/victory-progress.tsx +++ b/components/victory-progress.tsx @@ -148,7 +148,7 @@ export function VictoryProgress({ {fremen && (

Fremen final-turn victory

-

At the end of turn ten, if nobody has a stronghold victory, these conditions let Fremen and its ally win before Guild. A Bene Gesserit prediction cannot replace this special victory.

+

At the end of the final turn, if nobody has a stronghold victory, these conditions let Fremen and its ally win before Guild. A Bene Gesserit prediction cannot replace this special victory. An agreed extra turn provisionally moves this check to the new final turn.