export interface SnapshotUnit { id: string; stats: Readonly>; } export interface BoardSnapshot { ownerId: string; units: readonly SnapshotUnit[]; stats: Readonly>; seed: number; capturedAt: number; } export interface SerializeBoardArgs { ownerId: string; units: readonly SnapshotUnit[]; stats?: Readonly>; seed?: number; capturedAt?: number; } /** @internal */ export declare function serializeBoard(args: SerializeBoardArgs): BoardSnapshot; /** @internal */ export declare function cloneSnapshot(snapshot: BoardSnapshot): BoardSnapshot; export interface CombatRules { attackStat: string; healthStat: string; maxRounds?: number; critChance?: number; critMultiplier?: number; } export type CombatSide = "a" | "b" | "draw"; export interface ReplayBlow { round: number; attacker: CombatSide; attackerUnit: string; defenderUnit: string; damage: number; crit: boolean; defenderHealthAfter: number; } export interface ReplayResult { winner: CombatSide; rounds: number; blows: readonly ReplayBlow[]; survivorsA: readonly string[]; survivorsB: readonly string[]; } /** @internal */ export declare function replayCombat(a: BoardSnapshot, b: BoardSnapshot, rules: CombatRules): ReplayResult;