diff --git a/code/fgame/player.cpp b/code/fgame/player.cpp index 09c4e32b..850ed5b3 100644 --- a/code/fgame/player.cpp +++ b/code/fgame/player.cpp @@ -3498,17 +3498,6 @@ void Player::DoUse(Event *ev) m_pVehicle->flags &= ~FL_GODMODE; } } - - if (!bWasInTurretOrVehicle && (m_pVehicle || m_pTurret)) { - // - // Added in OPM - // Reset the legs and torso state. - // This prevents players from using a turret and hold the weapon fire - // to crouch with their weapon and become impossible to hit - currentState_Legs = statemap_Legs->FindState("STAND"); - currentState_Torso = statemap_Torso->FindState("STAND"); - charge_start_time = 0; - } } void Player::TouchStuff(pmove_t *pm) @@ -5851,6 +5840,7 @@ void Player::NoclipCheat(Event *ev) // reset the state machine so that his animations are correct ResetState(NULL); + charge_start_time = 0; } else { client->ps.feetfalling = false; movecontrol = MOVECONTROL_LEGS; diff --git a/code/fgame/weapon.cpp b/code/fgame/weapon.cpp index 767f2283..e895370b 100644 --- a/code/fgame/weapon.cpp +++ b/code/fgame/weapon.cpp @@ -4624,6 +4624,14 @@ float Weapon::GetSpreadFactor(firemode_t mode) return fSpreadFactor; } +//====================== +//Weapon::GetChargeFraction +//====================== +float Weapon::GetChargeFraction(void) const +{ + return charge_fraction; +} + //====================== //Weapon::GetScriptOwner //====================== diff --git a/code/fgame/weapon.h b/code/fgame/weapon.h index 06f15a9a..e9666afb 100644 --- a/code/fgame/weapon.h +++ b/code/fgame/weapon.h @@ -454,6 +454,7 @@ public: Listener *GetScriptOwner(void) override; float GetBulletRange(firemode_t firemode); float GetSpreadFactor(firemode_t firemode); + float GetChargeFraction(void) const; firemode_t GetFireMode(void); qboolean IsSemiAuto(void); void DoneAnimating(Event *ev); diff --git a/code/fgame/weapturret.cpp b/code/fgame/weapturret.cpp index 8ebd0586..e156edf1 100644 --- a/code/fgame/weapturret.cpp +++ b/code/fgame/weapturret.cpp @@ -1500,6 +1500,10 @@ void TurretGun::P_TurretUsed(Player *player) m_vUserViewAng = player->GetViewAngles(); if (fabs(AngleSubtract(m_vUserViewAng[1], angles[1])) <= m_fMaxUseAngle) { + if (player->charge_start_time) { + return; + } + P_TurretBeginUsed(player); flags &= ~FL_THINK;