/** * THE GRAVEWATCH (slice A6 of AREA_PROPOSALS.md "2026-10-14 round", T72 2026-10-14; plan `.cursor/task-plans/2026-10-14-t72-gravewatch.md`): * the Crypt Grounds' quest chain, levels 22-28, in the Dreadwoods' south-west (PvP, no healing in a fight). The grounds themselves * (cryptGrounds.ts: centre 320,640, railing x 302-338 z 628-652, the gate gap at z 652) were already there with their Grave Hounds * and the Crypt Knight and nothing else to do; this adds * * - the GRAVEWATCH POST, a watch post just south of the gate path: a SAFE POCKET (safePockets.ts, nobody can attack anybody inside it, * and the grounds' hunters never lock on there, because it lies outside the grounds' zone), with Sexton Dunmore, who gives the chain; * - the Tomb Warden, a lair mini-boss at the mausoleum's west side (level 26): one telegraphed move (bossSignatures.ts `tomb-hammer`) * with the standing step-clear counter, drops the Gravewarden's Seal every time. * * The quests, props and items are in gravewatchQuest.ts. This file is PURE DATA with no import of zones.ts or cryptGrounds.ts, because * safePockets.ts reads it from zones.ts (a cycle through cryptGrounds.ts would read the Deadlands' edge before it exists); the test * `scripts/gravewatch-test.mjs` checks every number here against the crypt's own constants. * * Box claimed in the early-game program file: x 308-332, z 662-676. Every number is a WORLD tile. Pieces are stand-ins (kit and Dreadwoods * props) until Blender pieces replace them (upgrades list, dreadwoods-backend/upgrades). */ import type { LanternWakeBox, LanternWakePoint } from './lanternWake.js'; export declare const GRAVEWATCH_NAME = "The Gravewatch"; export declare const GRAVEWATCH_ID = "gravewatch"; export declare const GRAVEWATCH_POST_NAME = "The Gravewatch post"; /** The watch post: its box is the SAFE POCKET (ring, gate and all). */ export declare const GRAVEWATCH_POST: LanternWakeBox; export declare const GRAVEWATCH_SAFE_POCKET: LanternWakeBox; export declare function inGravewatchSafePocket(x: number, z: number): boolean; /** The ground the post's roads may lay (the post and the link road to Gallowmere's road). */ export declare const GRAVEWATCH_ROAD_BOX: LanternWakeBox; /** The roads (world polylines, width in tiles): the path from the post up to the crypt gate, and the road east to Gallowmere's link road. */ export declare const GRAVEWATCH_PATHS: ReadonlyArray<{ id: string; w: number; pts: readonly LanternWakePoint[]; }>; /** What a placed piece is: a kit model (dreadmodel, style `-`) or an entity of one of the old kinds. */ export type GravewatchProp = { id: string; kind: 'dreadmodel' | 'dreadprop' | 'rock' | 'tree' | 'campfire' | 'barrel' | 'logpile'; style: string; x: number; z: number; scale?: number; }; /** The post's pieces: a lodge tent, the Sexton's fire, crates and a barrel, a banner, grave-lanterns at the corners and warning stakes at the ends. */ export declare const GRAVEWATCH_PIECES: readonly GravewatchProp[]; /** The signs (the placard signpost). */ export declare const GRAVEWATCH_SIGNS: ReadonlyArray<{ id: string; x: number; z: number; text: string; }>; /** Standable tiles (admin teleports, smokes). */ export declare const GRAVEWATCH_STANDS: { readonly road: { readonly x: 360; readonly z: 658; }; readonly post: { readonly x: 320; readonly z: 669; }; readonly gate: { readonly x: 320; readonly z: 656; }; }; export declare const GRAVEWATCH_SEXTON_KIND = "gvsexton"; export declare const GRAVEWATCH_SEXTON_NAME = "Sexton Dunmore"; export declare const GRAVEWATCH_SEXTON: { readonly id: "gw-sexton"; readonly kind: "gvsexton"; readonly name: "Sexton Dunmore"; readonly x: 323; readonly z: 668; readonly faceX: 320; readonly faceZ: 656; readonly leash: 1; }; export declare function isGravewatchFolkKind(kind: string): boolean; /** What a click says when it is not a talk (never an attack). */ export declare const GRAVEWATCH_SEXTON_LINE = "Sexton Dunmore keeps one eye on the crypt gate and does not look round. \"Someone has to count them going in. Someone has to count them coming out.\""; /** A `skeleton` kind: the undead rule (dragonfire.ts isUndeadNpcKind) finds it by prefix, so silver weapons bite it harder. */ export declare const TOMB_WARDEN_KIND = "skeletonwarden"; export declare const TOMB_WARDEN_NAME = "The Tomb Warden"; /** Level 26, a mini-boss: tougher than its level, back in four minutes. Placeholders for the balance pass. */ export declare const TOMB_WARDEN: { readonly name: "The Tomb Warden"; readonly level: readonly [number, number]; readonly maxHit: 15; readonly healthFactor: 1.25; readonly respawnMs: 240000; readonly aggro: 5; readonly leash: 9; /** Where he stands, on open ground at the mausoleum's west side (the Crypt Knight keeps the plaza, 11 tiles away; checked in the game: the spot must have open neighbours or a fight cannot start). */ readonly x: 309; readonly z: 630; readonly spawnLeash: 3; readonly text: "The Tomb Warden turns from the mausoleum wall, a bar of black iron in both hands. \"The dead are not yours to wake.\""; readonly note: "The mausoleum's keeper: a skeleton in a rusted warden's plate. Every fourth blow is a Tomb Hammer, announced a full turn ahead and twice an ordinary hit; step out of his reach before it lands and it misses. Drops the Gravewarden's Seal every time."; }; export declare function isGravewatchHostileKind(kind: string): boolean; //# sourceMappingURL=gravewatch.d.ts.map