fix(rules): stop damage reduction from eating energy damage

PF1e (CRB Damage Reduction): "Damage reduction does not negate ...
energy damage dealt along with an attack." _resolve_hit_damage now
splits the post-crit total and applies DR only to the non-energy share
(physical dice + flat bonuses + precision dice); energy components are
reduced solely by the per-component energy resistance/immunity step.
DR-bypass semantics (multi-component "and" requires every component)
are unchanged. Pure-physical weapons keep bit-identical arithmetic and
the golden transcripts are untouched.

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-11 23:17:34 +02:00
parent 1862c22b7b
commit be2a755d17
3 changed files with 70 additions and 8 deletions
+8 -2
View File
@@ -831,8 +831,14 @@ Règles modélisées :
1d6 tranchant + 1d6 feu contre résistance feu 5 ne perd que ses dés de feu, les
dés tranchants, les bonus plats et les dés de précision (attaque sournoise, non
typés) restent intacts ; l'immunité à un type annule uniquement les composantes
de ce type. Les types physiques (contondant/perforant/tranchant) restent sur le
chemin de la RD, appliquée au total comme avant. La résistance énergétique
de ce type. Les types physiques (contondant/perforant/tranchant) restent sur le
chemin de la RD, appliquée **uniquement à la part physique** du dégât (dés
physiques + bonus plats + précision) — conformance A3 (CRB « Damage
Reduction » : « Damage reduction does not negate … energy damage dealt along
with an attack ») : la RD ne mange plus la composante énergétique d'une
attaque mixée (ex. arme à feu infligeant des dégâts de feu contre RD 15) ;
les composantes énergétiques ne sont réduites que par résistance/immunité
énergétique. La résistance énergétique
s'applique à l'étape du dégât final (même étape que la RD), y compris aux dégâts
de sorts (un `DamageEffect` est une composante unique — comportement inchangé).
- Concealment (chance de rater) : les conditions `blurred` (20 %, sort flou),