export type YardMove = 'strike' | 'guard' | 'feint'; export declare const YARD_MOVES: readonly YardMove[]; /** What each move beats: strike cuts a feint short, feint slips past a guard, guard turns a strike. */ export declare const YARD_BEATS: Readonly>; export type YardSergeantId = 'sergeant-hale' | 'sergeant-mott' | 'sergeant-brack' | 'sergeant-vane' | 'sergeant-pike' | 'sergeant-lorne' | 'sergeant-harl' | 'sergeant-rourke'; export type YardSergeant = { id: YardSergeantId; name: string; /** The Combat level he asks of a sparring partner. */ minCombat: number; /** Strength and Weapon Mastery stop paying from him at this level (each skill on its own). */ capLevel: number; /** Chance his tell is a lie, 0 to 1. */ fake: number; /** His meter and yours at the start of a bout; the bout ends when one reaches 1. */ meter: number; playerMeter: number; /** Strength XP and Weapon Mastery XP for each exchange you win (placeholder). */ xp: number; /** What he says when he takes you on. */ greet: string; /** * Where he stands: the Capital's Training Yard (the four first sergeants) or Calverton's Wardens' Yard (T71, 2026-10-14). The Calverton * pair write no Explorer's Ledger line (the book stays as the balance pass left it): a bout won there pays XP and nothing else. * The War Camp's pair (T108, warCampDrill.ts) stand in the camp's drill ground north of the Northern Gate and DO write Ledger lines. */ home: 'capital' | 'calverton' | 'war-camp'; }; export declare const YARD_SERGEANTS: readonly YardSergeant[]; /** The sergeants of each yard. */ export declare const CAPITAL_YARD_SERGEANTS: readonly YardSergeant[]; export declare const CALVERTON_YARD_SERGEANTS: readonly YardSergeant[]; export declare const WAR_CAMP_YARD_SERGEANTS: readonly YardSergeant[]; export declare const YARD_SERGEANT_NAMES: readonly string[]; export declare function yardSergeant(id: string): YardSergeant | null; export declare function yardSergeantByName(name: string | undefined): YardSergeant | null; /** The Capital's yard and the War Camp's pair are the sergeants the ledger names, in that order (the ledger holds the ids for its page). */ export declare function yardMatchesLedger(): boolean; /** The npc_action ids on a sergeant. */ export declare const YARD_ACTION_PREFIX = "yard:"; export declare const YARD_BEGIN_ACTION = "yard:begin"; export declare const YARD_STOP_ACTION = "yard:stop"; export declare function yardMoveAction(move: YardMove): string; export declare function yardActionMove(action: string): YardMove | null; export declare function isYardAction(action: string): boolean; /** How long a player must wait between picks (so a bout is not a spam click), and how long a bout waits for a pick. */ export declare const YARD_ROUND_MS = 1600; export declare const YARD_IDLE_MS = 90000; /** A sparring partner stays within this many tiles of the sergeant (Chebyshev); further and the bout ends. */ export declare const YARD_REACH = 4; /** Who wins an exchange: the player, the sergeant, or neither. */ export declare function yardExchange(player: YardMove, sergeant: YardMove): 'player' | 'sergeant' | 'tie'; /** What the sergeant will really do, and what his tell shows (a lie with his sergeant's `fake` chance). `rand` is a [0,1) source. */ export declare function yardRoll(sergeant: YardSergeant, rand: () => number): { actual: YardMove; tell: YardMove; }; /** The tell as people say it. */ export declare function yardTellText(move: YardMove): string; export declare const YARD_MOVE_LABEL: Readonly>; export declare const YARD_MOVE_HINT: Readonly>; /** What a sergeant needs of a player to begin, or null when they may. */ export declare function yardRefusal(sergeant: YardSergeant, combat: number): string | null; /** The skills the yard trains and whether this sergeant still has anything to teach for each, at these levels. */ export declare function yardPays(sergeant: YardSergeant, strength: number, mastery: number): { strength: boolean; mastery: boolean; }; //# sourceMappingURL=sparringYard.d.ts.map