fix(rules): Extend Spell doubles SummonEffect duration (SRD extend-spell: lasts twice as long; summon's 1 round/level is neither instantaneous, concentration nor permanent)
This commit is contained in:
@@ -7165,8 +7165,6 @@ class CombatEngine:
|
||||
self, effect: SpellEffect, *, has_extend: bool
|
||||
) -> SpellEffect:
|
||||
"""Apply Extend Spell to one effect (recursing into AreaEffect sub-effects)."""
|
||||
if isinstance(effect, (DamageEffect, HealEffect)):
|
||||
return effect
|
||||
if isinstance(effect, ConditionEffect):
|
||||
duration = effect.duration_rounds * 2 if has_extend else effect.duration_rounds
|
||||
per_level = (
|
||||
@@ -7210,6 +7208,23 @@ class CombatEngine:
|
||||
duration_rounds_per_level=duration,
|
||||
half_on_save=effect.half_on_save,
|
||||
)
|
||||
if isinstance(effect, SummonEffect):
|
||||
# PF1e (SRD feats/extend-spell.md): "An extended spell lasts
|
||||
# twice as long as normal. A spell with a duration of
|
||||
# concentration, instantaneous, or permanent is not affected" -
|
||||
# summon monster's "1 round/level (D)" is none of those, so
|
||||
# Extend doubles it (both the fixed and the per-level form).
|
||||
duration = effect.duration_rounds * 2 if has_extend else effect.duration_rounds
|
||||
per_level = (
|
||||
effect.duration_rounds_per_level * 2
|
||||
if has_extend
|
||||
else effect.duration_rounds_per_level
|
||||
)
|
||||
return SummonEffect(
|
||||
creature=effect.creature,
|
||||
duration_rounds=duration,
|
||||
duration_rounds_per_level=per_level,
|
||||
)
|
||||
if isinstance(effect, AreaEffect):
|
||||
return AreaEffect(
|
||||
shape=effect.shape,
|
||||
|
||||
Reference in New Issue
Block a user