feat(rules): conform bulls strength, bears endurance and shield to the SRD
Bull's Strength now grants the SRD +4 enhancement bonus to Strength as +2 melee attack, +2 melee damage and +2 CMB (three modifiers instead of the previous +1/+1 approximation). Shield now uses a real shield bonus type (+4 AC) instead of approximating it as deflection: the engine's BonusType literal and stacking docs gain the shield type, which stays out of the CMD bonus list (SRD Combat Maneuver Defense). Bear's Endurance keeps its +2 Fortitude / +2 hp per HD and its description now cites the SRD and flags the hp modifier as informational. Golden transcripts updated: the buff log reports 3 mods and Tammara's pistol attacks gain the extra +1 enhancement (d20=10+9-6=15). Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -193,7 +193,9 @@ class TestSpellLoading:
|
||||
spell = load_spell(_SPELLS_DIR / "bulls_strength.json")
|
||||
eff = spell.effects[0]
|
||||
assert isinstance(eff, BuffEffect)
|
||||
assert len(eff.modifiers) == 2
|
||||
# SRD bull's strength: +4 enhancement Str -> +2 melee attack, +2 melee
|
||||
# damage, +2 CMB (three modifiers).
|
||||
assert len(eff.modifiers) == 3
|
||||
|
||||
def test_summon_monster_casts_for_one_round(self) -> None:
|
||||
# PF1e: Summon Monster I/II have a 1-round casting time.
|
||||
@@ -616,10 +618,13 @@ class TestBullsStrength:
|
||||
buff_mods = [m for b in t.active_buffs for m in b.modifiers]
|
||||
atk_mods = [e for e in buff_mods if e.target == "attack"]
|
||||
dmg_mods = [e for e in buff_mods if e.target == "damage"]
|
||||
cmb_mods = [e for e in buff_mods if e.target == "cmb"]
|
||||
assert len(atk_mods) == 1
|
||||
assert len(dmg_mods) == 1
|
||||
assert atk_mods[0].value == 1
|
||||
assert dmg_mods[0].value == 1
|
||||
assert len(cmb_mods) == 1
|
||||
assert atk_mods[0].value == 2
|
||||
assert dmg_mods[0].value == 2
|
||||
assert cmb_mods[0].value == 2
|
||||
|
||||
def test_transcript_shows_buff(self) -> None:
|
||||
caster = _make_caster()
|
||||
|
||||
Reference in New Issue
Block a user