import type { Moodle, MoodleSeverity } from "./moodle.js"; export interface HealthRegionConfig { id: string; label: string; max: number; /** A vital part (head, thorax): the entity dies when it empties. Defaults to false. */ vital?: boolean; /** Extra multiplier on incoming damage — a head takes more per hit. Defaults to 1. */ vulnerability?: number; } export interface AilmentConfig { id: string; label: string; /** The part this injury belongs to; drain (bleed) applies here. */ region?: string; severity?: MoodleSeverity; icon?: string; /** Health lost per game-second per stack while untreated (bleed, infection). */ drainPerSecond?: number; /** Can queue multiple instances (three bleeds stack); otherwise re-applying refreshes. */ stacking?: boolean; /** Treatment item ids that clear this injury — bandage, tourniquet, splint. */ treatedBy?: readonly string[]; } export interface MultiRegionHealthConfig { regions: readonly HealthRegionConfig[]; /** Ailment catalog keyed by id — the queue references these. */ ailments?: Record; } export interface RegionHealthState { id: string; label: string; current: number; max: number; fraction: number; vital: boolean; } export interface AilmentInstance { id: string; stacks: number; } export interface DamageResult { region: RegionHealthState; /** Damage actually applied after vulnerability. */ applied: number; dead: boolean; } export interface TreatResult { /** Ailment ids fully or partially cleared by the item. */ treated: readonly string[]; } /** Per-limb / per-region health track with treat/damage/heal APIs. */ export interface MultiRegionHealth { damage(regionId: string, amount: number): DamageResult; heal(regionId: string, amount: number): RegionHealthState; region(regionId: string): RegionHealthState; regions(): RegionHealthState[]; /** 0..1 aggregate across all parts (share-weighted by max). */ overall(): number; /** Queue an ailment from the catalog; stacking ailments increment, others refresh. */ applyAilment(ailmentId: string): void; /** Clear ailments treated by an item id; one item clears one stack of each match. */ treat(itemId: string): TreatResult; /** Apply ailment drains over game-time `dt`; may kill via a vital part. */ tick(dt: number): { dead: boolean; }; ailments(): AilmentInstance[]; /** Wounds as moodles for the shared status stack (#78 shares #90's moodle display). */ ailmentMoodles(): Moodle[]; readonly dead: boolean; } /** * Per-region/limb health tracked separately, so each body part takes and heals damage on its own. * * @capability limb-health per-body-part/region health tracked separately */ export declare function createMultiRegionHealth(config: MultiRegionHealthConfig): MultiRegionHealth;