/** The categories `helix item-def scaffold --category` accepts — the keys of every table below. */ export declare const ITEM_DEF_CATEGORIES: readonly ["Rifle", "Pistol", "SMG", "Shotgun", "Sniper", "LMG", "Launcher", "Grenade"]; export type ItemDefCategory = (typeof ITEM_DEF_CATEGORIES)[number]; export declare function isItemDefCategory(value: unknown): value is ItemDefCategory; export declare const ITEM_DEF_SYSTEM_ID = "humanoid-character"; export declare const ITEM_DEF_SYSTEM_RANGE = "^0.3.0"; /** The skeleton constant the publish pipeline stamps (publish_weapon_items.mjs SKELETON). */ export declare const ITEM_DEF_SKELETON = "helix-humanoid@1"; /** The CLI-shipped default sound pack (assets/item-def-sounds), resolved from src/ and dist/ alike. */ export declare const ITEM_DEF_SOUND_PACK_DIR: string; export type SpreadTable = { exponent: number; heatToSpreadDeg: [number, number][]; heatPerShot: [number, number][]; coolPerSecond: [number, number][]; recoveryDelayS: number; adsMul: number; moveAddDeg: number; airAddDeg: number; landAddDeg: number; crouchMul: number; /** Optional exactly as on the engine's profile: its INERT_SPREAD carries neither, and a cone that is * always zero has nothing for a first-shot rule to say. */ firstShotAccuracy?: boolean; firstShotNeedsAds?: boolean; }; /** Engine-authored spread baselines, FULL cone degrees (Lyra convention). Every curve carries >=2 keys * where the engine requires it — a single-key heat curve silently pins heat to that key's x. */ export declare const SPREAD_BY_CATEGORY: Readonly>; export type ReloadCues = { out: string[]; in: string[]; charge: string[]; }; /** Reload foley cues per category, paths relative to the CLI-shipped pack. Each list is round-robin * VARIANTS of one cue, never a sequence. Shotgun and Launcher deliberately take the rifle mag cues (the * reload choreography is one mag pantomime for every weapon — see the engine table's header). `null` is * the engine's MISSING entry: nothing reloads a grenade, so the descriptor carries no reload block. */ export declare const RELOAD_BY_CATEGORY: Readonly>; /** Default shot packs, paths relative to the CLI-shipped pack; every category shares the dry-fire click. * The pack ships no launcher report, so the grenade suite's punch-close layers stand in as the LAUNCH; * the grenade's own "shot" is the pin cue — `shots` fires on the throw press. */ export declare const SHOTS_BY_CATEGORY: Readonly>; export declare const DRY_FIRE_SOUND = "Common/A_DryShot.ogg"; /** `fire.kind: 'projectile'` ballistics — the block the engine's requireProjectile bounds. */ export type ProjectileBlock = { speedMps: number; gravityMps2: number; radiusM: number; blastRadiusM: number; maxRangeM: number; }; /** `fire.kind: 'thrown'` release — the block the engine's requireThrown bounds. */ export type ThrownBlock = { releaseS: number; speedMps: number; upBias: number; }; export type CategoryArchetype = { rpm: number; mode: 'auto' | 'semi'; /** `fire.kind`. 'hitscan' is emitted as ABSENT — the shape every generated weapon carries. */ kind: 'hitscan' | 'projectile' | 'thrown'; clip: number; reserve: number; damageBase: number; pellets: number; sweepRadiusM: number; maxRangeM: number; /** 'none' has no counterpart in the engine's closed shell-class set: it means "ejects nothing", which a * descriptor states by OMITTING fx.shell (the RPG and Grenade profiles both ship a bare `fx: {}`). */ shell: 'pistol' | 'rifle' | 'lmg' | 'shotgun' | 'sniper' | 'none'; projectile?: ProjectileBlock; thrown?: ThrownBlock; }; /** Per-category fire/ammo/damage archetypes. SMG deliberately takes pistol shells — every SMG in the * engine's generated table does (`weaponProfiles.data.ts`). `falloffM` starts empty: authors tune later. * Launcher and Grenade mirror the hand-authored LAUNCHER_PROFILES rows (`weaponProfiles.launcher.ts`). */ export declare const CATEGORY_ARCHETYPES: Readonly>; /** The scaffolded muzzle-point stub — a plausible mid-barrel guess the author MUST measure and replace. */ export declare const MUZZLE_POINT_STUB: [number, number, number];