From c20030d8c9538e998270d8fa423fd29e15084b52 Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Mon, 18 Feb 2019 16:21:42 +0300 Subject: [PATCH] Correct jumping velocity --- apps/openmw/mwclass/npc.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwclass/npc.cpp b/apps/openmw/mwclass/npc.cpp index 317764e0c..eb48c6854 100644 --- a/apps/openmw/mwclass/npc.cpp +++ b/apps/openmw/mwclass/npc.cpp @@ -935,8 +935,12 @@ namespace MWClass const float normalizedEncumbrance = getNormalizedEncumbrance(ptr); - bool sneaking = MWBase::Environment::get().getMechanicsManager()->isSneaking(ptr) && stats.getStance(MWMechanics::CreatureStats::Stance_Sneak); - bool running = MWBase::Environment::get().getMechanicsManager()->isRunning(ptr) && stats.getStance(MWMechanics::CreatureStats::Stance_Run); + bool swimming = world->isSwimming(ptr); + bool inair = !world->isOnGround(ptr) && !swimming && !world->isFlying(ptr); + bool sneaking = stats.getStance(MWMechanics::CreatureStats::Stance_Sneak); + sneaking = sneaking && (inair || MWBase::Environment::get().getMechanicsManager()->isSneaking(ptr)); + bool running = stats.getStance(MWMechanics::CreatureStats::Stance_Run); + running = running && (inair || MWBase::Environment::get().getMechanicsManager()->isRunning(ptr)); float walkSpeed = gmst.fMinWalkSpeed->mValue.getFloat() + 0.01f*npcdata->mNpcStats.getAttribute(ESM::Attribute::Speed).getModified()* (gmst.fMaxWalkSpeed->mValue.getFloat() - gmst.fMinWalkSpeed->mValue.getFloat()); @@ -961,7 +965,7 @@ namespace MWClass flySpeed = std::max(0.0f, flySpeed); moveSpeed = flySpeed; } - else if (world->isSwimming(ptr)) + else if (swimming) { float swimSpeed = walkSpeed; if(running) @@ -971,7 +975,7 @@ namespace MWClass gmst.fSwimRunAthleticsMult->mValue.getFloat(); moveSpeed = swimSpeed; } - else if (running) + else if (running && !sneaking) moveSpeed = runSpeed; else moveSpeed = walkSpeed;