fix(rules): README sync for the area-of-effect line-of-effect fixes - line truncation at barriers, cone/burst LoE from the origin, terrain cover Reflex half-bonus (SRD aiming-a-spell.md, cover.md); areas.py architecture entry updated
This commit is contained in:
@@ -1108,10 +1108,29 @@ Règles modélisées :
|
|||||||
jeteur et n'affecte **pas** sa propre case (CRB « Aiming a Spell » : « It
|
jeteur et n'affecte **pas** sa propre case (CRB « Aiming a Spell » : « It
|
||||||
starts from any corner of your square » — SRD Lightning Bolt : « The bolt
|
starts from any corner of your square » — SRD Lightning Bolt : « The bolt
|
||||||
begins at your fingertips », le trait quitte la case du jeteur au lieu de la
|
begins at your fingertips », le trait quitte la case du jeteur au lieu de la
|
||||||
remplir ; un viseur dégénéré origine==cible n'affecte personne). Toute
|
remplir ; un viseur dégénéré origine==cible n'affecte personne). **Ligne
|
||||||
|
d'effet des zones** (SRD « Aiming a Spell — Line of Effect ») : la **ligne**
|
||||||
|
s'arrête à la première case qui bloque la ligne d'effet (« extends to the
|
||||||
|
limit of its range or until it strikes a barrier that blocks line of
|
||||||
|
effect ») — la case-barrière est la dernière du gabarit, rien au-delà ;
|
||||||
|
le **cône** exclut toute case sans ligne d'effet depuis sa case d'origine
|
||||||
|
(« a cone... affects only an area, creature, or object to which it has
|
||||||
|
line of effect from its origin ») ; le **burst** n'affecte aucune créature
|
||||||
|
en couvert total depuis son centre (« It can't affect creatures with total
|
||||||
|
cover from its point of origin (in other words, its effects don't extend
|
||||||
|
around corners) »). Toute
|
||||||
créature dont une case occupée intersecte
|
créature dont une case occupée intersecte
|
||||||
le gabarit subit l'effet, avec sauvegarde et RS par créature comme pour un
|
le gabarit subit l'effet, avec sauvegarde et RS par créature comme pour un
|
||||||
burst (application partagée, géométrie dans `areas.py`). Le snapshot
|
burst (application partagée, géométrie dans `areas.py`). **Couvert et
|
||||||
|
sauvegardes de Réflexes** (SRD « Cover and Reflex Saves ») : une créature
|
||||||
|
dans la zone qui a du couvert **terrain** entre elle et le point d'origine
|
||||||
|
de l'effet (centre du burst, case du jeteur pour cône/ligne) ajoute à son
|
||||||
|
jet de Réflexes la moitié de son bonus de couvert CA (+1 partiel / +2
|
||||||
|
standard / +4 amélioré) ; le couvert mou des créatures n'accorde **aucun**
|
||||||
|
bonus de sauvegarde (SRD « Soft Cover »). Simplification documentée : la
|
||||||
|
sauvegarde primaire de la cible résolue, jetée sur le chemin générique des
|
||||||
|
sorts avant la résolution de la zone, ne rejoue pas ce bonus (nul pour un
|
||||||
|
burst centré sur la cible, l'origine étant sa propre case). Le snapshot
|
||||||
d'observation expose `{shape, radius_ft}` via la clé `area`.
|
d'observation expose `{shape, radius_ft}` via la clé `area`.
|
||||||
Un `DamageEffect` peut déclarer `"scaling": {"dice": "1d6", "per_levels": 1,
|
Un `DamageEffect` peut déclarer `"scaling": {"dice": "1d6", "per_levels": 1,
|
||||||
"max_dice": 10}` (dés par niveau — Fireball/Lightning Bolt « 1d6 per caster
|
"max_dice": 10}` (dés par niveau — Fireball/Lightning Bolt « 1d6 per caster
|
||||||
@@ -1773,9 +1792,12 @@ Limites de sorts (conformance D6-D9, documentées plutôt que bricolées) :
|
|||||||
`cover_bonus`, +4 couvert mou des créatures) dans `resolve_attack`.
|
`cover_bonus`, +4 couvert mou des créatures) dans `resolve_attack`.
|
||||||
- `areas.py` — géométrie des gabarits de zone cône et ligne (CRB « Magic —
|
- `areas.py` — géométrie des gabarits de zone cône et ligne (CRB « Magic —
|
||||||
Aiming a Spell ») : `cone_cells` (quart de cercle de 90°, test d'angle ±45°
|
Aiming a Spell ») : `cone_cells` (quart de cercle de 90°, test d'angle ±45°
|
||||||
en arithmétique entière exacte, case d'origine exclue) et `line_cells`
|
en arithmétique entière exacte, case d'origine exclue, cases sans ligne
|
||||||
(raie de Bresenham de 5 ft de large, longue de `radius_ft`, partant de la
|
d'effet depuis l'origine exclues via `los.has_line_of_effect`) et
|
||||||
case du jeteur). Les bursts restent gérés par `_creatures_in_range`.
|
`line_cells` (raie de Bresenham de 5 ft de large, longue de `radius_ft`,
|
||||||
|
partant de la case du jeteur, tronquée à la première case `blocks_los`).
|
||||||
|
Les bursts restent gérés par `_area_creatures` (filtrés par ligne d'effet
|
||||||
|
depuis le centre).
|
||||||
- `combat.py` — `CombatEngine` déterministe : initiative, actions, résolution
|
- `combat.py` — `CombatEngine` déterministe : initiative, actions, résolution
|
||||||
des attaques (couvert, ligne d'effet, pénalités de portée, CA de contact
|
des attaques (couvert, ligne d'effet, pénalités de portée, CA de contact
|
||||||
pour les attaques touch et firearms), tailles et allonges (occupation
|
pour les attaques touch et firearms), tailles et allonges (occupation
|
||||||
|
|||||||
Reference in New Issue
Block a user