diff --git a/dlls/flyingmonster.cpp b/dlls/flyingmonster.cpp index ac78222..3197268 100644 --- a/dlls/flyingmonster.cpp +++ b/dlls/flyingmonster.cpp @@ -84,13 +84,18 @@ void CFlyingMonster::Stop() } -float CFlyingMonster::ChangeYaw(int speed) +float CFlyingMonster::ChangeYaw(int yawSpeed) { if (pev->movetype == MOVETYPE_FLY) { float diff = FlYawDiff(); float target = 0; + if (m_flLastZYawTime == 0.0f) + { + m_flLastZYawTime = gpGlobals->time - gpGlobals->frametime; + } + if (m_IdealActivity != GetStoppedActivity()) { if (diff < -20) @@ -99,23 +104,17 @@ float CFlyingMonster::ChangeYaw(int speed) target = -90; } - if (m_flLastZYawTime == 0) - { - m_flLastZYawTime = gpGlobals->time - gpGlobals->frametime; - } - float delta = gpGlobals->time - m_flLastZYawTime; - m_flLastZYawTime = gpGlobals->time; - if (delta > 0.25) - { - delta = 0.25; - } + // Clamp delta like the engine does with frametime + if (delta > 0.25f) + delta = 0.25f; - pev->angles.z = UTIL_Approach(target, pev->angles.z, 220.0 * delta); + float speed = 220.0f * delta; + pev->angles.z = UTIL_Approach(target, pev->angles.z, 220.0 * speed); } - return CBaseMonster::ChangeYaw(speed); + return CBaseMonster::ChangeYaw(yawSpeed); } diff --git a/dlls/flyingmonster.h b/dlls/flyingmonster.h index a77ba4e..590f7c5 100644 --- a/dlls/flyingmonster.h +++ b/dlls/flyingmonster.h @@ -24,7 +24,7 @@ public: Activity GetStoppedActivity() override; void Killed(entvars_t* pevAttacker, int iGib) override; void Stop() override; - float ChangeYaw(int speed) override; + float ChangeYaw(int yawSpeed) override; void HandleAnimEvent(MonsterEvent_t* pEvent) override; void MoveExecute(CBaseEntity* pTargetEnt, const Vector& vecDir, float flInterval) override; void Move(float flInterval = 0.1) override; diff --git a/dlls/ichthyosaur.cpp b/dlls/ichthyosaur.cpp index 5c99a33..d3efb48 100644 --- a/dlls/ichthyosaur.cpp +++ b/dlls/ichthyosaur.cpp @@ -75,7 +75,7 @@ public: bool CheckMeleeAttack1(float flDot, float flDist) override; bool CheckRangeAttack1(float flDot, float flDist) override; - float ChangeYaw(int speed) override; + float ChangeYaw(int yawSpeed) override; Activity GetStoppedActivity() override; void SetActivity(Activity NewActivity) override; @@ -88,7 +88,7 @@ public: float VectorToPitch(const Vector& vec); float FlPitchDiff(); - float ChangePitch(int speed); + float ChangePitch(int pitchSpeed); Vector m_SaveVelocity; float m_idealDist; @@ -106,7 +106,8 @@ public: float m_flNextAlert; - float m_flLastPitchTime; + float m_flLastPitchTime; // Last frame time pitch was changed + float m_flLastZYawTime; // Last frame time Z was changed when yaw was changed static const char* pIdleSounds[]; static const char* pAlertSounds[]; @@ -806,12 +807,18 @@ float CIchthyosaur::FlPitchDiff() return flPitchDiff; } -float CIchthyosaur::ChangePitch(int speed) +float CIchthyosaur::ChangePitch(int pitchSpeed) { if (pev->movetype == MOVETYPE_FLY) { float diff = FlPitchDiff(); float target = 0; + + if (m_flLastPitchTime == 0.0f) + { + m_flLastPitchTime = gpGlobals->time - gpGlobals->frametime; + } + if (m_IdealActivity != GetStoppedActivity()) { if (diff < -20) @@ -820,32 +827,31 @@ float CIchthyosaur::ChangePitch(int speed) target = -45; } - if (m_flLastPitchTime == 0) - { - m_flLastPitchTime = gpGlobals->time - gpGlobals->frametime; - } - float delta = gpGlobals->time - m_flLastPitchTime; - m_flLastPitchTime = gpGlobals->time; - if (delta > 0.25) - { - delta = 0.25; - } + // Clamp delta like the engine does with frametime + if (delta > 0.25f) + delta = 0.25f; - pev->angles.x = UTIL_Approach(target, pev->angles.x, 220.0 * delta); + float speed = 220.0f * delta; + pev->angles.x = UTIL_Approach(target, pev->angles.x, speed); } return 0; } -float CIchthyosaur::ChangeYaw(int speed) +float CIchthyosaur::ChangeYaw(int yawSpeed) { if (pev->movetype == MOVETYPE_FLY) { float diff = FlYawDiff(); float target = 0; + if (m_flLastZYawTime == 0.0f) + { + m_flLastZYawTime = gpGlobals->time - gpGlobals->frametime; + } + if (m_IdealActivity != GetStoppedActivity()) { if (diff < -20) @@ -854,23 +860,17 @@ float CIchthyosaur::ChangeYaw(int speed) target = -20; } - if (m_flLastZYawTime == 0) - { - m_flLastZYawTime = gpGlobals->time - gpGlobals->frametime; - } - float delta = gpGlobals->time - m_flLastZYawTime; - m_flLastZYawTime = gpGlobals->time; - if (delta > 0.25) - { - delta = 0.25; - } + // Clamp delta like the engine does with frametime + if (delta > 0.25f) + delta = 0.25f; - pev->angles.z = UTIL_Approach(target, pev->angles.z, 220.0 * delta); + float speed = 220.f * delta; + pev->angles.z = UTIL_Approach(target, pev->angles.z, speed); } - return CFlyingMonster::ChangeYaw(speed); + return CFlyingMonster::ChangeYaw(yawSpeed); } diff --git a/dlls/monsters.cpp b/dlls/monsters.cpp index 96c1ba7..ea000c2 100644 --- a/dlls/monsters.cpp +++ b/dlls/monsters.cpp @@ -2527,16 +2527,19 @@ float CBaseMonster::ChangeYaw(int yawSpeed) ideal = pev->ideal_yaw; if (current != ideal) { - float delta = gpGlobals->time - m_flLastYawTime; - - m_flLastYawTime = gpGlobals->time; - - if (delta > 0.25) + if (m_flLastYawTime == 0.0f) { - delta = 0.25; + m_flLastYawTime = gpGlobals->time - gpGlobals->frametime; } - speed = yawSpeed * delta * 2; + float delta = gpGlobals->time - m_flLastYawTime; + m_flLastYawTime = gpGlobals->time; + + // Clamp delta like the engine does with frametime + if (delta > 0.25) + delta = 0.25; + + speed = (float)yawSpeed * delta * 2; move = ideal - current; if (ideal > current)