Compose independent Skills with original Tech and Stronghold modules

Unify fresh/live classic and native phase admission, retaining original counts, earned custody, separate income ledgers and physical card/skill continuations. Plain paired E3 phases no longer require cards or Nexus. Coupled44-file471/471, types/lint/build, genuine programmes and390px normal entry pass. Controlled card inputs explicit; no save retrofit or deployment.
This commit is contained in:
Quintine committed 2026-10-17 22:12:44 +11:00
1 parent 17adffa6a7
commit b9330d489e
31 files changed
+797 -104

No files matched your search

+10 -3
View File
@@ -228,9 +228,16 @@ export function createIxChoamSkillsTechFixture(options: IxChoamSkillsTechOptions
for (let i = 0; (game.response || game.decision || game.pendingShipment) && i < 200; i++) game = step(game, actions);
// Actual ten-spice desert invoice exhausts Emperor's original bank wallet.
// Any native Heighliners payout can add at most one; no Collection at this pile.
const counter = game.deck.findIndex(card => card.effect === 'karama');
assert.ok(counter >= 0);
ixChoamSkillsTechPlayer(game, actor).hand.push(game.deck.splice(counter, 1)[0]);
const hand = ixChoamSkillsTechPlayer(game, actor).hand;
if (!hand.some(card => card.effect === 'karama')) {
// A real starting deal can put both printed counters in hands, not the deck.
const source = [game.deck, game.discard,
...game.players.filter(player => player.id !== actor).map(player => player.hand)]
.find(zone => zone.some(card => card.effect === 'karama'));
assert.ok(source, 'Conserve an original printed Karama from its actual physical zone');
const counter = source.findIndex(card => card.effect === 'karama');
hand.push(source.splice(counter, 1)[0]);
}
let beforeCharityIncome: Game | undefined;
let afterCharityIncome: Game | undefined;
for (let i = 0; (game.turn !== 2 || game.phase !== 2 || game.phaseOpening || game.response || game.decision)