From 852204fa2d04f6bd7bca972bbd096ae5ceb22e51 Mon Sep 17 00:00:00 2001 From: "zer0.k" Date: Wed, 3 Jan 2024 23:00:07 +0100 Subject: [PATCH] Unquantize CKZ vertical velocity --- src/kz/mode/kz_mode_ckz.cpp | 12 ++++++++++++ src/kz/mode/kz_mode_ckz.h | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/kz/mode/kz_mode_ckz.cpp b/src/kz/mode/kz_mode_ckz.cpp index 7274c3902..3326b80d5 100644 --- a/src/kz/mode/kz_mode_ckz.cpp +++ b/src/kz/mode/kz_mode_ckz.cpp @@ -273,6 +273,7 @@ void KZClassicModeService::OnProcessUsercmds(void *cmds, int numcmds) void KZClassicModeService::OnProcessMovement() { + this->CheckVelocityQuantization(); this->RemoveCrouchJumpBind(); this->ReduceDuckSlowdown(); this->InterpolateViewAngles(); @@ -285,6 +286,9 @@ void KZClassicModeService::OnProcessMovementPost() this->InsertSubtickTiming(g_pKZUtils->GetServerGlobals()->tickcount * ENGINE_FIXED_TICK_INTERVAL + 0.5 * ENGINE_FIXED_TICK_INTERVAL, true); this->RestoreInterpolatedViewAngles(); this->oldDuckPressed = this->forcedUnduck || this->player->IsButtonDown(IN_DUCK, true); + Vector velocity; + this->player->GetVelocity(&velocity); + this->postProcessMovementZSpeed = velocity.z; } void KZClassicModeService::InsertSubtickTiming(float time, bool future) @@ -502,3 +506,11 @@ f32 KZClassicModeService::GetPrestrafeGain() { return PS_SPEED_MAX * pow(MAX(this->leftPreRatio, this->rightPreRatio) / PS_MAX_PS_TIME, PS_RATIO_TO_SPEED); } + +void KZClassicModeService::CheckVelocityQuantization() +{ + if (this->postProcessMovementZSpeed > this->player->currentMoveData->m_vecVelocity.z && this->postProcessMovementZSpeed - this->player->currentMoveData->m_vecVelocity.z < 0.03125f) + { + this->player->currentMoveData->m_vecVelocity.z = this->postProcessMovementZSpeed; + } +} diff --git a/src/kz/mode/kz_mode_ckz.h b/src/kz/mode/kz_mode_ckz.h index d21fd2760..52137582e 100644 --- a/src/kz/mode/kz_mode_ckz.h +++ b/src/kz/mode/kz_mode_ckz.h @@ -76,7 +76,7 @@ class KZClassicModeService : public KZModeService f32 lastJumpReleaseTime{}; bool oldDuckPressed{}; bool forcedUnduck{}; - + f32 postProcessMovementZSpeed{}; struct AngleHistory { f32 rate; @@ -115,6 +115,7 @@ class KZClassicModeService : public KZModeService void CalcPrestrafe(); f32 GetPrestrafeGain(); + void CheckVelocityQuantization(); void RemoveCrouchJumpBind(); /* Ported from DanZay's SimpleKZ: