23 lines
896 B
TypeScript
23 lines
896 B
TypeScript
import {
|
|
controllerStrongholdTarget,
|
|
physicalControllerCount,
|
|
type TwoPlayerControllers,
|
|
} from './two-player-controllers';
|
|
|
|
/** GF9's optional two-member alliance / three-stronghold variant. The
|
|
* two-person four-stronghold rule still applies, as do ordinary solo targets.
|
|
* Callers add any separately agreed increase after this base target. */
|
|
export function allianceVictoryTarget(
|
|
seats: readonly string[],
|
|
controllers: TwoPlayerControllers | null | undefined,
|
|
allied: boolean,
|
|
shortAlliance?: boolean,
|
|
): 3 | 4 {
|
|
if (shortAlliance !== undefined && typeof shortAlliance !== 'boolean')
|
|
throw new TypeError('Choose whether the shorter alliance victory option is enabled.');
|
|
const target = controllerStrongholdTarget(seats, controllers, allied);
|
|
if (shortAlliance === true && allied && physicalControllerCount(seats, controllers) >= 3)
|
|
return 3;
|
|
return target;
|
|
}
|