feat(combat): add charge action (straight-line 2x speed, +2 attack, -2 AC)

This commit is contained in:
2026-08-17 22:49:50 +02:00
parent 004d6f1c2b
commit 7543c55ed4
3 changed files with 306 additions and 27 deletions
+12 -3
View File
@@ -273,7 +273,9 @@ Règles modélisées :
hors de portée (déplacement à pleine vitesse le long du chemin Dijkstra,
puis attaque si une arme est utilisable) et `(attack,)` sinon. Les actions
immédiates (hors-tour, consomment le prochain swift) et les actions
spéciales (charge, retraite) ne sont pas encore modélisées.
spéciales (retraite) ne sont pas encore modélisées. `default_policy`
choisit la charge quand l'ennemi est hors de portée mais joignable par
une ligne droite (voir ci-dessous).
- Attaques multiples par action : une arme avec `count` > 1 (« 2x Talons »)
résout `count` balayages indépendants dans la même action ; les balayages
restants sont perdus si la cible tombe (inconsciente ou morte) en cours de
@@ -306,6 +308,13 @@ Règles modélisées :
`_aoo_used`, réinitialisée au début du round) ; les AoO sont toujours portées
(PF1e permet de les décliner, le simulateur ne le fait pas). Le pas de
placement (5 ft) et la retraite (à venir) évitent les AoO de mouvement.
- Charge : action à round complet. Le combattant se déplace en ligne droite
(Bresenham) jusqu'à 2× sa vitesse vers la case la plus proche d'où il peut
frapper la cible en mêlée, puis porte une seule attaque de mêlée à +2. La
charge impose 2 CA à l'attaquant jusqu'au début de son prochain tour. La
ligne droite doit être dégagée (pas de terrain difficile, d'obstacles ni de
créatures) ; distance minimum 2 cases (10 ft). `default_policy` choisit la
charge quand l'ennemi est hors de portée mais joignable en ligne droite.
- Distance : pénalité cumulative de 2 par incrément de portée complet au-delà
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
@@ -318,7 +327,7 @@ appliquées dans la résolution) :
- Manœuvres de combat.
- Effets mécaniques de hauteur/élévation.
- Tailles Large+ (2×2), allonge > 5 ft, actions spéciales
(charge, pas de placement, retraite) et actions immédiates hors-tour.
(pas de placement, retraite) et actions immédiates hors-tour.
## Architecture
@@ -352,7 +361,7 @@ appliquées dans la résolution) :
La gate de validation complète (tests + lint + types) :
```bash
uv run pytest -q # 210 tests
uv run pytest -q # 213 tests
uv run ruff check src tests
uv run basedpyright src # mode strict
```