feat(rules): nonlethal damage track - separate total, derived staggered/unconscious, max-hp overflow, undead/construct immunity, healing removal (SRD Nonlethal Damage)
This commit is contained in:
@@ -426,6 +426,51 @@ Règles modélisées :
|
||||
si l'action elle-même soigne la créature au-dessus de 0 pv, ce coût n'est pas
|
||||
appliqué.
|
||||
- `hp < 0` = inactive (mourante ou morte) ; `hp = 0` = active mais invalide.
|
||||
- Dégâts non-létaux (SRD « Nonlethal Damage ») : piste séparée `nonlethal`
|
||||
du runtime (`CombatantState.nonlethal`), **jamais** déduite des pv (« Do not
|
||||
deduct the nonlethal damage number from your current hit points. It is not
|
||||
"real" damage »). Les seuils sont **dérivés** de (nonlethal, pv courants),
|
||||
sans objet de condition : `nonlethal == hp` (et > 0) = **staggered** (une
|
||||
action de mouvement OU standard, via le filtre `_is_staggered_limited` déjà
|
||||
en place) ; `nonlethal > hp` = **inconsciente et inerme** (inactif via
|
||||
`CombatantState.active` — ne peut rien faire, ne menace aucune case, compte
|
||||
comme tombé pour la victoire de camp — et `helpless` via `_is_helpless` :
|
||||
Dex effective 0, +4 contre elle en mêlée). Un soin qui remonte les pv
|
||||
au-dessus du total non-létal (ou qui réduit ce total) restaure la
|
||||
conscience automatiquement, la règle étant une fonction pure des deux
|
||||
nombres. **Règle du plafond de pv maximaux** (SRD) : « If a creature's
|
||||
nonlethal damage is equal to his total maximum hit points (not his current
|
||||
hit points), all further nonlethal damage is treated as lethal damage » —
|
||||
au-delà de `hp_max` accumulé, les dégâts non-létaux suivants deviennent
|
||||
réels et peuvent tuer (l'exception des créatures à régénération n'est pas
|
||||
modélisée : aucune créature du moteur n'a la régénération). **Immunité** :
|
||||
morts-vivants et constructeurs ne subissent **pas** de dégâts non-létaux
|
||||
(traits SRD « Undead » / « Construct », KB `rules/advanced-race-guide/
|
||||
undead-16-rp.md` et `construct-20-rp.md` : « not subject to ... nonlethal
|
||||
damage ») — les dégâts sont annulés. **Soins** : « When a spell or ability
|
||||
cures hit point damage, it also removes an equal amount of nonlethal
|
||||
damage » — un sort de soin ou `channel energy` qui rend N pv retire aussi N
|
||||
points de non-létal. **Sources de dégâts non-létaux** : (1) l'attaque sans
|
||||
arme — les coups sans arme infligent des dégâts non-létaux par défaut (SRD
|
||||
« Unarmed Attacks » : « An unarmed strike deals nonlethal damage ») ; le
|
||||
moteur reconnaît une attaque dont le nom d'arme est exactement
|
||||
« Unarmed Strike » (insensible à la casse, comme transcrit dans
|
||||
`data/pcs/*.json`) et route la totalité de son dégât (après RD et
|
||||
résistances) vers la piste non-létale ; heuristique documentée : le modèle
|
||||
de données n'a pas de champ « mode de dégâts », le nom est le marqueur.
|
||||
(2) La règle du **dégât minimal** (CRB « Damage — Minimum Damage ») : « If
|
||||
penalties reduce the damage result to less than 1, a hit still deals 1
|
||||
point of nonlethal damage » — une touche réduite sous 1 par la RD ou une
|
||||
résistance énergétique inflige désormais 1 point **non-létal** (approximation
|
||||
« 1 point normal » de ae037c9 corrigée). Hors périmètre (documenté) : la
|
||||
conversion déclarée avant le jet — arme létale frappant en non-létal à −4,
|
||||
attaque sans arme frappant en léthal à −4 (choix du moine sans pénalité non
|
||||
modélisé faute de marqueur de classe) ; la récupération hors combat
|
||||
(1 pv de non-létal par heure et par niveau) ; les dégâts non-létaux ne sont
|
||||
**jamais** comptés dans l'attrition (`damage_dealt`/`damage_taken` restent
|
||||
strictement létaux) ; le snapshot d'observation expose la clé additive
|
||||
`nonlethal` (int) par combattant — la politique dérive staggered/inconscient
|
||||
en la comparant à `hp`.
|
||||
- Initiative : triée sur (total, modificateur, ordre de liste), sans re-jet.
|
||||
- Round de surprise (SRD « Surprise ») : le champ booléen `aware` du JSON de
|
||||
combattant (défaut `true`) encode la conscience des adversaires au début du
|
||||
|
||||
Reference in New Issue
Block a user