From 510d1d76d79df039fd031fb6d7480e0ce6778229 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Sun, 24 Jul 2022 17:43:02 +0300 Subject: [PATCH] Fix applying of falling damage --- apps/openmw/mwmechanics/character.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index 4d9905c113..e95ac9b560 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1792,6 +1792,7 @@ void CharacterController::updateAnimQueue() void CharacterController::update(float duration) { MWBase::World *world = MWBase::Environment::get().getWorld(); + MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager(); const MWWorld::Class &cls = mPtr.getClass(); osg::Vec3f movement(0.f, 0.f, 0.f); float speed = 0.f; @@ -2063,8 +2064,13 @@ void CharacterController::update(float duration) // inflict fall damages if (!godmode) { - float realHealthLost = static_cast(healthLost * (1.0f - 0.25f * fatigueTerm)); - cls.onHit(mPtr, realHealthLost, true, MWWorld::Ptr(), MWWorld::Ptr(), osg::Vec3f(), true); + DynamicStat health = cls.getCreatureStats(mPtr).getHealth(); + float realHealthLost = healthLost * (1.0f - 0.25f * fatigueTerm); + health.setCurrent(health.getCurrent() - realHealthLost); + cls.getCreatureStats(mPtr).setHealth(health); + sndMgr->playSound3D(mPtr, "Health Damage", 1.0f, 1.0f); + if (isPlayer) + MWBase::Environment::get().getWindowManager()->activateHitOverlay(); } const float acrobaticsSkill = cls.getSkill(mPtr, ESM::Skill::Acrobatics); @@ -2136,7 +2142,6 @@ void CharacterController::update(float duration) if (playLandingSound) { - MWBase::SoundManager *sndMgr = MWBase::Environment::get().getSoundManager(); std::string sound; osg::Vec3f pos(mPtr.getRefData().getPosition().asVec3()); if (world->isUnderwater(mPtr.getCell(), pos) || world->isWalkingOnWater(mPtr))