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

+13 -2
View File
@@ -2302,12 +2302,15 @@ function policyActions(g: GameView): Action[] {
target.id !== me.ally &&
(target.tanks >= [12, 8, 5, 3][level] ||
(level > 0 && d.revival === 'leader' && noLeader));
if (specialCard && shouldStop && !g.revival.specialKaramaBlock)
const offer = g.tleilaxuSpecialKarama;
const card = offer?.cards[0];
const allowed = offer?.targets.some(choice => choice.player === target.id && !choice.blocked);
if (card && offer && !offer.blocked && allowed && shouldStop)
return [
{
type: 'card',
mode: 'special',
card: specialCard.id,
card,
target: target.id,
},
];
@@ -3129,6 +3132,14 @@ function policyActions(g: GameView): Action[] {
: [{ type: 'passBid' }];
}
if (g.phase === 4) {
// Reuse the existing public-Tanks preference, with shared current permission.
const prevention = g.tleilaxuSpecialKarama;
if (prevention && !prevention.blocked && !prevention.pending && prevention.cards.length) {
const target = g.players.find(player => player.id !== me.id && player.id !== me.ally &&
player.tanks >= [12, 8, 5, 3][level] &&
prevention.targets.some(choice => choice.player === player.id && !choice.blocked));
if (target) return [{ type: 'card', mode: 'special', card: prevention.cards[0], target: target.id }];
}
if (g.revival.prevented)
return g.ready.includes(me.id) ? [] : [{ type: 'ready' }];
const actions: Action[] = [];