/** * CAIRN SHELF'S DENS AND OLD THUNDERHORN (2026-10-18; cairnShelf.ts has the camp and the Gale Field). Three dens of EXISTING kinds (the Dwarf Road's own * mountain goats standing in for cairn rams, cliff hawks for gale hawks, rock crawlers for slate crawlers, track hounds for shelf hounds, and the Lantern * Wake rock lizard and the Emberdeep ruin scavenger standing in for the stone-cutter deserters), scaled to levels 31-37, sit on the shelf's north and south * halves in the pattern of Ashfall's dens (ashfallDens.ts): a creature of a den is told apart from the same kind elsewhere by its id * (`cairnd---`), the backend rolls its level, hit, drops, respawn and aggro from THIS file, and it hunts only a player standing INSIDE its * own den's box and gives up at its leash. A den needs no new model, name, icon or guide row. * * Old Thunderhorn is the shelf's mini-boss (level 36-37): a huge weathered ram with one cracked horn on the crag in the north-east. Passive until struck. * Every fourth blow is his Horn Charge (bossSignatures.ts `horn-charge`, the Hart's Bramble Charge grammar): he lowers his head and a ring of cracked * stone closes round him a full turn ahead; step out of reach and he misses (the E8 step-clear counter). Drawn as a Mountain Goat at a larger scale until * a model of his own exists (upgrades row `cairn-shelf-thunderhorn`). * * Nothing here is 41+. Every number is a PLACEHOLDER for the balance pass. World tiles (x east, z south). */ import type { LanternWakeBox } from './lanternWake.js'; import type { DiscoveryZone } from './landmarks.js'; export type CairnDenKind = 'roadgoat' | 'cliffhawk' | 'rockcrawler' | 'rocklizard' | 'trackhound' | 'ruinscavenger'; export type CairnDenSiteId = 'ram-terrace' | 'slate-scree' | 'houndrun'; export type CairnDenSpot = { readonly x: number; readonly z: number; readonly leash: number; }; export type CairnDenGroup = { readonly kind: CairnDenKind; /** Level rolled between these two (each respawn rolls again). */ readonly level: readonly [number, number]; readonly maxHit: number; /** Health is the band's ordinary health for the rolled level, times this. */ readonly healthScale: number; /** A player this close (tiles) inside the den's box is hunted; the creature gives up this far (leash) from its spot. */ readonly aggro: number; readonly leashRadius: number; readonly notice: string; readonly respawnMs: { readonly minMs: number; readonly maxMs: number; }; readonly pace: { readonly speed: number; readonly idleChance: number; readonly pause: readonly [number, number]; }; readonly spots: readonly CairnDenSpot[]; readonly drops: readonly { readonly itemKind: string; readonly chance: number; readonly minQty: number; readonly maxQty: number; }[]; }; export type CairnDenSite = { readonly id: CairnDenSiteId; readonly label: string; readonly box: LanternWakeBox; /** Where the guide and the verify link send a player: open ground on the den's edge nearest the road. */ readonly stand: { readonly x: number; readonly z: number; }; readonly blurb: string; readonly groups: readonly CairnDenGroup[]; }; export declare const CAIRN_DEN_SITES: readonly CairnDenSite[]; export declare const CAIRN_DEN_SITE_IDS: readonly CairnDenSiteId[]; export declare function inCairnDenBox(box: LanternWakeBox, x: number, z: number): boolean; /** The den whose box holds this tile, or null. The boxes never overlap (scripts/cairn-shelf-test.mjs). */ export declare function cairnDenSiteAt(x: number, z: number): CairnDenSite | null; /** A den creature's server id: `cairnd---`. */ export declare const CAIRN_DEN_ID_PREFIX = "cairnd-"; export declare function cairnDenId(site: CairnDenSiteId, kind: CairnDenKind, n: number): string; /** The site and group an id names, or null for any other creature. */ export declare function parseCairnDenId(id: string): { site: CairnDenSite; group: CairnDenGroup; } | null; export declare const THUNDERHORN_KIND = "thunderhorn"; export declare const THUNDERHORN_NAME = "Old Thunderhorn"; export declare const THUNDERHORN_BOX: LanternWakeBox; export declare const THUNDERHORN: { readonly id: "cairnd-thunderhorn-1"; readonly x: 2118; readonly z: 510; readonly leash: 6; readonly level: readonly [number, number]; readonly maxHit: 30; /** A mini-boss's hide: much thicker than the level's ordinary health. */ readonly healthScale: 2.4; /** Drawn bigger than a Mountain Goat (the same model, scaled). */ readonly scale: 2.5; readonly note: "A huge weathered ram with one cracked horn, who has stood on his crag since before the cairns were cut. Passive until struck. Every fourth blow he lowers his head and a ring of cracked stone closes round him, announced a turn ahead: step clear of it and the charge goes wide. Back six to eight minutes after he falls."; }; export declare const THUNDERHORN_RESPAWN_MS: { readonly minMs: 360000; readonly maxMs: 480000; }; export declare const THUNDERHORN_PACE: { readonly speed: 0.8; readonly idleChance: 0.7; readonly pause: readonly [number, number]; }; /** Placeholders for the balance pass: coins, steel, ore, and a chance at a silver or gold bar. */ export declare const THUNDERHORN_DROPS: readonly { itemKind: string; chance: number; minQty: number; maxQty: number; }[]; /** The model the client draws him with until he has one (the Mountain Goat's, at THUNDERHORN.scale). */ export declare const THUNDERHORN_STAND_IN = "roadgoat"; export declare const CAIRN_DISCOVERY_ZONES: readonly DiscoveryZone[]; //# sourceMappingURL=cairnShelfDens.d.ts.map