Coordinate Fremen grants in ordered revival
Verify and publish checkpoint container / container (push) Canceled after 0s

This commit is contained in:
Quintine committed 2026-10-29 09:19:17 +11:00
1 parent 64706cc7e0
commit 220d78c779
11 files changed
+429 -12

No files matched your search

+10 -5
View File
@@ -4665,14 +4665,19 @@ export function botActions(g: GameView): Action[] {
: [{ type: 'endMovement' }];
}
/** In concurrent Basic Revival, let a human Fremen decide its existing grant
* before its automated ally spends or finishes. Ready is the normal way to
* finish that decision; responses and unrelated actions remain available. */
/** Let a human Fremen decide a useful grant before an automated ally spends or
* finishes. Ordered Advanced uses a per-recipient release; concurrent Basic
* retains its normal Ready release. Responses and unrelated actions continue. */
function waitsForHumanFremenGrant(g: Game, player: Game['players'][number]): boolean {
if (g.status !== 'playing' || g.advanced || g.phase !== 4 || g.revivalOrder ||
const ordered = g.advanced && !!g.revivalOrder;
if (g.status !== 'playing' || g.phase !== 4 || (g.advanced && !ordered) ||
(!g.advanced && !!g.revivalOrder) ||
(ordered && g.revivalOrder!.remaining[0] !== player.id) ||
player.tanks <= 0 || revivalPrevented(g, player.id)) return false;
const fremen = g.players.find(seat => seat.faction === 'fremen');
if (!fremen || fremen.bot || fremen.autopilot || g.ready.includes(fremen.id) ||
if (!fremen || fremen.bot || fremen.autopilot || (!ordered && g.ready.includes(fremen.id)) ||
(ordered && g.fremenRevivalWaitRelease?.turn === g.turn &&
g.fremenRevivalWaitRelease.recipients.includes(player.id)) ||
fremenRevivalGrantBlock(g, fremen.id, player.id) !== null) return false;
const current = freeRevivalRemaining(g, player);
const granted = freeRevivalRemaining({ ...g, freeRevival: [...g.freeRevival, player.id] }, player);