/** * CALVERTON EXTENSION (T71, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t71-calverton-extension.md`). Calverton is the hub town of levels * 10-30 in the south and was thin: a bank, a potion shop, a clothes shop, a bounty board and four empty shell buildings. Three new districts * are laid OUTSIDE its walls (nothing existing moves) and the empty shells inside get people and stations: * * - The Wardens' Yard (x 714-746, z 636-660, north of the Dreadwoods gate road): barracks, muster hall, training dummies, archery butts, * the Wardens' board (a second bounty board), the Quartermaster's counter. Captain Rhea Ironwell, Quartermaster Bart Hollis, Drillmaster * Colm Verrick. * - Smiths' Row (x 714-738, z 674-692, south of the gate road): the open forge (2 furnaces, 2 anvils), the joinery (2 workbenches), the * cookhouse (2 stoves and a fire). Smith Ansel Moor, Joiner Petra Lyle, Cook Dorcas Marsh. * - The Lakeside Market (x 802-850, z 692-707, south of the town wall, east of the gate road): the market hall, six stalls, the caravan * yard. Marketmaster Odo Fenn, Fishwife Greta Wick, Net-mender Ned Tabb, Caravan Master Hugh Tarrant. * - Inside the walls: Reeve Alis Tilling in the Town Hall and Eadric Wyn at the pub; the kitchen shell gets a stove. * * Twelve people and two sparring sergeants (named residents on the default look: stand-ins, logged in dreadwoods-backend/upgrades), five counters (existing goods at * existing prices: nothing here pays a profit), eight quests (calvertonQuestDef.ts). The pieces are the Hope Town kit's own models. * * Every number is a WORLD tile (x east, z south). The boxes are claimed in the program file `.cursor/task-plans/2026-10-14-early-game-program.md`. */ import type { DiscoveryZone } from './landmarks.js'; export type CvBox = { readonly minX: number; readonly maxX: number; readonly minZ: number; readonly maxZ: number; }; export type CvFacing = 'n' | 's' | 'e' | 'w'; export type CvPiece = { readonly id: string; readonly model: string; readonly facing: CvFacing; readonly x: number; readonly z: number; }; export type CvStation = { readonly id: string; readonly kind: string; readonly style: string; readonly x: number; readonly z: number; }; export type CvQuestProp = { readonly id: string; readonly x: number; readonly z: number; readonly style: string; }; export declare const CALVERTON_YARD_NAME = "Wardens' Yard"; export declare const CALVERTON_SMITHS_NAME = "Smiths' Row"; export declare const CALVERTON_MARKET_NAME = "Lakeside Market"; /** The claimed ground of each district (the whole box is cleared of scatter and eased into the land). */ export declare const CALVERTON_YARD_BOX: CvBox; export declare const CALVERTON_SMITHS_BOX: CvBox; export declare const CALVERTON_MARKET_BOX: CvBox; export declare const CALVERTON_BOXES: readonly { readonly id: string; readonly name: string; readonly box: CvBox; }[]; /** Each district is levelled flat at the town's own height (3) and eased into the land over this many tiles. */ export declare const CALVERTON_GROUND_HEIGHT = 3; export declare const CALVERTON_EASE = 3; /** The discovery zones (types expandedContracts.ts INSERTED_DISCOVERY_ZONES): the three districts, each a place on the paper map. */ export declare const CALVERTON_DISCOVERY_ZONES: readonly DiscoveryZone[]; /** The paper-map labels. */ export declare const CALVERTON_MAP_LABELS: readonly { readonly x: number; readonly z: number; readonly label: string; }[]; export declare function inCvBox(x: number, z: number, b: CvBox, pad?: number): boolean; /** Which district a tile is in (with `pad` tiles of margin), or null. */ export declare function calvertonDistrictAt(x: number, z: number, pad?: number): (typeof CALVERTON_BOXES)[number] | null; /** The gate road (Dreadwoods east gate to Calverton's west gate) runs along these rows; the yard and the row open onto it. */ export declare const CALVERTON_GATE_ROAD: { readonly minZ: 664; readonly maxZ: 668; }; /** Where each district is entered from the road, and where a player is told to stand. */ export declare const CALVERTON_STANDS: { readonly yardGate: { readonly x: 730; readonly z: 661; }; readonly smithsLane: { readonly x: 726; readonly z: 669; }; readonly marketLane: { readonly x: 800; readonly z: 699; }; }; /** Worn lanes (width, polyline): the yard's gate lane, the row's lane and cross lane, the market's connection to the gate road. */ export declare const CALVERTON_PATHS: readonly { readonly id: string; readonly surface: 'dirt' | 'path' | 'stone'; readonly w: number; readonly pts: readonly (readonly [number, number])[]; }[]; /** The kit models are the Hope Town ones (CAPITAL_BUILDING_MODELS); the id prefix `cv-` keeps the cleanup and the tests able to find them. */ export declare const CALVERTON_PIECES: readonly CvPiece[]; /** * The working stations (real entities: the skills' own kinds). `style` is '' unless the kind wants one. Dummies and butts are `yardprop` * styles `dummy` and `butt`; the boards are `bountyboard` style `wall-s`. */ export declare const CALVERTON_STATIONS: readonly CvStation[]; /** The archery drill's marks: a butt is shot from 6 tiles north of it (types archeryFiringPosition), so the lines and the bow rack sit there. */ export declare const CALVERTON_BUTT_IDS: readonly string[]; export declare const CALVERTON_BUTT_ID_PREFIX = "cv-butt-"; export declare const CALVERTON_BUTT_FIRING_Z = 650; export declare const CALVERTON_BUTT_KIT: readonly { readonly id: string; readonly kind: string; readonly style: string; readonly x: number; readonly z: number; }[]; /** Fence runs round the yard (kit `townfence3x1` modules and `townfencebit1x1` fillers), with the gate gap on the south run. */ export declare const CALVERTON_YARD_FENCE: readonly { readonly id: string; readonly axis: 'x' | 'z'; readonly at: number; readonly from: number; readonly to: number; readonly gap?: readonly [number, number]; }[]; /** The signposts: where each district leaves the road. */ export declare const CALVERTON_SIGNS: readonly { readonly id: string; readonly x: number; readonly z: number; readonly style: string; }[]; /** The quest props: the patrol posts (The Night Watch) and the market stalls to set (Market Day Rush). */ export declare const CV_PROP: { readonly post: "cvpost"; readonly stall: "cvstall"; }; export declare const CV_POST_GATE: CvQuestProp; export declare const CV_POST_MARKET: CvQuestProp; export declare const CV_POST_EAST: CvQuestProp; export declare const CV_STALL_BUNTING: CvQuestProp; export declare const CV_STALL_SCALES: CvQuestProp; export declare const CV_STALL_AWNING: CvQuestProp; export declare const CV_STALL_BANNER: CvQuestProp; export declare const CV_STALL_CRATES: CvQuestProp; export declare const CALVERTON_QUEST_PROPS: readonly CvQuestProp[]; /** The order Market Day Rush wants the stalls set in. */ export declare const CV_STALL_ORDER: readonly string[]; export declare const CALVERTON_QUEST_PROP_NAMES: Readonly>; /** The model a Calverton quest prop draws with (CAPITAL_BUILDING_MODELS), or null for a prop that is not one of them. */ export declare function calvertonPropModel(prop: string): string | null; export type CalvertonShop = { readonly title: string; readonly stock: ReadonlyArray<{ readonly kind: string; readonly price: number; }>; /** What the counter pays over the trader's rate (a cook buys players' cooking: no shop sells food, shopFood.ts). */ readonly buys?: Readonly>; }; export type CalvertonFolk = { readonly id: string; readonly name: string; /** Where they are, for the guide, the verify links, the resident card and the dialog. */ 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; }>; readonly shop?: CalvertonShop; /** The line the Trade option opens with. */ readonly trade?: string; }; export declare const CALVERTON_FOLK_NAMES: { readonly reeve: "Reeve Alis Tilling"; readonly innkeeper: "Eadric Wyn"; readonly captain: "Captain Rhea Ironwell"; readonly quartermaster: "Quartermaster Bart Hollis"; readonly drillmaster: "Drillmaster Colm Verrick"; readonly smith: "Smith Ansel Moor"; readonly joiner: "Joiner Petra Lyle"; readonly cook: "Cook Dorcas Marsh"; readonly marketmaster: "Marketmaster Odo Fenn"; readonly fishwife: "Fishwife Greta Wick"; readonly netmender: "Net-mender Ned Tabb"; readonly caravan: "Caravan Master Hugh Tarrant"; }; export declare const CALVERTON_FOLK: ReadonlyArray; /** * The two sparring sergeants of the Wardens' Yard (types sparringYard.ts, home 'calverton'): in the lane between the dummy rows. Not part of * CALVERTON_FOLK, so their menu stays the yard's own (Begin a bout, Strike, Guard, Feint, Ask to stop). Same machinery as the Capital's four. */ export declare const CALVERTON_SERGEANT_SPOTS: ReadonlyArray<{ readonly name: string; readonly x: number; readonly z: number; readonly faceX: number; readonly faceZ: number; readonly leash: number; }>; export declare function calvertonFolkByName(name: string | null | undefined): CalvertonFolk | null; export declare function calvertonFolkById(id: string | null | undefined): CalvertonFolk | null; /** The counters, keyed by the keeper's name (world.ts NAMED_SHOPKEEPERS). */ export declare const CALVERTON_SHOP_FOLK: ReadonlyArray; /** Where the quest helper and the guide say each district is. */ export declare const CALVERTON_PLACE_TEXT: Readonly>; //# sourceMappingURL=calvertonExtension.d.ts.map