fix(rules): correct the evil eye hex
PF1e (APG Evil Eye): the target takes -2 on ONE chosen option (AC, ability checks, attack rolls, saving throws or skill checks) for 3 rounds, and "A Will save reduces this to just 1 round" — it never negates. _hex_evil_eye applied shaken (-2 attack AND saves) for 1 round with the save negating entirely. It now adds a targeted -2 attack ActiveBuff for 3 rounds, or 1 round on a successful Will save. Simplification documented in README: the option choice is not modeled (attack rolls are the engine's target). The hex-DC behavioral test now reads the -2 attack (3r) transcript line. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -110,8 +110,9 @@ class TestHexDcUsesInt:
|
||||
Then: DC = 10 + 4//2 + (21-10)//2 = 17.
|
||||
|
||||
Behavioral test: target has Will +2. d20=13 -> total 15.
|
||||
DC 17: 15 < 17 -> fail -> shaken applied.
|
||||
DC 12 (wrong, uses CHA): 15 >= 12 -> success -> no effect.
|
||||
DC 17: 15 < 17 -> fail -> the -2 attack hex lands for its full 3 rounds
|
||||
(APG Evil Eye: a save only reduces the duration to 1 round).
|
||||
DC 12 (wrong, uses CHA): 15 >= 12 -> "saved" -> 1 round.
|
||||
"""
|
||||
|
||||
def test_hex_dc_uses_int_not_cha(self) -> None:
|
||||
@@ -119,7 +120,7 @@ class TestHexDcUsesInt:
|
||||
target = _make_target(hp_max=100)
|
||||
engine, c, t = _make_engine(caster, target, [13])
|
||||
engine._execute_hex(c, t, "evil_eye")
|
||||
assert any("shaken" in line for line in engine._transcript)
|
||||
assert any("-2 attack (3r)" in line for line in engine._transcript)
|
||||
|
||||
|
||||
class TestAoEDcEqualsCasterSpellDc:
|
||||
|
||||
Reference in New Issue
Block a user