feat(combat): allow selecting the attacking weapon

This commit is contained in:
2026-09-10 13:36:27 +02:00
parent b91e1ac215
commit ed04052244
3 changed files with 387 additions and 34 deletions
+12 -1
View File
@@ -367,7 +367,8 @@ Règles modélisées :
`ok=False, reason="already_delayed"` ; préparation valide →
`ok=True, reason="ready"` ; relèvement sans `prone` → `ok=False,
reason="not_prone"` ; se jeter à terre déjà `prone` → `ok=False,
reason="already_prone"`.
reason="already_prone"` ; attaque avec un `weapon_id` choisi inutilisable →
`ok=False, reason="weapon_unavailable"`.
- 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
@@ -375,6 +376,16 @@ Règles modélisées :
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.
Choix de l'arme : `Action(kind="attack", weapon_id=...)` et
`Action(kind="full_attack", weapon_id=...)` frappent avec l'arme désignée
(l'arc plutôt que l'épée, l'arme principale plutôt que la secondaire) au
lieu de l'arme auto-sélectionnée par `weapon_for` (première arme utilisable
capable de toucher la cible à cette distance avec ligne d'effet).
L'`id` doit désigner une arme utilisable (non brisée, non volée) pouvant
atteindre la cible ; sinon l'action est rejetée (`weapon_unavailable`) et
aucun jet n'est effectué. Sans `weapon_id`, la sélection automatique est
inchangée. `default_policy` ne choisit pas d'arme (disponible via une
politique personnalisée).
- Mêlée : allonge effective = max(allonge naturelle du gabarit (Small/Medium
5 ft, Large 10 ft, Huge 15 ft, Gargantuan 20 ft, Colossal 30 ft), `reach_ft`
de l'arme). Une arme à allonge (`reach_ft` > 5) menace l'anneau de cases à