feat(combat): add stand up and drop prone

This commit is contained in:
2026-09-10 13:07:58 +02:00
parent ebdff4f7e5
commit 468c22ff57
3 changed files with 392 additions and 8 deletions
+20 -1
View File
@@ -338,6 +338,23 @@ Règles modélisées :
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).
- Se relever (`Action(kind="stand_up")`, action de mouvement) : le combattant à
plat ventre (renversé par trip/overrun ou après s'être jeté à terre) retire la
condition `prone` des **deux** représentations (`active_conditions` durée,
`conditions` sans durée) et redevient valide. Le relèvement **provoque une
attaque d'opportunité** de chaque ennemi menaçant (résolue via la mécanique de
mouvement `_check_move_aoo`, pendant qu'il est encore à plat ventre, CA −4).
Sans condition `prone`, l'action est rejetée (`not_prone`). Le kind ne requiert
pas de cible. `default_policy` ne la choisit pas (disponible via une politique
personnalisée).
- Se jeter à terre (`Action(kind="drop_prone")`, action libre) : le combattant
ajoute `prone` à la liste `conditions` **sans durée**, donc la condition
persiste jusqu'à `stand_up` (contrairement à trip/overrun qui posent
`active_conditions` avec 1 round). Les modificateurs de `prone` (−4 CA, −4 aux
attaques à distance) s'appliquent immédiatement. Si la condition est déjà
présente, l'action est rejetée (`already_prone`). Le kind ne requiert pas de
cible. `default_policy` ne la 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
@@ -348,7 +365,9 @@ Règles modélisées :
`downgraded:staggered` / `downgraded:nauseated` / `downgraded:immediate_swift` ;
retard valide → `ok=True, reason="delayed"`, second retard du même round →
`ok=False, reason="already_delayed"` ; préparation valide →
`ok=True, reason="ready"`.
`ok=True, reason="ready"` ; relèvement sans `prone` → `ok=False,
reason="not_prone"` ; se jeter à terre déjà `prone` → `ok=False,
reason="already_prone"`.
- 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