[HL25] Backport monsters framerate depend turn speed fix

Updated already did it but this is to make more consistent with HL25's SDK.
This commit is contained in:
Joël Troch 2024-08-28 16:36:24 +02:00
parent f2c917f1f8
commit 95fdebe75c
4 changed files with 51 additions and 49 deletions

View file

@ -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);
}

View file

@ -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;

View file

@ -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);
}

View file

@ -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)