feat(combat): add full attack action with BAB iterative attacks
- New Action kind 'full_attack': manufactured weapons (count=1) gain BAB iteratives at +6/+11/+16 (-5/-10/-15 from attack bonus, capped at 4); natural weapons (count>1) delegate to _attack (no iteratives). - Extracted _resolve_swing from _attack: one swing, log, stats, target-down check. Both _attack and _full_attack use it. AttackResult gains base_bonus field so the transcript shows the actual bonus used per iterative. - default_policy now returns full_attack instead of attack when in range. Non-breaking for BAB < 6 (single swing, identical transcript). - Refactored round_no to self._current_round instance variable, removing it from 6 method signatures and fixing PLR0913 on _resolve_swing. - 4 new tests: BAB+6 two iteratives, BAB+11 three iteratives, target drops mid-full-attack, BAB<6 single swing. README and docstring updated; test count 202 -> 206.
This commit is contained in:
@@ -278,7 +278,10 @@ Règles modélisées :
|
||||
- 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
|
||||
rafale. Les itératifs de BAB (2e attaque à BAB +6…) ne sont pas modélisés.
|
||||
rafale. Attaque à outrance (action à round complet) : à BAB +6/+11/+16, des
|
||||
attaques supplémentaires à -5/-10/-15 ; les armes naturelles (`count` > 1)
|
||||
ne gagnent pas d'itératifs. Plusieurs armes naturelles en une seule attaque
|
||||
à outrance ne sont pas modélisées.
|
||||
- Mêlée : allonge d'une case ; mouvement : un déplacement parcourt jusqu'à la
|
||||
vitesse du combattant en cases le long du plus court chemin réel (champ de
|
||||
coût Dijkstra depuis la cible, diagonales 5-10-5), en s'arrêtant adjacent à
|
||||
@@ -306,9 +309,8 @@ appliquées dans la résolution) :
|
||||
- Sorts, jets de sauvegarde, conditions et états.
|
||||
- Attaques d'opportunité, manœuvres de combat.
|
||||
- Effets mécaniques de hauteur/élévation.
|
||||
- Tailles Large+ (2×2), allonge > 5 ft, itératifs de BAB, actions spéciales
|
||||
(attaque à outrance, charge, pas de placement, retraite) et actions
|
||||
immédiates hors-tour.
|
||||
- Tailles Large+ (2×2), allonge > 5 ft, actions spéciales
|
||||
(charge, pas de placement, retraite) et actions immédiates hors-tour.
|
||||
|
||||
## Architecture
|
||||
|
||||
@@ -342,7 +344,7 @@ appliquées dans la résolution) :
|
||||
La gate de validation complète (tests + lint + types) :
|
||||
|
||||
```bash
|
||||
uv run pytest -q # 202 tests
|
||||
uv run pytest -q # 206 tests
|
||||
uv run ruff check src tests
|
||||
uv run basedpyright src # mode strict
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user