refactor(loaders): unify combatant loader, migrate PC features/spells
Rename monster.py → combatant.py with _KNOWN_FEATS lookup table that resolves feat name strings to AbilitySpec constants (Power Attack, Iron Will, Toughness, Weapon Focus, etc.). Unknown feats produce minimal AbilitySpec (data preserved for future implementation). Migrate all 8 PC JSONs (data/pcs/) with complete feat/spell lists extracted from Foundry sheets — including traits, racial abilities, and all spells. Monsters (goblin, orc) unchanged (no feats/spells). Update all imports, add backward-compatible aliases (load_monster, MonsterLoadError), update CLI to use load_combatant. Gate: 377 tests, ruff clean, basedpyright clean.
This commit is contained in:
@@ -16,7 +16,7 @@ from typing import TYPE_CHECKING
|
||||
if TYPE_CHECKING:
|
||||
from pf1e_simulator.runner import EncounterReport, EncounterSpec
|
||||
|
||||
from pf1e_simulator.loaders import MonsterLoadError, SheetLoadError, load_monster
|
||||
from pf1e_simulator.loaders import CombatantLoadError, SheetLoadError, load_combatant
|
||||
from pf1e_simulator.map import MapValidationError, load_map
|
||||
from pf1e_simulator.runner import EncounterSpec, Side, run_encounter
|
||||
|
||||
@@ -44,7 +44,7 @@ def _build_spec(args: argparse.Namespace) -> EncounterSpec:
|
||||
if not files:
|
||||
msg = f"side {name!r}: at least one monster JSON file is required"
|
||||
raise CliError(msg)
|
||||
combatants = tuple(load_monster(Path(path)) for path in files)
|
||||
combatants = tuple(load_combatant(Path(path)) for path in files)
|
||||
sides.append(Side(name=name, combatants=combatants, zone=map_spec.deployment[name]))
|
||||
return EncounterSpec(map=map_spec, sides=tuple(sides), round_cap=args.round_cap)
|
||||
|
||||
@@ -107,7 +107,7 @@ def main(argv: list[str] | None = None) -> int:
|
||||
except CliError as exc:
|
||||
print(f"pf1e-sim: {exc}", file=sys.stderr)
|
||||
return 2
|
||||
except (MapValidationError, MonsterLoadError, SheetLoadError, OSError) as exc:
|
||||
except (MapValidationError, CombatantLoadError, SheetLoadError, OSError) as exc:
|
||||
print(f"pf1e-sim: {exc}", file=sys.stderr)
|
||||
return 2
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user