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

+27
View File
@@ -16,6 +16,9 @@ export function FremenRevivalGrant({
const grant = game.fremenRevivalGrant;
const me = game.players.find((player) => player.id === game.me);
const group = game.fremenGroupRevivalGrant;
const orderedAutomatedAlly = (recipient: string) =>
game.advanced && !!game.revivalOrder && game.revivalOrder.remaining.includes(recipient) &&
game.players.some(player => player.id === recipient && (player.bot || player.autopilot));
if (group && game.status === 'playing' && game.phase === 4 && me?.faction === 'fremen') {
const busyWindow = busy || !!game.truthtrance || !!game.nexusTraitors?.pending;
return (
@@ -35,6 +38,18 @@ export function FremenRevivalGrant({
onClick={() => act({type:'grantRevival', target:option.recipient})}>
Grant {name} free revival <ArrowRight size={15} />
</Button>
{orderedAutomatedAlly(option.recipient) && !option.granted && !option.blocked && <>
<p className="fine">An automated ally may wait for your grant when it would help. You can let it continue without waiting and may still grant later while Revival remains open.</p>
<Button data-testid={`fremen-revival-wait-release-${option.recipient}`}
className="game-action" disabled={busyWindow || !!option.waitReleased}
onClick={() => {
if (!busyWindow && !option.waitReleased)
act({type:'releaseFremenRevivalWait', target:option.recipient});
}}>
Continue without waiting <ArrowRight size={15} />
</Button>
{option.waitReleased && <p className="fine">{name} can continue without waiting for your grant.</p>}
</>}
</div>;
})}
</section>
@@ -58,6 +73,18 @@ export function FremenRevivalGrant({
(automatedAlly?.bot || automatedAlly?.autopilot) && !grant.granted && !grant.blocked && (
<p className="fine">When this grant would help your automated ally, it waits to revive forces until you grant it or select Ready for next phase.</p>
)}
{orderedAutomatedAlly(grant.recipient) && !grant.granted && !grant.blocked && <>
<p className="fine">An automated ally may wait for your grant when it would help. You can let it continue without waiting and may still grant later while Revival remains open.</p>
<Button data-testid={`fremen-revival-wait-release-${grant.recipient}`}
className="game-action" disabled={disabled || !!grant.waitReleased}
onClick={() => {
if (!disabled && !grant.waitReleased)
act({type:'releaseFremenRevivalWait', target:grant.recipient});
}}>
Continue without waiting <ArrowRight size={15} />
</Button>
{grant.waitReleased && <p className="fine">{recipient} can continue without waiting for your grant.</p>}
</>}
<p className="fine">
Provisional current-rate policy: Recruits doubles the current granted rate, including applicable bonuses,
before caps. Without other bonuses, three becomes six.