/** * THE LAST SIGNAL (T81, 2026-10-14; plan `.cursor/task-plans/2026-10-14-t81-last-signal.md`; design sheets `west-last-signal` (hero scene + area map), * `west-view-7` (south signal road and the Fallen Signal Tower), `west-view-8` (the Windbreak Batteries and the Cleft Inlet) and `west-view-9` (the North Winch * across the deep-water gap), ChatGPT proposals of 2026-10-08): the West Coast's northern reach, levels 23-30, free. A long headland of broken warning towers * and wind-cut stone: a Warden's Post at the south landing, the Signal Road north along the spine, the Fallen Signal Tower on its knoll (its lamp is relit * after dark), the Windbreak Batteries (gun platforms on the east cliff), the Cleft Inlet (a salvage dock, a cut with iron, coal and silver, the sea fishing), and * the North Winch on the cape, from where a plank span runs out across the deep-water gap to Beacon Skerry, where the Dark Keeper still keeps the last light. * * WHERE IT LIVES (decision T81, logged on the program board): the sheets put the Last Signal NORTH of the Redclay Hook, but rows 0-70 of the coast's columns are * too thin and a further strip growth would move the website's WORLD_PIXELS and the census, so the reach is laid in the SAME columns' SOUTH rows, below the * Lantern Wake pass vista (LANTERN_WAKE_PASS_VISTA cliff rows 640-980): box x 2300-2460, z 1024-1296, sea all round. It is reached by its own free skiff from the * South Fields' west beach (WEST_COAST_FERRY_SIGNAL_SOUTH, beside Saltmere's), with a loading cover each way; a land road to the Redclay Hook is not possible * (700 rows of sea) and the sheets' "To Redclay Hook" sign is the ferry's. * * The frame is a LOCAL one (origin LS_X0, LS_Z0; the headland 0-140 across, 0-252 down; the sheet's map is a narrow north-south headland), so every authored * number is a local tile and `ls(lx, lz)` makes the world tile. Backend hashes read WORLD tiles inside the box. The pieces are kit stand-ins (backend upgrades * list): no Blender in this slice set. */ import type { LanternWakeBox, LanternWakePiece, LanternWakePoint } from './lanternWake.js'; import { type WesternPolygon } from './westernKingdoms.js'; export declare const LAST_SIGNAL_NAME = "The Last Signal"; export declare const LAST_SIGNAL_ID = "last-signal"; export declare const LAST_SIGNAL_CHART_ID = "last-signal"; export declare const LS_X0 = 2316; export declare const LS_Z0 = 1040; /** The reach's whole box (its discovery zone, the claim on the program board): sea margins of at least 16 tiles all round. */ export declare const LAST_SIGNAL_BOX: LanternWakeBox; /** Combat levels the reach is for (the sheets say 23 to 30). */ export declare const LAST_SIGNAL_MIN_LEVEL = 23; export declare const LAST_SIGNAL_MAX_LEVEL = 30; /** A local tile as a world tile, and back. */ export declare function ls(lx: number, lz: number): { x: number; z: number; }; export declare function lsLocal(x: number, z: number): { x: number; z: number; }; /** The land's ground heights: flat, the two beach steps down to the sea (the strip's own), the Fallen Tower's knoll and the span's deck. */ export declare const LS_GROUND_HEIGHT = 3; export declare const LS_BEACH_HEIGHTS: readonly number[]; export declare const LS_SPAN_HEIGHT = 2; /** * The headland, local, clockwise from the north cape (the winch's platform). A blockout traced from the sheet's map: a long spine of ground widest at the * Batteries and the tower, a cape at the north, a south landing. The Cleft Inlet (LS_INLET) and Beacon Skerry (LS_SKERRY) are separate. */ export declare const LS_OUTLINE: WesternPolygon; /** The Cleft Inlet: a jagged notch of sea cut into the west side, open to the west. */ export declare const LS_INLET: WesternPolygon; /** Beacon Skerry: the island across the deep-water gap, where the old relay lamp stands. */ export declare const LS_SKERRY: WesternPolygon; /** Is the world tile headland ground (inside the coast, outside the inlet)? */ export declare function inLastSignalHeadland(x: number, z: number): boolean; /** Is the world tile Beacon Skerry's ground? */ export declare function inLastSignalSkerry(x: number, z: number): boolean; /** Is the world tile any ground of the reach (headland or skerry; the span is boards, not ground)? */ export declare function inLastSignalLand(x: number, z: number): boolean; export declare function inLastSignalBox(x: number, z: number, pad?: number): boolean; /** The Fallen Signal Tower's knoll: a cone of ground above the flat. */ export declare const LS_KNOLL: { readonly radius: 10; readonly top: 5.5; readonly x: number; readonly z: number; }; export declare function lastSignalKnollHeight(x: number, z: number): number | null; /** * The North Winch's span: three tiles of boards from the cape out over the deep-water gap to Beacon Skerry. Its middle (the gate's band) is the winch's * slack: it is only taut, and walkable, for a player the Winch Keeper has rigged it for (the walk gate `signal-winch`, types areaGates.ts). */ export declare const LS_SPAN: LanternWakeBox; /** The walk gate on the span (types areaGates.ts `signal-winch`): Combat for the skerry and the quest The Winch Line, which rigs the span for that player. */ export declare const LS_WINCH_COMBAT_LEVEL = 28; export declare const LS_SPAN_GAP: LanternWakeBox; export declare function inLastSignalSpan(x: number, z: number): boolean; /** The roads (world polylines, width in tiles), laid as Path. */ export declare const LS_PATHS: ReadonlyArray<{ id: string; w: number; pts: readonly LanternWakePoint[]; }>; /** The Windbreak Batteries' two gun platforms (laid as Boards at ground height) and the Warden's Post yard (Dirt). */ export declare const LS_BATTERY_PLATFORMS: ReadonlyArray<{ id: string; box: LanternWakeBox; }>; export declare const LS_POST_YARD: LanternWakeBox; /** The cape's winch platform (Boards at ground height, round the winch frame). */ export declare const LS_WINCH_DECK: LanternWakeBox; /** The Cleft Inlet's salvage dock: a pier of boards from the south shore out into the water, two wide. */ export declare const LS_DOCK: { readonly minX: number; readonly maxX: number; readonly minZ: number; readonly maxZ: number; readonly height: 2; }; /** The cut on the inlet's north shore (a stone floor: the seams' work yard). */ export declare const LS_CUT: LanternWakeBox; export declare const LS_ROAD_BOX: LanternWakeBox; export declare const LS_TOWER_BOX: LanternWakeBox; export declare const LS_BATTERIES_BOX: LanternWakeBox; export declare const LS_INLET_BOX: LanternWakeBox; export declare const LS_WINCH_BOX: LanternWakeBox; export declare const LS_SKERRY_BOX: LanternWakeBox; export declare const LS_PIECES: readonly LanternWakePiece[]; /** The reach's signs (the placard signpost and the fingerpost). */ export declare const LS_SIGNS: ReadonlyArray<{ id: string; x: number; z: number; text: string; }>; /** Standable tiles (admin teleports, smokes): one for each place. */ export declare const LS_STANDS: { readonly quay: { readonly x: number; readonly z: number; }; readonly post: { readonly x: number; readonly z: number; }; readonly tower: { readonly x: number; readonly z: number; }; readonly batteries: { readonly x: number; readonly z: number; }; readonly inlet: { readonly x: number; readonly z: number; }; readonly cut: { readonly x: number; readonly z: number; }; readonly dock: { readonly x: number; readonly z: number; }; readonly winch: { readonly x: number; readonly z: number; }; /** The cape tile in front of the span's first board, outside the gate. */ readonly spanStart: { readonly x: number; readonly z: number; }; /** The skerry's landing, past the span: inside the gate. */ readonly skerry: { readonly x: number; readonly z: number; }; readonly keeper: { readonly x: number; readonly z: number; }; }; export declare const LAST_SIGNAL_STAND: { readonly x: number; readonly z: number; }; /** The ferry's far end (the Last Signal's own skiff, beached at the south-east corner of the headland, drawn as the kit's `hbrowboat`) and where the way in lands. */ export declare const WEST_COAST_FERRY_SIGNAL: { readonly facing: "n"; readonly style: "hbrowboat-n"; readonly x: number; readonly z: number; readonly id: "ls-ferry-signal"; }; export declare const WEST_COAST_FERRY_SIGNAL_LANDING: { readonly x: number; readonly z: number; }; /** The skiff on the South Fields' west beach for this reach (a dozen tiles down the sand from Saltmere's) and where the way back lands. */ export declare const WEST_COAST_FERRY_SIGNAL_SOUTH: { readonly id: "ls-ferry-south"; readonly x: 13; readonly z: 1082; readonly facing: "n"; readonly style: "hbrowboat-n"; }; export declare const WEST_COAST_FERRY_SIGNAL_SOUTH_LANDING: { readonly x: 16; readonly z: 1082; }; export declare const WEST_COAST_FERRY_SIGNAL_SIGN: { readonly id: "ls-ferry-sign"; readonly x: 16; readonly z: 1080; readonly text: "The Last Signal ferry. Row across to the northern headland, levels 23 to 30: hounds on the road, raiders on the guns and a dark keeper on the skerry. Free."; }; export type LastSignalFerryEnd = 'out' | 'back'; /** Which end of the Last Signal's ferry an entity is (by style and tile): 'out' the South Fields' skiff, 'back' the headland's; null for anything else. */ export declare function lastSignalFerryEnd(style: string | undefined, x: number, z: number): LastSignalFerryEnd | null; export declare const LAST_SIGNAL_FERRY_OUT_LABEL = "Row across to The Last Signal"; export declare const LAST_SIGNAL_FERRY_BACK_LABEL = "Row back to the South Fields"; export declare const LAST_SIGNAL_FERRY_OUT_TEXT = "You push the skiff off the sand and row west, then north along a cold grey coast. A broken tower leans out of the haze ahead. The Last Signal: levels 23 to 30."; export declare const LAST_SIGNAL_FERRY_BACK_TEXT = "You row back east with the wind behind you. The South Fields lie low and green ahead."; /** The discovery zones, smallest first (types expandedContracts.ts INSERTED_DISCOVERY_ZONES, ahead of the coast's own). */ export declare const LAST_SIGNAL_DISCOVERY_ZONES: { minX: number; maxX: number; minZ: number; maxZ: number; id: string; label: string; coordinateFrame: "world"; }[]; export declare const LAST_SIGNAL_DISCOVERY_ZONE: { minX: number; maxX: number; minZ: number; maxZ: number; id: string; label: string; coordinateFrame: "world"; }; /** The reach's own chart (types dungeonCharts.ts, served by backend /dungeon-maps): open land for the map panel and the music, like the West Coast's. */ export declare const LAST_SIGNAL_CHART: { readonly id: "last-signal"; readonly title: "The Last Signal"; readonly minX: number; readonly maxX: number; readonly minZ: number; readonly maxZ: number; }; /** * The inlet's fishing: tide snapper spots in the cleft's water beside the dock, conger off the dock's end (the existing fish; Fishing 14 and 30). Hints: * the backend takes the nearest water tile that has standable ground within two tiles (lastSignalFishSpots). */ export declare const LS_TIDE_SNAPPER_HINTS: ReadonlyArray<{ x: number; z: number; }>; export declare const LS_CONGER_HINTS: ReadonlyArray<{ x: number; z: number; }>; /** Rock samphire on the shore sand (types potionMaking.ts samphire, Foraging 24): the cliff forage. Placed by the backend on the nearest sand tile. */ export declare const LS_SAMPHIRE_SPOTS: ReadonlyArray<{ x: number; z: number; }>; /** The Cleft cut's seams (ORE_ROCK_KIND) along the inlet's north shore: coal, iron and one silver (Mining 33), placeholders for the balance pass. */ export declare const LS_SEAMS: ReadonlyArray<{ id: string; x: number; z: number; style: 'coal' | 'iron' | 'silver'; }>; /** The salvage-master's counter title (backend world.ts NAMED_SHOPKEEPERS keys it by his name). */ export declare const LS_SALVAGE_SHOP_TITLE = "Oake's Salvage Cart"; /** Where the quest helper and the guide say the headland is. */ export declare const LAST_SIGNAL_PLACE_TEXT = "The Last Signal is the northern headland of the West Coast, levels 23 to 30: take the Last Signal skiff on the South Fields' west beach (the sand below the farm's cliff, beside Saltmere's), row across to the Warden's Post, and follow the Signal Road north."; export type LastSignalQuestProp = { readonly id: string; readonly x: number; readonly z: number; readonly style: string; }; export declare const LS_PROP: { readonly oil: "lsoil"; readonly lamp: "lslamp"; readonly answer: "lsanswer"; readonly board: "lsboard"; readonly gun: "lsgun"; readonly crate: "lscrate"; readonly winch: "lswinch"; }; /** The Cold Signal: the oil cask at the tower's foot, the signal lamp in the lamp room, the watch rail where the answer shows. */ export declare const LS_OIL_CASK: LastSignalQuestProp; export declare const LS_LAMP: LastSignalQuestProp; export declare const LS_ANSWER: LastSignalQuestProp; /** Guns of the Windbreak: the tally board and the four guns (north battery west and east, south battery west and east). */ export declare const LS_BOARD: LastSignalQuestProp; export declare const LS_GUN_1: LastSignalQuestProp; export declare const LS_GUN_2: LastSignalQuestProp; export declare const LS_GUN_3: LastSignalQuestProp; export declare const LS_GUN_4: LastSignalQuestProp; /** The order the tally board names: the south battery's west gun, the north battery's west gun, the south battery's east gun, the north battery's east gun. */ export declare const LS_GUN_ORDER: readonly string[]; /** Salvage at the Cleft: three crates of marked salvage along the inlet's south shore. */ export declare const LS_CRATE_A: LastSignalQuestProp; export declare const LS_CRATE_B: LastSignalQuestProp; export declare const LS_CRATE_C: LastSignalQuestProp; /** The Winch Line: the frame pin, the drum and the brake on the cape's platform, to touch in order. */ export declare const LS_WINCH_1: LastSignalQuestProp; export declare const LS_WINCH_2: LastSignalQuestProp; export declare const LS_WINCH_3: LastSignalQuestProp; export declare const LS_WINCH_ORDER: readonly string[]; export declare const LAST_SIGNAL_QUEST_PROPS: readonly LastSignalQuestProp[]; /** The model a Last Signal quest prop draws with (CAPITAL_BUILDING_MODELS), or null for a prop that is not one of them. */ export declare function lastSignalPropModel(prop: string): string | null; export declare const LAST_SIGNAL_QUEST_PROP_NAMES: Readonly>; //# sourceMappingURL=lastSignal.d.ts.map