# Turret CoverArea, and the turret leftovers
# Regenerate: python3 tools/re-capture/turret_coverarea.py
# See docs/re/structures/unit-substructure-records.md

## CoverArea is a 6-BIT mask
   turrets 835 ; distinct values 41 ; max 0x3f ; any bit >= 6 set: False
   per-bit set count:
        bit 0   709
        bit 1   117
        bit 2   274
        bit 3   274
        bit 4   260
        bit 5   237
        bit 6     0
        bit 7     0
   popcount: {0: 34, 1: 439, 2: 40, 3: 62, 4: 147, 5: 100, 6: 13}

## it tracks the MOUNT, not the weapon
   mask   n     weapon classes
   0x01   439   {'Gun': 95, 'Beam': 67, 'Cannon': 56, 'Laser': 41}
   0x3d    82   {'Missile': 82}
   0x00    34   {'NULL': 34}
   0x2d    28   {'ASGun': 14, 'AAGun': 12, 'Beam': 2}
   0x1d    25   {'ASGun': 14, 'AAGun': 8, 'Beam': 2, 'Laser': 1}
   0x17    13   {'AAGun': 13}
   0x1b    13   {'AAGun': 13}
   0x3f    13   {'Gun': 13}
   0x39    12   {'AAGun': 8, 'ASGun': 4}
   0x35    12   {'AAGun': 8, 'ASGun': 4}
   0x27    12   {'AAGun': 10, 'ASGun': 2}
   0x2b    12   {'AAGun': 10, 'ASGun': 2}
   0x19    10   {'AAGun': 5, 'ASGun': 4, 'Gun': 1}
   0x15    10   {'AAGun': 5, 'ASGun': 4, 'Gun': 1}
   0x14    10   {'AAGun': 6, 'ASGun': 4}
   0x18    10   {'AAGun': 6, 'ASGun': 4}
   worked example -- one hull, one weapon, masks differ by mount:
     UN_e107_ADAN_AAFrigate
        mask 0x1d  Frame=GN_GunXS_01_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x1d  Frame=GN_GunXS_02_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x1d  Frame=GN_GunXS_03_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x1d  Frame=GN_GunXS_04_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame=GN_GunXS_05_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame=GN_GunXS_06_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame=GN_GunXS_07_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame=GN_GunXS_08_ContH    Yaw=120.0   Weapon_ADAN_AAFrigate_AAGun
        mask 0x0c  Frame=                     Yaw=20.0    Weapon_ADAN_Ship_AAMissile
     UN_f104_TCAF_Battleship
        mask 0x01  Frame=                     Yaw=3.0     Weapon_TCAF_Battleship_BowChaser
        mask 0x1d  Frame=GN_TGunL_01_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x2b  Frame=GN_TGunM_02_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x1d  Frame=GN_TGunL_02_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x27  Frame=GN_TGunM_03_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x39  Frame=GN_TGunL_03_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x17  Frame=GN_TAAGunL_01        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x39  Frame=GN_TGunL_04_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x1b  Frame=GN_TAAGunL_02        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x35  Frame=GN_TGunL_05_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x17  Frame=GN_TAAGunL_03        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x35  Frame=GN_TGunL_06_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x1b  Frame=GN_TAAGunL_04        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x2d  Frame=GN_TGunL_07_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x27  Frame=GN_TAAGunL_05        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x2d  Frame=GN_TGunL_08_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x2b  Frame=GN_TAAGunL_06        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x1f  Frame=GN_TGunM_01_ContH    Yaw=120.0   Weapon_TCAF_Ship_ASGun
        mask 0x27  Frame=GN_TAAGunL_07        Yaw=45.0    Weapon_TCAF_Ship_AAGun
        mask 0x2b  Frame=GN_TAAGunL_08        Yaw=45.0    Weapon_TCAF_Ship_AAGun

## the weapons no turret mounts
   Weapon.ID 131 ; mounted 105 ; never 26
        Weapon_ADAN_Attacker_S_GunTurret
        Weapon_DSaber_P_wep_13_Child
        Weapon_DSaber_P_wep_29_Child
        Weapon_S16Boss_AAGun
        Weapon_S16Boss_HBeam
        Weapon_S16Boss_Laser
        Weapon_TCAF_DeltaSaber_ASMissile_P
        Weapon_TCAF_DeltaSaber_Beam_P
        Weapon_TCAF_DeltaSaber_Bomb_P
        Weapon_TCAF_DeltaSaber_Cannon_P
        Weapon_TCAF_DeltaSaber_Gun_P
        Weapon_TCAF_DeltaSaber_Laser_P
        Weapon_TCAF_DeltaSaber_Laser_Ttrl
        Weapon_TCAF_DeltaSaber_Missile_P
        Weapon_TCAF_DeltaSaber_NoseGun
        Weapon_TCAF_DeltaSaber_NoseGun_None
        Weapon_TCAF_DeltaSaber_NoseGun_P
        Weapon_TCAF_DeltaSaber_NoseGun_Ttrl
        Weapon_TCAF_DeltaSaber_Rocket_P
        Weapon_TCAF_DeltaSaber_Shotgun_P
        Weapon_TCAF_DeltaSaber_Special_P
        Weapon_TCAF_DeltaSaber_TwinGun
        Weapon_TCAF_DeltaSaber_TwinGun_P
        Weapon_Test_ASMissile
        Weapon_Test_Gun_Player
        Weapon_Test_Missile_Player

## Versatile_NNN across all 41 archives
   populated records: NONE — only the `???` template row

## the two units whose turret count is one short
   UN_e001_ADAN_Elan_EX4  TurretCount=1  records=2
        mask 0x01  Frame=''                   Weapon_ADAN_Turret_NoseGun
        mask 0x01  Frame=''                   Weapon_ADAN_Turret_Missile
   UN_e107_ADAN_AAFrigate_EX4  TurretCount=8  records=9
        mask 0x1d  Frame='GN_GunXS_01_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x1d  Frame='GN_GunXS_02_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x1d  Frame='GN_GunXS_03_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x1d  Frame='GN_GunXS_04_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame='GN_GunXS_05_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame='GN_GunXS_06_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame='GN_GunXS_07_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x2d  Frame='GN_GunXS_08_ContH'  Weapon_ADAN_AAFrigate_AAGun
        mask 0x0c  Frame=''                   Weapon_ADAN_Ship_AAMissile
