/** * RANGER'S REST (T120, 2026-10-15; plan `.cursor/task-plans/2026-10-15-t120-rangers-rest.md`; backend COVERAGE_1_40.md section 6, second-wave * slice 6): the Greenwood's south reach. The Greenwood Wilds (greenwoodWilds.ts, T2) end at z 1200 and below them 21,724 standable tiles lay empty: * a level 21-30 player had no camp, no anvil and no cook between Brindlecross and the south coast. This is a rangers' camp on the * Mossy Brook's south run, in the pattern of the Pass-Road Camp (dwarfRoadCamp.ts, T102): * * - THE CAMP (x 1740-1758, z 1208-1230, east of the brook): a smithy with a furnace, anvil and workbench, a cookhouse and range with a camp cook * (campTraders.ts, campKitchens.ts), a fire, a Bounty Board, stores and lamps. There is NO bank here (James, 2026-10-17: banking is earned, banks stand in towns only); the camp * cauldron is laid by campStations.ts on the old chest tile. Five rangers give five errands (rangersRestQuestDef.ts). * - RANGER'S ROAD: a three-wide road that leaves the Brindle Road's west end (1790, 1094) and runs south down the corridor x 1788-1791 to the camp. * - THE RUN: the Mossy Brook carried on south as a stream (the same sine line as the brook, greenwoodBrookX), a timber ford, a pool at its end, and * three timber pegs on its east bank: the river spots take the Salmon Leap's fly tackle (Grayling at Fishing 25, Arctic Char at 33). * - THE PEN: a fenced stable yard east of the camp with Kennelman Dob Harrow, a stable, a trough, hay and a hitch post. * - THE TRAIL: five ordered posts through the west wood (the Ranger's Trial), and the trackers' signs. * - Whinstone Knoll (iron and coal seams), Ranger's Grove (spruce, ash and alder to fell), herb patches (ironwort, nightshade, marsh marigold) * and forage patches: every one an item the game already has. * - Three dens and the Snare-Master are in rangersRestDens.ts. * * The models are the kit's own as stand-ins (dreadwoods-backend/upgrades). Nothing 41+ is built. Every number is a WORLD tile (x east, z south) and * a PLACEHOLDER for the balance pass. */ import type { LanternWakeBox, LanternWakePoint } from './lanternWake.js'; import type { DiscoveryZone } from './landmarks.js'; export declare const RANGERS_REST_ID = "rangers-rest"; export declare const RANGERS_REST_NAME = "Ranger's Rest"; export declare const RANGERS_REST_LEVELS: { readonly min: 21; readonly max: 30; }; /** The whole reach: land tiles only (the south coast bites into it from x 1640 at z 1274 to x 1700 at z 1300). */ export declare const RANGERS_REST_BOX: LanternWakeBox; export declare function inRangersRestBox(x: number, z: number, pad?: number): boolean; /** The camp's ground (bare earth), east of the brook. */ export declare const RANGERS_CAMP_BOX: LanternWakeBox; export declare function inRangersCamp(x: number, z: number, pad?: number): boolean; export declare const RANGERS_CAMP_DISCOVERY_ZONE: DiscoveryZone; /** The road corridor claimed on the program board: nobody else builds in x 1788-1791, z 1096-1206. */ export declare const RANGERS_ROAD_CORRIDOR: LanternWakeBox; /** The roads (world polylines, width in tiles), laid as Path. The first starts on the Brindle Road's west end tile. */ export declare const RANGERS_PATHS: ReadonlyArray<{ id: string; w: number; pts: readonly LanternWakePoint[]; }>; /** The stream: three tiles of water (half 1) from the Greenwood's last brook row to its pool, on the brook's own sine line. */ export declare const RANGERS_RUN: { readonly minZ: 1201; readonly maxZ: 1268; readonly half: 1; }; export declare function rangersRunX(z: number): number; /** The pool the run ends in. */ export declare const RANGERS_POOL: { readonly cx: 1734; readonly cz: 1273; readonly radius: 4; }; /** The ford: sand rows under the timber bridge (walkable). */ export declare const RANGERS_BRIDGE: { readonly id: "rr-bridge"; readonly model: "hbfordbridge"; readonly facing: "e"; readonly x: number; readonly z: 1236; }; export declare function inRangersFordRows(x: number, z: number): boolean; /** Is this tile water of the run or its pool (the ford's rows are a sand strip, not water)? */ export declare function inRangersWater(x: number, z: number): boolean; /** Three timber pegs on the run's east bank (stand-ins, `fishingpeg`, style = the side facing the water), one beside each river spot. */ export declare const RANGERS_PEG_ROWS: readonly number[]; export declare const RANGERS_PEGS: ReadonlyArray<{ id: string; x: number; z: number; style: 'w'; }>; /** Where the river fish rise: the run's east-most water tile beside each peg (kind `river`, the Salmon Leap's fly tackle). */ export declare const RANGERS_RIVER_SPOTS: ReadonlyArray<{ x: number; z: number; }>; /** One thing laid on the ground: the kit's own kinds and styles (the Pass-Road Camp's shape), placed by the backend's ground placer. */ export type RangersProp = { readonly id: string; readonly kind: 'dreadmodel' | 'dreadprop' | 'campfire' | 'barrel' | 'bountyboard' | 'furnace' | 'anvil' | 'workbench' | 'stove' | 'bankchest' | 'signpost'; readonly style: string; readonly x: number; readonly z: number; readonly scale?: number; }; /** The camp's pieces and working stations. */ export declare const RANGERS_CAMP_PIECES: readonly RangersProp[]; /** The pen: a fenced stable yard east of the camp. The gate gap is on the north side where the pen lane comes in. */ export declare const RANGERS_PEN_BOX: LanternWakeBox; export declare const RANGERS_PEN_GATE: { readonly minX: 1776; readonly maxX: 1778; readonly z: 1226; }; export declare function rangersPenFence(): ReadonlyArray; export declare const RANGERS_PEN_PIECES: readonly RangersProp[]; /** Whinstone Knoll: iron and coal seams south-east of the camp (ORE_ROCK_KIND styles). Iron is Mining 15, coal 22 (mining.ts). */ export declare const RANGERS_SEAMS: ReadonlyArray<{ readonly id: string; readonly x: number; readonly z: number; readonly style: 'coal' | 'iron'; }>; export declare const RANGERS_KNOLL_BOX: LanternWakeBox; /** Herb patches (HerbKind, types potionMaking.ts): ironwort 22, nightshade 25, marsh marigold 29 (by the water). Placed on the nearest bare grass. */ export declare const RANGERS_HERBS: ReadonlyArray<{ readonly herb: 'ironwort' | 'nightshade' | 'marshmarigold'; readonly x: number; readonly z: number; }>; /** Wild supplies (forage patches): blackberries on the knoll's far side and the trail, field mushrooms under the grove. */ export declare const RANGERS_FORAGE: ReadonlyArray<{ readonly forage: 'blackberries' | 'fieldmushroom'; readonly x: number; readonly z: number; }>; /** Ranger's Grove: felling trees (spruce Woodwork 15, alder 25, ash 30), planted on free grass by species weight. */ export declare const RANGERS_GROVE: { readonly id: "rangers-grove"; readonly box: LanternWakeBox; readonly species: ReadonlyArray; readonly chance: 0.2; }; /** The signs (the placard signpost). */ export declare const RANGERS_SIGNS: ReadonlyArray<{ readonly id: string; readonly x: number; readonly z: number; readonly text: string; }>; export type RangersFolk = { readonly id: string; readonly name: string; readonly place: string; readonly x: number; readonly z: number; readonly faceX: number; readonly faceZ: number; readonly leash: number; readonly speak: string; /** Extra menu lines: id, label, what they say. */ readonly extras?: ReadonlyArray<{ readonly id: string; readonly label: string; readonly say: string; }>; }; export declare const RANGERS_FOLK_NAMES: { readonly tracker: "Tracker Idris Mallow"; readonly fletcher: "Fletcher Lorcan Teague"; readonly warden: "Warden Corra Haldane"; readonly kennelman: "Kennelman Dob Harrow"; readonly captain: "Ranger-Captain Sabine Thorley"; }; /** The five residents (named residents on the default look, stationary): the camp's cook is in campTraders.ts. */ export declare const RANGERS_FOLK: ReadonlyArray; export declare function rangersFolkByName(name: string | null | undefined): RangersFolk | null; /** The camp's cook, which lives in CAMP_TRADERS (campTraders.ts) beside the other camps' cooks. */ export declare const RANGERS_CAMP_COOK: { readonly id: "camp-rangers-rest"; readonly name: "Mags Fernley"; readonly x: 1750; readonly z: 1220; readonly faceX: 1749; readonly faceZ: 1222; }; export declare const RR_PROP: { readonly track: "rrtrack"; readonly post: "rrpost"; readonly hound: "rrhound"; readonly snare: "rrsnare"; }; export type RrQuestProp = { readonly id: string; readonly x: number; readonly z: number; readonly style: string; }; /** Fresh Sign: four sets of tracks on the way round the dens. */ export declare const RR_TRACK_LYNX: RrQuestProp; export declare const RR_TRACK_STAG: RrQuestProp; export declare const RR_TRACK_BOOT: RrQuestProp; export declare const RR_TRACK_BRANCH: RrQuestProp; /** The Ranger's Trial: five posts east to west, an ORDERED touch. */ export declare const RR_POST_1: RrQuestProp; export declare const RR_POST_2: RrQuestProp; export declare const RR_POST_3: RrQuestProp; export declare const RR_POST_4: RrQuestProp; export declare const RR_POST_5: RrQuestProp; export declare const RR_POST_ORDER: readonly string[]; /** A Hound Gone Astray: the collar, the prints, the buried bone, and Brindle herself. */ export declare const RR_HOUND_COLLAR: RrQuestProp; export declare const RR_HOUND_PRINTS: RrQuestProp; export declare const RR_HOUND_BONE: RrQuestProp; export declare const RR_HOUND_BRINDLE: RrQuestProp; /** Snares in the Dark: three poachers' snares at the Hide's edge. */ export declare const RR_SNARE_1: RrQuestProp; export declare const RR_SNARE_2: RrQuestProp; export declare const RR_SNARE_3: RrQuestProp; export declare const RANGERS_QUEST_PROPS: readonly RrQuestProp[]; export declare const RANGERS_QUEST_PROP_NAMES: Readonly>; /** The model a Ranger's Rest quest prop draws with (frontend quest-prop models that already exist), or null if not one of them. */ export declare function rangersPropModel(prop: string): string | null; /** Standable tiles for teleports, smokes and the helper. */ export declare const RANGERS_STANDS: { readonly road: { readonly x: 1789; readonly z: 1190; }; readonly camp: { readonly x: 1752; readonly z: 1224; }; readonly smithy: { readonly x: 1745; readonly z: 1220; }; readonly board: { readonly x: 1750; readonly z: 1228; }; readonly pen: { readonly x: 1777; readonly z: 1229; }; readonly ford: { readonly x: 1734; readonly z: 1234; }; readonly pegs: { readonly x: 1735; readonly z: 1247; }; readonly knoll: { readonly x: 1755; readonly z: 1254; }; readonly grove: { readonly x: 1766; readonly z: 1262; }; readonly trail: { readonly x: 1714; readonly z: 1242; }; }; /** What the guide, the verify links and the quest helper say about the place. */ export declare const RANGERS_PLACE_TEXT = "Ranger's Rest lies in the Greenwood's south reach, down Ranger's Road from the Brindle Road's west end: a smithy with a furnace, an anvil and a workbench, a cookhouse with a hot pot, a cauldron and a Bounty Board by the fire, a stable pen, and three timber pegs on the Mossy Brook's south run for fly-fishing. Iron and coal on Whinstone Knoll, spruce, ash and alder in the Ranger's Grove, and herbs along the run. Five people work it."; //# sourceMappingURL=rangersRest.d.ts.map