/** * Boss signature attacks: the one memorable thing each boss does. * * Boss review 2026-09-29 (dreadwoods/.cursor/task-plans/2026-09-29-boss-presentation-review.md): * only the dragon had a mechanic; every other boss was stats. A signature is * the dragon's pattern made general: every Nth attack of the boss is its * signature, announced a full turn ahead (`combat_windup` with * `attack: 'signature'`), so a player can see it coming and know which boss it * is. The server rolls and applies it (dreadwoods-backend src/bossSpecials.ts, * hooked into the NPC turn through dragonfire.ts); the client draws the tell * (dreadwoods-frontend src/render/BossTellFx.ts). * * Budget-neutral by construction: over one cycle of `every` attacks, the * ordinary hits are scaled down by (every - mult) / (every - 1) and the * signature hits `mult` times an ordinary roll (through the same hit chance), * so the expected damage per cycle is what the boss did before. Only its * shape changes: fewer, heavier, telegraphed blows. No health pool grows. * * Three exceptions to "every Nth attack": * - `guard` (Frost Warden): a guard turn hits ordinarily and then parries the * player's next swing. Its health is trimmed by GUARD_HEALTH_SCALE to pay * for the swings it costs. * - `shatterAt` (Glacial Behemoth): a crystal on its back shatters at those * health shares; the next attack is announced and heavy, and its ordinary * hits are lighter (`ordinaryScale`) to pay for the four shatters. * - `poolScale` (Blood Mire Elemental): its blows scale with how much of its * pool is left, which is also how the client draws the pool draining. */ export type BossSignatureId = 'brood-bite' | 'wide-slash' | 'root-slam' | 'overhead' | 'mire-slam' | 'grave-cleave' | 'guard' | 'stomp' | 'deep-freeze' | 'three-phials' | 'crystal-shatter' | 'breaker' | 'claw-rake' | 'chain-axe' | 'crew-whistle' | 'maul' | 'pincer' | 'tusk-toss' | 'jaw-clamp' | 'tusk-rush' | 'pack-howl' | 'tongue-grab' | 'beak-grab' | 'mire-slam' | 'wing-gale' | 'gore-pin' | 'ogre-clutch' | 'bramble-stampede' | 'club-sweep' | 'tusk-charge' | 'greytusk-charge' | 'jaw-snap' | 'bracken-charge' | 'gull-dive' | 'ambush-lunge' | 'rock-lunge' | 'web-spit' | 'bramble-charge' | 'shockwave-slam' | 'magma-sweep' | 'bell-swing' | 'silk-lash' | 'gaff-haul' | 'marrow-haul' | 'club-smash' | 'tomb-hammer' | 'toll-cleave' | 'war-slam' | 'blood-surge' | 'flare-burst' | 'rail-rend' | 'ash-belch' | 'horn-charge' | 'coil-slam' | 'skerry-dive' | 'tower-slam' | 'ladle-sweep' | 'wing-gust' | 'pounce' | 'gorse-charge' | 'net-cast' | 'rune-surge' | 'spear-stab' | 'thaw-shear' | 'undertow' | 'rapid-slashes' | 'lunging-thrust' | 'heavy-swing' | 'drowned-call'; export type BossSignature = { id: BossSignatureId; /** Every Nth attack is the signature. 0: not periodic (see `shatterAt`). */ every: number; /** Damage of a signature hit as a multiple of an ordinary roll (1 for the guard). */ mult: number; /** How many looks the tell has (the Alchemist's red, blue, green). Default 1. */ variants?: number; /** Health shares (highest first) at which the next attack is a shatter. */ shatterAt?: readonly number[]; /** Overrides the computed scale of the ordinary hits (the Behemoth's shatters are not periodic). */ ordinaryScale?: number; /** True: the parried player's next swing does nothing (the Frost Warden). */ guard?: boolean; /** The blows scale from POOL_MIN_SCALE at no health to 1 at full (Blood Mire Elemental). */ poolScale?: boolean; /** Chat line the first time the tell goes out in a fight. */ notice: string; /** The tell's colour on the client, as a 0xRRGGBB number. */ tell: number; }; /** The tell goes out a full turn (COMBAT_TURN_MS) before the blow lands. */ export declare const BOSS_SIGNATURE_TELL_MS = 1200; /** A guard turn's parry costs the player one swing in every eight or so: the Warden gets this much less health. */ export declare const GUARD_HEALTH_SCALE = 0.88; /** The Blood Mire Elemental's blows at no health, as a share of full. */ export declare const POOL_MIN_SCALE = 0.6; export declare const BOSS_SIGNATURES: Readonly>; /** * The ring bosses' sweeps (worldBossRing.ts RingBoss.sweep): their tell colour for the client (BossFx). Not in BOSS_SIGNATURES, which * is one signature per boss kind and drives the periodic every-Nth-blow maths; a sweep is the ring engine's own (backend ringstoneFight.ts). */ export declare const RING_SWEEP_SIGNATURES: Readonly>; /** The tell's colour for a variant (the Alchemist's phials go red, blue, green). */ export declare const THREE_PHIAL_COLOURS: readonly number[]; /** Damage scale of an ordinary hit while a signature is in the cycle: (every - mult) / (every - 1). */ export declare function ordinaryHitScale(sig: Pick): number; //# sourceMappingURL=bossSignatures.d.ts.map