fix(combat): correct hex and AoE DCs, DR bypassed by spells
This commit is contained in:
@@ -1260,7 +1260,7 @@ class CombatEngine:
|
||||
)
|
||||
return
|
||||
|
||||
hex_dc = 10 + state.combatant.level // 2 + (state.combatant.abilities.cha_score - 10) // 2
|
||||
hex_dc = 10 + state.combatant.level // 2 + (state.combatant.abilities.int_score - 10) // 2
|
||||
|
||||
if hex_name == "evil_eye":
|
||||
self._hex_evil_eye(state, target, hex_dc)
|
||||
@@ -1519,6 +1519,7 @@ class CombatEngine:
|
||||
caster=caster, spell_name=spell.name,
|
||||
empower="Empower Spell" in metamagic_feats,
|
||||
maximize="Maximize Spell" in metamagic_feats,
|
||||
dc=dc,
|
||||
)
|
||||
save_str = _save_label(save_result)
|
||||
self._log(
|
||||
@@ -1559,6 +1560,7 @@ class CombatEngine:
|
||||
spell_name: str,
|
||||
empower: bool = False,
|
||||
maximize: bool = False,
|
||||
dc: int = 15,
|
||||
) -> list[str]:
|
||||
saved = save_result is not None and save_result.success
|
||||
return [
|
||||
@@ -1566,6 +1568,7 @@ class CombatEngine:
|
||||
effect, target, caster_live, target_live,
|
||||
caster=caster, spell_name=spell_name,
|
||||
empower=empower, maximize=maximize, saved=saved,
|
||||
dc=dc,
|
||||
)
|
||||
for effect in effects
|
||||
]
|
||||
@@ -1582,12 +1585,13 @@ class CombatEngine:
|
||||
empower: bool = False,
|
||||
maximize: bool = False,
|
||||
saved: bool,
|
||||
dc: int = 15,
|
||||
) -> str:
|
||||
if isinstance(effect, AreaEffect):
|
||||
return self._apply_area_effect(
|
||||
effect, target, caster_live, target_live,
|
||||
caster=caster, spell_name=spell_name, saved=saved,
|
||||
empower=empower, maximize=maximize,
|
||||
empower=empower, maximize=maximize, dc=dc,
|
||||
)
|
||||
if isinstance(effect, SummonEffect):
|
||||
return self._apply_summon_effect(effect, caster, caster_live, spell_name)
|
||||
@@ -1619,7 +1623,6 @@ class CombatEngine:
|
||||
dmg = max(0, raw // 2) if saved and effect.half_on_save else raw
|
||||
if empower:
|
||||
dmg = int(dmg * 1.5)
|
||||
dmg = self._apply_dr_for_types(dmg, frozenset(effect.types), target)
|
||||
target.hp -= dmg
|
||||
caster_live.damage_dealt += dmg
|
||||
target_live.damage_taken += dmg
|
||||
@@ -1691,6 +1694,7 @@ class CombatEngine:
|
||||
saved: bool,
|
||||
empower: bool = False,
|
||||
maximize: bool = False,
|
||||
dc: int = 15,
|
||||
) -> str:
|
||||
"""Apply an area effect to all creatures within radius.
|
||||
|
||||
@@ -1709,7 +1713,7 @@ class CombatEngine:
|
||||
|
||||
for affected_state in affected:
|
||||
creature_saved = self._area_save(
|
||||
affected_state, target, effect, saved=saved
|
||||
affected_state, target, effect, saved=saved, dc=dc
|
||||
)
|
||||
for sub_effect in effect.effects:
|
||||
target_live = self._stats[affected_state.combatant.id]
|
||||
@@ -1751,13 +1755,14 @@ class CombatEngine:
|
||||
effect: AreaEffect,
|
||||
*,
|
||||
saved: bool,
|
||||
dc: int = 15,
|
||||
) -> bool:
|
||||
"""Save result for one creature in an area effect."""
|
||||
if not effect.save_for_half:
|
||||
return False
|
||||
if affected_state is target:
|
||||
return saved
|
||||
save_result = self.resolve_save(affected_state, "ref", 15)
|
||||
save_result = self.resolve_save(affected_state, "ref", dc)
|
||||
return save_result.success
|
||||
|
||||
def _apply_metamagic(
|
||||
|
||||
Reference in New Issue
Block a user