export type TileBox = Readonly<{ minX: number; maxX: number; minZ: number; maxZ: number; }>; export declare const inTileBox: (b: TileBox, x: number, z: number) => boolean; export declare const BAY_LONG_BEACH: TileBox; export declare const BAY_MEADOW: TileBox; export declare const BAY_ISLETS_BOX: TileBox; export type BayPart = Readonly<{ id: string; model: string; x: number; z: number; facing: 'n' | 'e' | 's' | 'w'; }>; /** A model's footprint before its facing turn (types constants CAPITAL_BUILDING_MODELS): what the placement clears. */ export declare const BAY_MODEL_SIZE: Readonly>; /** Every tile a part covers, turned by its facing (odd sizes: the anchor is the middle tile). */ export declare function bayPartTiles(part: { model: string; x: number; z: number; facing: string; }): Array<{ x: number; z: number; }>; export declare const BAY_PARTS: readonly BayPart[]; /** Campfires (campfire entities, lit): the beach camp, the farm, the skerry, the castaway's hut, the fort dock. */ export declare const BAY_FIRES: ReadonlyArray<{ x: number; z: number; }>; /** The gull nests on the east cliff top (the Gull-Cliff Cove's clue) and in the cove: decoration, never blocking. */ export declare const BAY_NESTS: ReadonlyArray<{ x: number; z: number; }>; export type BayCrew = Readonly<{ kind: 'lookout' | 'blackwakedeckhand' | 'cutthroat'; x: number; z: number; name?: string; radius?: number; }>; export declare const BAY_CREW: readonly BayCrew[]; export type BayCreature = Readonly<{ kind: 'greyseal' | 'covegull' | 'goat' | 'tidecrab' | 'wreckrat'; x: number; z: number; radius: number; }>; export declare const BAY_WILDLIFE: readonly BayCreature[]; /** The goat pen's fence ring (fence entities, `rail`): the pen is x 752-760, z 1074-1081, its gate shut. */ export declare const BAY_GOAT_PEN: TileBox; export type BayIslet = Readonly<{ id: string; name: string; cx: number; cz: number; rx: number; rz: number; }>; export declare const BAY_ISLETS: readonly BayIslet[]; /** Sandbars, always dry: Driftwood to Treasure, Treasure to Seal Rock, Wreck Reef to the Skerry (two tiles wide, from one tile to another). */ export declare const BAY_SANDBARS: ReadonlyArray; /** Is this tile islet ground (an ellipse, sand at its rim)? Returns 'grass' inside, 'sand' at the rim, null for the sea. */ export declare function bayIsletGround(x: number, z: number): 'grass' | 'sand' | null; export declare function bayIsletAt(x: number, z: number): BayIslet | null; export declare const isBayLowWater: (nowMs: number) => boolean; export declare function bayTideLine(nowMs: number): string; export type BayRoomFloor = 'sea-cave' | 'raw-warren' | 'worked-flagstone' | 'guard-post'; export type BayRoom = Readonly<{ id: string; name: string; box: TileBox; floor: BayRoomFloor; props?: 'guard-supplies' | 'abandoned-hall'; }>; export declare const SC_MOUTH_ROOM: BayRoom; export declare const SC_PASSAGE_A: BayRoom; export declare const SC_CHANNEL_ROOM: BayRoom; /** The channel's water: a cut along the room's north side (never walked), the sluice gate where it meets the east wall. */ export declare const SC_CHANNEL_WATER: TileBox; export declare const SC_PASSAGE_B: BayRoom; export declare const SC_LEDGE_ROOM: BayRoom; export declare const SC_STORE_ROOM: BayRoom; export declare const SC_GROTTO_ROOM: BayRoom; /** The Grotto's pool, where the stolen ship's boat lies. */ export declare const SC_GROTTO_POOL: TileBox; export declare const SALTMARK_CAVE_ROOMS: readonly BayRoom[]; /** The whole sea cave (the aggro rule, the reset and the guide). */ export declare const SALTMARK_CAVE_BOX: TileBox; export declare const inSaltmarkCave: (x: number, z: number) => boolean; export declare const COVE_WATERFALL_ROOM: BayRoom; export declare const COVE_GROTTO_ROOM: BayRoom; export declare const COVE_TIDE_ROOM: BayRoom; export declare const BAY_UNDERGROUND_ROOMS: readonly BayRoom[]; /** The plot of the underground strip this phase claims (rooms and the rock round them). */ export declare const BAY_UNDERGROUND_PLOT: TileBox; export type BayDoorId = 'ferry-out' | 'ferry-back' | 'reef-out' | 'reef-back' | 'cave-in' | 'cave-out' | 'cave-boat' | 'sluice' | 'ledge-door' | 'store-door' | 'waterfall-in' | 'waterfall-out' | 'grotto-in' | 'grotto-out' | 'gull-in' | 'gull-out' | 'tide-in' | 'tide-out'; export type BayDoor = Readonly<{ id: BayDoorId; x: number; z: number; /** caveentrance style: `-`. */ style: string; /** Where the door puts the player. */ to: { x: number; z: number; }; /** The hover label. */ label: string; /** Said on the way through. */ text: string; }>; /** Where the cove doors stand and where they land a player (named, so the quests, the smoke and the verify links share them). */ export declare const COVE_WATERFALL_OUTSIDE: { readonly x: 731; readonly z: 1099; }; export declare const COVE_GROTTO_OUTSIDE: { readonly x: 746; readonly z: 1172; }; export declare const COVE_GULL_TOP: { readonly x: 907; readonly z: 1100; }; /** The Gull-Cliff Cove: a ledge of sand at the foot of the east cliff, carved out of the sea (overworld, open sky). */ export declare const COVE_GULL_LEDGE: TileBox; export declare const COVE_GULL_FOOT: { readonly x: 913; readonly z: 1100; }; export declare const COVE_TIDE_OUTSIDE: { readonly x: 885; readonly z: 1175; }; export declare const SALTMARK_CAVE_OUTSIDE: { readonly x: 891; readonly z: 1062; }; export declare const SALTMARK_CAVE_ENTRY: { readonly x: 953; readonly z: 627; }; export declare const BAY_FERRY_BEACH: { readonly x: 714; readonly z: 1053; }; export declare const BAY_FERRY_ISLE: { readonly x: 742; readonly z: 1203; }; export declare const REEF_SEAL_SIDE: { readonly x: 798; readonly z: 1197; }; export declare const REEF_WRECK_SIDE: { readonly x: 823; readonly z: 1209; }; export declare const BAY_DOORS: readonly BayDoor[]; /** The Blender model a bay door's caveentrance style draws with (smugglersStrand.ts caveEntranceModel asks), or null. */ export declare function bayDoorModel(style: string | undefined): string | null; /** The entity id a bay door is laid with (the client names a door by it). */ export declare const bayDoorEntityId: (id: BayDoorId) => string; export declare function bayDoorAt(style: string | undefined, x: number, z: number): BayDoor | null; export declare const BAY_TIDE_SHUT_TEXT = "The sea fills the way in. Only at low water can you get through: the bay's tide comes round every ten minutes."; export declare const SC_SLUICE_SHUT_TEXT = "The sluice gate is down and the channel behind it runs deep and fast. Two wheels work the sluices: turn them both."; export declare const SC_WAVES_HOLD_TEXT = "Smugglers hold the barricade. Beat every wave in this cave first."; /** The Saltmark Sea Cave's entry level (a standard walk-free door gate on the arch, areaGates.ts). */ export declare const SALTMARK_CAVE_COMBAT_LEVEL = 18; export declare const SALTMARK_CAVE_NAME = "The Saltmark Sea Cave"; export type CaveWaveKind = 'lookout' | 'blackwakedeckhand' | 'cutthroat'; export type CaveWaveRoom = Readonly<{ room: BayRoom; /** Each wave in turn; the next comes after a short breather once one is beaten. */ waves: ReadonlyArray; /** Where they come in (side tunnels, the ledges), snapped to a standable tile. */ entries: ReadonlyArray; }>; export declare const SC_WAVE_ROOMS: readonly CaveWaveRoom[]; /** Seconds between a wave beaten and the next; how long a cleared cave stays cleared; how long an empty room waits before it resets. */ export declare const SC_BREATHER_MS = 5000; export declare const SC_RESET_MS: number; export declare const SC_EMPTY_RESET_MS = 60000; export declare const SC_WAVE_ID_PREFIX = "sc-wave-"; export declare const TIDE_BROKER_KIND = "tidebroker"; export declare const TIDE_BROKER_NAME = "The Tide Broker"; export declare const TIDE_BROKER: { readonly name: "The Tide Broker"; readonly level: readonly [number, number]; readonly maxHit: 13; readonly healthFactor: 1.6; readonly respawnMs: number; readonly aggro: 7; readonly leash: 12; readonly x: 1033; readonly z: 620; readonly spawnLeash: 2; /** Once a fight, under half health, he whistles up this crew from the side tunnels. */ readonly callCrew: readonly CaveWaveKind[]; readonly callAt: 0.5; readonly callEntries: ReadonlyArray; readonly callText: "The Tide Broker puts two fingers to his mouth and whistles. Smugglers come running out of the side tunnels!"; readonly text: "The Tide Broker turns from his strongbox, cutlass already out. \"The tide brings everything to me in the end. Even you.\""; readonly note: "A bald, bearded smuggler with a green sash who runs the Saltmark Sea Cave and buys whatever the tide and the Blackwakes bring in. Every fourth blow is a wide slash, twice an ordinary hit, told a full turn ahead: step out of his reach. Under half health he whistles three smugglers out of the side tunnels, once a fight."; }; export declare const SC_BOX_PREFIX = "sc-"; export declare function isSaltmarkCaveHostileKind(kind: string): boolean; export declare const BAY_PROP: { /** The damp note on the crossroads gibbet (The Damp Note). */ readonly note: "reachnote"; /** The rusty lever beside the waterfall (The Damp Note). */ readonly lever: "reachlever"; /** The smugglers' hidden cargo in the Smugglers' Cove (The Damp Note). */ readonly cargo: "reachcargo"; /** The castaway's journal in the hut on Driftwood Isle (The Pale Ribs). */ readonly journal: "reachjournal"; /** The grille's winch beside the iron grille (The Pale Ribs). */ readonly winch: "reachwinch"; /** The wreck's ribs in the grotto, where the old captain's log lies (The Pale Ribs). */ readonly log: "reachlog"; /** Gull feathers on the east cliff top (Feathers on the Cliff). */ readonly feather: "reachfeather"; /** The rope-ladder brake at the cliff edge (Feathers on the Cliff). */ readonly brake: "reachbrake"; /** The big nest on the ledge, where the stolen eggs are kept (Feathers on the Cliff). */ readonly eggs: "reacheggs"; /** The tide board by the low-tide cave (The Tide Board). */ readonly tideboard: "reachtideboard"; /** The smugglers' cache in the Low-Tide Cove (The Tide Board). */ readonly tidecache: "reachtidecache"; /** The two sluice wheels in the sea cave's Tidal Channel (the puzzle; The Tide Broker). */ readonly wheel: "reachwheel"; /** The Tide Broker's strongbox in the Grotto (the sea cave's prize). */ readonly strongbox: "reachstrongbox"; }; export type BayProp = Readonly<{ id: string; x: number; z: number; style: string; }>; export declare const BAY_NOTE: BayProp; export declare const BAY_LEVER: BayProp; export declare const BAY_CARGO: BayProp; export declare const BAY_JOURNAL: BayProp; export declare const BAY_WINCH: BayProp; export declare const BAY_LOG: BayProp; export declare const BAY_FEATHERS: readonly BayProp[]; export declare const BAY_BRAKE: BayProp; export declare const BAY_EGGS: BayProp; export declare const BAY_TIDEBOARD: BayProp; export declare const BAY_TIDECACHE: BayProp; export declare const SC_WHEELS: readonly BayProp[]; export declare const SC_STRONGBOX: BayProp; export declare const BAY_QUEST_PROPS: readonly BayProp[]; /** The model each prop draws with (quest-workshop bayreaches, or an earlier kit's). */ export declare function bayPropModel(prop: string): string | null; export declare const BAY_PROP_NAMES: Readonly>; /** What the Tide Broker's strongbox pays (once per player per reset, and only to someone who has beaten him since it last paid them). */ export declare const SC_STRONGBOX_COINS: readonly [number, number]; export declare const SC_STRONGBOX_TEXT = "You lever the Tide Broker's strongbox open: his takings, and the smugglers' best pickings."; export declare const SC_STRONGBOX_LOCKED_TEXT = "The strongbox is chained shut. The Tide Broker wears the key round his neck: beat him first."; export declare const COVE_QUEST_IDS: readonly ["theDampNote", "thePaleRibs", "feathersOnTheCliff", "theTideBoard", "theTideBroker"]; export type CoveQuestId = (typeof COVE_QUEST_IDS)[number]; export declare const GROTTO_KEY_KIND = "grottokey"; export declare const BAY_ITEM_NAMES: Readonly>; export declare const BAY_ITEM_KINDS: readonly string[]; /** * A cove door lets a player in once their quest has passed the step that opens it (the lever pulled, the winch turned, the brake * set, the tide read), or the quest is done. `afterStep` is that step's index: the door opens when the saved step is past it. */ export declare const COVE_DOOR_QUESTS: Readonly>; export declare const BAY_PLACE_TEXT: string; /** What a bay prop says when no quest step wants it (the tide board always tells the tide). */ export declare function bayPropIdleLine(prop: string, nowMs: number): string | null; //# sourceMappingURL=bayReaches.d.ts.map