feat(combat): add saving throws (fort/ref/will, natural 1/20, effect modifiers)

This commit is contained in:
2026-08-17 22:49:50 +02:00
parent 88f11de40f
commit 2cd8a33a4d
3 changed files with 221 additions and 9 deletions
+15 -9
View File
@@ -330,13 +330,18 @@ Règles modélisées :
du premier, appliquée au jet d'attaque et à la confirmation de critique ;
l'arme ranged reste utilisable jusqu'à 10 incréments. Les armes de jet
(5 incréments max) ne sont pas distinguées des armes à projectiles.
- Jets de sauvegarde : `resolve_save(state, save_type, dc)` — fort/ref/will.
1 naturel = échec automatique, 20 naturel = succès automatique. Les
modificateurs d'effets (`StatModifier` avec `target` correspondant) sont
appliqués via `resolve_modifiers` (mêmes règles d'empilement que les
attaques). Renvoie un `SaveResult` (success, roll, total, dc).
Non modélisé (couches `elevation`/`markers` présentes mais non appliquées
dans la résolution) :
- Sorts, jets de sauvegarde, conditions et états (le système d'effets et les
règles d'empilement sont en place via `effects.py` — l'intégration au
moteur est en cours).
- Sorts et conditions (le système d'effets `effects.py`, les règles
d'empilement des bonus et les jets de sauvegarde `resolve_save` sont en
place — l'intégration des sorts et conditions au moteur est en cours).
- Manœuvres de combat.
- Effets mécaniques de hauteur/élévation.
- Tailles Large+ (2×2), allonge > 5 ft
@@ -380,7 +385,7 @@ dans la résolution) :
La gate de validation complète (tests + lint + types) :
```bash
uv run pytest -q # 241 tests
uv run pytest -q # 253 tests
uv run ruff check src tests
uv run basedpyright src # mode strict
```
@@ -393,11 +398,12 @@ uv run basedpyright src # mode strict
## Feuille de route
- **Phase 1** — magie et états : jets de sauvegarde, sorts modélisés comme
effets paramétrés, conditions, manœuvres de combat, dons et capacités de
classe. Flanquement, attaques à outrance, attaques d'opportunité, charge,
retraite et pas de placement sont déjà modélisés. Le système d'effets
(`effects.py`) et les règles d'empilement des bonus sont en place.
- **Phase 1** — magie et états : sorts modélisés comme effets paramétrés,
conditions, manœuvres de combat, dons et capacités de classe. Flanquement,
attaques à outrance, attaques d'opportunité, charge, retraite et pas de
placement sont déjà modélisés. Le système d'effets (`effects.py`), les
règles d'empilement des bonus et les jets de sauvegarde (`resolve_save`)
sont en place.
- **Phase 2** — couche tactique LLM : stratégies en langage naturel traduites
en politiques, balayage de matrices de positionnement.
- **Phase 3** — rapporteur LLM local : agrégation des statistiques et