FEnigma/src/fenigma/shells.py
Dominik Roth 90a26b3f85 shells: add LE/APHE/EQKE (mirroring AP/HE/HCHE blast radii) and FLCH (0.6km)
Also dropped the docstring's shell-count/standard-ratio stats, they'd
just go stale again the next time this list changes.
2026-08-09 17:55:56 +02:00

37 lines
2.3 KiB
Python

"""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