feat(rules): add firearm misfire and the quick clear deed

Ultimate Combat Firearm Rules: a firearm attack rolling a natural 1 gains the
broken condition (weapon_broken, logged MISFIRE). Quick Clear now actually
clears the first misfired held firearm for 1 grit (reported no-op without
grit), and occupies the standard budget slot via _effective_slot; the
swift-consumed filter is slot-based so the standard deed survives.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-09-13 16:41:40 +02:00
parent b579cb4934
commit a2a80b8690
3 changed files with 297 additions and 14 deletions
+25 -7
View File
@@ -430,7 +430,11 @@ Règles modélisées :
contient une action `move` ET que le combattant a un BAB ≥ +1,
`retrieve_weapon` occupe le compartiment **libre** (drapeau `free_draw`
résolu par `_effective_slot`) et n'entame pas le budget mouvement ;
`repair_weapon` reste mouvement (la règle RAW ne couvre que le dégainement) ; **swift** = `swift`, `deed`,
`repair_weapon` reste mouvement (la règle RAW ne couvre que le dégainement) ;
exception S5a (Ultimate Combat, deed « Quick Clear ») : `deed` avec
`deed_name="quick_clear"` occupe le compartiment **standard** (résolu par
`_effective_slot`, le kind `deed` restant swift pour up_close_and_deadly) ;
**swift** = `swift`, `deed`,
`inspire_courage` ; **round complet** = `full_attack`, `charge`, `withdraw`,
`full_round`, `spell_combat` (sort + attaque à outrance dans le même round),
`run` (round complet en RAW — il consacre le standard ET le mouvement, tout
@@ -1385,12 +1389,26 @@ Règles modélisées :
(tammara, action bonus +1d6 à ≤ 30 ft — consommé sur la première attaque
résolue : si elle est à distance ET à ≤ 30 ft, +1d6 s'ajoute aux dégâts ;
sinon le bonus est perdu ; le drapeau est réinitialisé dans tous les cas),
deed `quick_clear` (limite documentée, conformance L10 : le moteur classe
le kind `deed` en **swift**, alors que la SRD fait de Quick Clear une
**action standard** — ou **move** avec All Firearms — ; de plus, sans
modèle de misfire/condition « broken » pour les armes à feu, le deed ne
fait que dépenser 1 grit et journaliser « firearm cleared » : no-op
fonctionnel),
deed `quick_clear` (S5a — conformance implémentée, Ultimate Combat « Deeds —
Quick Clear » : « As a standard action, you can spend 1 point from your grit
pool to remove the broken condition from a single firearm you are holding,
as long as that condition was gained by a firearm misfire ») — le deed
dépense 1 grit et répare la **première** arme à feu brisée par un raté
(ordre des attaques, déterministe) ; sans grit, l'action est un no-op
journalisé ; sans arme à feu brisée, aucun grit n'est dépensé. Le deed
occupe le compartiment **standard** du budget (exception par action résolue
par `_effective_slot`, comme cackle pour les hex ; le kind `deed` reste
swift pour up_close_and_deadly, et le filtre swift-consommé-par-immédiate
ne jette plus le quick_clear). Simplifications documentées : la variante
RAW « as part of a move action to clear all firearms » n'est pas modélisée
(un seul firearm par deed), et Quick Clear ne répare que le broken issu
d'un misfire — le broken d'un sunder se répare via `repair_weapon`.
Le misfire lui-même (Ultimate Combat « Firearm Rules — Misfires » : « When
a firearm misfires, it gains the broken condition ») : une attaque d'arme à
feu (`firearm: true`) sur un **1 naturel** casse l'arme (`weapon_broken`,
journalisé « MISFIRE (broken) ») — valeur de misfire minimale 1 ; la
progression de la valeur de misfire et l'explosion des early firearms
re-cassées ne sont pas modélisées (une arme brisée ne peut plus tirer ici)),
`inspire_courage` + `spell_combat` (misty — Spell Combat : action de round
complet, incante un sort standard et porte toutes ses attaques de mêlée à
**−2** (CRB Magus, conformance — la pénalité s'applique à chaque jet