import type { CombatStance } from './messages.js'; export type EquipSlot = 'helmet' /** Eye patches, a gold tooth, a scar, an earring or a beard ribbon (pirateCosmetics.ts): one face piece at a time. */ | 'face' | 'cape' | 'amulet' | 'top' | 'bottom' | 'boots' | 'weapon' | 'offhand' | 'hands' | 'ring' | 'ammo' /** The quiver on the back: sets how many arrows the ammo slot holds. */ | 'quiver'; export declare const EQUIP_SLOTS: EquipSlot[]; /** * Arrows the ammo slot holds with no quiver: a fistful in the belt. A quiver * raises it (QUIVER_CAPACITY); equipping a bigger stack leaves the rest in * the bag. Stacks equipped before quivers existed are not trimmed. */ export declare const AMMO_CAPACITY_BARE = 30; /** Arrows each quiver holds. Wood and metal bindings: bigger metal, bigger quiver. */ export declare const QUIVER_CAPACITY: Record; export declare function ammoCapacityFor(quiverKind: string | null | undefined): number; export declare function isQuiverKind(kind: string | null | undefined): boolean; export type EquipmentSlots = Record; export type EquipInfo = { slot: EquipSlot; armour: number; damageMin: number; damageMax: number; /** Maximum tiles away this weapon can initiate combat. */ attackInitiationRange?: number; /** Mastery level needed to equip a combat weapon. */ masteryRequirement?: number; /** True when the weapon requires both hands, preventing off-hand items. */ twoHanded?: boolean; /** Combat level needed to wear a piece of armour (the Frozen set, frozenSet.ts). */ combatRequirement?: number; }; export declare const MELEE_ATTACK_INITIATION_RANGE = 1; /** A thrown dagger starts a fight from four tiles. */ export declare const THROWN_ATTACK_INITIATION_RANGE = 4; /** Bow tiers initiate combat at 5 then 8 tiles, respectively. */ export declare const BOW_ATTACK_INITIATION_RANGES: readonly [5, 8]; export declare const EQUIP_INFO: Record; export declare const EQUIP_SLOT_LABELS: Record; export declare function equipInfoFor(kind: string): EquipInfo | null; export declare function isEquippableKind(kind: string): boolean; export declare function isCombatWeaponKind(kind: string): boolean; export declare function weaponMasteryRequirement(kind: string | null | undefined): number; /** Combat begins from this many tiles away; melee weapons remain adjacent-only. */ export declare function attackInitiationRangeForWeapon(kind: string | null | undefined): number; export declare function isThrownWeaponKind(kind: string | null | undefined): boolean; export declare function isRangedWeaponKind(kind: string | null | undefined): boolean; export declare function isTwoHandedWeaponKind(kind: string | null | undefined): boolean; export declare function isAmmoKind(kind: string | null | undefined): boolean; /** Persist ammo stack size beside the slot kinds in the Mixed equipment blob. */ export declare function packEquipment(slots: EquipmentSlots, ammoQty: number): EquipmentSlots & { ammoQty: number; }; export declare function unpackAmmoQty(raw: unknown, ammoKind: string | null): number; /** * The offensive skill a weapon actually uses. Derived from what is equipped * rather than a manual toggle, so the stat panel and the damage roll can never * disagree with the weapon in hand. */ export declare function stanceForWeapon(weaponKind: string | null | undefined): CombatStance; export declare function emptyEquipment(): EquipmentSlots; export declare function normalizeEquipment(raw: unknown): EquipmentSlots; export declare function normalizeWeaponPrecision(raw: unknown, weaponKind: string | null): number | null; export declare function equipmentArmour(slots: EquipmentSlots): number; export declare function playerDamageRange(primaryLevel: number, precisionLevel: number, weaponKind: string | null, weaponPrecision?: number | null, _stance?: CombatStance, ammoKind?: string | null): { min: number; max: number; }; //# sourceMappingURL=equipment.d.ts.map