74 lines
15 KiB
Markdown
74 lines
15 KiB
Markdown
# Remaining Ecaz Ambassador effects: next gameplay slice
|
||
|
||
Independent source/runtime review, 7 September 2026. **Recommend implementing the reusable Ecaz Ambassador’s direct acquisition of Duke Vidal for Ecaz.** This is a real currently unavailable entry effect with an existing custody/battle lifecycle. Keep the separate alliance proposal, ally assignment and loan branches visibly unfinished. This recommendation does not enable full Ecaz starts or settle Occupy.
|
||
|
||
## Primary evidence and what this pass establishes
|
||
|
||
Fresh official indexed retrieval recovered E3 pages 7, 8, 9 and 15. Direct PDF opening failed; readable local publisher-authored text remains `/tmp/dune-rules/ecaz-audit.txt`, extracted from `/tmp/dune-rules/ecaz-mirror.pdf` with the mirror provenance in [the earlier effects audit](ECAZ_AMBASSADOR_EFFECTS_AUDIT.md). Search dates are not edition dates. The designer’s [expansion page](https://futurepastimes.com/dune-ecaz-moritani/) was indexed but its direct open failed. No new designer clarification resolving the inherited combinations was found.
|
||
|
||
The following concise source facts were rechecked against the [publisher E3 rules, pp.7–9](https://www.gf9games.com/dune/wp-content/uploads/EcazMoritani-Rulebook-LOWRES.pdf):
|
||
|
||
| Subject | Printed operation |
|
||
| ------------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
||
| Tleilaxu | Free revival: one own leader or at most four forces. |
|
||
| Fremen | Relocate a board group, retaining storm and occupancy restrictions. |
|
||
| Spacing Guild | Free reserve entry of at most four forces, outside storm. |
|
||
| Richese | Pay the bank three spice for the deck’s next card when below hand capacity. |
|
||
| Ecaz | Acquire an eligible Duke, or negotiate an unallied entrant’s alliance; possible subsequent loan. The token becomes reusable. |
|
||
| Moritani | No Ambassador identity: the eleven effects exclude Moritani. |
|
||
|
||
Duke’s acquisition excludes dead, captured and ghola custody. Ecaz’s tenure ends on battle use or Moritani acquisition. The [E3 p.15 FAQ](https://www.gf9games.com/dune/wp-content/uploads/EcazMoritani-Rulebook-LOWRES.pdf#page=15) confirms interruption of the entrant’s remaining action. It still gives five Ecaz forces a two-point contribution, while p.8 uses upward rounding. The local mirror’s example gives three. Thus the previously recorded Occupy conflict remains, rather than being resolved by this retrieval.
|
||
|
||
## Current implementation and remaining work
|
||
|
||
`game/ecaz-ambassadors.ts:7–20` explicitly excludes Moritani from `AmbassadorEffect`. Moritani nevertheless matters as an entrant, a competing Terror owner, an ally receiving a permitted effect, and the other Duke controller. A twelfth Ambassador must not be invented.
|
||
|
||
`game/engine.ts:6220` enables Atreides, Harkonnen, Emperor, CHOAM, Ixian and BG copying. `ambassadorEffectBlock` disables the others. `openTerritoryEntry` at approximately6292 owns the real interruption and still rejects competing arrival reactions. It records owner, entrant, token, event, turn, phase and worm continuation; it does not replay the physical arrival. `decideAmbassador` at approximately6440 validates event/actor and commits the chosen token. `finishAmbassador` at approximately6360 performs any completed-cohort replacement and resumes a suspended worm queue. These are the integration points for a new effect, not the ordinary movement/shipment handlers.
|
||
|
||
| Remaining effect | Why it is not the first complete handler to enable |
|
||
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||
| Tleilaxu | The inherited audit has no decisive Ambassador-specific treatment of ordinary revival quota/free allowance, repeated-death cycles, Tleilaxu income/prevention, or leader eligibility. Current `revival-resume`/cancellation quotes faithfully implement their existing sources; they do not classify this new revival event. Copying Ghola or ordinary `revive` would silently select those policies. |
|
||
| Fremen | A real relocation needs typed source selection, a separate movement counter contract, and resumable child arrival. The existing pending Ambassador singleton cannot safely contain another Ambassador/Terror/advisor interruption. The prior clear-route versus remote-relocation question was not resolved here. |
|
||
| Guild | Needs a special reserve-shipment intent, independent ordinary usage bookkeeping, pre-entry prevention and child arrival/resumption. Existing paid/ordinary `commitShipment` is not a drop-in adapter. The old audit’s Guild-stop/payment and competing-arrival boundaries remain. |
|
||
| Richese | Small for Ecaz self-benefit, but all-beneficiary support needs a documented acquisition classification for Harkonnen’s bonus and Ixian allied replacement. Existing auction continuations assume a real lot/sale and cannot be reused by fabricating an auction. The CHOAM rulebook’s [p.10 Ix purchase FAQ](https://www.gf9games.com/dune/wp-content/uploads/2021/11/CHOAM-Rulebook-low-res.pdf#page=10) distinguishes Richese cache sales and Black Market sales; it does not expressly classify this Ambassador draw. |
|
||
| Reusable Ecaz, alliance/loan | Entrant consent is a new stage; subsequent loan duration/return and assigning the whole effect to an existing ally remain inherited questions. Enabling alliance formation also exposes unimplemented Occupy. Direct self-acquisition can be separated from those options. |
|
||
| Occupy | Not an entry effect. It affects allied board entry, combatant selection, dial/support/losses, collection and victory together. The rounding conflict remains concrete. New `quoteVictory` intentionally preserves existing victory and does not implement Ecaz’s full Occupy victory rule. |
|
||
|
||
These are inherited uncertainties, not newly established prohibitions. This pass found no new authoritative answer allowing the omitted combinations to be labeled complete.
|
||
|
||
## Concrete direct-acquisition contract
|
||
|
||
The following is a proposed software contract, with existing engine rules/gates preserved:
|
||
|
||
1. Retain the actual qualifying entry producer and its exclusions. At an Ecaz-token offer, expose a distinct **Acquire Duke Vidal for Ecaz** action and the ordinary leave-in-place action. Do not relabel the existing generic trigger as though it implemented the token’s entire choice set. Proposed command: `{type:'decision',event,trigger:true,beneficiary:ownerId,choice:'duke'}`. Explicit choice avoids future alliance/loan dispatch ambiguity; the field name is an implementation proposal.
|
||
2. Prevalidate the current physical token, source event, Ecaz actor/beneficiary, and canonical shared Duke before token commitment. Use `acquireDuke(g.dukeVidal, owner.id, g.turn, 'ecaz')` to obtain the next custody record, then commit that record with the token in one accepted action. `initializeStartingForces` near engine3351 already creates the shared disc for Ecaz/Moritani, and the Moritani offer also initializes an absent legacy disc. Follow those existing initialization conventions; never replace a present disc or erase its death history.
|
||
3. The shared helper at `game/duke-vidal.ts:47` already supports source `ecaz`. It preserves the exact leader and rejects the printed unavailable custody. It allocates no event or random value. A current Moritani-controlled eligible disc is the same physical disc to transfer, not another leader to manufacture. Preserve `usedAt` and existing battle eligibility: transfer is not permission to use a previously committed leader twice.
|
||
4. `triggerAmbassador` at `game/ecaz-ambassadors.ts:302` already returns the Ecaz token to supply rather than marking it used. Preserve that result and the untouched five-token cohort. Correct the generic engine log, which currently says every non-BG triggered token is set aside. An Ecaz trigger must not cause a new random draw merely because it is reusable.
|
||
5. With no further acquisition choice, finish in the same action. Call the existing Ambassador suffix once. Preserve entrant `active`, movement/shipment counts, paid costs, pending parent and turn/phase. A worm-origin offer resumes exactly its existing worm continuation. Do not add a new generic Ambassador Karama response: the existing placement cancellation contract remains separate.
|
||
6. Preserve actual Duke lifecycle consumers. `controlledLeaders` near engine7847 supplies the controlled disc; battle resolution near9315 consumes its custody after use; `expireDuke` at `game/duke-vidal.ts:86` leaves source `ecaz` intact across turns. Existing Advanced-Harkonnen/exotic-custody gates still apply, because those games currently exclude Duke from usable leaders. Acquiring an unusable disc must not be presented as complete support for that combination.
|
||
|
||
The same-owner already-controlled case is an inherited no-op trigger question. For this slice, leave that option explicitly unavailable as unfinished rather than inventing a printed rule about recycling the token. Similarly, keep ally assignment/alliance/loan controls marked unfinished. Ecaz self-acquisition remains usable when Ecaz already has an ally; the future loan question is not a reason to require Ecaz to be unallied merely to acquire for itself.
|
||
|
||
## UI, bots and privacy
|
||
|
||
`components/ecaz-entry.tsx` currently has only offer/copy/cards branches and a hardcoded coverage sentence. Add the explicitly named self-acquisition action, its current eligibility reason, and the existing Duke inspector. Keep alliance/loan status separate from the enabled action. No confirmation-only intermediate decision is needed after the player chose acquisition. Update `game/ambassador-reference.ts` and the special-leader implementation metadata to distinguish implemented self-acquisition from remaining printed alternatives.
|
||
|
||
`viewGame().ambassadorEntry` near15563 currently returns owner-only beneficiary eligibility. Extend it with the bounded current choice descriptor needed by the UI and bots. Derive this from public disc/custody facts in supported configurations; do not expose hidden capture details through a new blocked-reason string. No opponent hand, spice, traitor or hidden leader data is needed. Broadening a public eligibility window from hidden data would be a separate privacy change.
|
||
|
||
`game/bots.ts:1373` currently chooses the first available generic beneficiary. Add an explicit branch emitting the same `choice:'duke'` action for the owner when offered; preserve leave-in-place fallback for unavailable branches. All four profiles must use the projected descriptor. The new effect should not fall into the current generic card-selection tail. BG’s existing copy pool excludes the reusable Ecaz token; do not add a synthetic BG→Ecaz copy while enabling this handler.
|
||
|
||
## Evidence required for the production slice
|
||
|
||
- Genuine movement/shipment entry→self-acquisition, including Ecaz with an existing ally, Moritani as entrant, and leaving the token in place. Show same physical Duke ID/death history, exact source/controller, returned token, unchanged cohort and unchanged ordinary action counters.
|
||
- Availability cases: Tanks, captured/ghola custody, existing unsupported Duke table, and the explicitly unfinished same-owner/ally-choice cases. No unusable enabled action should consume the token.
|
||
- Actual subsequent battle selection/use/death and surviving unused Ecaz control across a turn; Moritani’s later qualifying acquisition still takes the same disc. Never append Duke to a native roster or traitor deck.
|
||
- Genuine worm interruption and final suffix once, JSON reload, concurrent duplicate accepted command through room CAS, no duplicate acquire/token/cycle change, all four bot profiles, and non-owner projection parity under private-hand perturbation.
|
||
- Browser check with the existing portrait/inspector, keyboard action labels, disabled explanations and truthful coverage copy. Preserve full Ecaz-start and competing-arrival gates.
|
||
|
||
This is a gameplay implementation plan, not another malformed-save hardening proposal. No production/tests were changed or executed for this review. Runtime snapshot: engine `90276ae411a9b913f46ccc6fc8e37dbf9df33fba9f932424777bb91c638c8e86`; Ambassador inventory `03aa96e3873521ff15161831b258f4903b9ec2409b8230a47b25d6ad409ae03f`; Duke helper `9794361f508352c6aed679f191acba306ad93799334e15bc78ff364aa9e06576`. Line anchors can move with concurrent work.
|
||
|
||
|
||
## Direct Ecaz acquisition follow-up
|
||
|
||
The direct self-acquisition feature was subsequently implemented and verified. See [Ecaz Duke acquisition](ECAZ_DUKE_ACQUISITION.md) for the integrated controls, AI, persistence and actual battle playtest. Alliance/loan alternatives, revival and exceptional capture remain separate unfinished work. Earlier readiness and integration statements above are historical.
|