Connect independent-card battle and arrival reactions
Verify and publish checkpoint container / container (push) Canceled after 0s

This commit is contained in:
Quintine committed 2026-10-28 22:34:39 +11:00
1 parent 4d769af8c7
commit 6719245f40
10 files changed
+464 -9

No files matched your search

+12 -4
View File
@@ -9520,9 +9520,16 @@ function semutaOfferSupported(
if (continuation.kind === 'thumperDiscard' &&
(g.summonedBeforeBlow || g.summonedWorm || g.wormRides.length > 0 ||
g.pendingFremenMove || g.pendingIxMove || g.pendingChoamMove)) return false;
// A discard saved before this preview expansion may already be pending
// without a reaction. Keep its original automatic continuation; newly
// staged offers and already-saved reactions retain the current rules.
return (g.semutaPreview === true || g.semutaRecruitsPreview === true &&
basicIndependentSemutaProfile(g) && continuation.kind === 'ordinaryCardDiscard' &&
['hajr', 'ghola', 'harvester', 'weather', 'atomics'].includes(continuation.effect)) &&
(!g.pendingTreacheryDiscard || !!g.pendingTreacheryDiscard.reaction) &&
basicIndependentSemutaProfile(g) &&
(continuation.kind === 'ordinaryCardDiscard' &&
['hajr', 'ghola', 'harvester', 'weather', 'atomics'].includes(continuation.effect) ||
continuation.kind === 'battleResolved' || continuation.kind === 'winnerMandatoryDiscard' ||
continuation.kind === 'battleCleanup' && continuation.source === 'winner')) &&
g.status === 'playing' &&
g.players.some(p => p.faction === 'richese') &&
entries.length > 0 &&
@@ -23252,7 +23259,7 @@ function ambassadorEffectBlock(
): string | null {
if (g.pendingArrivalOverlap && (effect === 'fremen' || effect === 'guild') &&
!bareBasicNativeArrivalOverlap(g))
return 'This overlapping Ambassador-created arrival is only available in the bare Basic faction preview.';
return 'This overlapping Ambassador-created arrival is available in the supported Basic faction and independent-card previews.';
if (!implementedAmbassadorEffects.includes(effect))
return 'This Ambassador effect is still being implemented.';
if (effect === 'ecaz') {
@@ -23283,7 +23290,8 @@ function bareBasicNativeArrivalOverlap(g: Game): boolean {
// selection alone is not an optional phase module or a new arrival effect.
return !g.advanced && selectedPhaseModuleRoster(g) && !!byFaction(g, 'ecaz') && !!byFaction(g, 'moritani') &&
!g.homeworlds && !g.nexusCards && !g.leaderSkills && !g.techTokens && !g.strongholdCards &&
!g.discoveryEnabled && !g.discoveries && !g.discoveryStash && !g.greatMaker && !g.ecazTreachery;
!g.discoveryEnabled && !g.discoveries && !g.discoveryStash && !g.greatMaker &&
(!g.ecazTreachery || selectedIndependentCardsProfile(g));
}
function arrivalOverlapModeSupported(g: Game, revivalArrival?: RevivalEntryParent): boolean {
if (bareBasicNativeArrivalOverlap(g)) return true;