Compose classic independent cards with World Nexus rules

Retain independent36, original Homeworlds and Nexus12 through classic fresh setup with optional Skills and phase modules. Resolve own-World Reinforcements fees before computing temporary Sardaukar roles, preserving original Cunning declarations, printed traits and physical counters. Record the provisional ordinary-nonrole-first policy and align human/AI quotes and captions.

Validation: types/lint/build, 128 affected tests across 15 files, bounded rule-source review and finite original-action smoke for Recruits, Harass, local-fee Cunning, all four legal policies and rendered source controls. Verified runtime c219ec587a54b44079539168d93835a5af904c8afb4de58bcec0a3d60c809f0c; documentation-only proof update 8ee21598e7be0c89a08fbad50786c346ebc8ae705492d8b31ea00fae0ffefa3c. Full modes, combinations, assurance and deployed acceptance remain open. No saved-room/provider changes.
This commit is contained in:
Quintine committed 2026-10-18 10:20:08 +11:00
1 parent 178251ad35
commit 97c2b67650
18 files changed
+737 -30

No files matched your search

+3 -2
View File
@@ -1293,8 +1293,9 @@ export function GameTable({
{classicNexusPreview && (
<p className="notice" role="status">
Classic Nexus reactions preview · Basic/Advanced classic factions, original base33
or selected independent36 Treachery, optionally all14 Leader Skills. Homeworld/Nexus
core currently keeps base33; independent World cards remain a separate preview boundary.
or selected independent36 Treachery, optionally all14 Leader Skills and Homeworlds.
Own-World Reinforcements fees provisionally spend ordinary non-role counters first,
reducing temporary Sardaukar roles only when converted counters pay.
Original Tech (3+ seats) and Advanced Strongholds (2+ seats) may compose. Native reactions
retain original card, force and payment authority. Acknowledgement timing and
purchase/bonus ordering remain provisional. Other modules and complete Nexus
+5 -3
View File
@@ -23,9 +23,11 @@ export function NexusSardaukar({ game, act, busy }: Props) {
return (
<section aria-label="Emperor Nexus active" className="notice">
<p>
Five ordinary Emperor counters count as Sardaukar for this battle.
They remain ordinary physical counters; any losses go to the ordinary
Tanks.
Cunning declared five ordinary Emperor counters as Sardaukar for this
battle. An own-Homeworld reserve fee can reduce that group;
the selected plan shows the remaining combat pool. These counters
retain their ordinary physical identity and go to the ordinary Tanks
when lost.
</p>
</section>
);
+1 -1
View File
@@ -31,6 +31,6 @@ export function ReinforcementsSources({ game, choices, selected, onChange, busy
{choices.length > 1 && <p className="fine" aria-live="polite">
Selected fee: {reinforcementsSourceLabel(game, choices[selected])}.
</p>}
<p className="notice">Provisional own-World composition: counters paying the fee cannot also fund your physical dial. The original printed face and support traits stay fixed; the bonus adds no physical counters.</p>
<p className="notice">Provisional own-World composition: counters paying the fee cannot also fund your physical dial. Ordinary counters without a temporary Sardaukar role pay first; if needed, paying converted counters reduces that role. The original printed face and support traits stay fixed; the bonus adds no physical counters.</p>
</fieldset>;
}