Allow Semuta after Basic Moritani Atomics
Verify and publish checkpoint container / container (push) Successful in 11m15s

This commit is contained in:
Quintine committed 2026-10-29 06:02:39 +11:00
1 parent 4f990db52e
commit a9b67a89b3
6 files changed
+247 -1

No files matched your search

+14 -1
View File
@@ -9169,6 +9169,9 @@ function treacheryDiscardIntegrity(g: Game) {
: entry.resume === 'none' && (entry.cause !== 'homeworldRevival' || !!entry.revivalArrival)) &&
['shipment', 'movement', 'guildTransport', 'advisor', 'wormRide', 'homeworldRevival', 'caladanReinforcement', 'ambassador'].includes(entry.cause) &&
entry.entrant !== owner?.id && entry.territory === aftermath.territory &&
!!g.moritaniAtomics &&
(['territory', 'turn', 'moritaniId', 'allyAtActivation', 'alliancePolicy', 'nexusPlacement'] as const)
.every(key => aftermath[key] === g.moritaniAtomics![key]) &&
terrorEntryLocationAllowed(g,entry) && validGameLocation(g, entry.territory, entry.sector) &&
token?.kind === 'atomics' && token.status === 'removed' &&
token.location === null &&
@@ -9616,6 +9619,7 @@ function semutaOfferSupported(
continuation.kind !== 'nullentropyDiscard' &&
continuation.kind !== 'distransDiscard' &&
continuation.kind !== 'terrorDiscard' &&
continuation.kind !== 'terrorAtomics' &&
continuation.kind !== 'nexusChoamTrade' &&
continuation.kind !== 'nexusChoamBetrayal' &&
continuation.kind !== 'saphoTruthOrderDiscard' &&
@@ -9743,6 +9747,13 @@ function semutaOfferSupported(
g.pendingChoamMove || g.pendingIxMove ||
g.pendingFremenMove || g.ornithopter || g.summonedWorm ||
g.wormRides.length > 0)) return false;
if (continuation.kind === 'terrorAtomics' &&
(g.advanced || g.phase !== 5 || continuation.entry.resume !== 'none' ||
!['shipment', 'movement'].includes(continuation.entry.cause) ||
!!g.pendingArrivalOverlap || !!g.pendingAmbassador ||
!!g.pendingChoamMove || !!g.pendingIxMove || !!g.pendingFremenMove ||
!!g.ornithopter || !!g.summonedWorm || g.wormRides.length > 0 ||
!!g.pendingTreacheryDiscard && !g.pendingTreacheryDiscard.reaction)) return false;
const allianceNexusDiscard = continuation.kind === 'truthtranceDiscard' && !!continuation.allianceBinding &&
g.phase === 1 && g.nexus && bareBasicSemutaProfile(g) && alliancePromiseModeSupported(g);
if ((continuation.kind === 'distransDiscard' ||
@@ -9771,6 +9782,7 @@ function semutaOfferSupported(
// without a reaction. Keep its original automatic continuation; newly
// staged offers and already-saved reactions retain the current rules.
const independentNativeDiscard = ambassadorDiscard || continuation.kind === 'terrorDiscard' ||
continuation.kind === 'terrorAtomics' ||
continuation.kind === 'choamSaleDiscard' || continuation.kind === 'choamKulonDiscard' ||
continuation.kind === 'choamLaLaLaDiscard' || continuation.kind === 'choamBalisetDiscard' ||
continuation.kind === 'choamGamontDiscard' || continuation.kind === 'choamJubbaDiscard' ||
@@ -9819,7 +9831,7 @@ function semutaOfferSupported(
g.status === 'playing' &&
g.players.some(p => p.faction === 'richese') &&
entries.length > 0 &&
(ambassadorDiscard || continuation.kind === 'kaitainDiscard' || continuation.kind === 'tupileCleanupDiscard' ||
(ambassadorDiscard || continuation.kind === 'terrorAtomics' || continuation.kind === 'kaitainDiscard' || continuation.kind === 'tupileCleanupDiscard' ||
(continuation.kind === 'specialKaramaDiscard' && continuation.stage === 'cashout')
? entries.every(entry => !entry.publicFace)
: continuation.kind === 'ixAllyCard' || continuation.kind === 'terrorDiscard' ||
@@ -9896,6 +9908,7 @@ function semutaOfferSupported(
continuation.kind === 'tupileCleanupDiscard' ||
continuation.kind === 'ixAllyCard' ||
continuation.kind === 'terrorDiscard' ||
continuation.kind === 'terrorAtomics' ||
continuation.kind === 'nexusChoamTrade' ||
continuation.kind === 'nexusChoamBetrayal' ||
continuation.kind === 'choamSaleDiscard' ||