fix(rules): only total concealment blocks sneak attack
PF1e (CRB rogue Sneak Attack): "A rogue cannot sneak attack while striking a creature with total concealment." _sneak_attack_dice now gates on miss_chance >= 50 instead of any concealment > 0, so a blurred (20%) target can still be sneak attacked while a displaced (50%) one cannot. The test that pinned the old any-concealment denial was retargeted to total concealment and a partial-concealment case added; README updated. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -2496,12 +2496,17 @@ class CombatEngine:
|
||||
|
||||
PF1e: precision damage when the target is flanked (melee only, melee
|
||||
touch included) or denied its Dex bonus to AC (melee, or ranged within
|
||||
30 ft); dice = (level + 1) // 2; concealment denies the sneak attack
|
||||
entirely. PF1e (CRB): undead and constructs are immune to precision
|
||||
damage — ooze/plant immunity is not modeled (no such creature types
|
||||
exist in the data model).
|
||||
30 ft); dice = (level + 1) // 2. Only TOTAL concealment (miss chance
|
||||
>= 50%) denies the sneak attack; partial concealment (blurred 20%)
|
||||
does not (CRB rogue "Sneak Attack": "cannot sneak attack while
|
||||
striking a creature with total concealment"). PF1e (CRB): undead and
|
||||
constructs are immune to precision damage — ooze/plant immunity is not
|
||||
modeled (no such creature types exist in the data model).
|
||||
"""
|
||||
if concealment > 0 or not self._has_feat(attacker, _SNEAK_ATTACK_FEATURE):
|
||||
if (
|
||||
concealment >= _TOTAL_CONCEALMENT_PCT
|
||||
or not self._has_feat(attacker, _SNEAK_ATTACK_FEATURE)
|
||||
):
|
||||
return 0
|
||||
if target.combatant.creature_type.lower() in _PRECISION_IMMUNE_TYPES:
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user