Connect supplied Advanced Fremen Ecaz two-sietch victory allowance
This commit is contained in:
1 parent
d438d923a3
commit
0315917987
7 files changed
+54
-17
No files matched your search
@@ -102,7 +102,7 @@ export const FACTION_RULES: Record<
|
||||
'Bring reserves to the Great Flat or one territory within two territories of it for no spice, subject to storm and occupancy restrictions. Ordinary movement has range two, or three when eligible for ornithopters.',
|
||||
'Worms do not devour Fremen. After the Nexus, move some or all forces from the worm territory to a legal destination. The destination’s existing forces survive.',
|
||||
'You choose whether a worm spares your ally and whether to grant your ally three free force revivals. These benefits are optional.',
|
||||
'At the final turn, the special victory requires Sietch Tabr and Habbanya Sietch to be empty or occupied by Fremen, with no Atreides, Harkonnen or Emperor in Tuek’s Sietch. The specific Ecaz alliance exception permits Fremen and Ecaz to share Sietch Tabr; it does not waive the other conditions or extend to Habbanya Sietch. Advanced Richese also prevents this victory while occupying Tuek’s Sietch.',
|
||||
'Basic final-turn victory requires protected sietches empty or occupied by Fremen and no Atreides/Harkonnen/Emperor in Tuek. Reciprocal allied Ecaz cooccupation is permitted at Sietch Tabr only; other conditions remain. Advanced follows the separate supplied two-sietch allowance below.',
|
||||
],
|
||||
advanced: [
|
||||
'Once per game during Spice Blow and Nexus, spend Karama to call Shai-Hulud in sand. Resolve destruction and optional protections immediately; Nexus follows at the end of the blow, with eligible Fremen rides afterward. The called worm consumes no spice-deck card.',
|
||||
@@ -110,6 +110,7 @@ export const FACTION_RULES: Record<
|
||||
'Additional worms after the first in a spice blow can be placed in a sand territory chosen by Fremen.',
|
||||
'Fremen loses half its forces, rounded up, to storm exposure. Reserves may arrive under storm at half loss. Ordinary movement and worm rides may not enter or leave storm.',
|
||||
'Three Fedaykin tokens count as two forces in battle and casualties. Only one may be revived per turn. All Fremen forces fight at full strength without spice support.',
|
||||
'Supplied Advanced p32 permits reciprocal Ecaz/Fremen cooccupation in both Sietch Tabr and Habbanya Sietch for the final-turn special victory. Ecaz without Fremen still blocks. Richese also blocks Tuek in Advanced; prior ordinary victory and Guild fallback ordering remain unchanged.',
|
||||
],
|
||||
},
|
||||
guild: {
|
||||
|
||||
@@ -18,10 +18,10 @@ export type FremenVictoryProgress = {
|
||||
tueksBlockers: string[];
|
||||
};
|
||||
|
||||
/** Public current-board facts for the Fremen final-turn victory condition.
|
||||
* Turn timing, prior stronghold winners and the Guild fallback belong to the
|
||||
* victory quote. The only Ecaz exception established here is co-occupied
|
||||
* Sietch Tabr; the same forces still block Habbanya Ridge Sietch. */
|
||||
/** Public settled-board facts. Basic keeps the publisher's Tabr-only Ecaz
|
||||
* exception; supplied Advanced PDF p32 permits coexisting allies in both
|
||||
* protected sietches. Timing, earlier winners and Guild fallback remain
|
||||
* the victory quote's responsibility. */
|
||||
export function fremenSpecialVictory(
|
||||
g: BoardContext,
|
||||
): FremenVictoryProgress | null {
|
||||
@@ -58,7 +58,7 @@ export function fremenSpecialVictory(
|
||||
if (player.id === fremen.id || fighterCount(player, territory) === 0)
|
||||
return false;
|
||||
return !(
|
||||
territory === 'sietch_tabr' &&
|
||||
(g.advanced || territory === 'sietch_tabr') &&
|
||||
ecazCooccupation &&
|
||||
player.id === ecaz!.id
|
||||
);
|
||||
|
||||
+4
-4
@@ -146,7 +146,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 one exact physical group across the planet or return it to reserves. In classic games its normal half-price rate can be canceled separately from its transport permission. 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. Basic ordinary physical reserve shipments may also enter allied territory before movement, provided the visiting group departs during that turn. Storm and stronghold capacity remain binding. The table visibly labels its provisional no-exit policy: excess new visitors still present when the turn ends go to Tanks, without destroying the ally or granting an extra move. Concealed No-Fields, optional arrivals and Advanced entry remain separate.',
|
||||
'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 and shared desert allocation are supported. Allied Ecaz and Fremen together in Sietch Tabr do not block the Fremen final-turn victory; its other conditions still apply. Combined combat and the Habbanya extension remain unfinished.',
|
||||
'Ecaz and its reciprocal ally may share territories and count as one faction toward stronghold capacity, without extra movement or storm/Homeworld exceptions. Their three-joint-stronghold victory and desert allocation are connected. Fremen/Ecaz cooccupation permits the Fremen special win in Sietch Tabr in Basic; supplied Advanced p32 permits both Tabr and Habbanya Sietch. Other victory conditions and exceptional combined interactions remain separate.',
|
||||
'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.',
|
||||
'In Advanced, finishing your turn sends your own fighters in territories shared with your ally to Tanks, even if your ally acts later or the alliance formed this turn. Polar Sink, Bene Gesserit advisor coexistence in either direction and native Ecaz peaceful coexistence are exempt. The finish warning names affected territories without revealing concealed forces. Loss is mandatory, not a separate confirmation; finishing remains legal if you cannot escape.',
|
||||
@@ -3177,7 +3177,7 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'On turn ten, a normal stronghold victory comes first. Otherwise, check Fremen’s special condition, then award the game to Guild and its ally if present. If Guild is absent, Fremen and its ally win even when the usual Fremen special condition fails.',
|
||||
'When neither Guild nor Fremen is playing and nobody has reached the normal target, compare individual qualifying stronghold counts. Every player tied for the highest count wins. A correct Bene Gesserit prediction can replace this stronghold win.',
|
||||
'With tech tokens enabled, owning all three adds one stronghold. One player must hold all three, even in an alliance. If several sides reach their target at the same check, they share a normal win before any correct prediction replaces it.',
|
||||
'The table’s Stronghold victory progress shows current qualifying territories, a complete Tech Token set, Ecaz joint occupation and Fremen’s final-turn conditions. Allied Ecaz and Fremen may co-occupy Sietch Tabr without blocking that special win; solitary or non-allied Ecaz does not receive this exception. Tech Tokens cannot supply a jointly occupied territory. These public counts do not resolve a private prediction or award victory before the proper checkpoint.',
|
||||
'Stronghold victory progress shows current territories, a complete Tech Token set, Ecaz joint occupation and Fremen final-turn conditions. Basic permits reciprocal Fremen/Ecaz cooccupation at Tabr; supplied Advanced p32 permits both protected sietches. Solitary/nonallied Ecaz still blocks. Public counts do not award victory before the proper checkpoint; Tech Tokens cannot supply joint occupation.',
|
||||
'Other expansion additions to victory remain in development. Advanced preview supports the six classic factions; expansion starts remain disabled.',
|
||||
],
|
||||
example:
|
||||
@@ -3204,10 +3204,10 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'The public victory guide lists the three territories and any blocking factions. It uses the same settled-board facts as automatic victory resolution. No extra confirmation is required; the table chronicle explains a successful special victory.',
|
||||
],
|
||||
checklist: [
|
||||
{ area: 'Implementation', status: 'Partial', detail: 'The source-confirmed Sietch Tabr exception is connected in Basic and Advanced. Habbanya symmetry and broader expansion acceptance remain incomplete.', evidence: ['game/fremen-victory.ts', 'game/victory-quote.ts', 'game/engine.ts'] },
|
||||
{ area: 'Implementation', status: 'Partial', detail: 'Basic Tabr-only and supplied Advanced p32 two-sietch cooccupation allowances share public progress and the real final-turn quote. Broader expansion acceptance remains separate.', evidence: ['game/fremen-victory.ts', 'game/victory-quote.ts', 'game/engine.ts'] },
|
||||
{ area: 'Player controls', status: 'Implemented', detail: 'Read-only public territory conditions and blockers; victory resolves at the existing checkpoint without a new decision.', evidence: ['components/victory-progress.tsx', 'components/game-table.tsx'] },
|
||||
{ area: 'AI', status: 'Partial', detail: 'All four profiles reach the automatic outcome through legal final-turn actions. Strategic defense of this allied exception is not separately calibrated.', evidence: ['tests/fremen-ecaz-victory-engine.test.ts'] },
|
||||
{ area: 'Documentation', status: 'Implemented', detail: 'The explicit FAQ exception is separated from the unsupported Habbanya extension.', evidence: ['docs/ECAZ_VICTORY_RULES.md', 'game/reference.ts'] },
|
||||
{ area: 'Documentation', status: 'Implemented', detail: 'Publisher Basic Tabr exception and authorized Advanced two-sietch cutover are distinguished.', evidence: ['docs/ECAZ_VICTORY_RULES.md', 'game/reference.ts'] },
|
||||
{ area: 'Verification', status: 'Partial', detail: 'Public presence, precedence, all-profile continuation, JSON and authenticated SQLite recovery are covered. Final-turn positions are explicitly staged after genuine setup.', evidence: ['tests/fremen-victory.test.ts', 'tests/fremen-victory-controls.test.tsx', 'tests/fremen-ecaz-victory-engine.test.ts', 'tests/fremen-ecaz-victory-recovery.test.ts'] },
|
||||
],
|
||||
related: ['victory', 'faction-fremen', 'faction-ecaz'],
|
||||
|
||||
Reference in new issue
Block a user