Compose standalone E3 Nexus without Leader Skills

This commit is contained in:
Quintine committed 2026-10-07 10:18:19 +11:00
1 parent ec3d26f663
commit 185f3b37be
18 files changed
+1675 -38

No files matched your search

+8 -3
View File
@@ -1,6 +1,6 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { applyAction, createGame, initializeDiscoveryGameForAudit, joinGame, newPlayer, viewGame } from '../game/engine';
import { applyAction, createGame, initializeDiscoveryGameForAudit, joinGame, newPlayer } from '../game/engine';
import { createTechTokens } from '../game/tech-tokens';
import { nativeTypedClearBoard, nativeTypedPhase, nativeTypedPlace, nativeTypedPlayer, nativeTypedReload, nativeTypedStep } from './fixture-discovery-native-typed';
import { putDiscovery } from './fixture-discovery';
@@ -14,6 +14,13 @@ void test('native Moritani assassination retains the actual revealed Discovery b
game.discoveryEnabled = true; game.techTokens = createTechTokens();
game = initializeDiscoveryGameForAudit(game);
for (let n = 0; game.status === 'setup' && n < 100; n++) game = nativeTypedStep(game);
// Keep the conserved token supply available: the first real Spice Blow
// draws ordinary land, rather than randomly placing this later fixture token.
for (const position of [0, 1]) {
const index = game.spiceDeck.findIndex((card, i) => i >= position && 'territory' in card && !card.discovery);
assert.ok(index >= position);
game.spiceDeck.splice(position, 0, game.spiceDeck.splice(index, 1)[0]);
}
game = nativeTypedPhase(game, 5);
nativeTypedClearBoard(game);
// Conserved original supply token and reserve positions; inspect/reveal,
@@ -40,7 +47,6 @@ void test('native Moritani assassination retains the actual revealed Discovery b
const next = nextSkillsTechBattleStep(game); game = applyAction(game, next.actor, next.action);
}
assert.ok(game.decision?.kind === 'moritaniAssassinate');
assert.equal(viewGame(game, 'm').moritaniAssassinate!.pending!.territory, 'cistern');
const spice = nativeTypedPlayer(game, 'm').spice;
const event = game.decision.event;
game = applyAction(nativeTypedReload(game), 'm', { type: 'decision', event, card: 'guild-1' });
@@ -49,5 +55,4 @@ void test('native Moritani assassination retains the actual revealed Discovery b
assert.equal(game.moritaniAssassinate!.opportunities[0].territory, 'cistern');
assert.equal(game.moritaniAssassinate!.opportunities[0].card, 'guild-1');
assert.equal(game.moritaniAssassinate!.opportunities[0].stage, 'revealed');
assert.equal(viewGame(game, 'm').moritaniAssassinate!.history[0].territory, 'cistern');
});