diff --git a/apps/openmw/mwmechanics/spelleffects.cpp b/apps/openmw/mwmechanics/spelleffects.cpp index 85fa14b09b..ee795db816 100644 --- a/apps/openmw/mwmechanics/spelleffects.cpp +++ b/apps/openmw/mwmechanics/spelleffects.cpp @@ -895,6 +895,12 @@ namespace MWMechanics bool shouldRemoveEffect(const MWWorld::Ptr& target, const ESM::ActiveEffect& effect) { + if ((effect.mFlags & (ESM::ActiveEffect::Flag_Remove | ESM::ActiveEffect::Flag_Applied)) + == ESM::ActiveEffect::Flag_Remove) + { + // Previously marked invalid + return true; + } const auto world = MWBase::Environment::get().getWorld(); switch (effect.mEffectId) { @@ -1102,6 +1108,7 @@ namespace MWMechanics auto anim = world->getAnimation(target); if (anim) anim->removeEffect(ESM::MagicEffect::indexToName(effect.mEffectId)); + // Note that we can't return REMOVED here because the effect still needs to be detectable } else effect.mFlags |= ESM::ActiveEffect::Flag_Applied | ESM::ActiveEffect::Flag_Remove; diff --git a/apps/openmw/mwscript/miscextensions.cpp b/apps/openmw/mwscript/miscextensions.cpp index 1511909332..3880f8e640 100644 --- a/apps/openmw/mwscript/miscextensions.cpp +++ b/apps/openmw/mwscript/miscextensions.cpp @@ -626,7 +626,7 @@ namespace MWScript { for (const auto& effect : spell.getEffects()) { - if (effect.mFlags & ESM::ActiveEffect::Flag_Applied && effect.mEffectId == key) + if (effect.mFlags & ESM::ActiveEffect::Flag_Remove && effect.mEffectId == key) { runtime.push(1); return;