From ea60b2e4b3e6c74cc53fb4b4282f68732c2696f7 Mon Sep 17 00:00:00 2001 From: ctan Date: Wed, 16 Sep 2026 15:53:46 +0200 Subject: [PATCH] docs(rules): README - undead death, pass-through movement, squeezing limit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. --- README.md | 44 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e4a041e..1b989f5 100644 --- a/README.md +++ b/README.md @@ -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 ```