fix(rules): lich stat block aligned to the KB entry - bestiary/lich.md gives hp 111 (11d6+55 plus 15 false life), Str 10, Int 22, Init +2 and 'Aura fear (60-ft. radius, DC 18)'; the JSON carried scenario-tuned 100 hp / Str 12 / Int 20 / Init +6 and the engine's feature-keyed aura constants carried 30 ft / DC 22 (BAB/touch/AC/saves/CON already conformed); the sim's own spell list is kept (the KB's prepared list includes spells outside data/spells/) and the choice is documented in the JSON notes and the README; golden tammara-vs-lich re-pinned for the two SRD-correct line changes (initiative d20=10+2=12 from the KB +2, Magic Missile DC17 = 10+1+6 from Int 22; damage unchanged - the 75 ft deployment distance stays beyond even the widened 60 ft aura, so no save die is consumed); +2 aura range tests (75 ft outside, 60 ft inside)

This commit is contained in:
2026-09-19 23:05:25 +02:00
parent 5fe2b72339
commit 4f8a131ba0
6 changed files with 79 additions and 19 deletions
+9 -3
View File
@@ -1646,14 +1646,20 @@ Règles modélisées :
moteur n'ayant pas de descripteur « charme », `mind_affecting` en tient
lieu (surcouverture : les effets de compulsion comptent aussi))
— couvertes par `tests/test_class_abilities.py`.
- Le Liche (`data/monsters/lich.json`) : `creature_type: "undead"` (sensible à l'énergie
positive canalisée), aura de terreur (30 ft, Volonté DD 22 ou
- Le Liche (`data/monsters/lich.json`) : bloc de stats aligné sur la fiche KB
`bestiary/lich.md` (PV 111, For 10, Int 22, Init +2, DD et bonus déjà
conformes), `creature_type: "undead"` (sensible à l'énergie
positive canalisée), aura de terreur (60 ft, Volonté DD 18 ou
`shaken` 1 round, au début de son tour) et contact paralysant (au toucher,
`paralysé` 1d4+1 rounds), RD 15/contondant **et** magie (conformance P2 :
les deux composants sont requis — une arme contondante non magique ne
contourne plus la RD ; lacune documentée : le modèle d'arme n'expose pas de
propriété « magique », donc aucun équipement ne contourne cette RD) ; son JSON porte un dictionnaire
`spell_slots` sans clés dupliquées.
`spell_slots` sans clés dupliquées. Choix assumé : la liste de sorts reste
la liste d'encounter du simulateur (la liste préparée de la fiche KB
contient des sorts absents du registre `data/spells/`) — seul le bloc de
stats a été aligné ; la liste de sorts du registre est donc une
approximation documentée, pas une transcription SRD.
- Snapshot d'observation (contrat LLM, Phase 2) : avant chaque appel de
politique, le moteur construit une `Observation` sérialisable (`to_dict()` →
JSON) isolée du combat — le snapshot est la SEULE source d'info de la LLM