fix(rules): correct P2/P3 PF1e conformance bugs (flanking, touch, blinded, disabled, death, maneuvers, DR, sneak)
This commit is contained in:
@@ -269,8 +269,13 @@ vers la fiche Foundry d'origine.
|
||||
Règles modélisées :
|
||||
|
||||
- 1 naturel = échec automatique ; 20 naturel = touche + menace de critique.
|
||||
- Critique : (dés + bonus) × multiplicateur ; la RD s'applique après
|
||||
multiplication, les types perforants annulent la RD, les dégâts plancher à 0.
|
||||
- Critique : (dés + bonus) × multiplicateur ; le 20 naturel au jet de
|
||||
confirmation confirme automatiquement la critique (conformance P2 — le jet
|
||||
de confirmation est un jet d'attaque) ; la RD s'applique après
|
||||
multiplication, un type de contournement annule la RD — une RD à plusieurs
|
||||
composants (« DR X/Y and Z », conformance P2) exige que l'attaque porte
|
||||
TOUS les composants (le contournement n'est plus traité comme un OU), les
|
||||
dégâts plancher à 0.
|
||||
- Critique améliorée (« Improved Critical ») : le don double la plage de
|
||||
menace — plage effective = `21 - 2 × (21 - crit_range)` (20 → 19-20,
|
||||
19 → 17-20, 18 → 15-20). Il n'affecte que le jet de menace, jamais le jet de
|
||||
@@ -279,15 +284,22 @@ Règles modélisées :
|
||||
- Mourir et stabilisation : une créature à `hp < 0` mais pas morte est
|
||||
mourante — inconsciente (inactive), elle perd 1 pv par tour si elle échoue
|
||||
son jet de Constitution DD 10 à son tour d'initiative : `d20 + mod de CON −
|
||||
|hp|` contre 10 ; un 20 naturel réussit automatiquement. En cas d'échec, elle
|
||||
|pv négatifs|` contre 10 ; un 20 naturel réussit automatiquement. En cas d'échec, elle
|
||||
perd 1 pv de plus ; en cas de réussite, elle est stabilisée (plus de perte de
|
||||
pv, reste inconsciente). Une nouvelle blessure sous le seuil de stabilisation
|
||||
(`hp < stabilized_hp`) fait reprendre l'agonie (nouveau jet) ; un soin
|
||||
ramenant à `hp ≥ 0` réinitialise la stabilisation pour toute chute future.
|
||||
La mort survient au seuil existant `hp < min(-10, -CON)` — divergence RAW
|
||||
documentée : la règle du jeu meurt quand les pv négatifs atteignent le score
|
||||
de CON (le moteur est donc d'un pv plus permissif) ; sémantique inchangée.
|
||||
- Mort quand `hp < min(-10, -CON)` ; `hp ≤ 0` = inactif.
|
||||
La mort survient quand les pv négatifs atteignent le score de CON
|
||||
(`hp ≤ -CON`) — conformance P2 : la règle du −10 de D&D 3.5 n'existe pas
|
||||
en PF1e et n'est plus modélisée.
|
||||
- Invalide (conformance P2, CRB « Effects of Death ») : à `hp = 0`
|
||||
exactement, une créature est **invalide** — elle reste active mais
|
||||
**staggered** (une action de mouvement OU une action standard par tour, pas
|
||||
d'action à round complet), se déplace à **moitié vitesse**, et achever une
|
||||
action non-mouvement (standard ou pénible) lui coûte **1 pv** à la fin de
|
||||
cette action (pv → −1, agonie). Simplification documentée : 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.
|
||||
- Initiative : triée sur (total, modificateur, ordre de liste), sans re-jet.
|
||||
- Économie d'action : un tour normal donne une action standard + une action de
|
||||
mouvement (ou une action à round complet), plus swift/free/immediate. La
|
||||
@@ -480,10 +492,13 @@ Règles modélisées :
|
||||
confirmation de critique ; couvert mou : une créature active entre
|
||||
l'attaquant et la cible octroie aussi +4 CA aux attaques à distance (les
|
||||
attaques de mêlée ignorent les créatures).
|
||||
- Flanquement : +2 au jet d'attaque de mêlée si un allié actif (doté d'une arme
|
||||
de mêlée) menace la cible depuis la bordure ou le coin opposé. Les attaques à
|
||||
distance ignorent le flanquement ; un allié désarmé ou à distance ne compte
|
||||
pas pour le flanquement.
|
||||
- Flanquement : +2 au jet d'attaque de mêlée (toucher de mêlée inclus, voir
|
||||
« Touch AC ») si un allié actif menace réellement la cible depuis la
|
||||
bordure ou le coin opposé — conformance P2 : l'allié doit **menacer** une
|
||||
case de la cible avec une arme de mêlée utilisable (la « dead zone » de 5 ft
|
||||
d'une arme allongée ne menace pas) et ne pas être incapable d'agir
|
||||
(étourdi/paralysé ne flanque pas). Les attaques à distance ignorent le
|
||||
flanquement ; un allié désarmé ou à distance ne compte pas.
|
||||
- Attaques d'opportunité : un combattant actif doté d'une arme de mêlée menace
|
||||
les cases à distance de son allonge effective (les 8 cases adjacentes pour
|
||||
une arme sans allonge ; l'anneau à son allonge pour une arme reach — la
|
||||
@@ -543,7 +558,11 @@ Règles modélisées :
|
||||
avec incrément est une attaque à distance : elle provoque des attaques
|
||||
d'opportunité depuis une case menacée, subit −4 si l'attaquant est à plat
|
||||
ventre et bénéficie du couvert mou ; un contact de mêlée (sans incrément,
|
||||
ex. le contact paralysant du liche) n'en fait rien.
|
||||
ex. le contact paralysant du liche) n'en fait rien. Conformance P2 : le
|
||||
contact de mêlée (touch sans incrément) est une **attaque de mêlée** — il
|
||||
bénéficie du flanquement, de la hauteur (+1), du +4 contre une cible inerme
|
||||
et peut porter une attaque sournoise ; Power Attack reste réservé aux armes
|
||||
de mêlée (le contact n'en bénéficie pas).
|
||||
- Jets de sauvegarde : `resolve_save(state, save_type, dc)` — fort/ref/will.
|
||||
1 naturel = échec automatique, 20 naturel = succès automatique. Les
|
||||
modificateurs d'effets (`StatModifier` avec `target` correspondant) sont
|
||||
@@ -631,12 +650,16 @@ Règles modélisées :
|
||||
déjà via le chemin `denies_dex_to_ac`).
|
||||
- Attaque sournoise : un combattant avec la capacité « Sneak Attack » inflige des
|
||||
d6 de dégâts de précision ((niveau + 1) // 2 dés : 1d6 au niveau 1, 2d6 au
|
||||
niveau 3…) si la cible est flanquée (attaque de mêlée uniquement) ou privée de
|
||||
niveau 3…) si la cible est flanquée (attaque de mêlée uniquement — toucher de
|
||||
mêlée inclus, conformance P2) ou privée de
|
||||
son bonus de Dextérité à la CA (condition `denies_dex_to_ac` ; mêlée, ou
|
||||
attaque à distance à ≤ 30 ft). Les dés sont jetés avec le RNG du moteur et
|
||||
ajoutés APRÈS le multiplicateur de critique (la précision n'est jamais
|
||||
multipliée) et AVANT la RD et les résistances énergétiques ; jamais contre une
|
||||
cible avec concealment.
|
||||
cible avec concealment. Conformance P2 : les morts-vivants (`undead`) et les
|
||||
constructeurs (`construct`) sont immunisés aux dégâts de précision — la cible
|
||||
ne peut pas être la victime d'une attaque sournoise ; les autres immunités RAW
|
||||
(vase, plante) ne sont pas modélisées (pas de tels types dans le modèle).
|
||||
- Tirer dans une mêlée / Precise Shot : toute attaque à distance (kind `ranged`
|
||||
ou `touch` avec incrément) contre une cible engagée dans une mêlée subit −4 au
|
||||
jet d'attaque ET au jet de confirmation (la cible est « engagée » quand un
|
||||
@@ -665,7 +688,17 @@ Règles modélisées :
|
||||
−4, simplification documentée) ; la cible à plat ventre subit −4 CA contre
|
||||
la mêlée et gagne +4 CA contre la distance (le CRB inverse du « −4 CA
|
||||
contre tout » précédemment modélisé).
|
||||
Agrippé : −4 Dextérité, −2 attaque/CA/Réflexes, sans déplacement ni AoO.
|
||||
Agrippé : −4 Dextérité — le modificateur cible `dex_skills` s'applique
|
||||
désormais réellement aux compétences de Dexterity (Acrobaties, Escalade,
|
||||
Équilibre, Évasion, Vol, Équitation, Manipulation de corde, Discrétion,
|
||||
Natation, Désamorçage — conformance P2) —, −2 attaque/CA/Réflexes, sans
|
||||
déplacement ni AoO. Épinglé : même −4 `dex_skills`.
|
||||
Aveuglé (conformance P2) : −2 CA, perte du bonus de Dextérité à la CA, −4
|
||||
aux compétences de Dexterity (`dex_skills`) et **aucun malus plat
|
||||
d'attaque** — la pénalité RAW est la dissimulation totale (50 % d'échec,
|
||||
modélisée) ; le −2 d'attaque non-RAW qui s'y superposait a été supprimé.
|
||||
Simplification documentée : la moitié Force du −4 RAW (compétences de
|
||||
Force) n'est pas modélisée (pas de cible `str_skills`).
|
||||
Inerme (`helpless`, `paralyzed`, `asleep`, `unconscious`) : ne peut pas agir,
|
||||
Dextérité effective 0 (−5 CA en plus de la perte du bonus), +4 en mêlée
|
||||
contre lui (voir « Cible inerme ») ; `stunned` ne rend pas inerte. Fasciné (`fascinated`) : ne peut pas agir.
|
||||
@@ -687,7 +720,14 @@ Règles modélisées :
|
||||
de grâce n'est pas modélisé.
|
||||
- Manœuvres de combat : trip, disarm, bull_rush, sunder, grapple, escape,
|
||||
overrun, dirty trick, steal, reposition et drag sont modélisées, chacune
|
||||
comme une tentative unique (1d20 + CMB contre CMD) :
|
||||
comme une tentative unique (1d20 + CMB contre CMD) : le jet de manœuvre est
|
||||
un jet d'attaque — 20 naturel réussit toujours, 1 naturel échoue toujours
|
||||
(conformance P2). Conformance P2 : tenter une manœuvre (sauf `escape`)
|
||||
**provoque une attaque d'opportunité** de la cible, résolue **avant** le jet
|
||||
de CMB ; le don « Improved <Maneuver> » correspondant (Improved Trip, …)
|
||||
annule cette provocation ; si l'AoO fait passer l'attaquant sous 0 pv, la
|
||||
manœuvre est perdue. L'AoO de manœuvre consomme le budget d'AoO du round de
|
||||
la cible (Combat Reflexes inclus).
|
||||
trip → `prone` ; disarm → `disarmed` (−4 attaque) ; bull_rush → pousse la
|
||||
cible (direction sélectionnable via `Action.direction`) ;
|
||||
grapple → `grappled`/`pinned` ; escape → **une** sauvegarde (bonus statique de la
|
||||
@@ -736,7 +776,10 @@ Règles modélisées :
|
||||
- Le Liche (`data/monsters/lich.json`) : `creature_type: "undead"` (sensible à l'énergie
|
||||
positive canalisée), aura de terreur (30 ft, Volonté DD 22 ou
|
||||
`shaken` 1 round, au début de son tour) et contact paralysant (au toucher,
|
||||
`paralysé` 1d4+1 rounds), RD 15/magie+contondant ; son JSON porte un dictionnaire
|
||||
`paralysé` 1d4+1 rounds), RD 15/contondant **et** magie (conformance P2 :
|
||||
les deux composants sont requis — une arme contondante non magique ne
|
||||
contourne plus la RD ; lacune documentée : le modèle d'arme n'expose pas de
|
||||
propriété « magique », donc aucun équipement ne contourne cette RD) ; son JSON porte un dictionnaire
|
||||
`spell_slots` sans clés dupliquées.
|
||||
- Snapshot d'observation (contrat LLM, Phase 2) : avant chaque appel de
|
||||
politique, le moteur construit une `Observation` sérialisable (`to_dict()` →
|
||||
|
||||
Reference in New Issue
Block a user