Prototype Semuta after Recruits in Basic play
Verify and publish checkpoint container / container (push) Successful in 10m20s

This commit is contained in:
Quintine committed 2026-10-28 22:19:12 +11:00
1 parent 0e9209531a
commit 1ba942138d
9 files changed
+311 -18

No files matched your search

+17 -5
View File
@@ -50,6 +50,8 @@ export type RecruitsModulesFixture = {
playAction: Action;
revivalAction: Action;
secondRevivalAction: Action;
/** Real ordered-ready and revival actions after playing Recruits. */
revivalSteps: RecruitsModulesStep[];
battle: {
attacker: string; defender: string; territory: string;
reviverPlan: RecruitsModulesStep; opponentPlan: RecruitsModulesStep;
@@ -275,11 +277,21 @@ export function createRecruitsModulesFixture(
const beforeRevival = structuredClone(game);
assert.equal(beforeRevival.recruits?.player, owner, 'The physical Recruits activation must be recorded');
const revivalAction: Action = { type: 'revive', amount, elite: 0 };
act(owner, revivalAction);
const afterRevival = structuredClone(game);
const secondRevivalAction: Action = { type: 'revive', amount: 1, elite: 0 };
act(opponent, secondRevivalAction);
const afterSecondRevival = structuredClone(game);
const from = steps.length;
const remaining = game.revivalOrder?.remaining;
const actors = remaining && remaining.indexOf(opponent) < remaining.indexOf(owner)
? [opponent, owner] : [owner, opponent];
let afterRevival: Game | undefined, afterSecondRevival: Game | undefined;
for (const actor of actors) {
if (game.revivalOrder)
advance(state => state.phase === 4 && state.revivalOrder?.remaining[0] === actor && recruitsModulesClean(state));
act(actor, actor === owner ? revivalAction : secondRevivalAction);
if (actor === owner) afterRevival = structuredClone(game);
else afterSecondRevival = structuredClone(game);
}
assert.ok(afterRevival && afterSecondRevival);
const revivalSteps = structuredClone(steps.slice(from));
assert.equal(game.techTokens?.axlotl.spice, accrual,
'The accrued income must still be held by the token immediately before the phase ends');
advance(state => state.phase === 5 && recruitsModulesClean(state));
@@ -294,7 +306,7 @@ export function createRecruitsModulesFixture(
afterSecondRevival, afterPhaseEnd, owner, opponent, location,
base: { freeRate: baseFreeRate, limit: baseLimit },
doubled: { freeRate: doubledFreeRate, limit: 7 },
tanks, amount, accrual, playAction, revivalAction, secondRevivalAction,
tanks, amount, accrual, playAction, revivalAction, secondRevivalAction, revivalSteps,
battle: {
attacker: choice.attacker, defender: choice.defender,
territory: location.territory, reviverPlan, opponentPlan,