/** * The Beacon Gallery at Lantern Wake (slice 1c-5 of the Western Kingdoms' first stop; plan * `.cursor/task-plans/2026-10-10-western-1c-first-stop-plan.md`, "The archery: the Beacon Gallery"; design sheet * `western-kingdoms-first-stop-3-beacon-gallery`): archery practice for a newcomer on the cliff-top terrace that slice 1c-1 * laid (lanternWake.ts LANTERN_WAKE_GALLERY, level 8 to the straight cliff at x 2147, the sea from x 2148). * * Built on the existing training drill (backend world.ts handleTrainStart / tickTrain), not a new combat system: three straw * butts in a fenced yard at the terrace's north end and four lantern targets hung over the sea off the cliff edge, each a * `yardprop` with a firing tile six tiles off (this table; archeryFiringPosition reads it). The same 3 Archery XP a beat and * the same cap at Archery 10 as Hope Beach's yard and the Capital's range, so the gallery is never a better farm. * * Honest about what it is: the drill rolls no hit or miss (nor does any butt). The lanterns sway on their ropes in the client * only (a look, not an aim test); the server's target never moves. A real aim test is parked in NEXT_STEPS. * * The chained bows (James, 2026-10-10: "yes"): a level-1 arrival has no bow of their own (the Birch Shortbow is made * at Woodwork 3; it has had no mastery gate since the Borderer's kit, 2026-10-17), so at a gallery target a player with no bow in hand shoots with one of the gallery's bows, chained to the rack. It is never * an item: nothing enters the bag, the equipment or the bank, it cannot be sold, dropped or fought with, and it exists only on * the drill itself (the server's in-memory task, never saved), so it is gone the moment the drill ends, the player moves or * logs out, or the server restarts. * * Every number is a WORLD tile. No respawn point here (a death in the Western Kingdoms wakes on Hope Beach). */ import type { LanternWakePiece } from './lanternWake.js'; /** A target's archery style: the straw butt (Hope's and the Capital's) or the gallery's lantern over the water. */ export type ArcheryTargetStyle = 'butt' | 'lantern'; /** True for the yardprop styles the archery drill shoots at (everything that used to test `style === 'butt'`). */ export declare function isArcheryTargetStyle(style: string | undefined | null): style is ArcheryTargetStyle; /** The gallery's targets share this id prefix: a drill at one of them lends the chained bow. */ export declare const LANTERN_WAKE_GALLERY_TARGET_PREFIX = "lw-gallery-target-"; export type LanternWakeGalleryTarget = { readonly id: string; readonly style: ArcheryTargetStyle; readonly x: number; readonly z: number; /** The firing tile the drill walks the archer to and shoots from (six tiles off, like every butt). */ readonly fx: number; readonly fz: number; }; /** The straw butts' row in the fenced yard at the terrace's north end; their firing line is six tiles north, at z 1026. */ export declare const LANTERN_WAKE_BUTT_ROW_Z = 1032; export declare const LANTERN_WAKE_BUTT_FIRING_Z = 1026; /** The lanterns hang over the sea at x 2153; their firing tiles are on the cliff edge at x 2147. */ export declare const LANTERN_WAKE_LANTERN_X = 2153; export declare const LANTERN_WAKE_FIRING_EDGE_X = 2147; export declare const LANTERN_WAKE_LANTERN_ZS: readonly number[]; /** * The seven targets: three butts (x 2128, 2134, 2140) shot from the north and four lanterns (z 1039, 1045, 1051, 1057) shot * from the cliff edge to the east. Each lane runs over the fenced yard or the open sea: no standable tile lies on any lane * (water is never stood on, and the cliff's drop of 8 is far over a step), so nobody stands in front of an archer. */ export declare const LANTERN_WAKE_GALLERY_TARGETS: readonly LanternWakeGalleryTarget[]; /** The gallery target standing on a tile, if any (archeryFiringPosition's table). */ export declare function lanternWakeGalleryTargetAt(x: number, z: number): LanternWakeGalleryTarget | undefined; /** Is this entity one of the gallery's targets (the chained bow is lent there and nowhere else)? */ export declare function isLanternWakeGalleryTargetId(id: string | undefined | null): boolean; /** The bow the gallery lends: a Birch Shortbow on a chain (drawn in hand while the drill lasts; never an item). */ export declare const LANTERN_WAKE_GALLERY_BOW = "birchshortbow"; /** What the drill says at the gallery (the customer's words, not the code's). */ export declare const LANTERN_WAKE_GALLERY_LINES: { readonly lentButt: "You unhook a chained gallery bow from the rack, nock a practice arrow and draw on the butt."; readonly lentLantern: "You unhook a chained gallery bow from the rack, nock a practice arrow and draw on the lantern."; readonly ownLantern: "You nock a practice arrow and draw on the lantern."; readonly returned: "You hang the gallery bow back on its chain."; readonly lanternCapped: "The lanterns have nothing more to teach you. The coast does."; }; /** The yard's ground and the deck's: laid as bare dirt so the terrace's grass blades never draw through the boards. */ export declare const LANTERN_WAKE_BUTT_YARD: { readonly minX: 2125; readonly maxX: 2144; readonly minZ: 1026; readonly maxZ: 1034; }; /** The deck's strip along the cliff edge, its nine rows of decks ending where the cliff turns south-west (2147, 1062 is sea). */ export declare const LANTERN_WAKE_GALLERY_DECK: { readonly minX: 2142; readonly maxX: 2147; readonly minZ: 1035; readonly maxZ: 1061; }; /** * The gallery's dressing, slice 1c-4's Blender kit and the training yard's pieces: * - the deck along the cliff (lwgallerydeck, two columns of nine) with the firing rail on each lantern's firing tile * (lwgalleryrail, open) and the closed fence on the rest of the edge (lwgalleryfence, blocked); * - the lanterns' rope posts on the sea, `-s` north of each lantern and `-n` south of it, their ropes meeting the target's * span (kit B's handoff); * - the butt yard's fence down its west and east sides and along its south side (the firing line, z 1026, opens to the north), its backstops behind the * butts (yardprop trainingbackstop, three tiles each) and the firing marks on the firing tiles (flowers trainingline); * - the chained bows' racks, a barrel of practice arrows, the supply hut, two of the line's banners, the wind sock with its * signal flags and the spyglass on the lookout. The signal winch (2146, 1062) and the beacon tower on its knoll (2154, 1010) * are The First Beacon's quest props since slice 1c-6 (lanternWakeQuests.ts LW_WINCH, LW_BEACON: the same ids and tiles, * each with a per-player done look: the winch wound, the tower lit). */ export type LanternWakeGalleryPiece = LanternWakePiece & { kind?: 'dreadmodel' | 'yardprop' | 'flowers'; }; export declare const LANTERN_WAKE_GALLERY_PIECES: readonly LanternWakeGalleryPiece[]; /** The yardprop style that draws the chained bows' rack (the training yard's bow rack, its own name and words). */ export declare const LANTERN_WAKE_CHAINED_BOWS_STYLE = "chainedbows"; export declare const LANTERN_WAKE_BEACON_KEEPER_NAME = "Beacon Keeper Hale"; /** Hale on the deck's landward side, watching the lanes; he potters within a tile. Slice 1c-6 gives him The First Beacon. */ export declare const LANTERN_WAKE_GALLERY_FOLK: ReadonlyArray<{ id: string; kind: 'wkbeaconkeeper'; name: string; x: number; z: number; faceX: number; faceZ: number; leash: number; }>; //# sourceMappingURL=lanternWakeGallery.d.ts.map