Connect Ecaz Duke revival to the Tleilaxu Ambassador
The original own-leader grant omitted the shared Duke because it searched only native rosters and KH. Offer Duke only to Ecaz using canonical dead-disc identity/custody validation and the existing independent permission. Preserve ordinary first-death/KH limits and unsupported source envelopes. Native Tleilaxu and Bene Gesserit copied effects share the choice. Return the actual shared disc alive and set aside, preserve strength and death history, clear obsolete use/concealment and record any satisfied native cohort opening before clearing death. Spend no spice, Ghola or ordinary leader allowance; add no native disc or skill. Finish the same committed Ambassador and retain original entrant movement. Persistent guidance explains that a separate legal acquisition is still needed. Source-specific tests, genuine public Basic acquisition/death/arrival programmes, actual GameTable/entry rendering and four existing minimal profiles verify the consumer. Controlled Advanced/copy/repeated/cohort/ownership/event probes remain separate. Exact frozen checks and limits are in docs/TLEILAXU_AMBASSADOR_RULES.md. This composes the printed grant with the selected set-aside/independent Duke policy; it does not settle generic ordinary repeat/income policy, open a module, certify full modes or claim browser/deployed/final assurance. No strategic AI refinement or saved-room/database/reset/restart/deployment operation.
This commit is contained in:
1 parent
c95e294890
commit
59aa56af2b
12 files changed
+742
-20
No files matched your search
+10
-2
@@ -18540,7 +18540,7 @@ function decideAmbassador(g: Game, p: Player, action: Action) {
|
||||
requireRule(action.forces === undefined && action.elite === undefined,
|
||||
'Choose a leader or forces, not both.');
|
||||
const selected = tleilaxuAmbassadorLeaderSelection(g, p, action.leader);
|
||||
requireRule(selected, 'Choose an eligible first-death own leader or Kwisatz Haderach from the Tanks.');
|
||||
requireRule(selected, 'Choose an eligible own leader, Ecaz Duke or Kwisatz Haderach from the Tanks.');
|
||||
let name: string;
|
||||
if (selected === 'kwisatz') {
|
||||
const kwisatz = p.kwisatz!;
|
||||
@@ -18548,13 +18548,21 @@ function decideAmbassador(g: Game, p: Player, action: Action) {
|
||||
delete kwisatz.usedAt;
|
||||
kwisatz.revivalCycle = Math.max(p.revivalCycle, kwisatz.revivalCycle ?? 1) + 1;
|
||||
name = 'Kwisatz Haderach';
|
||||
} else if (selected === DUKE_VIDAL_ID) {
|
||||
const duke = g.dukeVidal!.leader;
|
||||
recordEcazLeaderReturn(g, duke);
|
||||
duke.dead = false;
|
||||
delete duke.usedAt;
|
||||
delete duke.concealed;
|
||||
name = duke.name;
|
||||
g.dukeVidal = consumeDuke(g.dukeVidal!);
|
||||
} else {
|
||||
recordEcazLeaderReturn(g, selected);
|
||||
selected.dead = false;
|
||||
delete selected.usedAt;
|
||||
name = selected.name;
|
||||
}
|
||||
log(g, `${p.name} revived ${name} for free through the Tleilaxu Ambassador. The ordinary leader allowance is unchanged.`,
|
||||
log(g, `${p.name} revived ${name} for free through the Tleilaxu Ambassador.${selected === DUKE_VIDAL_ID ? ' The living shared disc is set aside, unclaimed.' : ''} The ordinary leader allowance is unchanged.`,
|
||||
{ faction: 'tleilaxu', name: 'Tleilaxu Ambassador' });
|
||||
finishAmbassador(g);
|
||||
return;
|
||||
|
||||
Reference in new issue
Block a user