feat(combat): add aid another and run actions
This commit is contained in:
@@ -355,6 +355,22 @@ Règles modélisées :
|
||||
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).
|
||||
- Aider autrui (`Action(kind="aid_another", aid_mode=...)`, action standard,
|
||||
U5e) : l'aidant **doit avoir une arme de mêlée utilisable** ; il fait un jet
|
||||
d'attaque `d20 + bonus d'attaque de sa première arme de mêlée utilisable`
|
||||
contre le CA 10 (20 naturel réussit toujours, 1 naturel échoue toujours —
|
||||
convention des jets d'attaque du moteur). Sur succès, la cible empile **+2**
|
||||
soit à son prochain jet d'attaque (`aid_mode="attack"` ou absent — consommé
|
||||
one-shot par `resolve_attack`, attaque et confirmation de critique), soit à
|
||||
sa CA contre la prochaine attaque la ciblant (`aid_mode="ac"`). Plusieurs
|
||||
aides s'additionnent (le bonus s'ajoute, ne se remplace pas) ; tout bonus
|
||||
inutilisé expire au début du prochain tour du bénéficiaire. Simplifications
|
||||
documentées : pas de vérification d'adjacence/ligne d'effet vers l'allié,
|
||||
toute cible résolue peut être aidée, et la progression de compétence d'aide
|
||||
(+5 avec 5 rangs, +8 avec 10) n'est pas modélisée. Sans cible →
|
||||
`missing_target` ; sans arme de mêlée utilisable → `no_weapon`.
|
||||
`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
|
||||
@@ -370,7 +386,10 @@ Règles modélisées :
|
||||
reason="already_prone"` ; attaque avec un `weapon_id` choisi inutilisable →
|
||||
`ok=False, reason="weapon_unavailable"` ; incantation avec un `target_pos`
|
||||
hors carte ou sans ligne d'effet → `ok=False, reason="invalid_destination"`
|
||||
(U7b).
|
||||
(U7b) ; course ou aide sans cible **et** sans destination →
|
||||
`missing_target` ; aide sans arme de mêlée utilisable → `no_weapon` ;
|
||||
course vers une `destination` hors du budget 4× →
|
||||
`unreachable_destination` (U5e).
|
||||
- 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
|
||||
@@ -470,6 +489,18 @@ Règles modélisées :
|
||||
ultérieures provoquent des AoO normalement (résolues pas à pas, comme pour
|
||||
le mouvement). `default_policy` ne choisit pas la retraite (disponible via
|
||||
une politique personnalisée).
|
||||
- Course (`Action(kind="run")`, action à round complet, U5e) : le combattant
|
||||
se déplace jusqu'à **4× sa vitesse** vers `target_id` (auto-dirigé,
|
||||
s'arrête adjacent à la cible) ou vers une `destination` explicite (U5c), en
|
||||
réutilisant exactement la mécanique de `move` (descente du champ de coût
|
||||
Dijkstra, pas à pas avec provocation d'AoO — courir ne protège pas des
|
||||
AoO). À l'achèvement, le combattant est `running` jusqu'au début de son
|
||||
prochain tour : il **perd son bonus de Dextérité à la CA** (résolu par le
|
||||
même chemin flat-footed/`denies_dex_to_ac` que les conditions). Une
|
||||
`destination` hors budget 4× (ou invalide) est rejetée
|
||||
(`unreachable_destination`) ; sans cible ni destination, rejet
|
||||
(`missing_target`). `default_policy` ne choisit pas la course (disponible
|
||||
via une politique personnalisée).
|
||||
- Pas de placement (5-foot step) : action libre qui déplace le combattant d'une
|
||||
case vers l'ennemi le plus proche sans provoquer d'AoO. Exclusivité mutuelle
|
||||
avec tout autre mouvement (move, charge, retraite) dans le même tour —
|
||||
@@ -673,7 +704,13 @@ Règles modélisées :
|
||||
jets d'attaque et de confirmation jusqu'au prochain tour), aoo_remaining
|
||||
(int — attaques d'opportunité restantes ce round : `_aoo_allowance`
|
||||
(1 par défaut, 1 + mod de Dex avec Combat Reflexes, plancher 1) moins les
|
||||
AoO déjà consommées, réinitialisé à chaque nouveau round, jamais négatif).
|
||||
AoO déjà consommées, réinitialisé à chaque nouveau round, jamais négatif),
|
||||
aid_attack_bonus (int — bonus d'aide autrui (+2 par aide réussie, cumulatif)
|
||||
ajouté au prochain jet d'attaque du combattant puis consommé, expiré au
|
||||
début de son tour s'il est inutilisé), aid_ac_bonus (int — bonus d'aide
|
||||
autrui (+2 par aide réussie, cumulatif) ajouté à sa CA, expiré au début de
|
||||
son tour), running (bool — course en cours jusqu'au prochain tour du
|
||||
combattant : il perd son bonus de Dextérité à la CA).
|
||||
- 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,
|
||||
|
||||
Reference in New Issue
Block a user