docs(rules): README - undead death, pass-through movement, squeezing limit

- Paragraphe « Mourir et stabilisation » : les morts-vivants et les
  constructeurs sont detruits des hp <= 0 (SRD traits Undead/Construct :
  'immediately destroyed when reduced to 0 hit points or fewer'), sans
  bande d'invalidite ni agonie - conformance deja codee (59caf67).
- Paragraphe « Mouvement » : la traverse des ennuis a 3 categories de
  taille d'ecart avec AoO d'entree (SRD 'Moving Through a Square' : 'Any
  creature can move through a square occupied by a creature three size
  categories larger than itself [...] provoke attacks of opportunity
  from those creatures' ; 'You can't end your movement in the same
  square as another creature unless it is helpless') ; la mention
  'les ennemis bloquent toujours le chemin' est corrigee (blocage total
  seulement a 0-2 categories).
- « Limites hors perimetre » : nouvelle entree squeeze (largeur de
  corridor vs taille non modelisee), entree des approximations du
  pass-through (Acrobatics Tumbling et la clause 'counts as 2 squares'
  des tres grosses creatures inertes non modelisees), et entree de
  l'echec d'incantation du sourd (tache 11, differe).
- « Attaques multiples par action » : verifie conforme aux armes
  naturelles apres e5691bd (pas d'iteratifs, secondaires a -5,
  Multiattack -2) - aucune modification necessaire.
- Compteur de tests de la section « Developpement » : 1408 -> 1491.
This commit is contained in:
2026-09-16 15:53:46 +02:00
parent cad35e2e13
commit ea60b2e4b3
+39 -5
View File
@@ -333,7 +333,12 @@ Règles modélisées :
puis **échoue automatiquement** son jet de stabilisation (aucun d20 jeté) et
perd donc 1 pv de plus par tour en plus des dégâts continus (CRB « Stable
Characters and Recovery ») — elle meurt ainsi plus vite qu'une créature
mourante non saignante.
mourante non saignante. Les morts-vivants et les constructeurs n'ont pas de
score de Constitution et sont **détruits dès `hp ≤ 0`** — ni bande
d'invalidité à 0 pv, ni bande d'agonie (SRD traits « Undead » /
« Construct » : « undead do not risk death from massive damage, but are
immediately destroyed when reduced to 0 hit points or fewer ») ; le seuil
`hp ≤ -CON` ne s'applique qu'aux créatures vivantes.
- Mort simplifiée des monstres (option `--simple-monster-death`, défaut
désactivé) : quand l'option est présente dans la commande, un **monstre**
meurt dès `hp ≤ 0` — ni bande d'invalidité à 0 pv, ni bande d'agonie entre
@@ -701,10 +706,22 @@ Règles modélisées :
d'osciller contre eux. Conformance L5 (SRD « Movement, Position and
Distance ») : « You can move through a square occupied by a friendly
character, unless you are charging » — `move` et `run` **traversent** les
cases des alliés (les ennemis bloquent toujours le chemin), mais ne
peuvent jamais **finir** sur une case occupée : entrer sur une case alliée
cases des alliés, mais ne peuvent jamais **finir** sur une case occupée :
entrer sur une case alliée
exige un prolongement libre (règle du « pass-through »), et la queue du
chemin est tronquée si le budget s'épuise sur une case alliée. La charge
chemin est tronquée si le budget s'épuise sur une case alliée. SRD
« Moving Through a Square » : « Any creature can move through a
square occupied by a creature three size categories larger than itself
[...] Creatures moving through squares occupied by other creatures
provoke attacks of opportunity from those creatures » — un ennemi séparé
du déplaceur par **trois catégories de taille ou plus** est traversé de
la même façon (jamais fini dessus : « You can't end your movement in the
same square as another creature unless it is helpless »), et l'entrée dans
sa case **provoque une AoO de l'occupant** (une seule par entrée fraîche,
plafonnée par l'allowance du round ; résolu par `_check_enter_aoo` dans la
marche pas à pas). Un ennemi à 0–2 catégories
reste un blocage total (« You can't move through a square occupied by an
opponent unless the opponent is helpless »). La charge
reste bloquée par les créatures (ligne droite dégagée), comme la retraite
(limite documentée : le passage à travers les alliés n'est pas modélisé
pour `withdraw` et le pas de placement auto-dirigé).
@@ -1583,6 +1600,23 @@ plutôt que bricolées) :
en revanche deux créatures de même taille (Small et plus) ne partagent
jamais une case, et la co-occupation de plusieurs Tiny sur une même case
n'est pas modélisée.
- **Squeeze (se serrer dans un passage étroit) hors périmètre** (SRD
« Moving Around or Through an Open Square » / « Squeezing Through » : une
créature Large+ peut « squeeze » à travers un espace assez large pour une
créature d'une catégorie de taille en dessous, à coût de mouvement accru et
pénalités) : la largeur de corridor n'est pas modélisée par rapport à la
taille — une créature Huge (3×3) est simplement bloquée par tout endroit où
son footprint ne rentre pas ; ni le squeeze payant, ni la réduction de
footprint dans les couloirs ne sont modélisés.
- **Passage à travers une créature (3 catégories d'écart) — approximations** :
la règle est modélisée (traversée + AoO d'entrée, voir « Mouvement ») ;
restent hors périmètre le test d'Acrobatics « Tumbling » (« A trained
character can attempt to use Acrobatics to move through a square occupied
by an opponent » — la compétence n'existe pas dans le moteur) et la clause
des très grosses créatures inertes (« Some creatures, particularly very
large ones, may present an obstacle even when helpless. In such cases, each
square you move through counts as 2 squares » — les cases d'une créature
inactive ne bloquent pas et ne coûtent pas double).
- **Échec d'incantation pour un personnage sourd hors périmètre** (SRD
« Conditions — Deafened » : « a 20% chance of spell failure when casting
spells with verbal components ») : le moteur ne porte pas la composante
@@ -1721,7 +1755,7 @@ Limites de sorts (conformance D6-D9, documentées plutôt que bricolées) :
La gate de validation complète (tests + lint + types) :
```bash
uv run pytest -q # 1408 tests
uv run pytest -q # 1491 tests
uv run ruff check src tests
uv run basedpyright src # mode strict
```