/** * SALTGRASS DOWNS (2026-10-18; plan `.cursor/task-plans/2026-10-18-saltgrass-downs-build.md`; built from the filed sheets `saltgrass-downs-1..7` * in the backend's design-references, whose prompt and brief are in `.cursor/task-plans/2026-10-18-sheets-1-40-empty-land/saltgrass-downs/`). * The open sheep country east of Riversend Halt, for levels 14-24: a wide, friendly-then-dangerous pasture on the Western land's bare grass, running * east to the sea. It had no content at all (COVERAGE_1_40.md 5.2: "the empty land"). * * THE WAY IN (no gate of its own): Riversend's river bends south-west at its east side, so the grass on its east bank is the same ground as the * Brindlecross road's south bank. The DROVE LANE leaves the North Road just south of Riversend's old bridge, runs east along the river's south bank, up the * strip between the river and Lantern Wake's west ridge, and arrives at the Riversend Fold on the Downs' west edge. The only gate between Hope Beach and * the Downs is the one every Western place already has (the Brindle Road pass, Combat 10). Lantern Wake's north ridge (z 950-954) stays solid: the * sheet drew a barrier gate to Lantern Wake on the south edge, built here as a CLOSED gate (scenery and a sign), never a way through, so the Brindle * Road pass stays the only door to the Western land. * * THE LAYOUT (box x 1936-2175, z 770-949; every number is a WORLD tile, x east, z south, and a PLACEHOLDER for the balance pass): * - the RIVERSEND FOLD (x 1938-1962, z 896-914): a fenced fold on the east bank across the river from Riversend's mill, with the Count Board. Where a drove ends; * - DROVERS' REST (x 1994-2036, z 890-928): the safe camp on a low rise: a long sheepfold, a bothy, a cookhouse (the cook BUYS what players cook), a Bounty * Board, stores, a signal post, a wool buyer's counter and the sheep wash pool south of it. There is NO bank (banking is earned: towns only); * - the HIGH PASTURE PENS (x 1996-2048, z 816-838): three hurdle pens with a gate each, where a drove begins; Shepherd Tilly and her dog Biscuit; * - the DROVE ROAD (milestone posts 1 to 6) from the pens east to the shore and back west along the south to the fold; * - WOLF COUNTRY (x 2096-2146, z 798-852) and GREYBACK'S DEN on its stony knoll (x 2062-2092, z 796-826); the GORSE WARREN, the RUSTLERS' CAMP and the shore flats; * - the LOOKOUT MOUND (x 2052-2068, z 872-888) with a beacon basket, the SALT PANS on the shore (Foraging 9 raking: the game's own `saltpan` patches) and the * EASTSHORE pegs (a fishing reach, tide snapper from Fishing 14). * * THE MECHANIC reuses three things the game already has: Hog Wild's pet that follows you and Nye's led ewe (a drove is six of them, behind you), the * Brindlecross sheep fold (the destination), and the Timber Convoy's server-driven tame creatures and ambush wolves. See saltgrassDrove.ts. * * The models are the kit's own as stand-ins (backend upgrades rows `saltgrass-*`). Nothing 41+ is built. */ import type { LanternWakeBox, LanternWakePoint } from './lanternWake.js'; import type { DiscoveryZone } from './landmarks.js'; export declare const SALTGRASS_ID = "saltgrass-downs"; export declare const SALTGRASS_NAME = "Saltgrass Downs"; export declare const SALTGRASS_LEVELS: { readonly min: 14; readonly max: 24; }; /** The whole place. The plan's box started at x 1950; it begins at Riversend's east edge so the fold and the lane's last stretch are inside it. */ export declare const SALTGRASS_BOX: LanternWakeBox; export declare function inSaltgrassBoxOf(b: LanternWakeBox, x: number, z: number, pad?: number): boolean; export declare const inSaltgrassBox: (x: number, z: number, pad?: number) => boolean; /** Drovers' Rest: the safe camp on a low rise (the ground is flat grass; the camp is trodden earth). */ export declare const SALTGRASS_CAMP_BOX: LanternWakeBox; /** The fold at Riversend: where a drove ends (fenced, the Count Board east of its gate). */ export declare const SALTGRASS_FOLD_BOX: LanternWakeBox; /** The fold's zone, a little wider than its fence so the queue at the gate is in it. */ export declare const SALTGRASS_FOLD_ZONE_BOX: LanternWakeBox; export declare const SALTGRASS_FOLD_GATE: { readonly x: 1954; readonly minZ: 904; readonly maxZ: 906; }; /** The camp's own long sheepfold (scenery and a safe place to see the flock). */ export declare const SALTGRASS_CAMP_FOLD_BOX: LanternWakeBox; export declare const SALTGRASS_CAMP_FOLD_GATE: { readonly minX: 2003; readonly maxX: 2005; readonly z: 915; }; /** The three high pasture pens (hurdle fences, the gate gap on each pen's south side, a gate post in the middle of each gap). */ export type SaltgrassPen = { readonly id: 'one' | 'two' | 'three'; readonly box: LanternWakeBox; readonly gateMinX: number; readonly gateMaxX: number; readonly gateZ: number; readonly sheep: ReadonlyArray; }; export declare const SALTGRASS_PENS: readonly SaltgrassPen[]; export declare const SALTGRASS_PENS_BOX: LanternWakeBox; /** The drystone wall maze: three E-W runs in the meadow north-west of the camp, gaps alternating west and east. */ export declare const SALTGRASS_MEADOW_BOX: LanternWakeBox; export declare const SALTGRASS_WALL_RUNS: ReadonlyArray<{ readonly id: string; readonly z: number; readonly minX: number; readonly maxX: number; readonly gapMinX: number; readonly gapMaxX: number; }>; /** The lookout mound: concentric steps up to the beacon basket (the flat ground is height 3; the top is 6). */ export declare const SALTGRASS_LOOKOUT: { readonly cx: 2060; readonly cz: 880; readonly radius: 6; readonly top: 6; }; export declare const SALTGRASS_LOOKOUT_BOX: LanternWakeBox; export declare function lookoutHeight(x: number, z: number): number | null; /** The salt pans on the shore: three shallow beds on a sand apron, raked from their rims (the game's `saltpan` forage patch). */ export declare const SALTGRASS_PANS_BOX: LanternWakeBox; export declare const SALTGRASS_PAN_BEDS: readonly LanternWakeBox[]; /** The pans' rims, where the crust is raked (forage patches, Foraging 9), and the shell banks on the sand below them. */ export declare const SALTGRASS_SALT_PATCHES: ReadonlyArray; export declare const SALTGRASS_SHELL_PATCHES: ReadonlyArray; /** The eastshore: the sand strip and the three timber pegs of the fishing reach (fishingReaches.ts `saltgrass-eastshore`, tide snapper from Fishing 14). */ export declare const SALTGRASS_EASTSHORE_BOX: LanternWakeBox; /** The sheep wash pool: a small pond with a sand rim south of the camp (scenery; sheep are washed in it, Hob says). */ export declare const SALTGRASS_WASH_POOL: { readonly cx: 2048; readonly cz: 941; readonly radius: 3; }; export declare function inWashPool(x: number, z: number): boolean; /** The closed barrier gate in the south ridge: Lantern Wake's north ridge (z 950-954) is solid, so this is a gate that does not open (scenery and a sign). */ export declare const SALTGRASS_RIDGE_GATE: { readonly x: 2062; readonly z: 947; }; /** The roads (world polylines, width in tiles), laid as Path. The lane starts on the North Road, just south of Riversend's old bridge. */ export declare const SALTGRASS_PATHS: ReadonlyArray<{ id: string; w: number; pts: readonly LanternWakePoint[]; }>; /** One thing laid on the ground: the kit's own kinds and styles, placed by the backend's ground placer. */ export type SaltgrassProp = { readonly id: string; readonly kind: 'dreadmodel' | 'dreadprop' | 'campfire' | 'barrel' | 'bountyboard' | 'stove' | 'signpost'; readonly style: string; readonly x: number; readonly z: number; readonly scale?: number; }; /** The camp's pieces and working stations: a cook's stove and fire, a Bounty Board, stores, a signal post and the long sheepfold's furniture. No bank. */ export declare const SALTGRASS_CAMP_PIECES: readonly SaltgrassProp[]; /** A ring of hurdle posts round a box (every tile of its perimeter but the gap), `townfencebit1x1` each. The gap may be on any side. */ export declare function saltgrassFenceRing(prefix: string, b: LanternWakeBox, gap: { minX: number; maxX: number; minZ: number; maxZ: number; }): SaltgrassProp[]; /** Every fence of the place: the camp fold, the three pens and the fold at Riversend. */ export declare function saltgrassFences(): readonly SaltgrassProp[]; /** The pens', fold's and wall maze's furniture: hay, troughs, lamps and the drystone runs (a run is 3-wide pieces, none in its gap). */ export declare const SALTGRASS_FIELD_PIECES: readonly SaltgrassProp[]; /** The salt pans' rakes and net racks and the pegs' tackle (decor): the rake rack beside each bed. */ export declare const SALTGRASS_SHORE_PIECES: readonly SaltgrassProp[]; /** The signs (the placard signpost). One at each milestone of the drove road. */ export declare const SALTGRASS_SIGNS: ReadonlyArray<{ readonly id: string; readonly x: number; readonly z: number; readonly text: string; }>; export type SaltgrassFolk = { 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; readonly extras?: ReadonlyArray<{ readonly id: string; readonly label: string; readonly say: string; }>; /** A counter of their own (the wool buyer's): existing goods only, never food. */ readonly shop?: { readonly title: string; readonly stock: ReadonlyArray<{ readonly kind: string; readonly price: number; }>; readonly buys: Readonly>; }; }; export declare const SALTGRASS_FOLK_NAMES: { readonly drover: "Head Drover Hob Marlowe"; readonly shepherd: "Shepherd Tilly Ashworth"; readonly steward: "Bounty Steward Cass Roper"; readonly lookout: "Lookout Jem Harker"; readonly woolbuyer: "Wool-Buyer Hester Whitlock"; }; /** The cook is a counter in campTraders.ts (she BUYS what players cook and sells no food). */ export declare const SALTGRASS_COOK_NAME = "Cook Dilys Ferris"; export declare const SALTGRASS_DOG_NAME = "Biscuit"; /** The five residents (named residents on the default look, stationary), the wool buyer with a counter of her own. */ export declare const SALTGRASS_FOLK: ReadonlyArray; export declare function saltgrassFolkByName(name: string | null | undefined): SaltgrassFolk | null; /** The camp cook, which lives in CAMP_TRADERS (campTraders.ts) beside the other camps' cooks. */ export declare const SALTGRASS_COOK: { readonly id: "camp-saltgrass"; readonly name: "Cook Dilys Ferris"; readonly x: 2006; readonly z: 907; readonly faceX: 2008; readonly faceZ: 904; }; /** Tilly's collie: a sheepdog (an existing kind), not a fight, standing by her. */ export declare const SALTGRASS_DOG: { readonly id: "sg-biscuit"; readonly name: "Biscuit"; readonly x: 2014; readonly z: 838; }; export declare const SG_PROP: { readonly pen: "sgpen"; readonly board: "sgboard"; readonly fleece: "sgfleece"; readonly cut: "sgcut"; readonly beacon: "sgbeacon"; }; export type SgQuestProp = { readonly id: string; readonly x: number; readonly z: number; readonly style: string; }; /** The three pen gates (a click opens the pen and gathers a flock) and the Count Board at the Riversend Fold (a click tallies a flock that has arrived). */ export declare const SG_PEN_ONE: SgQuestProp; export declare const SG_PEN_TWO: SgQuestProp; export declare const SG_PEN_THREE: SgQuestProp; export declare const SG_COUNT_BOARD: SgQuestProp; /** Torn fleece at the wolves' kills, along the wolf country's southern edge (Fleece and Fang). */ export declare const SG_FLEECE_ONE: SgQuestProp; export declare const SG_FLEECE_TWO: SgQuestProp; export declare const SG_FLEECE_THREE: SgQuestProp; /** Cut hurdles at the edge of the rustlers' camp (The Rustlers' Cut). */ export declare const SG_CUT_ONE: SgQuestProp; export declare const SG_CUT_TWO: SgQuestProp; export declare const SG_CUT_THREE: SgQuestProp; /** The lookout's beacon basket (Greyback). */ export declare const SG_BEACON: SgQuestProp; export declare const SALTGRASS_QUEST_PROPS: readonly SgQuestProp[]; export declare const SALTGRASS_QUEST_PROP_NAMES: Readonly>; /** The model a Saltgrass quest prop draws with (frontend quest-prop models that already exist), or null if not one of them. */ export declare function saltgrassPropModel(prop: string): string | null; /** Standable tiles for teleports, smokes and the helper. */ export declare const SALTGRASS_STANDS: { readonly lane: { readonly x: 1930; readonly z: 985; }; readonly fold: { readonly x: 1957; readonly z: 908; }; readonly camp: { readonly x: 2016; readonly z: 917; }; readonly pens: { readonly x: 2015; readonly z: 845; }; readonly milestone3: { readonly x: 2106; readonly z: 880; }; readonly wolves: { readonly x: 2092; readonly z: 860; }; readonly den: { readonly x: 2077; readonly z: 830; }; readonly warren: { readonly x: 2088; readonly z: 880; }; readonly rustlers: { readonly x: 2100; readonly z: 925; }; readonly pans: { readonly x: 2129; readonly z: 872; }; readonly shore: { readonly x: 2148; readonly z: 908; }; readonly lookout: { readonly x: 2056; readonly z: 892; }; readonly wash: { readonly x: 2048; readonly z: 930; }; readonly ridge: { readonly x: 2062; readonly z: 943; }; }; /** What the guide, the verify links and the quest helper say about the place. */ export declare const SALTGRASS_PLACE_TEXT = "Saltgrass Downs is the open sheep country east of Riversend Halt, for levels 14 to 24, reached on foot from the North Road just south of Riversend's old bridge by the Drove Lane along the river's south bank: the Riversend Fold on its west edge, Drovers' Rest (a cookhouse, a Bounty Board, stores and a wool buyer) on a low rise, three hurdle pens on the high pasture, a wolf country with a den on a stony knoll, the salt pans and the eastshore pegs on the sea. Six people work it. There is no bank on the Downs."; export declare const SALTGRASS_CAMP_DISCOVERY_ZONE: DiscoveryZone; export declare const SALTGRASS_UMBRELLA_DISCOVERY_ZONE: DiscoveryZone; //# sourceMappingURL=saltgrassDowns.d.ts.map