export type AffixOp = "add" | "mul"; export interface AffixDef { id: string; stat: string; op?: AffixOp; roll: number | [number, number]; weight: number; /** Lowest item level whose roll pool includes this affix; omitted means every level. */ minLevel?: number; namePart?: { position: "prefix" | "suffix"; text: string; }; } export interface AffixPool { id: string; affixes: readonly AffixDef[]; } export interface RarityTier { id: string; weight: number; affixCount: number | [number, number]; statScale?: number; namePart?: string; pools?: readonly string[]; } export interface ItemBaseDef { id: string; name: string; baseStats: Record; pools: readonly string[]; } export interface RollerConfig { pools: readonly AffixPool[]; rarities: readonly RarityTier[]; } export interface RolledAffix { id: string; stat: string; op: AffixOp; value: number; } export interface RolledItem { baseId: string; rarity: string; name: string; affixes: readonly RolledAffix[]; stats: Record; } export { seededRng } from "../random/rng.js"; export interface AffixRoller { rollRarity(rng: () => number): RarityTier; roll(base: ItemBaseDef, rarityId: string, rng: () => number): RolledItem; rollRandom(base: ItemBaseDef, rng: () => number): RolledItem; } /** * Rolls randomized gear from a base item: a weighted rarity tier scales base stats and picks * prefix/suffix affixes that name and modify the item. Deterministic for a given `rng`. * * @capability affix-roller roll randomized gear (guns, armor, loot) with rarity tiers, stat scaling and prefix/suffix affixes from a seed */ export declare function createAffixRoller(config: RollerConfig): AffixRoller;