feat(effects): add effect system with PF1e bonus stacking rules
This commit is contained in:
@@ -331,10 +331,12 @@ Règles modélisées :
|
||||
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.
|
||||
|
||||
Non modélisé en Phase 0 (couches `elevation`/`markers` présentes mais non
|
||||
appliquées dans la résolution) :
|
||||
Non modélisé (couches `elevation`/`markers` présentes mais non appliquées
|
||||
dans la résolution) :
|
||||
|
||||
- Sorts, jets de sauvegarde, conditions et états.
|
||||
- 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).
|
||||
- Manœuvres de combat.
|
||||
- Effets mécaniques de hauteur/élévation.
|
||||
- Tailles Large+ (2×2), allonge > 5 ft
|
||||
@@ -357,6 +359,12 @@ appliquées dans la résolution) :
|
||||
- `combat.py` — `CombatEngine` déterministe : initiative, actions, résolution
|
||||
des attaques (couvert, ligne d'effet, pénalités de portée), états de vie,
|
||||
transcripts, politique par défaut.
|
||||
- `effects.py` — système d'effets : `StatModifier` (modificateur de
|
||||
caractéristique avec type de bonus) et `resolve_modifiers` (application des
|
||||
règles d'empilement PF1e). Types de bonus cumulables (dodge, racial, trait,
|
||||
sans type) s'additionnent ; types non-cumulables (morale, sacré, profane,
|
||||
enhancement…) gardent la valeur la plus élevée. Les pénalités suivent les
|
||||
mêmes règles. Fondation pour sorts, conditions, dons et capacités de classe.
|
||||
- `metrics.py` — statistiques en forme fermée : `win_rate`, `win_rate_sigma`,
|
||||
`win_rate_band` (bande 3σ bornée à [0, 1]).
|
||||
- `runner.py` — `EncounterSpec`/`Side`, `build_states` (placement en zone +
|
||||
@@ -372,7 +380,7 @@ appliquées dans la résolution) :
|
||||
La gate de validation complète (tests + lint + types) :
|
||||
|
||||
```bash
|
||||
uv run pytest -q # 219 tests
|
||||
uv run pytest -q # 241 tests
|
||||
uv run ruff check src tests
|
||||
uv run basedpyright src # mode strict
|
||||
```
|
||||
@@ -386,9 +394,10 @@ 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. Flanquement, attaques à
|
||||
outrance, attaques d'opportunité, charge, retraite et pas de placement sont
|
||||
déjà modélisés.
|
||||
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 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
|
||||
|
||||
Reference in New Issue
Block a user