From ce11175e89a9d71cc5c5034a0e5b6be71e47f9e7 Mon Sep 17 00:00:00 2001 From: Garey Date: Fri, 28 Mar 2025 04:05:43 +0500 Subject: [PATCH] Add cvar for stamina restoration speed based on fps reference. (#1005) * Add variable for framerate (FPS), that used as reference when restoring stamina (fuser2) after jump. --- README.md | 1 + dist/game.cfg | 6 ++++++ regamedll/dlls/game.cpp | 4 ++++ regamedll/dlls/game.h | 1 + regamedll/pm_shared/pm_shared.cpp | 13 +++++++++++++ 5 files changed, 25 insertions(+) diff --git a/README.md b/README.md index e515ac06..f6da4953 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,7 @@ This means that plugins that do binary code analysis (Orpheu for example) probab | mp_ammo_respawn_time | 20 | 0.0 | - | The respawn time for ammunition. | | mp_vote_flags | km | 0 | - | Vote systems enabled in server.
`0` voting disabled
`k` votekick enabled via `vote` command
`m` votemap enabled via `votemap` command | | mp_votemap_min_time | 180 | 0.0 | - | Minimum seconds that must elapse on map before `votemap` command can be used. | +| mp_stamina_restore_rate | 0 | 0.0 | - | Framerate (FPS), that used as reference when restoring stamina (fuser2) after jump. | | mp_logkills | 1 | 0 | 1 | Log kills.
`0` disabled
`1` enabled | | mp_jump_height | 45 | 0.0 | - | Player jump height. | | bot_excellent_morale | 0 | 0 | 1 | Bots always have great morale regardless of defeat or victory. | diff --git a/dist/game.cfg b/dist/game.cfg index 3b77122f..560629c2 100644 --- a/dist/game.cfg +++ b/dist/game.cfg @@ -628,6 +628,12 @@ mp_vote_flags "km" // Default value: "180" mp_votemap_min_time "180" +// Framerate (FPS), that is used as a reference when restoring stamina (fuser2) after a jump. +// 0 - disabled +// +// Default value: "0" +mp_stamina_restore_rate "0" + // Player jump height // // Default value: "45" diff --git a/regamedll/dlls/game.cpp b/regamedll/dlls/game.cpp index 6aaefbb7..f36e80d8 100644 --- a/regamedll/dlls/game.cpp +++ b/regamedll/dlls/game.cpp @@ -190,6 +190,8 @@ cvar_t ammo_respawn_time = { "mp_ammo_respawn_time", "20", FCVAR_SERVER, 2 cvar_t vote_flags = { "mp_vote_flags", "km", 0, 0.0f, nullptr }; cvar_t votemap_min_time = { "mp_votemap_min_time", "180", 0, 180.0f, nullptr }; +cvar_t stamina_restore_rate = { "mp_stamina_restore_rate", "0", 0, 0.f, nullptr }; + cvar_t logkills = { "mp_logkills", "1", FCVAR_SERVER, 0.0f, nullptr }; cvar_t randomspawn = { "mp_randomspawn", "0", FCVAR_SERVER, 0.0f, nullptr }; @@ -478,6 +480,8 @@ void EXT_FUNC GameDLLInit() CVAR_REGISTER(&playerid_showhealth); CVAR_REGISTER(&playerid_field); + CVAR_REGISTER(&stamina_restore_rate); + // print version CONSOLE_ECHO("ReGameDLL version: " APP_VERSION "\n"); diff --git a/regamedll/dlls/game.h b/regamedll/dlls/game.h index b3198ac4..ac937891 100644 --- a/regamedll/dlls/game.h +++ b/regamedll/dlls/game.h @@ -210,6 +210,7 @@ extern cvar_t weapon_respawn_time; extern cvar_t ammo_respawn_time; extern cvar_t vote_flags; extern cvar_t votemap_min_time; +extern cvar_t stamina_restore_rate; extern cvar_t logkills; extern cvar_t randomspawn; extern cvar_t playerid_showhealth; diff --git a/regamedll/pm_shared/pm_shared.cpp b/regamedll/pm_shared/pm_shared.cpp index 2de5f5fd..6904a756 100644 --- a/regamedll/pm_shared/pm_shared.cpp +++ b/regamedll/pm_shared/pm_shared.cpp @@ -886,6 +886,18 @@ void PM_WalkMove() { real_t flRatio = (100 - pmove->fuser2 * 0.001 * 19) * 0.01; +#ifdef REGAMEDLL_ADD + // change stamina restoration speed by fps reference + if (stamina_restore_rate.value > 0.0f) + { + real_t flReferenceFrametime = 1.0f / stamina_restore_rate.value; + + float flFrametimeRatio = pmove->frametime / flReferenceFrametime; + + flRatio = pow(flRatio, flFrametimeRatio); + } +#endif + pmove->velocity[0] *= flRatio; pmove->velocity[1] *= flRatio; } @@ -2611,6 +2623,7 @@ void EXT_FUNC __API_HOOK(PM_Jump)() { // NOTE: don't do it in .f (float) real_t flRatio = (100.0 - pmove->fuser2 * 0.001 * 19.0) * 0.01; + pmove->velocity[2] *= flRatio; }