/** * BRACKEN HEATH'S WILD HEATH AND OLD GORSETUSK (2026-10-19; brackenHeath.ts has the place). Sheet 9's creatures, in the pattern of Saltgrass Downs' * dens (saltgrassDens.ts): three dens of EXISTING kinds inside the Heath Dash's loop, levels 18-28, each told apart from the same kind elsewhere by its * id (`bhd---`). The backend rolls level, hit, drops, respawn and aggro from THIS file, and a den creature hunts only a player standing * INSIDE its own den's box (never the course, never the start, never the Pup Track) and gives up at its leash. * * The sheet's creatures are drawn as the kit's own until models of their own exist (backend upgrades row `bracken-heath-creatures`): the gorse boar is * the boar, the heath adder the stone serpent, the heath jackal the common fox (not the beach's fox, whose kills are counted for Anne), the bracken lurker the twigling (a bush that walks), the harrier hawk the cliff * hawk. Each carries its sheet name. The heath hares are the brown hare, harmless (the north of the heath, for level 1 players), and two of them dart * across the Heath Dash's lanes (brackenHeath.ts crossers). * * OLD GORSETUSK is the heath's mini-boss (level 29): a huge scarred boar with moss on his tusks, in the thicket by the Dash's south turn. Passive until * struck. Every fourth blow is his Charge (bossSignatures.ts `gorse-charge`): he lowers his head and a lane is painted on the grass a full turn ahead; * step out of it and the charge goes by (the step-clear counter). Drawn as the boar, larger, until a model of his own exists (upgrades row * `old-gorsetusk-model`). * * Nothing here is 41+. Every number is a PLACEHOLDER for the balance pass. Nothing here heals anyone. */ import type { DiscoveryZone } from './landmarks.js'; import { type BhBox } from './brackenHeath.js'; export type BhDenKind = 'boar' | 'stoneserpent' | 'commonfox' | 'twigling' | 'cliffhawk'; export type BhDenSiteId = 'gorse-brake' | 'jackal-run' | 'bracken-deeps'; export type BhDenSpot = { readonly x: number; readonly z: number; readonly leash: number; }; export type BhDenGroup = { readonly kind: BhDenKind; /** What the creature is called on the heath (sheet 9). */ readonly name: string; readonly level: readonly [number, number]; readonly maxHit: number; readonly healthScale: number; 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 BhDenSpot[]; readonly drops: readonly { readonly itemKind: string; readonly chance: number; readonly minQty: number; readonly maxQty: number; }[]; }; export type BhDenSite = { readonly id: BhDenSiteId; readonly label: string; readonly box: BhBox; /** Where the guide and the verify link send a player: open ground just outside the den. */ readonly stand: { readonly x: number; readonly z: number; }; readonly blurb: string; readonly groups: readonly BhDenGroup[]; }; export declare const BH_DEN_SITES: readonly BhDenSite[]; export declare const BH_DEN_SITE_IDS: readonly BhDenSiteId[]; export declare function inBhDenBox(box: BhBox, x: number, z: number): boolean; /** The den whose box holds this tile, or null (the boxes never overlap: scripts/bracken-heath-test.mjs). */ export declare function bhDenSiteAt(x: number, z: number): BhDenSite | null; export declare const BH_DEN_ID_PREFIX = "bhd-"; export declare function bhDenId(site: BhDenSiteId, kind: BhDenKind, n: number): string; /** The site and group an id names, or null for any other creature (Old Gorsetusk's id parses to null). */ export declare function parseBhDenId(id: string): { site: BhDenSite; group: BhDenGroup; } | null; /** Brown hares by another name: level 1-3 game for anybody, never aggressive, on open ground away from the courses. */ export declare const BH_HARE_NAME = "Heath Hare"; export declare const BH_HARE_ID_PREFIX = "bhh-"; export declare const BH_HARES: ReadonlyArray<{ readonly id: string; readonly x: number; readonly z: number; readonly leash: number; }>; export declare const OLD_GORSETUSK_KIND = "oldgorsetusk"; export declare const OLD_GORSETUSK_NAME = "Old Gorsetusk"; /** The thicket by the Dash's south turn (the course passes south of it, outside his reach). */ export declare const GORSETUSK_THICKET_BOX: BhBox; export declare const OLD_GORSETUSK: { readonly id: "bhd-old-gorsetusk-1"; readonly x: 733; readonly z: 406; readonly leash: 4; readonly level: readonly [number, number]; readonly maxHit: 22; /** A mini-boss's hide: much thicker than the level's ordinary health. */ readonly healthScale: 2.3; /** Drawn bigger than a boar (the same model, scaled). */ readonly scale: 2.1; readonly note: "A huge scarred boar with moss on his tusks, lord of the thicket by the Heath Dash's south turn. Passive until struck. Every fourth blow he lowers his head and a lane is painted on the grass a full turn ahead: step out of the lane and his Charge goes by. Back five to seven minutes after he falls."; }; export declare const OLD_GORSETUSK_RESPAWN_MS: { readonly minMs: 300000; readonly maxMs: 420000; }; export declare const OLD_GORSETUSK_PACE: { readonly speed: 0.9; readonly idleChance: 0.6; readonly pause: readonly [number, number]; }; /** Placeholders for the balance pass: coins, meat, iron and a rare steel bar. */ export declare const OLD_GORSETUSK_DROPS: readonly { itemKind: string; chance: number; minQty: number; maxQty: number; }[]; /** The model the client draws him with until he has one (the boar's, at OLD_GORSETUSK.scale). */ export declare const OLD_GORSETUSK_STAND_IN = "boar"; export declare const BRACKEN_HEATH_DISCOVERY_ZONES: readonly DiscoveryZone[]; //# sourceMappingURL=brackenHeathDens.d.ts.map