Allow allied Ecaz in both Fremen sietches
Verify and publish checkpoint container / container (push) Successful in 11m6s
Verify and publish checkpoint container / container (push) Successful in 11m6s
This commit is contained in:
1 parent
bc0db31134
commit
7552bb5394
9 files changed
+90
-42
No files matched your search
@@ -43,25 +43,24 @@ void test('prospective guide does not award an early victory and a normal winner
|
||||
assert.deepEqual(finishFremenEcazTurn(g).winner, ['gu']);
|
||||
});
|
||||
|
||||
void test('Advanced reciprocal Fremen/Ecaz cooccupation qualifies in both sietches while Basic stays Tabr-only', () => {
|
||||
void test('reciprocal Fremen/Ecaz cooccupation qualifies in both sietches in Basic and Advanced', () => {
|
||||
for (const advanced of [false, true])
|
||||
for (const territory of ['sietch_tabr', 'habbanya_ridge_sietch']) {
|
||||
const g = fremenEcazFinalTurn(advanced);
|
||||
const key = territory === 'sietch_tabr' ? 'sietch_tabr:14' : 'habbanya_ridge_sietch:17';
|
||||
for (const p of g.players.slice(0, 2)) p.forces = { [key]: 3 };
|
||||
const before = structuredClone(g);
|
||||
const qualifies = advanced || territory === 'sietch_tabr';
|
||||
const guide = viewGame(g, 'ec').fremenVictory!;
|
||||
assert.equal(guide.qualifies, qualifies);
|
||||
assert.equal(guide.qualifies, true);
|
||||
const sietch = guide.sietches.find((s) => s.territory === territory)!;
|
||||
assert.equal(sietch.ecazCooccupation, true);
|
||||
assert.deepEqual(sietch.blockers, qualifies ? [] : ['ec']);
|
||||
assert.deepEqual(sietch.blockers, []);
|
||||
const done = finishFremenEcazTurn(g);
|
||||
assert.deepEqual(done.winner, qualifies ? ['fr', 'ec'] : ['gu']);
|
||||
assert.deepEqual(done.winner, ['fr', 'ec']);
|
||||
assert.deepEqual(g, before);
|
||||
assert.deepEqual(fremenEcazCustody(done), fremenEcazCustody(g));
|
||||
if (qualifies) assert.match(done.log.at(-1)!.text, /Fremen special victory/);
|
||||
else assert.doesNotMatch(done.log.at(-1)!.text, /Fremen special victory/);
|
||||
assert.match(done.log.at(-1)!.text, /Fremen special victory/);
|
||||
assert.match(done.log.at(-1)!.text, territory === 'sietch_tabr' ? /Sietch Tabr/ : /Habbanya/);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -80,23 +80,44 @@ void test('solitary, nonallied and third-party Ecaz presence do not receive the
|
||||
assert.equal(fremenSpecialVictory(third)!.qualifies, false);
|
||||
});
|
||||
|
||||
void test('Basic Ecaz co-occupation at Habbanya remains a blocker', () => {
|
||||
void test('Basic allied Ecaz co-occupation at Habbanya permits Fremen victory', () => {
|
||||
const g = fixture();
|
||||
place(g, 'f', 'habbanya_ridge_sietch:17');
|
||||
place(g, 'e', 'habbanya_ridge_sietch:17');
|
||||
const result = fremenSpecialVictory(g)!;
|
||||
assert.equal(result.sietches[1].ecazCooccupation, true);
|
||||
assert.deepEqual(result.sietches[1].blockers, ['e']);
|
||||
assert.equal(result.qualifies, false);
|
||||
assert.deepEqual(result.sietches[1].blockers, []);
|
||||
assert.equal(result.qualifies, true);
|
||||
});
|
||||
|
||||
void test('supplied Advanced Ecaz cooccupation permits Habbanya while preserving Basic and solitary Ecaz blockers', () => {
|
||||
const g = fixture(true);
|
||||
place(g, 'f', 'habbanya_ridge_sietch:17');
|
||||
place(g, 'e', 'habbanya_ridge_sietch:17');
|
||||
assert.equal(fremenSpecialVictory(g)!.qualifies, true);
|
||||
seat(g, 'f').forces = {};
|
||||
assert.deepEqual(fremenSpecialVictory(g)!.sietches[1].blockers, ['e']);
|
||||
void test('both rulesets keep solitary Ecaz as a Habbanya blocker', () => {
|
||||
for (const advanced of [false, true]) {
|
||||
const g = fixture(advanced);
|
||||
place(g, 'f', 'habbanya_ridge_sietch:17');
|
||||
place(g, 'e', 'habbanya_ridge_sietch:17');
|
||||
assert.equal(fremenSpecialVictory(g)!.qualifies, true);
|
||||
seat(g, 'f').forces = {};
|
||||
assert.deepEqual(fremenSpecialVictory(g)!.sietches[1].blockers, ['e']);
|
||||
}
|
||||
});
|
||||
|
||||
void test('nonallied Ecaz and third-party fighters still block Habbanya in both rulesets', () => {
|
||||
for (const advanced of [false, true]) {
|
||||
const nonallied = fixture(advanced);
|
||||
seat(nonallied, 'f').ally = null;
|
||||
seat(nonallied, 'e').ally = null;
|
||||
place(nonallied, 'f', 'habbanya_ridge_sietch:17');
|
||||
place(nonallied, 'e', 'habbanya_ridge_sietch:17');
|
||||
assert.deepEqual(fremenSpecialVictory(nonallied)!.sietches[1].blockers, ['e']);
|
||||
assert.equal(fremenSpecialVictory(nonallied)!.qualifies, false);
|
||||
|
||||
const third = fixture(advanced);
|
||||
place(third, 'f', 'habbanya_ridge_sietch:17');
|
||||
place(third, 'e', 'habbanya_ridge_sietch:17');
|
||||
place(third, 'r', 'habbanya_ridge_sietch:17');
|
||||
assert.deepEqual(fremenSpecialVictory(third)!.sietches[1].blockers, ['r']);
|
||||
assert.equal(fremenSpecialVictory(third)!.qualifies, false);
|
||||
}
|
||||
});
|
||||
|
||||
void test('accompanied BG advisors do not block, while mandatory lone-advisor release restores fighter presence', () => {
|
||||
|
||||
Reference in new issue
Block a user