"""Shell (ammunition) types and their known properties. From High Command's field reference. Blast radius is None where unknown. Feeds into the firing-solution calculator later (ordnance choice affects what's needed to make a shot count, e.g. AP required for underground supply caches per the typewriter). """ from __future__ import annotations from enum import Enum class Shell(Enum): # description blast_radius_km standard AP = ("Armor-piercing", 0.05, True) LE = ("Light explosive", 0.05, True) # same blast radius as AP HE = ("High-explosive fragmentation", 0.25, True) APHE = ("Armor-piercing high-explosive", 0.25, True) # same blast radius as HE HCHE = ("High-capacity bursting charge", 0.50, True) EQKE = ("Earthquake charge", 0.50, True) # same blast radius as HCHE FLCH = ("Flechette", 0.60, True) STAR = ("Illumination star", None, True) SMK = ("White phosphorus smoke", None, True) MSTD = ("Mustard (YX) blister agent", None, False) TEAR = ("Lachrymatory (CN) irritant", None, False) PRPG = ("Agitation leaflet propaganda", None, False) PHGN = ("Phosgene (CG) choking gas", None, False) INCN = ("Thermite incendiary", None, False) ATMC = ("Experimental uranium nucleus-splitting annihilation", None, False) CLMN = ("Cluster mine dispersal", None, False) def __init__(self, description: str, blast_radius_km: float | None, standard: bool) -> None: self.description = description self.blast_radius_km = blast_radius_km # None = not yet measured self.standard = standard # available without a special unlock/research