Admit clean Ix Stone and Mirror with existing revealed priorities
This commit is contained in:
1 parent
842fd72761
commit
f50dda6078
16 files changed
+411
-54
No files matched your search
@@ -94,9 +94,9 @@ export function cardPresentation(card: VisibleCard): CardPresentation {
|
||||
: richese.card.effect === 'semutaDrug'
|
||||
? 'The explicit Semuta development preview offers neutral responses after clean public ordinary-card discards, paid Box disposal, retired Ornithopter movement (including a following Bene Gesserit Intrusion), Distrans, ordinary and queued definite Truthtrance answers, four Sapho scopes, unready pre-leader Residual Poison, printed Karama cancelling CHOAM Charity/Inflation/Bene Gesserit Charity, native capture/Auditor/battle-income/Ix-substitution/Basic allied-retention powers, or settling a normal-auction purchase or winning bid, a completed CHOAM sale, clean Kulon, proactive or reactive La La La/Baliset, proactive/final-Mentat Trip to Gamont with an ordinary/elite force or concealed No-Field, accepted Jubba Cloak before storm protection, Ix-deck Thumper/Amal, three battle discard stages (including before original Tech award, native Advanced capture, Face Dance, quoted CHOAM income or Auditor) and private normal-auction or Black Market Ixian ally replacements. Acquiring a printed cancellation cost never restores its canceled effect. Tech requires a supported fresh 3–6-seat CHOAM/optional-Ix profile. Native Ixian casualty substitution keeps its original before-Tooth order. Native Basic Moritani cleanup offers only unkept played cards after the original choice and Karama response, preserving its kept card and unchanged original retention pool. The Basic Richese/Moritani CHOAM/Ecaz entry also adds private Sabotage and Robbery overflow after clean shipment/movement arrivals, preserving the original victim/draw and arrival suffix. Commitment is owner-only; the approved full-hand exchange spends Semuta without increasing your completed hand. Other pending rewards, producers, nested responses and normal expansion starts remain unfinished.'
|
||||
: richese.card.effect === 'mirrorWeapon'
|
||||
? 'Mirror Weapon works in bounded CHOAM/Richese-deck classic-faction battles; copied Tooth and Stone choices resolve separately, and a winning physical Mirror may be kept even after copying Tooth or Artillery. This winner-retention treatment is a user-selected interpretation, not an official clarification. Combined modes and full Richese starts remain gated.'
|
||||
? 'Mirror Weapon works in supported CHOAM/Richese-deck tables, including clean selected Ix profiles and Advanced native Ecaz/Moritani. Copied Tooth or Stone chooses before its original; a winning physical Mirror may be kept after copied Tooth or Artillery under the user-selected retention interpretation. Original Stone/Tooth uses the visibly provisional Stone-first order. Other profile/module and full-start gates remain.'
|
||||
: richese.card.effect === 'stoneBurner'
|
||||
? 'Stone Burner has development battle controls. Combined allocation timing and Ix timing remain guarded; full expansion starts stay disabled.'
|
||||
? 'Stone Burner has development controls, including clean selected CHOAM/Ix profiles. Original Stone provisionally chooses before uncopied Tooth; Mirror copies still choose first as printed. Winner-changing physical allocations and other profile/module boundaries remain guarded; full expansion starts stay disabled.'
|
||||
: 'Richese effect integration and verification are incomplete. Karama, Distrans, Nullentropy Box, Ornithopter, Residual Poison, Portable Snooper, Stone Burner and Mirror Weapon have bounded card handlers; full expansion starts remain disabled.',
|
||||
topics: RULE_TOPICS.filter(
|
||||
(topic) =>
|
||||
|
||||
+3
-2
@@ -21041,8 +21041,9 @@ function stonePublicPools(
|
||||
: [pool];
|
||||
}
|
||||
function stoneTimingBlock(g: Game): string | null {
|
||||
return g.expansions.includes('ix')
|
||||
? 'Stone Burner with the Ix expansion is awaiting a ruling on its simultaneous revealed choice with Poison Tooth. This implementation boundary applies before either hidden plan is submitted.'
|
||||
if (!g.expansions.includes('ix')) return null;
|
||||
return mirrorWeaponModeBlock(g)
|
||||
? 'Stone Burner with Ix needs the clean selected CHOAM/Ix profile without combined optional modules; the public allocation guard still applies.'
|
||||
: null;
|
||||
}
|
||||
function stoneOccupyContext(g: Game): StoneBurnerContext | undefined {
|
||||
|
||||
@@ -3,6 +3,7 @@ import type { FactionId } from './catalog';
|
||||
const supported = new Set<FactionId>([
|
||||
'atreides', 'harkonnen', 'emperor', 'guild', 'beneGesserit', 'fremen',
|
||||
'choam', 'richese', 'ecaz', 'moritani',
|
||||
'ixians', 'tleilaxu',
|
||||
]);
|
||||
|
||||
/** Public configuration only: never inspect an opponent's hand or sealed plan. */
|
||||
@@ -15,12 +16,16 @@ export function mirrorWeaponModeBlock(g: {
|
||||
leaderSkills?: unknown;
|
||||
discoveries?: unknown;
|
||||
sandtrout?: boolean;
|
||||
techTokens?: unknown;
|
||||
strongholdCards?: unknown;
|
||||
}): string | null {
|
||||
if (!g.expansions.includes('choam') ||
|
||||
g.expansions.some(id => id !== 'choam' && id !== 'ecaz') ||
|
||||
g.expansions.some(id => id !== 'choam' && id !== 'ecaz' && id !== 'ix') ||
|
||||
(g.expansions.includes('ecaz') && g.advanced !== true) ||
|
||||
g.players.some((p) => !supported.has(p.faction)))
|
||||
return 'Mirror Weapon currently needs CHOAM/Richese with classic or native Ecaz/Moritani factions; Ix timing remains unresolved.';
|
||||
return 'Mirror Weapon needs selected CHOAM/Richese with supported native factions; Ecaz/Moritani combinations require Advanced.';
|
||||
if (g.expansions.includes('ix') && (g.techTokens || g.strongholdCards))
|
||||
return 'Ix-deck Stone/Mirror with Tech Tokens or Stronghold Cards remains outside this clean profile.';
|
||||
if (g.homeworlds || g.nexusCards || g.leaderSkills || g.discoveries || g.sandtrout)
|
||||
return 'Mirror Weapon with combined optional modules is still being integrated.';
|
||||
return null;
|
||||
|
||||
+25
-4
@@ -1108,7 +1108,8 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'Compare the number of physical force tokens not dialed into battle. The aggressor wins a tie. Dialed losses and spice support still follow their normal rules; elite strength is not an extra physical token.',
|
||||
'With Harass & Withdraw, this prototype provisionally compares undialed tokens remaining after successful withdrawal. An opposing successful Traitor cancels the return and decides the outcome instead. In Occupy, only the card user’s pool returns; original fixed Ecaz commitment and the other ally’s undialed counters remain. This timing is an explicit implementation interpretation, not a publisher ruling.',
|
||||
'In the existing native Advanced Occupy prototype, Reinforcements still pays its original own-reserve cost with same-plan, opposing or Mirror-copied Stone. Its +2 normal-score bonus adds no physical undialed tokens, dial, support or on-board casualties. Original mode choices, Traitor precedence and physical Stone/Mirror retention remain unchanged; other profile/module boundaries stay.',
|
||||
'The plan editor checks the chosen dial and support against every projected public opposing force possibility. If legal force allocations could change the winner, commitment is blocked until that combined timing is supported. Ix expansion timing involving Poison Tooth also remains guarded pending its ordering ruling. Opposing hidden No-Field values are not inspected.',
|
||||
'The plan editor checks dial/support against every public opposing force possibility, never a hidden plan or No-Field value. Winner-changing physical allocations remain guarded. Clean selected CHOAM/Ix profiles now reuse the existing provisional original Stone-first, then uncopied Tooth order; Mirror copies still choose before their originals as printed. The earlier priority question remains unanswered.',
|
||||
'Clean Ix admission excludes Homeworlds, Nexus, Leader Skills, Discoveries, active Sandtrout, Tech Tokens and Stronghold Cards. Native Ecaz/Moritani combinations remain Advanced-only. Other non-Ix profile behavior and full expansion/public-start gates are unchanged.',
|
||||
'Traitor and Lasgun–shield explosion precedence remain intact. Ordinary bounty applies unless another effect suppresses it. Stone Burner uses the general winning battle-card retention rule: a winner may keep it, and a losing played card is discarded. Normal Moritani ally retention may apply.',
|
||||
'The post-reveal choice is bound to the current battle event and cannot be repeated after refresh. Review both revealed plans and select one mode; there is no separate victim or death confirmation.',
|
||||
],
|
||||
@@ -1158,6 +1159,8 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
'tests/stone-harass-runtime.test.ts',
|
||||
'tests/ecaz-occupy-harass-quote.test.ts',
|
||||
'tests/stone-reinforcements.test.ts',
|
||||
'tests/ix-revealed-weapons.test.ts',
|
||||
'tests/fixture-ix-revealed-weapons.ts',
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -1184,9 +1187,9 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
: definition.card.effect === 'residualPoison'
|
||||
? 'Use the Residual Poison panel before either combatant commits a leader. A shared preparation step provides an opportunity regardless of hand contents; advanced Harkonnen tables remain guarded pending the secret-captive ruling. In the explicit Semuta preview, a clean death with no readiness or inspection commitments pauses after public disposal for the neutral offer, then resumes the same preparation.'
|
||||
: definition.card.effect === 'stoneBurner'
|
||||
? 'Use Stone Burner in the battle weapon selector and review the chosen dial/support guard before sealing. Choose the leader effect after revelation; combined timing remains guarded.'
|
||||
? 'Use Stone Burner in the weapon selector and review public dial/support feasibility before sealing. Clean selected CHOAM/Ix now uses visibly provisional original Stone-first then uncopied Tooth order; copy-first and physical allocation guards remain.'
|
||||
: definition.card.effect === 'mirrorWeapon'
|
||||
? 'Choose Mirror Weapon in the battle weapon slot in a supported CHOAM/Richese-deck table. Its attack copies the opposing revealed weapon; copied Tooth or Stone choices resolve first and independently. Under the user-selected interpretation, a winning physical Mirror may be retained even after a copied Tooth or Artillery attack. Full Richese starts and combined modules remain guarded.'
|
||||
? 'Choose physical Mirror in a supported CHOAM/Richese-deck table, including clean selected Ix and Advanced Ecaz/Moritani. Copied Tooth or Stone chooses before its original. The user-selected winning physical-Mirror retention still applies after copied Tooth or Artillery. Original Stone/Tooth provisionally uses Stone-first order. Other profile/module and public-start gates remain.'
|
||||
: definition.card.effect === 'portableSnooper'
|
||||
? 'Choose Portable Snooper as your ordinary poison defense, or use the late-defense panel after reveal before your own traitor decision. It uses ordinary winner retention and cannot stop Poison Tooth.'
|
||||
: definition.card.effect === 'semutaDrug'
|
||||
@@ -1321,7 +1324,25 @@ export const RULE_TOPICS: RuleTopic[] = [
|
||||
},
|
||||
],
|
||||
}
|
||||
: {}),
|
||||
: definition.card.effect === 'mirrorWeapon'
|
||||
? { checklist: [
|
||||
{ area: 'Implementation' as const, status: 'Partial' as const,
|
||||
detail: 'Canonical physical Mirror, copy-first answers and physical retention compose with clean selected Ixian/Tleilaxu pools and original Advanced Occupy. Public feasibility and other profile/module boundaries remain.',
|
||||
evidence: ['game/mirror-weapon-mode.ts', 'game/effective-weapons.ts', 'game/engine.ts'] },
|
||||
{ area: 'Player controls' as const, status: 'Partial' as const,
|
||||
detail: 'Actual weapon selectors, independent copied choices and original retention are usable. Ix original Stone/Tooth priority is visibly provisional before commitment and during revelation.',
|
||||
evidence: ['components/battle-preparation.tsx', 'components/game-table.tsx'] },
|
||||
{ area: 'AI' as const, status: 'Partial' as const,
|
||||
detail: 'All four profiles have legal clean-Ix candidate and original/copy continuation paths. This is not strategy or difficulty calibration.',
|
||||
evidence: ['game/bots.ts', 'tests/ix-revealed-weapons.test.ts'] },
|
||||
{ area: 'Documentation' as const, status: 'Partial' as const,
|
||||
detail: 'Printed copy-first, user-selected physical retention and provisional original Stone/Tooth priority are distinguished. Combined modules and full-mode acceptance remain separate.',
|
||||
evidence: ['docs/MIRROR_WEAPON_ENGINE_AUDIT.md', 'docs/STONE_BURNER_ENGINE_AUDIT.md'] },
|
||||
{ area: 'Verification' as const, status: 'Partial' as const,
|
||||
detail: 'Original Matrix/engine proof plus genuine native setup with explicit conserved battle staging covers Basic/Advanced, both native force pools, original/copy modes, public ambiguity and Advanced fixed/variable Occupy. Mobile and policy proof is bounded, not unstaged complete-game or final assurance certification.',
|
||||
evidence: ['tests/ix-revealed-weapons.test.ts', 'tests/fixture-ix-revealed-weapons.ts', 'tests/mirror-weapon-engine.test.ts'] },
|
||||
] }
|
||||
: {}),
|
||||
related: [
|
||||
'richese-cards',
|
||||
'choam-modules',
|
||||
|
||||
Reference in new issue
Block a user