From a4b5bfc051313c66b97a9a2c92646ca75f666539 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Mon, 8 Aug 2022 20:21:11 +0300 Subject: [PATCH] Don't cancel the attack prematurely after running out of ammo --- apps/openmw/mwmechanics/character.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/apps/openmw/mwmechanics/character.cpp b/apps/openmw/mwmechanics/character.cpp index fa90cc1194..7b7a3d2e58 100644 --- a/apps/openmw/mwmechanics/character.cpp +++ b/apps/openmw/mwmechanics/character.cpp @@ -1314,7 +1314,6 @@ bool CharacterController::updateWeaponState() sndMgr->stopSound3D(mPtr, "WolfRun"); } - // Cancel attack if we no longer have ammunition bool ammunition = true; float weapSpeed = 1.f; if (cls.hasInventoryStore(mPtr)) @@ -1329,11 +1328,15 @@ bool CharacterController::updateWeaponState() ammunition = ammo != inv.end() && ammo->get()->mBase->mData.mType == ammotype; } - if (!ammunition && mUpperBodyState > UpperBodyState::WeaponEquipped) + // Cancel attack if we no longer have ammunition + if (!ammunition) { - if (!mCurrentWeapon.empty()) + if (mUpperBodyState == UpperBodyState::AttackPreWindUp || mUpperBodyState == UpperBodyState::AttackWindUp) + { mAnimation->disable(mCurrentWeapon); - mUpperBodyState = UpperBodyState::WeaponEquipped; + mUpperBodyState = UpperBodyState::WeaponEquipped; + } + setAttackingOrSpell(false); } MWWorld::ConstContainerStoreIterator torch = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft); @@ -1360,7 +1363,7 @@ bool CharacterController::updateWeaponState() ESM::WeaponType::Class weapclass = getWeaponType(mWeaponType)->mWeaponClass; if(getAttackingOrSpell()) { - bool resetIdle = ammunition; + bool resetIdle = true; if (mUpperBodyState == UpperBodyState::WeaponEquipped && (mHitState == CharState_None || mHitState == CharState_Block)) { mAttackStrength = 0; @@ -1522,7 +1525,7 @@ bool CharacterController::updateWeaponState() if(!resultSound.empty()) sndMgr->playSound3D(target, resultSound, 1.0f, 1.0f); } - else if (ammunition) + else { std::string startKey; std::string stopKey;