/** * ASHFALL'S DENS AND THE ASHMAW (T121, 2026-10-15; ashfallCamp.ts has the camp and the vent gorge). Three dens of EXISTING kinds (Emberdeep's own: * ash-crawlers, soot beetles, cinder toads, ember bats, ruin scavengers and basalt hounds), scaled to levels 28-36, sit in the camp's south yard and the * north basin in the pattern of the Dwarf Road's dens (dwarfRoadDens.ts, T102): a creature of a den is told apart from the same kind in Emberdeep by its * id (`ashd---`), 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. * * The Ashmaw is the basin's mini-boss (level 34-35): a huge ash-grey brute that came up out of the vents when the Cinder Warden fell. Passive until * struck. Every fourth blow it is its Ash Belch (bossSignatures.ts `ash-belch`): it rears, draws breath and a ring of scorching ash closes round it a full * turn ahead; step out of reach and it misses (the E8 step-clear counter). Drawn as a Basalt Hound at a larger scale until a model of its own exists * (upgrades row `ashmaw-model`). * * 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 AshDenKind = 'ashcrawler' | 'sootbeetle' | 'cindertoad' | 'emberbat' | 'ruinscavenger' | 'basalthound'; export type AshDenSiteId = 'slag-heaps' | 'cinder-barrens' | 'basalt-kennels'; export type AshDenSpot = { readonly x: number; readonly z: number; readonly leash: number; }; export type AshDenGroup = { readonly kind: AshDenKind; 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 AshDenSpot[]; readonly drops: readonly { readonly itemKind: string; readonly chance: number; readonly minQty: number; readonly maxQty: number; }[]; }; export type AshDenSite = { readonly id: AshDenSiteId; 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 AshDenGroup[]; }; export declare const ASH_DEN_SITES: readonly AshDenSite[]; export declare const ASH_DEN_SITE_IDS: readonly AshDenSiteId[]; export declare function inAshDenBox(box: LanternWakeBox, x: number, z: number): boolean; /** The den whose box holds this tile, or null. The boxes never overlap (scripts/ashfall-camp-test.mjs). */ export declare function ashDenSiteAt(x: number, z: number): AshDenSite | null; /** A den creature's server id: `ashd---`. */ export declare const ASH_DEN_ID_PREFIX = "ashd-"; export declare function ashDenId(site: AshDenSiteId, kind: AshDenKind, n: number): string; /** The site and group an id names, or null for any other creature. */ export declare function parseAshDenId(id: string): { site: AshDenSite; group: AshDenGroup; } | null; export declare const ASHMAW_KIND = "ashmaw"; export declare const ASHMAW_NAME = "Ashmaw"; export declare const ASHMAW_BOX: LanternWakeBox; export declare const ASHMAW: { readonly id: "ashd-ashmaw-1"; readonly x: 1672; readonly z: 484; readonly leash: 5; readonly level: readonly [number, number]; readonly maxHit: 27; /** A mini-boss's hide: much thicker than the level's ordinary health. */ readonly healthScale: 2.2; /** Drawn bigger than a Basalt Hound (the same model, scaled). */ readonly scale: 2.6; readonly note: "A huge ash-grey brute that came up out of the vents when the Cinder Warden fell, hot along its spine. Passive until struck. Every fourth blow it rears, draws breath and a ring of scorching ash closes round it, announced a turn ahead: step clear of the ring and the blow goes wide. Back six to eight minutes after it falls."; }; export declare const ASHMAW_RESPAWN_MS: { readonly minMs: 360000; readonly maxMs: 480000; }; export declare const ASHMAW_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 ASHMAW_DROPS: readonly { itemKind: string; chance: number; minQty: number; maxQty: number; }[]; /** The model the client draws it with until it has one (the Basalt Hound's, at ASHMAW.scale). */ export declare const ASHMAW_STAND_IN = "basalthound"; export declare const ASHFALL_DISCOVERY_ZONES: readonly DiscoveryZone[]; //# sourceMappingURL=ashfallDens.d.ts.map