Compose standalone E3 Skills and independent cards with native power defaults

Restore fresh Ecaz coalition and Advanced Moritani initialization; retain printed native continuations and selected-family card eligibility. Validate Mentat fallback hands against explicitly selected independent cards. Frozen25-file274/274, types/lint/build and genuine runtime/mobile entry proofs pass. No save retrofit or deployment.
This commit is contained in:
Quintine committed 2026-10-17 20:36:01 +11:00
1 parent 2ad947af54
commit fde44baab5
25 files changed
+1838 -103

No files matched your search

-17
View File
@@ -13,7 +13,6 @@ import {
ecazOccupyCardsCase, finishOccupyCardsAftermath, occupyCardsPlayer as seat,
type OccupyCardsCase,
} from './fixture-ecaz-occupy-cards';
import { harassWithdrawGame, takeHarassCard } from './fixture-harass-withdraw';
const forces = (result: OccupyCardsCase, id: string, game = result.game) =>
ecazOccupyTerritoryForces(game, id, result.fixture.territory);
@@ -361,19 +360,3 @@ void test('selected typed Harass losses survive an opposing mandatory Reinforcem
collection(result.game);
});
void test('Basic co-present Ecaz card armies remain unsupported instead of admitting an ordinary single-army outcome', () => {
for (const card of ['ecaz-harass-withdraw', 'ecaz-reinforcements']) {
const game = harassWithdrawGame({ advanced: false, factions: ['guild', 'emperor', 'ecaz'] });
const guild = game.players[0], ecaz = game.players[2];
// Labelled co-side rule-unit staging on the genuine ordinary variant setup.
guild.ally = ecaz.id;
ecaz.ally = guild.id;
ecaz.forces = { 'arrakeen:10': 2 };
ecaz.reserves -= 2;
takeHarassCard(game, guild.id, card);
assert.throws(() => applyAction(game, guild.id,
{ type: 'battlePlan', dial: 1, leader: 'guild-0', weapon: card }),
/supported Advanced Occupy battle profile/);
assert.equal(game.battle?.plans[guild.id], undefined);
}
});