diff --git a/apps/openmw/mwmechanics/spellcasting.cpp b/apps/openmw/mwmechanics/spellcasting.cpp index 95a7e1a3b..b5b409bee 100644 --- a/apps/openmw/mwmechanics/spellcasting.cpp +++ b/apps/openmw/mwmechanics/spellcasting.cpp @@ -646,14 +646,28 @@ namespace MWMechanics if (target != getPlayer()) return false; + MWRender::Animation* anim = MWBase::Environment::get().getWorld()->getAnimation(mCaster); + if (effectId == ESM::MagicEffect::DivineIntervention) { MWBase::Environment::get().getWorld()->teleportToClosestMarker(target, "divinemarker"); + anim->removeEffect(ESM::MagicEffect::DivineIntervention); + const ESM::Static* fx = MWBase::Environment::get().getWorld()->getStore().get() + .search("VFX_Summon_end"); + if (fx) + MWBase::Environment::get().getWorld()->spawnEffect("meshes\\" + fx->mModel, + "", mCaster.getRefData().getPosition().asVec3()); return true; } else if (effectId == ESM::MagicEffect::AlmsiviIntervention) { MWBase::Environment::get().getWorld()->teleportToClosestMarker(target, "templemarker"); + anim->removeEffect(ESM::MagicEffect::AlmsiviIntervention); + const ESM::Static* fx = MWBase::Environment::get().getWorld()->getStore().get() + .search("VFX_Summon_end"); + if (fx) + MWBase::Environment::get().getWorld()->spawnEffect("meshes\\" + fx->mModel, + "", mCaster.getRefData().getPosition().asVec3()); return true; } @@ -674,6 +688,7 @@ namespace MWMechanics MWWorld::ActionTeleport action(markedCell->isExterior() ? "" : markedCell->getCell()->mName, markedPosition, false); action.execute(target); + anim->removeEffect(ESM::MagicEffect::Recall); } return true; }