/** * THE WAR CAMP DRILL GROUND (coverage slice 12, track T108, 2026-10-14; dreadwoods-backend/COVERAGE_1_40.md section 6). Strength, Archery * and Weapon Mastery 10-40 had only fights, the Capital's yard (to 40 through its four sergeants), Calverton's (to 30) and Millbrook's * oak dummies. Fenwick's garrison camp north of the Northern Gate (the "War Camp", levels 30-40) had nothing to drill on, so this adds: * * - A FENCED YARD on the camp's east side (x 134-147, z 478-503; the camp's clearing ends at x 131 and a gap in the yard's west fence * opens on its hearth lane). Nothing outside the yard moves: the camp's clearing, the Ogre palisade and its 41+ boss gate are untouched. * - SIX DUMMIES on the per-dummy band pattern (Millbrook's): three straw-and-post dummies pay Strength 20-30, three iron-bound ones * Strength 30-40. TRAINING_DUMMY_MAX_LEVEL does not change (the Garrison's dummies still stop at 10). * - THREE LONG BUTTS (Archery 30-40, lanes of 16, 19 and 22 tiles, shot from the yard's north line) on the Beacon Ledge pattern: a band * per target (30-34, 30-38, 30-40), a firing tile of its own, no chained bow lent (an archer at 30 owns a bow). * - TWO SPARRING SERGEANTS, Harl (Combat 34) and Rourke (Combat 38), on the sparring yard's rules (bouts, tells, yield at one meter point): * Strength and Weapon Mastery each paid only while below the sergeant's cap (38, then 40); a won bout writes a Ledger line under "yard". * - THREE QUESTS from Fenwick the Quartermaster: The Long Lane, Fall In, The Iron Drill. * * Every number is a WORLD tile (x east, z south). Every XP, level and count here is a PLACEHOLDER for the balance pass (James, 2026-10-12: * balance last). Nothing here is 41+: the top of every band is 40. */ import type { StoryQuestDef } from './storyQuests.js'; export declare const WAR_CAMP_DRILL_NAME = "War Camp Drill Ground"; /** The yard's inside (the fence stands one tile out of it on every side). */ export declare const WAR_CAMP_DRILL_BOX: { readonly minX: 135; readonly maxX: 146; readonly minZ: 479; readonly maxZ: 502; }; /** The fence line: the box plus one tile. The whole of it is cleared and levelled with the camp (landmarks NORTHERN_CAMP_CENTER). */ export declare const WAR_CAMP_DRILL_FENCE_BOX: { readonly minX: 134; readonly maxX: 147; readonly minZ: 478; readonly maxZ: 503; }; /** The gap in the west fence, on the camp hearth's row (NORTHERN_CAMP_CENTER.z = 490), and the cleared lane from the camp's east edge to it. */ export declare const WAR_CAMP_DRILL_GATE: { readonly x: 134; readonly minZ: 489; readonly maxZ: 491; }; export declare const WAR_CAMP_DRILL_LANE: { readonly minX: 126; readonly maxX: 133; readonly minZ: 489; readonly maxZ: 491; }; /** Where a player is told to stand to start (just inside the gate). */ export declare const WAR_CAMP_DRILL_STAND: { readonly x: 136; readonly z: 490; }; export declare function inWarCampDrill(x: number, z: number, pad?: number): boolean; /** Is this tile in the cleared lane from the camp to the yard's gate? */ export declare function inWarCampDrillLane(x: number, z: number, pad?: number): boolean; /** Distance in tiles from the fence box (0 inside it); the backend levels the ground within a few tiles of it. */ export declare function warCampDrillEdgeDistance(x: number, z: number): number; export declare const WAR_CAMP_DUMMY_ID_PREFIX = "wcd-dummy-"; export type WarCampBand = { min: number; max: number; xp: number; }; /** Straw-and-post dummies pay Strength 20-30; iron-bound ones 30-40 (never past 40). XP a blow is a PLACEHOLDER. */ export declare const WAR_CAMP_DUMMIES: readonly { id: string; x: number; z: number; ring: 'post' | 'iron'; band: WarCampBand; }[]; export declare function isWarCampDummyId(id: string | undefined | null): boolean; /** The strength band of a War Camp dummy, or null when the id is not one (strengthDummyBand reads this). */ export declare function warCampDummyBand(id: string | undefined | null): WarCampBand | null; export declare const WAR_CAMP_BUTT_ID_PREFIX = "wcd-butt-"; /** The firing line: every lane is shot from this row, the targets stand 16, 19 and 22 tiles south of it. */ export declare const WAR_CAMP_FIRING_Z = 480; export type WarCampButt = { id: string; x: number; z: number; fx: number; fz: number; band: WarCampBand; }; /** * One band per target (the Beacon Ledge's pattern), all open from Archery 30 so a quest's three-butt shoot step can be done at its gate: * the near lane stops paying at 34, the middle at 38, the far one at 40, and the farther the lane the more a beat pays. A PLACEHOLDER. */ export declare const WAR_CAMP_BUTTS: readonly WarCampButt[]; export declare function warCampButtAt(x: number, z: number): WarCampButt | undefined; export declare function isWarCampButtId(id: string | undefined | null): boolean; /** The archery band of a War Camp butt, or null when the id is not one (the backend's archeryTargetBand reads this). */ export declare function warCampButtBand(id: string | undefined | null): WarCampBand | null; /** What the drill says here (the customer's words, not the code's). */ export declare const WAR_CAMP_LINES: { readonly dummyTooEarly: "These camp dummies are built for a harder swing than yours. Spar the oak dummies at Millbrook or the Capital sergeants until your Strength reaches the figure on the sign."; readonly postCapped: "The straw-and-post dummies have nothing more to teach you. The iron-bound ones beside them do."; readonly ironCapped: "The iron-bound dummies have nothing more to teach you. Take your strength to a real fight."; readonly buttTooEarly: "The long lanes want a steadier draw than yours. Practise on the Beacon Ledge at Lantern Wake until your Archery reaches the figure on the sign."; readonly buttCapped: "This lane has nothing more to teach you. Try the next one down the line, or a real target."; readonly allButtsCapped: "The long lanes have nothing more to teach you. Find a real target."; readonly buttStart: "You nock a practice arrow and draw on the far butt, a long way down the yard."; }; /** Where the two sergeants stand (types sparringYard.ts YARD_SERGEANTS has their rules): between the dummies and the lanes. */ export declare const WAR_CAMP_SERGEANT_SPOTS: readonly { name: string; id: string; x: number; z: number; faceX: number; faceZ: number; leash: number; }[]; export type WarCampPiece = { id: string; kind: string; style: string; x: number; z: number; }; /** The fence: a palisade of the camp's own spears on every tile of the box's edge, but the gate gap in the west run. */ export declare function warCampDrillFence(): WarCampPiece[]; /** * The yard's working pieces: the dummies and butts (real `yardprop` entities: the sparring and archery drill read them), a firing mark * on every firing tile, a rack and a water barrel, the fire, and the yard's sign (read by the dummies and butts it stands for). */ export declare const WAR_CAMP_DRILL_STATIONS: readonly WarCampPiece[]; export declare const WAR_CAMP_QUEST_IDS: readonly ["warCampLongLane", "warCampFallIn", "warCampIronDrill"]; export type WarCampQuestId = (typeof WAR_CAMP_QUEST_IDS)[number]; export declare const WAR_CAMP_QUEST_COMBAT: Readonly>; export declare const WAR_CAMP_LANE_ARCHERY = 30; export declare const WAR_CAMP_QUESTS: Readonly>; /** The journal card text for each (quests.ts storyMeta). */ export declare const WAR_CAMP_META: Readonly>; /** Where the giver is, for the quest guide's giver places (backend questGuide.ts GIVER_PLACES). */ export declare const WAR_CAMP_GIVER_PLACES: Readonly>; //# sourceMappingURL=warCampDrill.d.ts.map