From a24600ae1d0360bdbe1c3d224e36b15dfcd8f14b Mon Sep 17 00:00:00 2001 From: Quintine <15965533+Quintine@users.noreply.github.com> Date: Thu, 15 Oct 2026 13:24:47 +1100 Subject: [PATCH] Connect original Duke capture and Ecaz Nexus liberation --- components/game-table.tsx | 9 + components/nexus-ecaz-duke.tsx | 6 +- docs/CURRENT_STATUS.md | 17 + docs/DUKE_VIDAL_RULES.md | 33 +- docs/ECAZ_DUKE_ACQUISITION.md | 12 + docs/ECAZ_REVIVAL_RULES.md | 18 + docs/IMPLEMENTATION_STATUS.md | 41 ++ docs/NEXUS_CARD_RULES.md | 13 + docs/NEXUS_ECAZ_RULES.md | 60 +- docs/RULE_DECISIONS.md | 21 +- game/battle-aftermath-quote.ts | 12 + game/duke-vidal.ts | 195 +++++- game/ecaz-duke-acquisition.ts | 7 +- game/ecaz-duke-revival.ts | 14 +- game/engine.ts | 151 +++-- game/nexus-ecaz-duke.ts | 178 +++++- game/reference.ts | 14 +- tests/duke-captured-custody.test.ts | 183 ++++++ tests/duke-vidal-engine.test.ts | 18 - tests/fixture-nexus-duke-capture.ts | 732 +++++++++++++++++++++++ tests/nexus-duke-capture-runtime.test.ts | 234 ++++++++ tests/nexus-ecaz-duke-captured.test.ts | 233 ++++++++ tests/nexus-ecaz-duke-controls.test.ts | 97 --- tests/nexus-ecaz-duke-quote.test.ts | 19 +- 24 files changed, 2082 insertions(+), 235 deletions(-) create mode 100644 tests/duke-captured-custody.test.ts create mode 100644 tests/fixture-nexus-duke-capture.ts create mode 100644 tests/nexus-duke-capture-runtime.test.ts create mode 100644 tests/nexus-ecaz-duke-captured.test.ts delete mode 100644 tests/nexus-ecaz-duke-controls.test.ts diff --git a/components/game-table.tsx b/components/game-table.tsx index 40de9145..dd617f9a 100644 --- a/components/game-table.tsx +++ b/components/game-table.tsx @@ -3352,6 +3352,15 @@ export function GameTable({ your own leaders are dead, a retained captive returns immediately.

+ {g.decision.leader === 'duke-vidal' && ( +

+ Duke remains the one shared Ecaz disc. A surviving captive + battle use sets him aside; execution sends him to Ecaz’s + Tanks. Only Ecaz may revive him. The provisional captured + return policy preserves unused, unexpired prior custody + on an early release. Ecaz Nexus reclaim ends captivity. +

+ )} {actionButton('Retain captive', { type: 'decision', mode: 'keep', diff --git a/components/nexus-ecaz-duke.tsx b/components/nexus-ecaz-duke.tsx index 167560fc..9b301e68 100644 --- a/components/nexus-ecaz-duke.tsx +++ b/components/nexus-ecaz-duke.tsx @@ -15,9 +15,9 @@ export function NexusEcazDuke({ game, act, busy }: Props) { return (

Ecaz Nexus · Cunning · Duke Prad Vidal

-

Current public controller: {offer.dukeController ? controller?.name ?? 'another player' : 'none'}.

-

Spend and discard your physical Ecaz Nexus card to take the uncaptured, non-Ghola Duke for this turn, even from Moritani or the Tanks. A Tanked acquisition revives the same shared disc without a separate paid revival and preserves his death history. If unused, this temporary control expires at turn end; using him in battle sets the shared Duke aside.

-

This independent resurrection clears his prior battle-use stamp and permits a new battle use. Taking a living Duke does not clear a battle-use stamp. That use composition is provisional; capture and Ghola acquisition/return destinations remain unsupported, as does Duke battle use with Advanced Harkonnen.

+

Known controller: {offer.dukeController ? controller?.name ?? 'another player' : 'none'}.

+

Spend your physical Ecaz Nexus card to take the one shared Duke this turn, including from actual capture or the Tanks. Capture reclaim ends captivity. A Tanked acquisition preserves his death history without payment or an ordinary revival slot. Battle use or unused turn expiry sets him aside.

+

Provisional return policy: no previous captor is restored after Nexus use. Independent Tanks resurrection clears prior battle use; taking a living Duke does not. Only Ecaz may revive him, including with a real Ghola card; that return is set aside before a separate Cunning play. Foreign-Ghola custody is not created. Wider profile and combination gates remain.

{offer.blocked &&

{offer.blocked}

}