Enable Basic Nexus Kull and native reactions
Verify and publish checkpoint container / container (push) Successful in 11m12s
Verify and publish checkpoint container / container (push) Successful in 11m12s
This commit is contained in:
1 parent
5b66628399
commit
95ebd7f976
15 files changed
+388
-21
No files matched your search
@@ -36,6 +36,20 @@ type NexusCoreConfiguration = Partial<FactionModuleProfile> & Pick<FactionModule
|
||||
sandtrout?: unknown; moritaniAssassinatePreview?: unknown;
|
||||
};
|
||||
|
||||
/** The pre-existing Nexus Kull audit also accepts Advanced CHOAM/classic
|
||||
* seats; retain its native reaction stamps without opening a public mode. */
|
||||
function nexusKullCore(game: NexusCoreConfiguration): boolean {
|
||||
return typeof game.advanced === 'boolean' && !!game.nexusCards &&
|
||||
game.kullPreview === true && game.nexusKullPreview === true && !game.semutaPreview &&
|
||||
game.expansions.length === 2 && game.expansions.includes('ix') && game.expansions.includes('choam') &&
|
||||
!!game.players?.some(player => player.faction === 'choam') &&
|
||||
game.players.every(player => player.faction === 'choam' ||
|
||||
FACTIONS.some(faction => faction.id === player.faction && faction.expansion === 'base')) &&
|
||||
!game.homeworlds && !game.leaderSkills && !game.techTokens && !game.strongholdCards &&
|
||||
!game.ecazTreachery && !game.discoveryEnabled && !game.discoveries && !game.discoveryStash &&
|
||||
!game.greatMaker && !game.advancedPreview && !game.richeseBetrayalPreview;
|
||||
}
|
||||
|
||||
/** Classic Nexus12 with selected base33/independent36, optional all14, original
|
||||
* Homeworlds and phase modules. Native effect stamps are not selected overlays. */
|
||||
export function classicNexusCoreProfile(game: NexusCoreConfiguration): boolean {
|
||||
@@ -79,6 +93,27 @@ export function selectedDiscoverySkillsSemutaProfile(game: NexusCoreConfiguratio
|
||||
selectedDiscoveryWithoutCardsProfile({...game, semutaPreview: undefined});
|
||||
}
|
||||
|
||||
/** Fresh Basic E1/E2 Nexus without additional modules. Native reaction stamps
|
||||
* are part of this core; Semuta and Nexus Kull keep their physical prerequisites. */
|
||||
function basicNativeNexusCore(game: NexusCoreConfiguration): boolean {
|
||||
const players = game.players;
|
||||
if (game.advanced !== false || !game.nexusCards || !players || !game.expansions.length ||
|
||||
!game.expansions.every(id => id === 'ix' || id === 'choam') ||
|
||||
game.homeworlds || game.leaderSkills || game.techTokens || game.strongholdCards ||
|
||||
game.ecazTreachery || game.discoveryEnabled || game.discoveries || game.discoveryStash || game.greatMaker ||
|
||||
game.advancedPreview || game.richeseBetrayalPreview) return false;
|
||||
if (game.semutaPreview && (game.semutaPreview !== true || game.kullPreview || game.nexusKullPreview ||
|
||||
!game.expansions.includes('choam') || !players.some(player => player.faction === 'richese'))) return false;
|
||||
if (game.kullPreview || game.nexusKullPreview) {
|
||||
if (game.kullPreview !== true || game.nexusKullPreview !== true || game.semutaPreview ||
|
||||
game.expansions.length !== 2 || !game.expansions.includes('ix') || !game.expansions.includes('choam') ||
|
||||
!players.some(player => player.faction === 'choam') ||
|
||||
players.some(player => player.faction !== 'choam' &&
|
||||
!FACTIONS.some(faction => faction.id === player.faction && faction.expansion === 'base'))) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Original selected decks do not require their native factions or the
|
||||
* independent three-card variant. Hidden E3/Harkonnen compositions retain
|
||||
* their existing separately scoped paths. */
|
||||
@@ -88,7 +123,7 @@ export function selectedNexusWithoutCardsProfile(game: NexusCoreConfiguration):
|
||||
!game.expansions.length || !nexusCoreRosterProfile(game, true, game.discoveryEnabled === true)) return false;
|
||||
if (game.advanced && players.some(player => player.faction === 'harkonnen') &&
|
||||
players.some(player => player.faction === 'ecaz' || player.faction === 'moritani')) return false;
|
||||
return game.expansions.some(expansion => !players.some(player =>
|
||||
return basicNativeNexusCore(game) || game.expansions.some(expansion => !players.some(player =>
|
||||
FACTIONS.some(faction => faction.id === player.faction && faction.expansion === expansion)));
|
||||
}
|
||||
|
||||
@@ -100,11 +135,12 @@ export function nexusCoreProfile(game: NexusCoreConfiguration): boolean {
|
||||
|
||||
function nexusCoreRosterProfile(game: NexusCoreConfiguration, selectedDecks: boolean, discovery = false): boolean {
|
||||
const players = game.players;
|
||||
const basicNative = selectedDecks && (basicNativeNexusCore(game) || nexusKullCore(game));
|
||||
if (typeof game.advanced !== 'boolean' || (!discovery && !game.nexusCards) ||
|
||||
!players || players.length < (game.techTokens ? 3 : 2) || players.length > 6 ||
|
||||
(game.strongholdCards && !game.advanced) ||
|
||||
(!discovery && (game.discoveryEnabled || game.discoveries || game.discoveryStash || game.greatMaker)) ||
|
||||
game.semutaPreview || game.advancedPreview || game.kullPreview || game.nexusKullPreview ||
|
||||
(game.semutaPreview || game.kullPreview || game.nexusKullPreview) && !basicNative || game.advancedPreview ||
|
||||
game.richeseBetrayalPreview ||
|
||||
(!game.nexusCards && (game.guildBetrayalPreview || game.nexusIxianReplacementPreview ||
|
||||
game.nexusIxianBetrayalPreview || game.nexusHarkonnenBetrayalPreview)) ||
|
||||
|
||||
Reference in new issue
Block a user