Allow chosen Reinforcements reserve costs
Verify and publish checkpoint container / container (push) Successful in 11m11s

This commit is contained in:
Quintine committed 2026-10-29 04:41:26 +11:00
1 parent 9dd386ff7a
commit 1cf90f1328
16 files changed
+419 -44

No files matched your search

+8 -7
View File
@@ -9,10 +9,10 @@ import {
import { quoteReinforcements, ReinforcementsError } from './reinforcements';
type Cost = ReturnType<typeof quoteReinforcements>;
function nativeCost(context: HomeworldCustodyContext, actor: string): Cost {
function nativeCost(context: HomeworldCustodyContext, actor: string, selectedElite?: number): Cost {
const seat = context.players.find(player => player.id === actor);
if (!seat) throw new NativeReserveError('Reinforcements needs its seated native reserve owner.');
return quoteReinforcements(seat.reserves - seat.eliteReserves, seat.eliteReserves);
return quoteReinforcements(seat.reserves - seat.eliteReserves, seat.eliteReserves, selectedElite);
}
function sourceOptions(context: HomeworldCustodyContext, custody: HomeworldCustody,
actor: string, cost: Cost): NativeReserveSelections[] {
@@ -37,18 +37,19 @@ function sourceOptions(context: HomeworldCustodyContext, custody: HomeworldCusto
return options;
}
/** Public physical alternatives for the existing normal-first fee. Enumeration
/** Public physical alternatives for the chosen typed fee, normal-first by default. Enumeration
* does not select a source, move counters or grant permission to play a card. */
export function reinforcementsHomeworldSources(context: HomeworldCustodyContext,
custody: HomeworldCustody, actor: string): NativeReserveSelections[] {
return sourceOptions(context, custody, actor, nativeCost(context, actor));
custody: HomeworldCustody, actor: string, selectedElite?: number): NativeReserveSelections[] {
return sourceOptions(context, custody, actor, nativeCost(context, actor, selectedElite));
}
/** Exact native withdrawal; the caller commits matching Tanks and observes
* population only after this whole fee. Ambiguous sources must be declared. */
export function quoteReinforcementsHomeworldCost(context: HomeworldCustodyContext,
custody: HomeworldCustody, actor: string, selections?: NativeReserveSelections) {
const cost = nativeCost(context, actor);
custody: HomeworldCustody, actor: string, selections?: NativeReserveSelections,
selectedElite?: number) {
const cost = nativeCost(context, actor, selectedElite);
let sources = selections;
if (sources === undefined) {
const options = sourceOptions(context, custody, actor, cost);