Implement Homeworld mechanics through Caladan reinforcement checkpoint
Connect typed Homeworld custody, transport, battle, income, revival and Caladan reinforcement flows with private multiplayer recovery and controls. Preserve the optimized test workflow and keep unfinished rules modes gated. Verified with 3682 offline tests, typecheck, lint, production build and 40 HTTP tests; existing saved games remain unchanged.
This commit is contained in:
1 parent
3be49512f7
commit
28ba1618ba
266 files changed
+47680
-16851
No files matched your search
+235
-13
@@ -2,6 +2,7 @@ import { STRONGHOLD_CARDS } from './stronghold-cards';
|
||||
import { FACTION_RULES } from './faction-reference';
|
||||
import { FACTIONS, PHASES } from './catalog';
|
||||
import { RICHESE_CARD_DEFINITIONS } from './richese-cards';
|
||||
import { HOMEWORLD_CARDS } from './homeworld-cards';
|
||||
|
||||
export const RULE_CHECKLIST_AREAS = [
|
||||
'Implementation',
|
||||
@@ -28,6 +29,7 @@ export type RuleTopic = {
|
||||
| 'Advanced & expansions';
|
||||
coverage: 'Implemented' | 'Partial' | 'Planned';
|
||||
summary: string;
|
||||
searchText?: string;
|
||||
steps: string[];
|
||||
example?: string;
|
||||
related?: string[];
|
||||
@@ -121,6 +123,7 @@ const phaseDetails = [
|
||||
'The highlighted player may raise the bid or pass. A new high bid clears previous passes.',
|
||||
'Holding Karama permits a bid above your available spice. If outbid, keep the card. A winning bid above your funds requires Karama.',
|
||||
'After everyone else passes, the winner chooses spice payment or Karama. The table then resolves applicable Emperor-income and Harkonnen-bonus responses.',
|
||||
'In Homeworld development tables with Emperor, the last completed auction opens End of Bidding. High Kaitain paid discards and CHOAM closing sales or trades may occur in either order. Finish your opportunity when ready; another card action clears readiness before the phase advances.',
|
||||
],
|
||||
[
|
||||
'Choose the number of forces to revive. The server tracks the free allowance and the phase limit across multiple requests.',
|
||||
@@ -136,7 +139,7 @@ const phaseDetails = [
|
||||
'A Fremen move using the two-territory advantage has a Karama response. Cancellation leaves the forces in place and limits this move to one territory; city ornithopters and a later extra move keep their normal rules.',
|
||||
'Guild transport can move a group across the planet or return it to reserves. Ordinary movement is checked against range, storm and stronghold occupancy.',
|
||||
'You may pass through an ally’s territory on a legal route that ends elsewhere. The printed clarification also permits shipping into allied territory followed by departure; that temporary arrival and its departure obligation are not yet supported by the table.',
|
||||
'Ecaz and its reciprocal ally may share territories permanently and count as one faction toward stronghold capacity. This applies to normal shipment, ground routes and Ambassador arrivals. It does not grant extra movement, bypass storm or mobile-stronghold entry rules, or apply to homeworlds. Their three jointly occupied stronghold victory is supported; combined combat, shared desert collection and the Fremen endgame exception remain unfinished.',
|
||||
'Ecaz and its reciprocal ally may share territories permanently and count as one faction toward stronghold capacity. This applies to normal shipment, ground routes and Ambassador arrivals. It does not grant extra movement, bypass storm or mobile-stronghold entry rules, or apply to homeworlds. Their three jointly occupied stronghold victory is supported; shared desert allocation is also supported. Combined combat and the Fremen endgame exception remain unfinished.',
|
||||
'A restored pending physical shipment is checked again before forces or spice are committed. If its saved turn, force allocation, destination, price or authorized contribution no longer matches the table, it is rejected without changing the saved declaration.',
|
||||
'Finish shipment and movement explicitly. Any Bene Gesserit free-shipment decision and its response must finish first.',
|
||||
'Advanced Guild may choose when to take its complete shipment-and-movement turn. The table offers a choice before another player starts. Guild cannot interrupt a turn already underway.',
|
||||
@@ -150,9 +153,11 @@ const phaseDetails = [
|
||||
'A winner with played cards chooses which to discard before the next battle or collection.',
|
||||
],
|
||||
[
|
||||
'The game collects spice automatically when this phase begins.',
|
||||
'Ordinary collection resolves automatically when this phase begins. If Ecaz and its ally both collect from a desert territory, their shared pool waits for allocation.',
|
||||
'Only forces in the sector containing spice collect it. Remaining spice stays on the board.',
|
||||
'In the advanced game, an occupant receives two additional spice for Arrakeen, two for Carthag and one for Tuek’s Sietch. These payments stack and are separate from spice gathered by forces.',
|
||||
'For each shared desert pool, Ecaz can propose a split. The other ally may accept or counter; either decision owner may instead choose an equal split, with any odd spice going to Ecaz’s ally. Proposals remain private to the pair until settlement. The table cannot advance until every pool is allocated.',
|
||||
'Advanced Ecaz Collection gives both allies their full bank income in co-occupied Arrakeen, Carthag and Tuek’s Sietch. Karama prevents only Ecaz’s income from those shared strongholds; the ally’s income, Ecaz’s other stronghold income and desert allocation remain unchanged.',
|
||||
'Review the table chronicle and your spice, then mark yourself ready.',
|
||||
],
|
||||
[
|
||||
@@ -205,6 +210,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'automatic-decisions',
|
||||
'ai-pacing',
|
||||
'ecaz-modules',
|
||||
'homeworlds',
|
||||
'advanced-combat',
|
||||
],
|
||||
},
|
||||
@@ -1040,7 +1046,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
category: 'Advanced & expansions',
|
||||
coverage: 'Partial',
|
||||
summary:
|
||||
'End-of-Revival placement, eight random entry effects and direct Ecaz Duke acquisition are supported in development fixtures, with public token guides and private inspection history.',
|
||||
'End-of-Revival placement, eight random entry effects, direct Ecaz Duke acquisition and consensual alliance formation are supported in development fixtures, with public token guides and private inspection history.',
|
||||
steps: [
|
||||
'Ecaz has its reusable Ambassador plus five randomly selected Ambassadors from the other ten identities. Inspect the public supply, placed tokens, triggered group and unused pool to read each effect.',
|
||||
'Placed Ambassadors are face up by designer clarification. This implementation also shows the unplaced supply openly by default; that supply policy is an interpretation, not an explicit official FAQ ruling.',
|
||||
@@ -1048,8 +1054,9 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'The current closing order is CHOAM market, deferred technology income, then Ecaz placement. Income received at that point can fund placement. This combined order is an implementation choice, not a priority established by a combined official FAQ.',
|
||||
'The first placement costs one spice, the second two, and so on that turn. A declaration opens a Karama response before spice is paid or the token moves. Canceling stops the remaining placement opportunity for that turn; previous placements and payments remain.',
|
||||
'Finish Ambassador placement advances the phase. On a later turn the price begins at one again and the earlier placement block expires. Pending declarations survive reload without charging twice.',
|
||||
'The custody model returns destroyed tokens to supply and returns Ecaz after its trigger. Supported entry effects set regular tokens aside, permanently remove Bene Gesserit after its trigger, and replenish only after all five random tokens have triggered. Storm crossings return tokens from exposed Arrakeen and Carthag after the Shield Wall is destroyed. A Lasgun–shield explosion returns a token only if the explosion actually resolves; an overriding traitor victory leaves it placed. Destruction does not count toward the five triggers. The reusable Ecaz Ambassador can acquire Duke directly for Ecaz; its alliance and loan alternatives remain unfinished.',
|
||||
'When an eligible entrant reaches the reusable Ecaz token, Ecaz may choose Acquire Duke Vidal for Ecaz if the shared disc is available. The token immediately returns to supply, its five random companions are unchanged, and the entrant resumes. Ecaz keeps an unused Duke across turns until battle use or Moritani acquisition. Already controlling him, assigning this effect to an ally, alliance formation, loans and Advanced Harkonnen custody remain visibly unavailable while their interactions are unfinished.',
|
||||
'The custody model returns destroyed tokens to supply and returns Ecaz after its trigger. Supported entry effects set regular tokens aside, permanently remove Bene Gesserit after its trigger, and replenish only after all five random tokens have triggered. Storm crossings return tokens from exposed Arrakeen and Carthag after the Shield Wall is destroyed. A Lasgun–shield explosion returns a token only if the explosion actually resolves; an overriding traitor victory leaves it placed. Destruction does not count toward the five triggers. The reusable Ecaz Ambassador can acquire Duke directly for Ecaz; it also offers a consensual alliance, while Duke loans remain unfinished.',
|
||||
'When an eligible entrant reaches the reusable Ecaz token, Ecaz may choose Acquire Duke Vidal for Ecaz if the shared disc is available. The token immediately returns to supply, its five random companions are unchanged, and the entrant resumes. Ecaz keeps an unused Duke across turns until battle use or Moritani acquisition. Already controlling him, assigning this effect to an ally, loans and Advanced Harkonnen custody remain visibly unavailable while their interactions are unfinished.',
|
||||
'Instead of acquiring Duke, unallied Ecaz can offer an alliance to an unallied entrant. The entrant accepts or refuses, then resumes its remaining actions. The triggered token returns to supply in either case. Acceptance activates both factions’ alliance abilities immediately and leaves Duke unchanged. An unavailable Duke does not prevent this alliance choice. Duke loans remain unfinished pending their custody ruling.',
|
||||
'When another eligible faction enters a marked stronghold, Ecaz may trigger its Ambassador for itself or its current ally, or leave the token in place. Ecaz itself, its ally, advisors and the faction matching the physical Ambassador do not trigger it. Entries with competing arrival reactions remain blocked until their ordering is implemented; a rejected entry does not spend or move its pieces.',
|
||||
'Emperor grants five bank spice. Atreides records the entrant’s current Treachery hand privately for the beneficiary; Harkonnen records one randomly selected held Traitor identity, or Face Dancer identity for a Tleilaxu entrant. These snapshots remain in the recipient’s private inspection history, identify when they were taken, and do not become a live view of later changes. Opening, enlarging or closing them needs no game acknowledgement.',
|
||||
'CHOAM lets the beneficiary choose any available hand cards, including none, for three spice each. Ixians require one available card to discard before drawing its replacement. Card controls respect projected reservations. After committing an Ixian exchange, a voluntary interruption must leave a card available for its required discard; a queued Truthtrance counts as already committed. A Bene Gesserit trigger permanently removes its token, then the beneficiary chooses an available effect outside the original supply for this group; unsupported copies remain visibly blocked.',
|
||||
@@ -1059,38 +1066,38 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'The Guild Ambassador grants an immediate free shipment of zero through four physical reserve forces for Ecaz or its ally, including typed elites. Choose a clear territory and sector; this does not spend ordinary shipment or movement, ally aid or a retained rate card. Fremen may use destinations outside their ordinary reinforcement radius, but their southern reserves stay on-planet and this effect never permits storm entry. Only Ixians may ship directly into their placed mobile stronghold.',
|
||||
'During Shipment and Movement, Guild can use its special Karama to stop another eligible off-planet Ambassador shipment before forces arrive; it does not stop this grant during a phase-one worm sequence. A successful off-planet shipment may invite Bene Gesserit accompaniment and accrues applicable phase-five Heighliner income once. BG can accompany Ixians into the mobile stronghold. Projected accompaniment choices show blocked sectors and keep Polar Sink and decline available when legal. Intrusion, separate Terror and accompanying fighter-triggered Ambassadors finish before the original entrant or worm rider resumes.',
|
||||
'No-Field substitution into the free four-force grant awaits the user’s interpretation and is unavailable. Simultaneous Intrusion/Terror and Ambassador/Terror combinations remain blocked. Moritani Atomics Aftermath, Homeworlds and Discovery locations require their still-gated producers or modules; this checkpoint does not claim those combinations.',
|
||||
'All eleven effect guides are readable. Emperor, Atreides, Harkonnen, CHOAM, Ixian, Richese, Fremen and Guild entry effects are integrated, together with Bene Gesserit copies of those eight effects and direct Duke acquisition through the reusable Ecaz token. The remaining effects, Occupy, exceptional Duke custody and complete Ecaz rules remain unfinished. Mobile stronghold placement is gated. Full Ecaz starts remain disabled.',
|
||||
'All eleven effect guides are readable. Emperor, Atreides, Harkonnen, CHOAM, Ixian, Richese, Fremen and Guild entry effects are integrated, together with Bene Gesserit copies of those eight effects and direct Duke acquisition or consensual alliance through the reusable Ecaz token. The remaining effects, combined Occupy combat, exceptional Duke custody and complete Ecaz rules remain unfinished. Mobile stronghold placement is gated. Full Ecaz starts remain disabled.',
|
||||
],
|
||||
checklist: [
|
||||
{
|
||||
area: 'Implementation',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Inventory, placement and eight entry effects plus their Bene Gesserit copies and direct Ecaz Duke acquisition are integrated. Storm/explosion token returns are integrated. Competing arrival ordering and remaining effects remain unfinished.',
|
||||
'Inventory, placement and eight entry effects plus their Bene Gesserit copies and direct Ecaz Duke acquisition or consensual alliance are integrated. Storm/explosion token returns are integrated. Competing arrival ordering and remaining effects remain unfinished.',
|
||||
},
|
||||
{
|
||||
area: 'Player controls',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Placement and entry controls show valid destinations, beneficiaries, copies and card choices with blocked reasons. Relocation controls select physical and elite forces by source sector, concealed markers and eligible advisor flips. Independent Guild shipment controls select typed reserve counts, destination sector or zero; BG accompaniment controls show source-specific blocked reasons. Public token guides and recipient-only historical card/identity inspectors remain available without acknowledgement.',
|
||||
'Placement and entry controls show valid destinations, beneficiaries, copies and card choices with blocked reasons. Ecaz can offer an alliance to an eligible entrant, whose separate accept/refuse controls preserve decision ownership. Relocation controls select physical and elite forces by source sector, concealed markers and eligible advisor flips. Independent Guild shipment controls select typed reserve counts, destination sector or zero; BG accompaniment controls show source-specific blocked reasons. Public token guides and recipient-only historical card/identity inspectors remain available without acknowledgement.',
|
||||
},
|
||||
{
|
||||
area: 'AI',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'All four profiles handle placement, supported trigger/beneficiary choices, copied effects, legal CHOAM/Ixian card selection, Fremen relocation, Guild reserve shipment and its BG accompaniment from their own projections. Unsupported effects are declined; remaining effect policies are unfinished.',
|
||||
'All four profiles handle placement, supported trigger/beneficiary choices, copied effects, legal CHOAM/Ixian card selection, Fremen relocation, Guild reserve shipment and its BG accompaniment from their own projections. They prefer an available Ecaz alliance offer and accept a valid owned reply; direct Duke acquisition remains the fallback when a new alliance is unavailable. Unsupported effects are declined; remaining effect policies are unfinished.',
|
||||
},
|
||||
{
|
||||
area: 'Documentation',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Placement, supported entry decisions, private historical inspections, inventory lifecycle and all eleven effect descriptions are available. Complete timing and interaction coverage remains open.',
|
||||
'Placement, supported entry decisions, private historical inspections, inventory lifecycle and all eleven effect descriptions are available. The Ecaz guide distinguishes consent, token commitment and Duke loans awaiting a custody ruling. Complete timing and interaction coverage remains open.',
|
||||
},
|
||||
{
|
||||
area: 'Verification',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Focused tests cover custody, placement payment, entry continuation, private snapshots, effect choices, destruction and all four bot profiles. Persisted tests cover concurrent triggers, private snapshot restoration, and stale-event rejection; browser checks verified entry and enlarged private cards. Guild-focused tests cover physical quotes, historical continuations, cancellation, resume provenance, actual engine journeys and all four AI profiles. Guild multiplayer and browser verification are pending at this documentation checkpoint. Complete expansion games and competing arrivals remain.',
|
||||
'Focused tests cover custody, placement payment, entry continuation, private snapshots, effect choices, destruction and all four bot profiles. Persisted tests cover concurrent triggers, private snapshot restoration, and stale-event rejection; browser checks verified entry and enlarged private cards. Guild-focused tests cover physical quotes, historical continuations, cancellation, resume provenance, actual engine journeys and all four AI profiles. Guild multiplayer and browser verification are pending at this documentation checkpoint. Ecaz alliance tests cover both consent outcomes, real arrival and worm continuations, card suspension, private-state preservation and racing replies; browser checks confirm keyboard proposal and AI acceptance. Complete expansion games and competing arrivals remain.',
|
||||
evidence: [
|
||||
'tests/ecaz-ambassadors.test.ts',
|
||||
'tests/ecaz-placement.test.ts',
|
||||
@@ -1098,6 +1105,9 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'tests/ecaz-duke-acquisition.test.ts',
|
||||
'tests/ecaz-duke-bots.test.ts',
|
||||
'tests/ecaz-duke-recovery.test.ts',
|
||||
'tests/ecaz-alliance.test.ts',
|
||||
'tests/ecaz-alliance-engine.test.ts',
|
||||
'tests/ecaz-alliance-recovery.test.ts',
|
||||
'tests/ecaz-entry-bots.test.ts',
|
||||
'tests/ecaz-entry-continuations.test.ts',
|
||||
'tests/ecaz-entry-recovery.test.ts',
|
||||
@@ -2202,7 +2212,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'Begin with six forces in the Imperial Basin, fourteen in reserves and twelve spice. Two force revivals are free.',
|
||||
'Your Ambassador supply contains the Ecaz token and five random tokens from the remaining pool. Inspect the linked Ambassador guide for all eleven identities and their custody rules.',
|
||||
'End-of-Revival placement has owner controls, escalating prices, cancellation responses and bot support in development fixtures. Full faction starts remain disabled.',
|
||||
'Eight entry effects and their Bene Gesserit copies, plus direct Ecaz Duke acquisition, have focused support. Storm/explosion token returns, ordinary territorial co-occupation and the three jointly occupied stronghold victory are also supported. Tleilaxu revival, combined Occupy battles, shared desert collection, the Fremen endgame exception and the complete Duke revival and custody interactions remain unfinished. Consult the feature checklist for the exact tested boundary.',
|
||||
'Eight entry effects and their Bene Gesserit copies, plus direct Ecaz Duke acquisition, have focused support. Storm/explosion token returns, ordinary territorial co-occupation and the three jointly occupied stronghold victory are also supported. Shared desert allocation and Advanced Collection income, including cancellation, are also supported in development fixtures. Tleilaxu revival, combined Occupy battles, the Fremen endgame exception and the complete Duke revival and custody interactions remain unfinished. Consult the feature checklist for the exact tested boundary.',
|
||||
]
|
||||
: f.id === 'moritani'
|
||||
? [
|
||||
@@ -2270,7 +2280,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'Karama can prevent Moritani from acquiring Vidal. That cancellation does not remove him once Moritani already controls him.',
|
||||
'Ecaz gains Vidal through its Ecaz Ambassador if he is neither in the Tanks, captured nor a ghola. Ecaz keeps him until battle use or Moritani takes him. The Ambassador can instead form a consensual alliance when both factions are unallied; Ecaz may then lend Vidal to that new ally for the turn.',
|
||||
'Only Ecaz may revive Vidal, including with Ghola Treachery. Ecaz may revive him for five spice regardless of how many of its leaders are in the Tanks. Five spice is his special revival cost; his printed battle strength is six. Ecaz may begin ordinary leader revival when five leaders are in the Tanks, counting Vidal, even if it still holds another leader.',
|
||||
'The current implementation supports Moritani acquisition, direct Ecaz Ambassador self-acquisition and one-battle use. Ecaz alliance/loan alternatives, reacquisition while already controlled, revival and captured-leader interactions remain unfinished. This shared component does not enable complete Ecaz or Moritani games. Inspection does not commit a battle plan.',
|
||||
'The current implementation supports Moritani acquisition, direct Ecaz Ambassador self-acquisition, consensual Ambassador alliances and one-battle use. Duke loans, reacquisition while already controlled, revival and captured-leader interactions remain unfinished. This shared component does not enable complete Ecaz or Moritani games. Inspection does not commit a battle plan.',
|
||||
],
|
||||
related: [
|
||||
'faction-ecaz',
|
||||
@@ -3086,6 +3096,217 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
],
|
||||
related: ['faction-beneGesserit', 'movement', 'battle', 'victory'],
|
||||
},
|
||||
{
|
||||
id: 'homeworlds',
|
||||
title: 'Homeworlds: population and occupation',
|
||||
category: 'Advanced & expansions',
|
||||
coverage: 'Partial',
|
||||
summary:
|
||||
'Inspect all thirteen Homeworld cards, their population faces and occupied effects. Gameplay integration is in development.',
|
||||
searchText: HOMEWORLD_CARDS.map((card) =>
|
||||
[
|
||||
card.name,
|
||||
...card.high.gameplay,
|
||||
...card.low.gameplay,
|
||||
...card.occupied.gameplay,
|
||||
].join(' '),
|
||||
).join(' '),
|
||||
steps: [
|
||||
'Homeworlds are an optional module from Ecaz & Moritani, available under the official rules with Basic or Advanced play. They are separate locations outside Arrakis; they do not receive ordinary storm movement or count as ordinary strongholds.',
|
||||
'Each faction uses its own card and matching world token. In Basic play the Emperor uses Kaitain alone. Advanced play adds Salusa Secundus for its Sardaukar; movement can transfer both force types between the two Emperor worlds.',
|
||||
'Native reserves determine high or low population. Salusa counts Sardaukar, while the other cards count the faction’s reserves there. Reaching the high face’s minimum restores high population. Occupation also applies the low penalty.',
|
||||
'Low population normally grants one additional free force revival and one additional bank spice when collecting CHOAM Charity. Salusa grants neither bonus; CHOAM’s Tupile reverses the usual pattern by granting an advantage while low and a penalty while high.',
|
||||
'A qualifying charity claim separates its ordinary payer from the extra bank spice. Inflation doubles both portions or prevents the whole collection. Canceling Bene Gesserit charity prevents both portions of that claim.',
|
||||
'Quote a group of normal revivals using population before that group returns. A later group uses the resulting population: a low Fremen group can return four free forces, but returning a smaller group that restores high population can remove the fourth allowance. La La La prevents the full free rate.',
|
||||
'When Southern Hemisphere begins a supported revival at high population, Fremen may place the newly revived starred forces together in one territory already containing their forces, or leave them in reserves. This includes supported ordinary, Emperor-funded and Ghola revivals. Basic keeps the starred counters; Advanced still limits Fedaykin revival to one per turn.',
|
||||
'When Tleilax begins ordinary Free Revival at high population, Tleilaxu may send the newly revived free group together to one permitted territory or Homeworld, or leave it in reserves. Paid counters in the same return and Ghola returns do not join this group. An allied Homeworld is forbidden. Placement costs no additional spice and uses no ordinary shipment or movement allowance.',
|
||||
'The revival placement choice shows unavailable destinations. A return that first restores high population, partial groups, split destinations, Southern storm placement and entry effects requiring a shipment classification remain guarded while their rules are unresolved. Independent revival income waits until placement and supported Ambassador reactions finish; refreshing does not repeat the return or payment.',
|
||||
'While Tupile has at least eleven native forces, CHOAM cannot discard Worthless cards for spice through either ordinary sale price or a CHOAM Ambassador. Non-Worthless duplicate sales, allied trades and the Advanced CHOAM Karama cash-in retain their own rules. If a Ghola revival raises Tupile before a declared sale settles, that Worthless card stays in hand and earns no spice.',
|
||||
'At the end of Bidding, high-population Kaitain lets Emperor pay two spice per selected Treachery Card to discard it. This does not play the card or begin another auction. Emperor and CHOAM share the closing opportunity, so sales, allied trades and paid discards can occur in either order. Current hands, spice and native population determine each action. Finish when ready; a new action clears readiness.',
|
||||
'In supported payment cases, low Kaitain halves Emperor’s Treachery payment income and low Junction halves eligible Guild shipping income, rounded up. The payer still pays the full cost. For example, a five-spice auction payment gives low-population Emperor three spice and leaves two in the bank. The income opportunity shows the original payment, current receipt and bank remainder. A population change before collection updates the split; ordinary Karama can still prevent the separate faction income.',
|
||||
'Guild’s own shipment contribution goes to the bank before any low-Junction reduction. Splits with two odd contributions from other factions remain unavailable while their rounding rule is unresolved; choose another funding split. Single-contributor payments and splits where both rounding interpretations agree remain supported. Occupier income is still unfinished.',
|
||||
'With at least seven native forces on Giedi Prime, Harkonnen automatically gains two bank spice after collecting positive desert spice during Spice Collection, once for the whole phase. Several deposits still earn only two. Shared Ecaz spice qualifies when Harkonnen actually receives a positive allocation; a zero share, stronghold income or technology income does not qualify. Refreshing preserves the completed bonus.',
|
||||
'With fewer than eight native forces on Grumman, Moritani can reveal Terror only when at least three forces enter together. Count each incoming physical counter once, including advisors, and a concealed No-Field as one regardless of its hidden value. Forces already at the destination do not count. Grumman’s high-population Collection token action remains unfinished.',
|
||||
'While Ecaz has at least seven native reserves, it automatically receives three bank spice for each discarded poison weapon, including its own. Poison Blade and Poison Tooth qualify; Chemistry qualifies only when used as a weapon. Poison defenses and Residual Poison do not qualify. Ecaz sees its income in a private Homeworld record; private discarded faces stay private.',
|
||||
'Battle cleanup checks population when each card is actually discarded. Losing-card disposal comes before winner casualties. Mandatory winning cards, including a used Poison Tooth, are discarded after winner casualties and any Ixian substitution, before optional winning-card cleanup. If Ecaz falls below seven during its winning losses, its later card discards earn no poison income.',
|
||||
'If Tleilax starts Revival at low population, it receives no bank income for other factions’ ordinary free revivals throughout that phase, even if its population rises. Paid revival receipts and the separately named Ghola reward remain available.',
|
||||
'Low Caladan prevents the phase-opening Spice Blow peek. Low Wallach IX prevents free Spiritual Advisors, while high Wallach IX allows one or two to Polar Sink after another faction’s qualifying shipment. Accompanying elsewhere still uses one. Low Ix prevents moving the mobile stronghold; low Richese prevents moving a No-Field token. Physical-force movement and ordinary paid shipments retain their separate rules.',
|
||||
'After a supported Atreides victory, Caladan with at least six native reserves may add one reserve force to the battle location if an Atreides force survives there. The owned choice follows ordinary battle cleanup and offers an eligible sector or the original foreign Homeworld. This spends no spice or shipment allowance. Leaving the force in reserves is optional; a battle on Caladan itself cannot create an extra counter from reserves already there.',
|
||||
'Caladan reinforcement keeps the original battle identity through refresh and supported Ambassador reactions, so the same victory cannot add a second force. Placement involving Face Dancer ordering, storm, the mobile stronghold or unresolved entry reactions remains guarded. These guards do not certify those combined rules.',
|
||||
'Low Tupile’s intelligence advantage requires contact with another faction’s Homeworld or that faction’s presence on Tupile, and is usable once per faction. Its public eligibility checks are implemented, but the private disclosure action and occupation-dependent availability remain unfinished.',
|
||||
'While Junction has high population, Guild may offer another faction transport at half or full price during that faction’s shipment. The recipient can choose exact forces from one territory or Homeworld, including a return to their own world. An allied Homeworld remains forbidden. Half-price totals round up; five forces to a Homeworld cost three spice. The Junction route and offered rate resist Karama.',
|
||||
'Homeworld shipment, battle and occupation have special rules. Occupiers receive the printed Collection income and card effects. An alliance can gain a special Homeworld victory through high-population Ecaz; this is separate from ordinary stronghold victory.',
|
||||
'The card collection below is available for reference. Starting a Homeworld game remains disabled while shipment, battles, occupation, economy and faction interactions are being completed.',
|
||||
],
|
||||
example:
|
||||
'Atreides with six reserves on Caladan uses the high face. Dropping to five uses the low face and removes the next-Spice-Blow inspection advantage. Either face adds two to native battle strength on Caladan.',
|
||||
related: [
|
||||
'ecaz-modules',
|
||||
'setup',
|
||||
'revival',
|
||||
'movement',
|
||||
'battle',
|
||||
'victory',
|
||||
],
|
||||
checklist: [
|
||||
{
|
||||
area: 'Implementation',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'All 13 cards, saved typed custody, supported-deck setup, Emperor movement, native Arrakis shipment sources, revival destinations, low charity/free-revival benefits, Tleilax’s phase-start income penalty and high-Salusa free Sardaukar support are connected. World-to-world invasion, Guild transport from Arrakis and Guild native returns use exact source pools, funding and interception. Homeworld battles connect native bonuses, limited explosion casualties, native-only Traitors and Face Dancers, and Ixian substitution. Junction offers connect sponsored board and Homeworld routes, including own returns, foreign departures and their distinct payments. Caladan foresight, Wallach advisor counts, Ix stronghold movement and Richese token movement now respect native population. High Tupile blocks Worthless sales and Ambassador payouts, including after an interrupted Ghola revival. Kaitain paid discards share the closing Bidding opportunity with CHOAM; Ecaz poison income uses actual physical disposal and current native population. Mandatory winning-card disposal follows winner casualties. Supported low Kaitain and Junction payment receipts preserve the payer’s cost and use current native population; divergent allied rounding remains guarded. Giedi grants its once-per-phase bonus on actual positive desert receipts, including settled Ecaz shares. Low Grumman uses original public entry counts across Terror and competing-reaction checks. Southern and Tleilax preserve the exact eligible revival group through one optional placement, with held income and explicit unresolved destination rules. Concealed transport, occupation and remaining card effects are unfinished; game starts stay disabled.',
|
||||
evidence: [
|
||||
'game/homeworld-cards.ts',
|
||||
'game/homeworld-game.ts',
|
||||
'game/homeworld-native-reserves.ts',
|
||||
'game/homeworld-revival-deployment.ts',
|
||||
'game/homeworld-revival-destinations.ts',
|
||||
'game/homeworld-revival-return.ts',
|
||||
'game/homeworld-victory-reinforcement.ts',
|
||||
'game/homeworld-victory-return.ts',
|
||||
'game/homeworld-arrival.ts',
|
||||
'game/tupile-intelligence.ts',
|
||||
'game/homeworld-shipment.ts',
|
||||
'game/guild-homeworld-shipment.ts',
|
||||
'game/junction-transport.ts',
|
||||
'game/junction-offer.ts',
|
||||
'game/homeworld-alliance.ts',
|
||||
'game/homeworld-benefits.ts',
|
||||
'game/homeworld-mobility.ts',
|
||||
'game/homeworld-card-economy.ts',
|
||||
'game/homeworld-payment-income.ts',
|
||||
'game/homeworld-collection.ts',
|
||||
'game/giedi-collection.ts',
|
||||
'game/terror-entry-receipt.ts',
|
||||
'game/bidding-end.ts',
|
||||
'game/ecaz-poison-income.ts',
|
||||
'game/choam-market-ghola.ts',
|
||||
'game/charity.ts',
|
||||
],
|
||||
},
|
||||
{
|
||||
area: 'Player controls',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Card inspection is available in the reference. Development tables display native reserves, explicit Imperial shipment sources, world-to-world shipment and Guild transport from Arrakis with costs and pledged funding, Guild interception, optional Junction half/full offers and typed sponsored transport, transfers between Kaitain and Salusa, charity payment sources, current revival allowances, population-based movement restrictions and one/two-advisor choices, native battle bonuses, Homeworld casualties, replacement controls, Tupile sale explanations, shared end-of-Bidding actions, Ecaz’s private poison-income record, current low-population payment splits, automatic Giedi collection history, count-dependent Ambassador destinations and the optional revived-group placement; starting this module remains unavailable.',
|
||||
evidence: [
|
||||
'components/homeworld-cards.tsx',
|
||||
'components/homeworld-table.tsx',
|
||||
'components/homeworld-revival-deployment.tsx',
|
||||
'components/caladan-reinforcement.tsx',
|
||||
'components/homeworld-shipment.tsx',
|
||||
'components/guild-homeworld-shipment.tsx',
|
||||
'components/junction-transport.tsx',
|
||||
'components/bidding-end.tsx',
|
||||
'components/ecaz-poison-income.tsx',
|
||||
],
|
||||
},
|
||||
{
|
||||
area: 'AI',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Shared public choices supply native shipment counters, Imperial transfers and current low revival allowances. All four profiles use Salusa’s per-type support legality and respect unresolved special-Karama and mid-battle Ghola timing boundaries. All four profiles handle world-to-world shipment, Guild transport from Arrakis, native returns and interception, Homeworld battle choices, typed losses, late defense and supported replacement actions. All four profiles can offer and use Junction transport through public quotes, respect population-based movement restrictions and choose legal Spiritual Advisor quantities. Market choices exclude high-Tupile Worthless sales. All four profiles use the shared closing opportunity for CHOAM actions, affordable Kaitain discards and readiness. Ecaz income needs no separate claim. Concealed transport, occupation and remaining card-effect strategies are unfinished.',
|
||||
evidence: ['game/homeworld-options.ts', 'game/homeworld-shipment-options.ts', 'game/guild-homeworld-shipment-options.ts', 'game/junction-transport-options.ts'],
|
||||
},
|
||||
{
|
||||
area: 'Documentation',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'All 26 faces, global rules and source discrepancies are documented. Imperial shipment and movement controls explain sources, costs and unavailable actions. Card-economy notes explain shared closing actions, private poison income, winner-discard ordering and low-population payment splits. Divergent allied rounding and occupation entitlement remain unresolved; full interaction guidance remains in progress.',
|
||||
evidence: [
|
||||
'docs/HOMEWORLD_COMPONENT_AUDIT.md',
|
||||
'docs/HOMEWORLD_RULES.md',
|
||||
'docs/HOMEWORLD_RUNTIME_IMPLEMENTATION.md',
|
||||
'docs/HOMEWORLD_BENEFITS_RULES.md',
|
||||
'docs/HOMEWORLD_REVIVAL_DEPLOYMENT_RULES.md',
|
||||
'docs/HOMEWORLD_REVIVAL_DEPLOYMENT_INTEGRATION.md',
|
||||
'docs/HOMEWORLD_REVIVAL_DEPLOYMENT_RUNTIME.md',
|
||||
'docs/HOMEWORLD_COMBAT_IMPLEMENTATION.md',
|
||||
'docs/HOMEWORLD_BATTLE_RUNTIME.md',
|
||||
'docs/HOMEWORLD_SHIPMENT_RUNTIME.md',
|
||||
'docs/GUILD_HOMEWORLD_TRANSPORT_RUNTIME.md',
|
||||
'docs/JUNCTION_TRANSPORT_RULES.md',
|
||||
'docs/JUNCTION_TRANSPORT_RUNTIME.md',
|
||||
'docs/HOMEWORLD_MOBILITY_RULES.md',
|
||||
'docs/HOMEWORLD_MOBILITY_RUNTIME.md',
|
||||
'docs/HOMEWORLD_CARD_ECONOMY_RULES.md',
|
||||
'docs/HOMEWORLD_CARD_ECONOMY_RUNTIME.md',
|
||||
'docs/HOMEWORLD_PAYMENT_INCOME_RULES.md',
|
||||
'docs/HOMEWORLD_PAYMENT_INCOME_RUNTIME.md',
|
||||
'docs/HOMEWORLD_COLLECTION_RULES.md',
|
||||
'docs/HOMEWORLD_COLLECTION_INTEGRATION.md',
|
||||
'docs/HOMEWORLD_COLLECTION_RUNTIME.md',
|
||||
'docs/ECAZ_POISON_INCOME_RULES.md',
|
||||
],
|
||||
},
|
||||
{
|
||||
area: 'Verification',
|
||||
status: 'Partial',
|
||||
detail:
|
||||
'Tests cover genuine setup with implemented decks, Basic special-counter identity, actual transfer/shipment/revival, saved-state rejection and competing database submissions. Complete Homeworld games and module combinations are not yet verified.',
|
||||
evidence: [
|
||||
'tests/homeworld-custody.test.ts',
|
||||
'tests/homeworld-cards.test.ts',
|
||||
'tests/homeworld-payment-income.test.ts',
|
||||
'tests/homeworld-payment-income-engine.test.ts',
|
||||
'tests/homeworld-payment-income-recovery.test.ts',
|
||||
'tests/homeworld-collection.test.ts',
|
||||
'tests/homeworld-collection-engine.test.ts',
|
||||
'tests/homeworld-collection-recovery.test.ts',
|
||||
'tests/homeworld-grumman-engine.test.ts',
|
||||
'tests/homeworld-grumman-recovery.test.ts',
|
||||
'tests/homeworld-setup-engine.test.ts',
|
||||
'tests/homeworld-actions-engine.test.ts',
|
||||
'tests/homeworld-basic-counters.test.ts',
|
||||
'tests/homeworld-salusa-engine.test.ts',
|
||||
'tests/homeworld-combat.test.ts',
|
||||
'tests/homeworld-battle-resolution.test.ts',
|
||||
'tests/homeworld-battle-engine.test.ts',
|
||||
'tests/homeworld-battle-recovery.test.ts',
|
||||
'tests/homeworld-shipment-engine.test.ts',
|
||||
'tests/homeworld-shipment-recovery.test.ts',
|
||||
'tests/homeworld-shipment-controls.test.ts',
|
||||
'tests/homeworld-shipment-review.test.ts',
|
||||
'tests/guild-homeworld-shipment-engine.test.ts',
|
||||
'tests/guild-homeworld-shipment-recovery.test.ts',
|
||||
'tests/guild-homeworld-shipment-controls.test.ts',
|
||||
'tests/junction-transport.test.ts',
|
||||
'tests/junction-transport-engine.test.ts',
|
||||
'tests/junction-transport-recovery.test.ts',
|
||||
'tests/junction-transport-controls.test.ts',
|
||||
'tests/junction-transport-review.test.ts',
|
||||
'tests/homeworld-card-economy.test.ts',
|
||||
'tests/homeworld-tupile-sales-engine.test.ts',
|
||||
'tests/homeworld-tupile-sales-recovery.test.ts',
|
||||
'tests/bidding-end-engine.test.ts',
|
||||
'tests/bidding-end-controls.test.ts',
|
||||
'tests/bidding-end-recovery.test.ts',
|
||||
'tests/ecaz-poison-income.test.ts',
|
||||
'tests/ecaz-poison-income-engine.test.ts',
|
||||
'tests/homeworld-mobility.test.ts',
|
||||
'tests/homeworld-mobility-engine.test.ts',
|
||||
'tests/homeworld-mobility-recovery.test.ts',
|
||||
'tests/homeworld-spiritual-advisors.test.ts',
|
||||
'tests/homeworld-spiritual-advisors-recovery.test.ts',
|
||||
'tests/homeworld-advisor-ambassador.test.ts',
|
||||
'tests/homeworld-replacement-engine.test.ts',
|
||||
'tests/homeworld-recovery.test.ts',
|
||||
'tests/homeworld-charity-engine.test.ts',
|
||||
'tests/homeworld-revival-benefits-engine.test.ts',
|
||||
'tests/homeworld-revival-deployment.test.ts',
|
||||
'tests/homeworld-revival-return.test.ts',
|
||||
'tests/homeworld-revival-destinations.test.ts',
|
||||
'tests/homeworld-revival-deployment-engine.test.ts',
|
||||
'tests/homeworld-revival-deployment-controls.test.ts',
|
||||
'tests/homeworld-revival-deployment-recovery.test.ts',
|
||||
'tests/homeworld-victory-reinforcement.test.ts',
|
||||
'tests/caladan-reinforcement-controls.test.ts',
|
||||
'tests/homeworld-victory-reinforcement-recovery.test.ts',
|
||||
'tests/tupile-intelligence.test.ts',
|
||||
'tests/homeworld-benefits-recovery.test.ts',
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
...[
|
||||
[
|
||||
'ix-modules',
|
||||
@@ -3138,6 +3359,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'faction-moritani',
|
||||
'moritani-terror',
|
||||
'ecaz-ambassadors',
|
||||
'homeworlds',
|
||||
'implementation-checklist',
|
||||
]
|
||||
: []),
|
||||
|
||||
Reference in new issue
Block a user