'use client'; import type { Action, GameView } from '@/game/engine'; import { recruitsPlayAction } from '@/game/recruits'; import { faction } from '@/game/catalog'; import { Button } from '@/components/ui/button'; export function Recruits({ game, act, busy }: { game: GameView; act: (action: Action) => void; busy: boolean; }) { const offer = game.recruitsPreview; if (!offer || game.status !== 'playing' || game.phase !== 4 || (!offer.active && !offer.play)) return null; const action = recruitsPlayAction(offer); return (

Recruits{offer.active ? ' · Active this turn' : ''}

{offer.active ? 'Free revival rates are doubled for this turn. The ordinary force limit is seven; factions with unlimited revival keep that advantage.' : 'Play this card to double every faction’s free revival rate and raise the ordinary force limit to seven for this turn. Factions with unlimited revival keep that advantage.'}

Already completed revivals still count. Paid forces retain their normal prices, and special-force revival limits still apply.

Provisional late-play accounting: prior paid revivals keep their payments and count toward the total force limit, but only recorded free returns consume the doubled free allowance. No refund or retroactive reclassification. This is a first-version policy, not a publisher clarification or numerical user ruling.

{game.homeworlds &&

Provisional current-rate composition: double the native free rate including its low-population bonus, capped by the seven-force total. Later separate requests recheck population and recorded free use; accepted returns keep their price. Normal and special counters retain native destinations and special-force limits.

} {offer.rates.map((rate) => ( ))}
Current revival rates
FactionFree rateForce limit
{faction(game.players.find((p) => p.id === rate.player)!.faction).name} {rate.freeRate} {rate.limit === 20 ? 'Unlimited' : rate.limit}
{offer.play && ( <> {offer.play.blocked &&

{offer.play.blocked}

} )}
); }