• Build the read-only Body Locations tree for the Combat tab: each zone with its body parts, each part with its hit locations, and per-location protection totals computed as natural base + equipped armor for every aspect (blunt/edged/piercing/fire). The armor contribution comes from the actor's worn armor aggregated onto the body structure (see aggregateArmor); natural protectionBase is left untouched, so the sum is the effective protection shown per location. Pure — no Foundry dependency.

    Parameters

    • zones: readonly BodyZoneLike[]

      The body zones with their parts and locations.

    Returns BodyZoneNode[]

    The zone tree with per-location totals, in input order.