Connect Guild Nexus Betrayal receipt to Bureaucrat per ruling

This commit is contained in:
Quintine committed 2026-10-13 17:47:00 +11:00
1 parent 9b83b61669
commit df9bbc5e04
11 files changed
+534 -16

No files matched your search

+11 -1
View File
@@ -85,6 +85,8 @@ function enterGuildFixtureMovement(state: Game, minimumTurn = 1): Game {
throw new Error('Genuine Guild fixture did not reach Shipment and Movement.');
}
function holdGuildFixtureFace(game: Game, holder: string, face: 'guild' | 'choam'): void {
const extraFaces: FactionId[] = ['fremen', 'harkonnen', 'ixians', 'choam', 'ecaz', 'moritani', 'beneGesserit', 'atreides'];
let extraIndex = 0;
// Arrange only the conserved physical Nexus inventory, before any invoice.
// Public held-card presence is identical across hidden-face fixture variants.
let cards = game.nexusCards!.cards!;
@@ -93,7 +95,15 @@ function holdGuildFixtureFace(game: Game, holder: string, face: 'guild' | 'choam
if (held !== null) {cards.deck.push(held); cards.hands[p.id] = null;}
}
for (const p of game.players.filter(seat => !seat.ally)) {
const desired = p.id === holder ? face : p.faction === 'guild' ? 'atreides' : 'fremen';
let desired: FactionId;
if (p.id === holder) desired = face;
else if (p.faction === 'guild') desired = 'atreides';
else {
// Distinct conserved faces for every additional unallied seat; the first
// extra keeps the established 'fremen' assignment.
desired = extraFaces[extraIndex % extraFaces.length];
extraIndex++;
}
let index = cards.deck.indexOf(desired);
if (index < 0) {
index = cards.discard.indexOf(desired);