Files
Dune/docs/ECAZ_REMAINING_EFFECTS_READINESS.md
2026-09-08 07:37:52 +10:00

74 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.