feat(combat): add total defense and fighting defensively

This commit is contained in:
2026-09-10 12:52:47 +02:00
parent ab02597bc4
commit ebdff4f7e5
3 changed files with 302 additions and 2 deletions
+19 -1
View File
@@ -324,6 +324,20 @@ Règles modélisées :
exécutable. Le snapshot expose l'état via la clé `readied`
(`{kind, trigger}` ou `None`). `default_policy` ne se prépare pas
(disponible via une politique personnalisée).
- Défense totale (`Action(kind="total_defense")`, action standard) : le
combattant se couvre entièrement et gagne **+4 d'esquive à la CA** jusqu'au
début de son prochain tour (champ runtime `defensive_ac_bonus`, réinitialisé
avec les autres drapeaux de tour). Le kind ne requiert pas de cible.
Simplification documentée : la progression d'Acrobatie (+6 avec 3 rangs)
n'est pas modélisée. `default_policy` ne la choisit pas (disponible via une
politique personnalisée).
- Combat défensif (`Action(kind="fight_defensively")`, action standard) : le
combattant se bat avec prudence — **−4 à ses jets d'attaque et de
confirmation de critique**, et **+2 d'esquive à la CA** jusqu'au début de son
prochain tour (drapeaux runtime `fight_defensively` + `defensive_ac_bonus`).
Simplification documentée : la progression d'Acrobatie (−2 / +3 avec 3
rangs) n'est pas modélisée. `default_policy` ne le choisit pas (disponible
via une politique personnalisée).
- Retour d'exécution des actions : chaque action produit un `ActionResult`
explicite (kind, ok, reason) consigné dans le snapshot (`last_turn_results`
au tour suivant). Les actions invalides sont rejetées et journalisées au lieu
@@ -593,7 +607,11 @@ Règles modélisées :
last_turn_results (tuple de {kind, ok, reason} — résultat d'exécution du
dernier tour, pour que la policy apprenne les actions rejetées/dégradées),
readied ({kind, trigger} de l'action préparée ou None — préparation en
cours, consommée quand le déclencheur la fait tirer).
cours, consommée quand le déclencheur la fait tirer),
defensive_ac_bonus (int — bonus d'esquive à la CA de la défense totale
(+4) ou du combat défensif (+2), réinitialisé au début du tour du
combattant), fight_defensively (bool — combat défensif actif : −4 aux
jets d'attaque et de confirmation jusqu'au prochain tour).
- Par paire combattant actif × cible : target_index, distance_ft, weapon_for,
range_penalty, can_charge, can_step5_to_attack, has_line_of_effect,
flanking, movement_cost_ft, target_threatens_me, enemies_threatening_me.