#include "STDInclude.hpp" namespace Components { Game::dvar_t* Elevators::SV_EnableEasyElevators; __declspec(naked) void Elevators::PM_CorrectAllSolidStub() { __asm { push ecx mov ecx, Elevators::SV_EnableEasyElevators cmp byte ptr [ecx + 16], 1 pop ecx // Always elevate if SV_EnableEasyElevators is set to 1 je elevate // Original code cmp byte ptr [eax + 0x29], 0 // Original code flow jz elevate push 0x5734FF retn elevate: push 0x57353D retn } } __declspec(naked) void Elevators::PM_CheckDuckStub() { __asm { push eax mov eax, Elevators::SV_EnableEasyElevators cmp byte ptr [eax + 16], 1 pop eax // Always stand if SV_EnableEasyElevators is set to 1 je stand // Original code cmp byte ptr [esp + 0x38], 0 // Original code flow jnz noStand stand: push 0x570ED4 retn noStand: push 0x570EF4 retn } } Elevators::Elevators() { Dvar::OnInit([] { Elevators::SV_EnableEasyElevators = Game::Dvar_RegisterBool("sv_enableEasyElevators", false, Game::DVAR_FLAG_CHEAT | Game::DVAR_FLAG_REPLICATED, "Enable easy elevators for trickshotting"); }); Utils::Hook(0x5734F9, Elevators::PM_CorrectAllSolidStub, HOOK_JUMP).install()->quick(); Utils::Hook::Nop(0x5734FE, 1); Utils::Hook(0x570ECD, Elevators::PM_CheckDuckStub, HOOK_JUMP).install()->quick(); } Elevators::~Elevators() { } }