#include #include "TiltedOnlineApp.h" extern std::unique_ptr g_appInstance; #include struct Main; struct VMContext { char pad[0x680]; uint8_t inactive; // 0x680 }; TP_THIS_FUNCTION(TVMUpdate, int, VMContext, float); TP_THIS_FUNCTION(TMainLoop, short, Main); TP_THIS_FUNCTION(TVMDestructor, uintptr_t, void); static TVMUpdate* VMUpdate = nullptr; static TMainLoop* MainLoop = nullptr; static TVMDestructor* VMDestructor = nullptr; int TP_MAKE_THISCALL(HookVMUpdate, VMContext, float a2) { if (apThis->inactive == 0) g_appInstance->Update(); return TiltedPhoques::ThisCall(VMUpdate, apThis, a2); } short TP_MAKE_THISCALL(HookMainLoop, Main) { TP_EMPTY_HOOK_PLACEHOLDER return TiltedPhoques::ThisCall(MainLoop, apThis); } uintptr_t TP_MAKE_THISCALL(HookVMDestructor, void) { TP_EMPTY_HOOK_PLACEHOLDER return TiltedPhoques::ThisCall(VMDestructor, apThis); } static TiltedPhoques::Initializer s_mainHooks( []() { POINTER_SKYRIMSE(TMainLoop, cMainLoop, 36564); POINTER_SKYRIMSE(TVMUpdate, cVMUpdate, 53926); POINTER_SKYRIMSE(TVMDestructor, cVMDestructor, 40412); VMUpdate = cVMUpdate.Get(); MainLoop = cMainLoop.Get(); VMDestructor = cVMDestructor.Get(); TP_HOOK(&VMUpdate, HookVMUpdate); TP_HOOK(&MainLoop, HookMainLoop); TP_HOOK(&VMDestructor, HookVMDestructor); });