/** * HIGHFOLD'S DENS AND THE HOLLOW WATCHMAN (2026-10-18; highfoldWatch.ts has the fortress and the Beacon Chain). Four dens of EXISTING kinds scaled to * levels 36-39, 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 * (`hfd---`), 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. The stand-ins (the design sheet's six creatures): the gale eagle is the Dwarf Road's cliff hawk, the hollow * guard the crypt knight, the watch deserter the snow deserter, the keep hound the track hound, the rubble golem the rock crawler and the iron bat * the ember bat (upgrades rows `highfold-*`). * * THE ALARM: the great hall's hollow guards are the Beacon Chain's alarm. While the bell tolls (HF_ALARM_MS) they hunt anyone in the yard (the camp and * the view platform excepted: both stay safe), at a longer reach, and go back to their spots at their leash when it stops. * * The Hollow Watchman is the mini-boss (level 39-40) in the Hollow Gallery: a huge empty suit of dwarven plate with a lantern in its chest. Passive * until struck. Every fourth blow it is its Tower Slam (bossSignatures.ts `tower-slam`): it lifts its tower shield and a ring closes round it a full turn * ahead; step out of reach and it misses (the E8 step-clear counter). Drawn as a Crypt Knight at a larger scale until a model of its own exists. * * 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 HfDenKind = 'cliffhawk' | 'cryptknight' | 'snowdeserter' | 'trackhound' | 'rockcrawler' | 'emberbat'; export type HfDenSiteId = 'outer-watch' | 'eagle-crag' | 'collapsed-barracks' | 'great-hall'; export type HfDenSpot = { readonly x: number; readonly z: number; readonly leash: number; }; export type HfDenGroup = { readonly kind: HfDenKind; /** What the creature is called (the design sheet's name; the stand-in kind's own name would read wrong). */ 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 HfDenSpot[]; readonly drops: readonly { readonly itemKind: string; readonly chance: number; readonly minQty: number; readonly maxQty: number; }[]; }; export type HfDenSite = { readonly id: HfDenSiteId; 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 HfDenGroup[]; }; export declare const HF_DEN_SITES: readonly HfDenSite[]; export declare const HF_DEN_SITE_IDS: readonly HfDenSiteId[]; export declare function inHfDenBox(box: LanternWakeBox, x: number, z: number): boolean; /** The den whose box holds this tile, or null. The boxes never overlap (scripts/highfold-watch-test.mjs). */ export declare function hfDenSiteAt(x: number, z: number): HfDenSite | null; /** A den creature's server id: `hfd---`. */ export declare const HF_DEN_ID_PREFIX = "hfd-"; export declare function hfDenId(site: HfDenSiteId, kind: HfDenKind, n: number): string; /** The site and group an id names, or null for any other creature. */ export declare function parseHfDenId(id: string): { site: HfDenSite; group: HfDenGroup; } | null; /** Where the alarm sends the great hall's guards: the yard, but never the camp or the view platform. */ export declare function inHfAlarmReach(x: number, z: number): boolean; /** The alarm widens a guard's notice and leash to this (the guards are the great hall's own group only). */ export declare const HF_ALARM_AGGRO = 44; export declare const HF_ALARM_LEASH = 70; export declare const HOLLOW_WATCHMAN_KIND = "hollowwatchman"; export declare const HOLLOW_WATCHMAN_NAME = "The Hollow Watchman"; export declare const HOLLOW_GALLERY_BOX: LanternWakeBox; export declare const HOLLOW_WATCHMAN: { readonly id: "hfd-watchman-1"; readonly x: 2129; readonly z: 328; readonly leash: 5; readonly level: readonly [number, number]; readonly maxHit: 32; /** A mini-boss's plate: much thicker than the level's ordinary health. */ readonly healthScale: 2.4; /** Drawn bigger than a Crypt Knight (the same model, scaled). */ readonly scale: 2.4; readonly note: "A colossal empty suit of dwarven plate with a lantern burning in its chest, left at his post in the Hollow Gallery a hundred years ago. Passive until struck. Every fourth blow he lifts his tower shield and a ring closes round him, announced a turn ahead: step clear of the ring and the Tower Slam goes wide. Back eight to ten minutes after he falls."; }; export declare const HOLLOW_WATCHMAN_RESPAWN_MS: { readonly minMs: 480000; readonly maxMs: 600000; }; export declare const HOLLOW_WATCHMAN_PACE: { readonly speed: 0.8; readonly idleChance: 0.7; readonly pause: readonly [number, number]; }; /** Placeholders for the balance pass: coins, steel, and a chance at a silver or gold bar. Nothing heals. */ export declare const HOLLOW_WATCHMAN_DROPS: readonly { itemKind: string; chance: number; minQty: number; maxQty: number; }[]; /** The model the client draws it with until it has one (the Crypt Knight's, at HOLLOW_WATCHMAN.scale). */ export declare const HOLLOW_WATCHMAN_STAND_IN = "cryptknight"; export declare const HIGHFOLD_DISCOVERY_ZONES: readonly DiscoveryZone[]; //# sourceMappingURL=highfoldDens.d.ts.map