feature: player_sprintUnlimited
This commit is contained in:
parent
4e3cd28d38
commit
aca57b3887
@ -74,6 +74,7 @@ namespace game
|
|||||||
VM_Notify_t VM_Notify;
|
VM_Notify_t VM_Notify;
|
||||||
|
|
||||||
BG_NetDataChecksum_t BG_NetDataChecksum;
|
BG_NetDataChecksum_t BG_NetDataChecksum;
|
||||||
|
BG_GetMaxSprintTime_t BG_GetMaxSprintTime;
|
||||||
|
|
||||||
LiveStorage_GetPersistentDataDefVersion_t LiveStorage_GetPersistentDataDefVersion;
|
LiveStorage_GetPersistentDataDefVersion_t LiveStorage_GetPersistentDataDefVersion;
|
||||||
LiveStorage_GetPersistentDataDefFormatChecksum_t LiveStorage_GetPersistentDataDefFormatChecksum;
|
LiveStorage_GetPersistentDataDefFormatChecksum_t LiveStorage_GetPersistentDataDefFormatChecksum;
|
||||||
@ -789,6 +790,7 @@ namespace game
|
|||||||
native::VM_Notify = native::VM_Notify_t(SELECT_VALUE(0x610200, 0x569720));
|
native::VM_Notify = native::VM_Notify_t(SELECT_VALUE(0x610200, 0x569720));
|
||||||
|
|
||||||
native::BG_NetDataChecksum = native::BG_NetDataChecksum_t(SELECT_VALUE(0x0, 0x41BB20));
|
native::BG_NetDataChecksum = native::BG_NetDataChecksum_t(SELECT_VALUE(0x0, 0x41BB20));
|
||||||
|
native::BG_GetMaxSprintTime = native::BG_GetMaxSprintTime_t(SELECT_VALUE(0x4FAA50, 0x41BA70));
|
||||||
|
|
||||||
native::LiveStorage_GetPersistentDataDefVersion = native::LiveStorage_GetPersistentDataDefVersion_t(SELECT_VALUE(0x0, 0x548D60));
|
native::LiveStorage_GetPersistentDataDefVersion = native::LiveStorage_GetPersistentDataDefVersion_t(SELECT_VALUE(0x0, 0x548D60));
|
||||||
|
|
||||||
|
@ -158,6 +158,9 @@ namespace game
|
|||||||
typedef unsigned int (*BG_NetDataChecksum_t)();
|
typedef unsigned int (*BG_NetDataChecksum_t)();
|
||||||
extern BG_NetDataChecksum_t BG_NetDataChecksum;
|
extern BG_NetDataChecksum_t BG_NetDataChecksum;
|
||||||
|
|
||||||
|
typedef int (*BG_GetMaxSprintTime_t)(void* ps);
|
||||||
|
extern BG_GetMaxSprintTime_t BG_GetMaxSprintTime;
|
||||||
|
|
||||||
typedef int (*LiveStorage_GetPersistentDataDefVersion_t)();
|
typedef int (*LiveStorage_GetPersistentDataDefVersion_t)();
|
||||||
extern LiveStorage_GetPersistentDataDefVersion_t LiveStorage_GetPersistentDataDefVersion;
|
extern LiveStorage_GetPersistentDataDefVersion_t LiveStorage_GetPersistentDataDefVersion;
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ const game::native::dvar_t* player_movement::player_sustainAmmo;
|
|||||||
const game::native::dvar_t* player_movement::player_lastStandCrawlSpeedScale;
|
const game::native::dvar_t* player_movement::player_lastStandCrawlSpeedScale;
|
||||||
const game::native::dvar_t* player_movement::player_duckedSpeedScale;
|
const game::native::dvar_t* player_movement::player_duckedSpeedScale;
|
||||||
const game::native::dvar_t* player_movement::player_proneSpeedScale;
|
const game::native::dvar_t* player_movement::player_proneSpeedScale;
|
||||||
|
const game::native::dvar_t* player_movement::player_sprintUnlimited;
|
||||||
const game::native::dvar_t* player_movement::jump_slowdownEnable;
|
const game::native::dvar_t* player_movement::jump_slowdownEnable;
|
||||||
const game::native::dvar_t* player_movement::jump_ladderPushVel;
|
const game::native::dvar_t* player_movement::jump_ladderPushVel;
|
||||||
const game::native::dvar_t* player_movement::jump_enableFallDamage;
|
const game::native::dvar_t* player_movement::jump_enableFallDamage;
|
||||||
@ -27,6 +28,7 @@ const game::native::dvar_t* player_movement::g_speed;
|
|||||||
DWORD player_movement::bounce_addr;
|
DWORD player_movement::bounce_addr;
|
||||||
DWORD player_movement::dont_bounce_addr;
|
DWORD player_movement::dont_bounce_addr;
|
||||||
DWORD player_movement::pm_project_velocity_addr;
|
DWORD player_movement::pm_project_velocity_addr;
|
||||||
|
DWORD player_movement::pm_end_sprint_addr;
|
||||||
DWORD player_movement::push_off_ladder_addr;
|
DWORD player_movement::push_off_ladder_addr;
|
||||||
DWORD player_movement::jump_start_addr;
|
DWORD player_movement::jump_start_addr;
|
||||||
DWORD player_movement::jump_get_step_height_addr;
|
DWORD player_movement::jump_get_step_height_addr;
|
||||||
@ -64,6 +66,57 @@ __declspec(naked) void player_movement::pm_step_slide_move_stub()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int player_movement::pm_get_sprint_left_last_time_stub(game::native::playerState_s* ps)
|
||||||
|
{
|
||||||
|
if (player_sprintUnlimited->current.enabled)
|
||||||
|
{
|
||||||
|
return game::native::BG_GetMaxSprintTime(ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
return utils::hook::invoke<int>(0x41D2F0, ps);
|
||||||
|
}
|
||||||
|
|
||||||
|
__declspec(naked) void player_movement::pm_get_sprint_left_stub()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
push eax
|
||||||
|
mov eax, player_sprintUnlimited
|
||||||
|
cmp byte ptr [eax + 0xC], 1
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
jnz safe_return
|
||||||
|
|
||||||
|
// playerState_s.perks: add the flag that signals unlimited sprint
|
||||||
|
or dword ptr [esi + 0x4EC], 0x4000
|
||||||
|
|
||||||
|
safe_return:
|
||||||
|
push 0x41D25C // ret address
|
||||||
|
push 0x41BA70 // BG_GetMaxSprintTime
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
__declspec(naked) void player_movement::pm_end_sprint_stub()
|
||||||
|
{
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
push eax
|
||||||
|
mov eax, player_sprintUnlimited
|
||||||
|
cmp byte ptr [eax + 0xC], 1
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
jnz safe_return
|
||||||
|
|
||||||
|
// Do not stop sprinting
|
||||||
|
ret
|
||||||
|
|
||||||
|
safe_return:
|
||||||
|
call pm_end_sprint_addr
|
||||||
|
ret
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int player_movement::stuck_in_client_stub(game::native::gentity_s* self)
|
int player_movement::stuck_in_client_stub(game::native::gentity_s* self)
|
||||||
{
|
{
|
||||||
if (pm_playerEjection->current.enabled)
|
if (pm_playerEjection->current.enabled)
|
||||||
@ -421,6 +474,15 @@ const game::native::dvar_t* player_movement::dvar_register_player_sustain_ammo(c
|
|||||||
return player_sustainAmmo;
|
return player_sustainAmmo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const game::native::dvar_t* player_movement::dvar_register_player_print_unlimited(const char* dvar_name,
|
||||||
|
bool value, unsigned __int16 /*flags*/, const char* description)
|
||||||
|
{
|
||||||
|
player_sprintUnlimited = game::native::Dvar_RegisterBool(dvar_name,
|
||||||
|
value, game::native::DVAR_CODINFO, description);
|
||||||
|
|
||||||
|
return player_sprintUnlimited;
|
||||||
|
}
|
||||||
|
|
||||||
const game::native::dvar_t* player_movement::dvar_register_jump_ladder_push_vel(const char* dvar_name,
|
const game::native::dvar_t* player_movement::dvar_register_jump_ladder_push_vel(const char* dvar_name,
|
||||||
float value, float min, float max, unsigned __int16 /*flags*/, const char* description)
|
float value, float min, float max, unsigned __int16 /*flags*/, const char* description)
|
||||||
{
|
{
|
||||||
@ -478,6 +540,7 @@ void player_movement::patch_mp()
|
|||||||
|
|
||||||
// Un-Cheat the dvars
|
// Un-Cheat the dvars
|
||||||
utils::hook(0x418D9C, dvar_register_player_sustain_ammo, HOOK_CALL).install()->quick();
|
utils::hook(0x418D9C, dvar_register_player_sustain_ammo, HOOK_CALL).install()->quick();
|
||||||
|
utils::hook(0x4190C0, dvar_register_player_print_unlimited, HOOK_CALL).install()->quick();
|
||||||
utils::hook(0x4160A7, dvar_register_jump_ladder_push_vel, HOOK_CALL).install()->quick();
|
utils::hook(0x4160A7, dvar_register_jump_ladder_push_vel, HOOK_CALL).install()->quick();
|
||||||
utils::hook(0x41602B, dvar_register_jump_height, HOOK_CALL).install()->quick();
|
utils::hook(0x41602B, dvar_register_jump_height, HOOK_CALL).install()->quick();
|
||||||
utils::hook(0x416074, dvar_register_jump_slowdown_enable, HOOK_CALL).install()->quick();
|
utils::hook(0x416074, dvar_register_jump_slowdown_enable, HOOK_CALL).install()->quick();
|
||||||
@ -489,6 +552,9 @@ void player_movement::patch_mp()
|
|||||||
utils::hook(0x42AE95, pm_weapon_use_ammo, HOOK_CALL).install()->quick();
|
utils::hook(0x42AE95, pm_weapon_use_ammo, HOOK_CALL).install()->quick();
|
||||||
|
|
||||||
utils::hook(0x424D51, pm_step_slide_move_stub, HOOK_JUMP).install()->quick();
|
utils::hook(0x424D51, pm_step_slide_move_stub, HOOK_JUMP).install()->quick();
|
||||||
|
utils::hook(0x45B7C6, pm_get_sprint_left_last_time_stub, HOOK_CALL).install()->quick(); // CG_CalcPlayerSprintColor
|
||||||
|
utils::hook(0x41D257, pm_get_sprint_left_stub, HOOK_JUMP).install()->quick();
|
||||||
|
utils::hook(0x41D58B, pm_end_sprint_stub, HOOK_CALL).install()->quick(); // PM_UpdateSprint
|
||||||
|
|
||||||
utils::hook(0x4F9EFB, stuck_in_client_stub, HOOK_CALL).install()->quick(); // ClientEndFrame
|
utils::hook(0x4F9EFB, stuck_in_client_stub, HOOK_CALL).install()->quick(); // ClientEndFrame
|
||||||
utils::hook(0x57CF45, cm_transformed_capsule_trace_stub, HOOK_CALL).install()->quick(); // SV_ClipMoveToEntity
|
utils::hook(0x57CF45, cm_transformed_capsule_trace_stub, HOOK_CALL).install()->quick(); // SV_ClipMoveToEntity
|
||||||
@ -618,6 +684,7 @@ void player_movement::post_load()
|
|||||||
bounce_addr = SELECT_VALUE(0x43D91F, 0x424D58);
|
bounce_addr = SELECT_VALUE(0x43D91F, 0x424D58);
|
||||||
dont_bounce_addr = SELECT_VALUE(0x43D933, 0x424D6C);
|
dont_bounce_addr = SELECT_VALUE(0x43D933, 0x424D6C);
|
||||||
pm_project_velocity_addr = SELECT_VALUE(0x4A57Ef, 0x41D19F);
|
pm_project_velocity_addr = SELECT_VALUE(0x4A57Ef, 0x41D19F);
|
||||||
|
pm_end_sprint_addr = SELECT_VALUE(0x0, 0x41D350);
|
||||||
push_off_ladder_addr = SELECT_VALUE(0x63EA4C, 0x41686C);
|
push_off_ladder_addr = SELECT_VALUE(0x63EA4C, 0x41686C);
|
||||||
jump_start_addr = SELECT_VALUE(0x63E910, 0x4166F6);
|
jump_start_addr = SELECT_VALUE(0x63E910, 0x4166F6);
|
||||||
jump_get_step_height_addr = SELECT_VALUE(0x48C1E2, 0x416145);
|
jump_get_step_height_addr = SELECT_VALUE(0x48C1E2, 0x416145);
|
||||||
|
@ -11,6 +11,7 @@ private:
|
|||||||
static const game::native::dvar_t* player_lastStandCrawlSpeedScale;
|
static const game::native::dvar_t* player_lastStandCrawlSpeedScale;
|
||||||
static const game::native::dvar_t* player_duckedSpeedScale;
|
static const game::native::dvar_t* player_duckedSpeedScale;
|
||||||
static const game::native::dvar_t* player_proneSpeedScale;
|
static const game::native::dvar_t* player_proneSpeedScale;
|
||||||
|
static const game::native::dvar_t* player_sprintUnlimited;
|
||||||
// Jump dvars
|
// Jump dvars
|
||||||
static const game::native::dvar_t* jump_slowdownEnable;
|
static const game::native::dvar_t* jump_slowdownEnable;
|
||||||
static const game::native::dvar_t* jump_ladderPushVel;
|
static const game::native::dvar_t* jump_ladderPushVel;
|
||||||
@ -32,6 +33,7 @@ private:
|
|||||||
static DWORD bounce_addr;
|
static DWORD bounce_addr;
|
||||||
static DWORD dont_bounce_addr;
|
static DWORD dont_bounce_addr;
|
||||||
static DWORD pm_project_velocity_addr;
|
static DWORD pm_project_velocity_addr;
|
||||||
|
static DWORD pm_end_sprint_addr;
|
||||||
static DWORD push_off_ladder_addr;
|
static DWORD push_off_ladder_addr;
|
||||||
static DWORD jump_start_addr;
|
static DWORD jump_start_addr;
|
||||||
static DWORD jump_get_step_height_addr;
|
static DWORD jump_get_step_height_addr;
|
||||||
@ -51,8 +53,13 @@ private:
|
|||||||
bool value, unsigned __int16 flags, const char* description);
|
bool value, unsigned __int16 flags, const char* description);
|
||||||
static const game::native::dvar_t* dvar_register_player_sustain_ammo(const char* dvar_name,
|
static const game::native::dvar_t* dvar_register_player_sustain_ammo(const char* dvar_name,
|
||||||
bool value, unsigned __int16 flags, const char* description);
|
bool value, unsigned __int16 flags, const char* description);
|
||||||
|
static const game::native::dvar_t* dvar_register_player_print_unlimited(const char* dvar_name,
|
||||||
|
bool value, unsigned __int16 flags, const char* description);
|
||||||
|
|
||||||
static void pm_step_slide_move_stub();
|
static void pm_step_slide_move_stub();
|
||||||
|
static int pm_get_sprint_left_last_time_stub(game::native::playerState_s* ps);
|
||||||
|
static void pm_get_sprint_left_stub();
|
||||||
|
static void pm_end_sprint_stub();
|
||||||
|
|
||||||
static int stuck_in_client_stub(game::native::gentity_s* self);
|
static int stuck_in_client_stub(game::native::gentity_s* self);
|
||||||
static void cm_transformed_capsule_trace_stub(game::native::trace_t* results, const float* start,
|
static void cm_transformed_capsule_trace_stub(game::native::trace_t* results, const float* start,
|
||||||
|
Loading…
Reference in New Issue
Block a user