/** * THE DROVE (Saltgrass Downs, 2026-10-18; saltgrassDowns.ts has the place). Six ewes out of a high pasture pen, walked along the drove road to the * Riversend Fold in about three minutes, with wolves and rustlers harrying the flock. It reuses what the game already has: * * - Hog Wild's pet and Nye's led ewe: the animals follow YOU, on their own pace, by the trail you walk (so they can never be led through a wall); * - the Brindlecross sheep fold: the destination, a fenced fold, here with a Count Board; * - the Timber Convoy's server-driven tame creatures (`sheep` NPCs the server walks) and its ambush wolves (a creature that goes for the thing you * escort, not for you, until you hit it). * * Rules (all pure here, the backend's saltgrassDrove.ts runs them): * - a pen gate opens only when you have no flock out, are alive, are not in a fight and are NOT inside the cooldown after your last PAID drove; * - the flock walks DROVE_SHEEP_SPEED tiles a second behind you, DROVE_GAP tiles of your trail apart. You walk faster (3.9, running 5.85) so you * wait for them; a ewe more than DROVE_STRAY_TILES from you for DROVE_STRAY_MS bolts and is lost; a flock more than DROVE_ABANDON_TILES away, a * teleport, a death, a logout or DROVE_MAX_MS ends the drove; * - two ambushes cut in on the road (a wolf at the gorse edge, a rustler at the salt pans). An ambusher goes for the nearest ewe that no player is * within DROVE_GUARD_TILES of; a ewe it stands beside for DROVE_HARRY_MS is lost. Hit it and it turns on you and lets the flock go; * - the Count Board at the fold tallies the ewes at the fold and pays: coins and wool for each, a bonus for all six, a bonus inside the par time. * Nothing in it heals. Rewards are placeholders for the balance pass. */ import type { LanternWakePoint } from './lanternWake.js'; export declare const DROVE_SHEEP_COUNT = 6; export declare const DROVE_SHEEP_KIND = "sheep"; export declare const DROVE_SHEEP_NAME = "Drove Ewe"; /** A flock's NPC ids are `-`; an ambusher's `-`. */ export declare const DROVE_ID_PREFIX = "sgdr-"; export declare const DROVE_AMBUSH_ID_PREFIX = "sgam-"; /** Tiles a second the flock walks (a steady plod: the player's walk is 3.9). */ export declare const DROVE_SHEEP_SPEED = 2.2; /** Trail tiles between one ewe and the next, and between the first ewe and you. */ export declare const DROVE_GAP = 1.4; /** A ewe farther than this (tiles, straight line; the last ewe of a straight flock is 6 x DROVE_GAP behind you) from you for DROVE_STRAY_MS bolts; the first warning is at DROVE_WARN_TILES. */ export declare const DROVE_STRAY_TILES = 18; export declare const DROVE_WARN_TILES = 11; export declare const DROVE_STRAY_MS = 6000; /** The whole drove ends (the flock scatters) when you are this far from every ewe, or this long after it began. */ export declare const DROVE_ABANDON_TILES = 40; export declare const DROVE_MAX_MS: number; /** A step of the trail longer than this is a teleport: the flock is left behind. */ export declare const DROVE_TELEPORT_TILES = 6; /** The par time for the bonus (three minutes: the road is about 150 seconds of a flock's walk, so a clean drove with one fight just makes it), and the cooldown after a PAID drove (per character, kept in memory). */ export declare const DROVE_PAR_MS = 180000; export declare const DROVE_PAY_COOLDOWN_MS: number; /** Pen gates can be opened this far from the gate (tiles). */ export declare const DROVE_PEN_REACH = 4; /** At the Count Board: the flock counts when it stands within this many tiles of the fold's box, and you within this many of the board. */ export declare const DROVE_FOLD_PAD = 5; export declare const DROVE_BOARD_REACH = 6; /** The road's six waypoints (the milestones), world tiles. */ export declare const DROVE_WAYPOINTS: readonly LanternWakePoint[]; /** The full road as a polyline (the pens, the out leg, the shore bend, the back leg to the fold), for the length and the marker spacing. */ export declare const DROVE_ROUTE: readonly LanternWakePoint[]; export declare function droveRouteLength(): number; export type DroveAmbush = { readonly id: 'wolf' | 'rustler'; readonly kind: 'wolf' | 'hijacker'; readonly name: string; /** The flock's lead (or you) coming within `trigger` tiles of `at` springs it. */ readonly at: LanternWakePoint; readonly trigger: number; /** It appears this many tiles off, from the side `from` (a tile) so it comes out of the gorse or off the sand. */ readonly from: LanternWakePoint; readonly level: readonly [number, number]; readonly maxHit: number; readonly healthScale: number; readonly notice: string; /** Tiles a second it runs at the flock. */ readonly speed: number; }; export declare const DROVE_AMBUSHES: readonly DroveAmbush[]; /** Tiles within which a ewe is "guarded": an ambusher ignores her while a player stands this close (it goes for an unguarded one). */ export declare const DROVE_GUARD_TILES = 3; /** Milliseconds an ambusher must stand beside a ewe to make her bolt. */ export declare const DROVE_HARRY_MS = 3000; /** An ambusher is taken off the road this long after it appeared even if nobody killed it. */ export declare const DROVE_AMBUSH_LIFE_MS = 120000; export type DroveReward = { coins: number; wool: number; explorerXp: number; allSix: boolean; underPar: boolean; }; /** What the Count Board pays: per ewe at the fold, a bonus for the whole flock and one for beating the par time. No healing. */ export declare const DROVE_PAY: { readonly perEwe: 60; readonly allSixBonus: 80; readonly parBonus: 60; readonly woolPerEwe: 1; readonly explorerXpPerEwe: 90; }; export declare function droveReward(kept: number, elapsedMs: number): DroveReward; /** The fewest ewes at the fold that count for The First Drove's step. */ export declare const DROVE_QUEST_MIN_KEPT = 4; export declare const DROVE_TEXT: { readonly started: "The pen gate swings open and six ewes trot out and fall in behind you. Keep to the drove road and walk them to the Riversend Fold. They follow at their own pace: do not outrun them."; readonly already: "You already have a flock out. Walk them to the Riversend Fold, or let them go."; readonly busy: "Not while you are fighting."; readonly cooldown: "The pens are shut for a while: the flock you brought in is still being counted. Come back in a few minutes."; readonly behind: "The flock is falling behind. Slow down and let them catch up."; readonly bolted: (left: number) => string; readonly scattered: "The flock scatters. The drove is over."; readonly abandoned: "You have left the flock too far behind. The ewes wander off home. The drove is over."; readonly timeout: "The drove has taken too long and the ewes have wandered off. The drove is over."; readonly fold: "The flock is at the fold. Read the Count Board to be paid."; readonly noFlock: "The board is chalked with the day's counts. You have no flock out: open a pen gate at the High Pasture Pens to begin a drove."; readonly notYet: "Your flock is not at the fold yet. Bring them in through the east gate."; readonly paid: (kept: number, r: DroveReward) => string; readonly lostNone: "Not one ewe reached the fold. The count board stays blank."; readonly farFromBoard: "You are too far from the board to read it."; }; //# sourceMappingURL=saltgrassDrove.d.ts.map