diff --git a/README.md b/README.md index 2986a9b8..06792e07 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,13 @@ npm run dev -- --host 0.0.0.0 Open `http://localhost:3000`. Create a room, share its eight-character invitation, and add human or AI seats. The host can configure Easy, Medium, Hard and Brutal AI opponents. Current calibration demonstrates a substantially weaker Easy policy; it does not yet demonstrate a consistent ordering among the upper three levels. +In the lobby, the host may deal random factions or start a prediction-card +faction draft. Draft picks proceed from the highest drawn number, and the new +factions are assigned together after every seat chooses. AI seats choose +automatically. Both methods clear human readiness; direct selection remains +available. Consensual faction swaps are not yet implemented. See +[faction allocation](docs/FACTION_ALLOCATION.md). + For the provisional two-person setup, the host enables **Two players, two factions each** in the lobby. Each person joins with one faction, then adds a second and uses **Active faction** to switch seats. Ready each faction before diff --git a/app/page.tsx b/app/page.tsx index 44d20352..fb9d3fb7 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -7,6 +7,7 @@ import { SeatConfirmation, type SeatConfirmationKind } from '@/components/seat-c import { RoomEntryConfirmation } from '@/components/room-entry-confirmation'; import { RulesetControls } from '@/components/ruleset-controls'; import { TwoPlayerControls } from '@/components/two-player-controls'; +import { FactionAllocation } from '@/components/faction-allocation'; import { randomId } from '@/lib/random-id'; import { SeatHandoverSetup, @@ -855,6 +856,7 @@ export default function Home() { {!roomUnavailable &&
Players can choose their own factions. The host can also randomly deal factions or start a prediction-card draft.
+ {isHost && <> +Random dealing changes the current choices immediately. Draft choices replace the current factions only after everyone has picked. Either option clears human readiness.
+ {game.players.length < 2 &&At least two faction seats are needed to allocate factions.
} +Highest prediction card chooses first. Existing factions remain in place until every seat has picked; other lobby changes wait for the draft to finish.
+Choose one of the remaining factions. Each faction can be chosen only once.
+Waiting for {seatName(next.player)} to choose a faction{game.players.find((player) => player.id === next.player)?.bot ? '; the AI will choose automatically' : ''}.
} + {isHost && } +