Support staged group Fremen revival grants
Verify and publish checkpoint container / container (push) Canceled after 0s

This commit is contained in:
Quintine committed 2026-10-28 23:37:46 +11:00
1 parent 9081249574
commit d8d2e7207b
9 files changed
+277 -15

No files matched your search

+5 -3
View File
@@ -656,7 +656,7 @@ import { quoteEcazPoisonIncome, EcazPoisonIncomeError, type EcazPoisonDiscard }
import { resolveBattleWeapons } from './effective-weapons';
import { choamGholaEvent, choamGholaSkillOfferEvent, choamGholaSkillSignature, choamMarketGholaError, choamSaleGholaTiming, type ChoamMarketGhola } from './choam-market-ghola';
import { quoteAdvisorPreparationWindow, quoteAdvisorPreparation, validateAdvisorPreparation, projectAdvisorPreparationWindow, AdvisorPreparationError, type AdvisorPreparationWindow, type AdvisorPreparationSource } from './advisor-preparation-window';
import { quoteFremenRevivalGrant, validateFremenRevivalGrant, projectFremenRevivalGrant, FremenRevivalGrantError, type FremenRevivalGrantSource } from './fremen-revival-grant';
import { quoteFremenRevivalGrant, validateFremenRevivalGrant, projectFremenRevivalGrant, projectFremenGroupRevivalGrant, FremenRevivalGrantError, type FremenRevivalGrantSource } from './fremen-revival-grant';
import { splitOrdinaryPayments, type OrdinaryPayment } from './ordinary-payment-plan';
import {
charityAmount,
@@ -44722,10 +44722,11 @@ function applyActionInner(
return g;
}
if (t === 'grantRevival') {
requireRule(g.phase === 4 && p.faction === 'fremen' && p.ally,
requireRule(g.phase === 4 && p.faction === 'fremen',
'Only Fremen may grant their ally free revival during revival.');
requireRule(!recruitsInteractionPending(g), 'Finish the current revival transaction or priority window before granting allied revival.');
const source = fremenRevivalGrantRule(() => quoteFremenRevivalGrant(g, id));
const target = projectFremenGroupRevivalGrant(g, id) ? stringField(action.target) : undefined;
const source = fremenRevivalGrantRule(() => quoteFremenRevivalGrant(g, id, target));
g.response = { kind: 'fremenRevivalGrant', owner: source.owner,
recipient: source.recipient, fremenGrant: source, passed: [] };
return g;
@@ -46979,6 +46980,7 @@ export function viewGame(state: Game, id: string, now?: number) {
freeRevival: g.freeRevival ?? [],
recruitsPreview: recruitsPreview(g, me),
fremenRevivalGrant: projectFremenRevivalGrant(g, id),
fremenGroupRevivalGrant: projectFremenGroupRevivalGrant(g, id),
advisorPreparation: advisorPreparationView(g, id),
revivalRules: {
...(g.revivalRules ?? newRevivalRules()),