From 40c1db32bd8aa020190704337e98e88424c8f5e4 Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Fri, 24 May 2019 12:26:22 +0300 Subject: [PATCH 1/2] Apply analogue speed mult to fatigue loss --- apps/openmw/mwmechanics/character.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index fa930cb52f..09794d15f7 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1979,24 +1979,24 @@ void CharacterController::update(float duration, bool animationOnly) osg::Vec3f rot = cls.getRotationVector(mPtr); speed = cls.getSpeed(mPtr); + float analogueMult = 1.f; if(isPlayer) { - // Joystick anologue movement. + // Joystick analogue movement. float xAxis = std::abs(cls.getMovementSettings(mPtr).mPosition[0]); float yAxis = std::abs(cls.getMovementSettings(mPtr).mPosition[1]); - float analogueMovement = ((xAxis > yAxis) ? xAxis : yAxis); + analogueMult = ((xAxis > yAxis) ? xAxis : yAxis); // If Strafing, our max speed is slower so multiply by X axis instead. if(std::abs(vec.x()/2.0f) > std::abs(vec.y())) - analogueMovement = xAxis; + analogueMult = xAxis; // Due to the half way split between walking/running, we multiply speed by 2 while walking, unless a keyboard was used. - if(!isrunning && !sneak && !flying && analogueMovement <= 0.5f) - speed *= 2; - - speed *= (analogueMovement); + if(!isrunning && !sneak && !flying && analogueMult <= 0.5f) + analogueMult *= 2.f; } + speed *= analogueMult; vec.x() *= speed; vec.y() *= speed; @@ -2063,6 +2063,7 @@ void CharacterController::update(float duration, bool animationOnly) } } fatigueLoss *= duration; + fatigueLoss *= analogueMult; DynamicStat fatigue = cls.getCreatureStats(mPtr).getFatigue(); if (!godmode) From f271ac255d52e3bda9ae67aa0e56f86b2a9cff0d Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Fri, 24 May 2019 12:26:38 +0300 Subject: [PATCH 2/2] Avoid conflicts between gamepad movement and always run setting --- apps/openmw/mwinput/inputmanagerimp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwinput/inputmanagerimp.cpp b/apps/openmw/mwinput/inputmanagerimp.cpp index 7cea96aae1..6ca2ef6e48 100644 --- a/apps/openmw/mwinput/inputmanagerimp.cpp +++ b/apps/openmw/mwinput/inputmanagerimp.cpp @@ -703,7 +703,7 @@ namespace MWInput mOverencumberedMessageDelay = 0.f; } - if (mAlwaysRunActive || isRunning) + if ((mAlwaysRunActive && !mJoystickLastUsed) || isRunning) mPlayer->setRunState(!actionIsActive(A_Run)); else mPlayer->setRunState(actionIsActive(A_Run));