import type { StatModifier, StatModifierSet, Stats } from "../stats/statModifiers.js"; export interface RunModifierOffer { id: string; weight: number; maxStacks?: number; label?: string; stats?: StatModifierSet; data?: TData; } export interface RunModifierPick { id: string; stacks: number; } export interface RunModifierStack { add(offerId: string): boolean; count(offerId: string): number; atMax(offerId: string): boolean; picks(): RunModifierPick[]; offer(offerId: string): RunModifierOffer | null; total(stat: TStat): StatModifier; apply(stats: Stats, sourceId?: string): void; clear(): void; } export declare function createRunModifierStack(offers: readonly RunModifierOffer[]): RunModifierStack; export interface RunDraftConfig { offers: readonly RunModifierOffer[]; rng?: () => number; } export interface RunDraft { present(count: number, rng?: () => number): RunModifierOffer[]; choose(offerId: string): boolean; stack(): RunModifierStack; } /** * A roguelike run built from stacking drafted modifier picks that reshape the run. * * @capability run-modifiers a roguelike run built from stacking drafted modifier picks */ export declare function createRunDraft(config: RunDraftConfig): RunDraft;