Enable Basic Richese Semuta in Nexus games
Verify and publish checkpoint container / container (push) Successful in 10m35s
Verify and publish checkpoint container / container (push) Successful in 10m35s
This commit is contained in:
1 parent
7680e1ee69
commit
5b66628399
13 files changed
+494
-15
No files matched your search
+18
-1
@@ -8092,6 +8092,7 @@ function semutaHomeworldRoster(g: Game): boolean {
|
||||
function semutaTruthOrderProfile(g: Game): boolean {
|
||||
if (bareBasicSemutaProfile(g) || semutaHomeworldRoster(g)) return true;
|
||||
if (selectedDiscoverySkillsSemutaProfile(g)) return true;
|
||||
if (g.semutaPreview === true && !g.advanced && semutaNexusProfile(g)) return true;
|
||||
return g.semutaPreview === true && g.expansions.length === 1 && g.expansions[0] === 'choam' &&
|
||||
!!byFaction(g, 'richese') && g.players.every(p => p.faction === 'richese' ||
|
||||
p.faction === 'choam' || CLASSIC_FACTIONS[p.faction] === true) &&
|
||||
@@ -10164,7 +10165,12 @@ function semutaOfferSupported(
|
||||
? ordinaryDiscardIncomeMatches(g, continuation)
|
||||
: continuation.kind === 'ornithopterDiscard' && continuation.source === 'cunning'
|
||||
? continuation.resume.response?.kind === 'nexusGuildCunning'
|
||||
: !continuation.resume.response) && !continuation.resume.decision &&
|
||||
: !continuation.resume.response) &&
|
||||
(!continuation.resume.decision || continuation.kind === 'truthtranceDiscard' &&
|
||||
ordinaryAuctionDiscard && !g.advanced && semutaNexusProfile(g) &&
|
||||
continuation.resume.decision.kind === 'auctionPayment' &&
|
||||
continuation.resume.decision.player === g.auction?.bidder &&
|
||||
(!g.pendingTreacheryDiscard || !!g.pendingTreacheryDiscard.reaction)) &&
|
||||
!continuation.resume.pendingKarama &&
|
||||
(continuation.kind === 'amalDiscard'
|
||||
? continuation.resume.phaseOpening?.passed.length === 0
|
||||
@@ -11190,6 +11196,16 @@ function publicSemutaDiscoveryProfile(g: Game): boolean {
|
||||
!g.homeworlds && !g.nexusCards && g.discoveryEnabled === true && !g.ecazTreachery &&
|
||||
!g.leaderSkills && !g.kullPreview && !g.nexusKullPreview && discoveryModuleProfile(g);
|
||||
}
|
||||
/** Fresh Basic CHOAM-deck Nexus starts retain the existing native Semuta path. */
|
||||
function publicSemutaNexusProfile(g: Game): boolean {
|
||||
return g.status === 'lobby' && g.advanced === false &&
|
||||
g.players.length >= 2 && g.players.length <= 6 &&
|
||||
g.expansions.length === 1 && g.expansions[0] === 'choam' && !!byFaction(g, 'richese') &&
|
||||
g.players.every(p => p.faction === 'richese' || p.faction === 'choam' || CLASSIC_FACTIONS[p.faction] === true) &&
|
||||
!!g.nexusCards && !g.homeworlds && !g.discoveryEnabled && !g.ecazTreachery && !g.leaderSkills &&
|
||||
!g.techTokens && !g.strongholdCards && !g.twoPlayerControllers && !g.shortAllianceVictory &&
|
||||
!g.coalitionPreview && !g.kullPreview && !g.nexusKullPreview;
|
||||
}
|
||||
/** Route a normal start through the existing genuine setup for the selected modules. */
|
||||
function startModules(state: Game): Game {
|
||||
const options = state.lobbyOptions ?? {};
|
||||
@@ -11221,6 +11237,7 @@ function startModules(state: Game): Game {
|
||||
// also selected; unsupported combinations must reject, not silently omit cards.
|
||||
if (options.ecazTreachery) return initializeEcazTreacheryGameForAudit(g);
|
||||
if (g.nexusCards) {
|
||||
if (publicSemutaNexusProfile(g)) return initializeSemutaGameForAudit(g);
|
||||
const natives: Record<string, [string, string]> = { ix: ['ixians', 'tleilaxu'], choam: ['choam', 'richese'], ecaz: ['ecaz', 'moritani'] };
|
||||
const pair = g.expansions.length === 1 ? natives[g.expansions[0]] : undefined;
|
||||
return pair && pair.every(id => g.players.some(p => p.faction === id))
|
||||
|
||||
Reference in new issue
Block a user