Open Tleilaxu special Karama throughout Revival

Permit native Advanced quiet any-player declarations alongside the original target-bound pending request. Preserve completed returns and charges. Adopt explicit provisional Ghola inclusion during the remaining Revival and phase expiry; keep printed Emperor special immunity and the existing low-Homeworld guard. Connect persistent controls and minimal legal bots through the shared quote.

Validation: 14 related files148/148, types/lint/build, six actual native control/engine/GameTable SSR journeys and four existing-profile continuations. Private-driver-only feedback reuses passed source-identical checks. Native111/113-action setup, paid shipment and battle sources earn originals. No saved-room/D1/restart/deployment operation; full modes and browser/deployed acceptance remain open.
This commit is contained in:
Quintine committed 2026-10-24 19:30:21 +11:00
1 parent 6ea691255a
commit 1a505525a8
18 files changed
+977 -59

No files matched your search

+9 -2
View File
@@ -223,7 +223,7 @@ void test('foreign-ghola and negotiated early-revival bot candidates explicitly
);
}
});
void test('ordinary revival prevention does not itself prevent independent Ghola recovery', () => {
void test('bots respect Ghola prevention during Revival and can use it after phase expiry', () => {
const { g, card } = fixture();
g.phase = 4;
g.active = null;
@@ -231,7 +231,14 @@ void test('ordinary revival prevention does not itself prevent independent Ghola
g.revivalPrevention = { player: 'p', turn: g.turn };
for (const level of DIFFICULTIES) {
assert.equal(view(g, level).revival.prevented, true);
const { a, done } = apply(g, level);
assert.equal(view(g, level).ghola.available, false);
const blocked = apply(g, level);
assert.notEqual(blocked.a.card, card.id);
assert.ok(blocked.done.players[0].hand.some(c => c.id === card.id));
const expired = structuredClone(g);
expired.phase = 5;
expired.active = 'p';
const { a, done } = apply(expired, level);
assert.equal(a.card, card.id);
assert.equal(done.players[0].reserves, 5);
}