From ef5abb16ead11ca0dd542a15c734a277b89593f9 Mon Sep 17 00:00:00 2001 From: PixieCore <41352111+PixieCore@users.noreply.github.com> Date: Wed, 23 Mar 2022 23:28:12 +0100 Subject: [PATCH] Added the ability to disable rUI drawing. By @r-ex. --- r5dev/core/init.cpp | 11 ++++++++- r5dev/rtech/rtech_utils.h | 4 +-- r5dev/rtech/rui/rui.cpp | 35 +++++++++++++++++++++++++++ r5dev/rtech/rui/rui.h | 28 +++++++++++++++++++++ r5dev/rtech/stryder.cpp | 3 --- r5dev/rtech/stryder/stryder.cpp | 3 +++ r5dev/rtech/{ => stryder}/stryder.h | 0 r5dev/tier0/IConVar.cpp | 8 ++++++ r5dev/tier0/cvar.cpp | 7 ++++++ r5dev/tier0/cvar.h | 7 ++++++ r5dev/vpc/keyvalues.cpp | 2 +- r5dev/vproj/dedicated.vcxproj | 4 +-- r5dev/vproj/dedicated.vcxproj.filters | 15 +++++++----- r5dev/vproj/gamesdk.vcxproj | 6 +++-- r5dev/vproj/gamesdk.vcxproj.filters | 24 +++++++++++++----- 15 files changed, 134 insertions(+), 23 deletions(-) create mode 100644 r5dev/rtech/rui/rui.cpp create mode 100644 r5dev/rtech/rui/rui.h delete mode 100644 r5dev/rtech/stryder.cpp create mode 100644 r5dev/rtech/stryder/stryder.cpp rename r5dev/rtech/{ => stryder}/stryder.h (100%) diff --git a/r5dev/core/init.cpp b/r5dev/core/init.cpp index f716985f..887c26d0 100644 --- a/r5dev/core/init.cpp +++ b/r5dev/core/init.cpp @@ -44,7 +44,10 @@ #include "squirrel/sqvm.h" #include "studiorender/studiorendercontext.h" #include "rtech/rtech_game.h" -#include "rtech/stryder.h" +#include "rtech/stryder/stryder.h" +#ifndef DEDICATED +#include "rtech/rui/rui.h" +#endif // !DEDICATED #include "engine/baseclient.h" #include "engine/common.h" #include "engine/cmodel_bsp.h" @@ -152,6 +155,9 @@ void Systems_Init() SQVM_Attach(); RTech_Game_Attach(); +#ifndef DEDICATED + Rui_Attach(); +#endif // !DEDICATED SysDll_Attach(); SysUtils_Attach(); @@ -249,6 +255,9 @@ void Systems_Shutdown() SQVM_Detach(); RTech_Game_Detach(); +#ifndef DEDICATED + Rui_Detach(); +#endif // !DEDICATED SysDll_Detach(); SysUtils_Detach(); diff --git a/r5dev/rtech/rtech_utils.h b/r5dev/rtech/rtech_utils.h index 0b62d31e..9bf1b083 100644 --- a/r5dev/rtech/rtech_utils.h +++ b/r5dev/rtech/rtech_utils.h @@ -71,8 +71,8 @@ enum class RPakStatus_t : std::int32_t }; const std::map<RPakStatus_t, std::string> RPakStatusToString { - { RPakStatus_t::PAK_STATUS_FREED, "PAK_STATUS_FREED" }, - { RPakStatus_t::PAK_STATUS_LOAD_PENDING, "PAK_STATUS_LOAD_PENDING" }, + { RPakStatus_t::PAK_STATUS_FREED, "PAK_STATUS_FREED" }, + { RPakStatus_t::PAK_STATUS_LOAD_PENDING, "PAK_STATUS_LOAD_PENDING" }, { RPakStatus_t::PAK_STATUS_REPAK_RUNNING, "PAK_STATUS_REPAK_RUNNING" }, { RPakStatus_t::PAK_STATUS_REPAK_DONE, "PAK_STATUS_REPAK_DONE" }, { RPakStatus_t::PAK_STATUS_LOAD_STARTING, "PAK_STATUS_LOAD_STARTING" }, diff --git a/r5dev/rtech/rui/rui.cpp b/r5dev/rtech/rui/rui.cpp new file mode 100644 index 00000000..b3661c4b --- /dev/null +++ b/r5dev/rtech/rui/rui.cpp @@ -0,0 +1,35 @@ +//=============================================================================// +// +// Purpose: rUI Utilities +// +//=============================================================================// + +#include "core/stdafx.h" + +#ifndef DEDICATED + +#include "rui.h" +#include <tier0/cvar.h> + +//----------------------------------------------------------------------------- +// Purpose: Probably responsible to decide if rUI is allowed to draw. +//----------------------------------------------------------------------------- +bool __fastcall HRuiDraw(__int64* a1, __m128* a2, const __m128i* a3, __int64 a4, __m128* a5) +{ + if (!rui_drawEnable->GetBool()) + return false; + + return RuiDraw(a1, a2, a3, a4, a5); +} + +void Rui_Attach() +{ + DetourAttach((LPVOID*)&RuiDraw, &HRuiDraw); +} + +void Rui_Detach() +{ + DetourDetach((LPVOID*)&RuiDraw, &HRuiDraw); +} + +#endif // !DEDICATED \ No newline at end of file diff --git a/r5dev/rtech/rui/rui.h b/r5dev/rtech/rui/rui.h new file mode 100644 index 00000000..d76ba1aa --- /dev/null +++ b/r5dev/rtech/rui/rui.h @@ -0,0 +1,28 @@ +#pragma once + +#ifndef DEDICATED + +namespace +{ + /* ==== RUI ====================================================================================================================================================== */ + ADDRESS p_RuiDraw = g_mGameDll.FindPatternSIMD((std::uint8_t*)"\x40\x53\x48\x83\xEC\x40\x4C\x8B\x5A\x18", "xxxxxxxxxx"); + bool (__fastcall* RuiDraw)(__int64* a1, __m128* a2, const __m128i* a3, __int64 a4, __m128* a5) = (bool (__fastcall*)(__int64*, __m128*, const __m128i*, __int64, __m128*))p_RuiDraw.GetPtr(); /* 40 53 48 83 EC 40 4C 8B 5A 18 */ +} + +void Rui_Attach(); +void Rui_Detach(); + +/////////////////////////////////////////////////////////////////////////////// +class HRui : public IDetour +{ + virtual void debugp() + { + std::cout << "| FUN: RuiDraw : 0x" << std::hex << std::uppercase << p_RuiDraw.GetPtr() << std::setw(npad) << " |" << std::endl; + std::cout << "+----------------------------------------------------------------+" << std::endl; + } +}; +/////////////////////////////////////////////////////////////////////////////// + +REGISTER(HRui); + +#endif // !DEDICATED \ No newline at end of file diff --git a/r5dev/rtech/stryder.cpp b/r5dev/rtech/stryder.cpp deleted file mode 100644 index d8101c70..00000000 --- a/r5dev/rtech/stryder.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "core/stdafx.h" -#include "rtech/stryder.h" -//TODO diff --git a/r5dev/rtech/stryder/stryder.cpp b/r5dev/rtech/stryder/stryder.cpp new file mode 100644 index 00000000..94002830 --- /dev/null +++ b/r5dev/rtech/stryder/stryder.cpp @@ -0,0 +1,3 @@ +#include "core/stdafx.h" +#include "rtech/stryder/stryder.h" +//TODO diff --git a/r5dev/rtech/stryder.h b/r5dev/rtech/stryder/stryder.h similarity index 100% rename from r5dev/rtech/stryder.h rename to r5dev/rtech/stryder/stryder.h diff --git a/r5dev/tier0/IConVar.cpp b/r5dev/tier0/IConVar.cpp index 26048b12..935f658e 100644 --- a/r5dev/tier0/IConVar.cpp +++ b/r5dev/tier0/IConVar.cpp @@ -138,6 +138,14 @@ void ConVar::Init(void) const net_userandomkey = new ConVar("net_userandomkey" , "1" , FCVAR_RELEASE , "If set to 1, the netchannel generates and sets a random base64 netkey.", false, 0.f, false, 0.f, nullptr, nullptr); r5net_matchmaking_hostname = new ConVar("r5net_matchmaking_hostname", "r5a-comp-sv.herokuapp.com", FCVAR_RELEASE , "Holds the R5Net matchmaking hostname.", false, 0.f, false, 0.f, nullptr, nullptr); r5net_show_debug = new ConVar("r5net_show_debug" , "1" , FCVAR_DEVELOPMENTONLY, "Shows debug output for R5Net.", false, 0.f, false, 0.f, nullptr, nullptr); + //------------------------------------------------------------------------- + // RTECH API | + + // RUI | +#ifndef DEDICATED + rui_drawEnable = new ConVar("rui_drawEnable", "1", FCVAR_RELEASE, "Draws the rUI, 1 = Draw, 0 = No Draw.", false, 0.f, false, 0.f, nullptr, nullptr); +#endif // !DEDICATED + //------------------------------------------------------------------------- } //----------------------------------------------------------------------------- diff --git a/r5dev/tier0/cvar.cpp b/r5dev/tier0/cvar.cpp index b649b9a8..8f008522 100644 --- a/r5dev/tier0/cvar.cpp +++ b/r5dev/tier0/cvar.cpp @@ -95,6 +95,13 @@ ConVar* sq_showvmwarning = nullptr; ConVar* net_userandomkey = nullptr; ConVar* r5net_matchmaking_hostname = nullptr; ConVar* r5net_show_debug = nullptr; +//----------------------------------------------------------------------------- +// RTECH API | + +// RUI | +#ifndef DEDICATED +ConVar* rui_drawEnable = nullptr; +#endif // !DEDICATED //----------------------------------------------------------------------------- // Purpose: finds base commands. diff --git a/r5dev/tier0/cvar.h b/r5dev/tier0/cvar.h index 90200411..5fb2f62f 100644 --- a/r5dev/tier0/cvar.h +++ b/r5dev/tier0/cvar.h @@ -105,6 +105,13 @@ extern ConVar* sq_showvmwarning; extern ConVar* net_userandomkey; extern ConVar* r5net_matchmaking_hostname; extern ConVar* r5net_show_debug; +//----------------------------------------------------------------------------- +// RTECH API | + +// RUI | +#ifndef DEDICATED +extern ConVar* rui_drawEnable; +#endif // !DEDICATED class CCVarIteratorInternal // Fully reversed table, just look at the virtual function table and rename the function. { diff --git a/r5dev/vpc/keyvalues.cpp b/r5dev/vpc/keyvalues.cpp index e9735d1c..7052d158 100644 --- a/r5dev/vpc/keyvalues.cpp +++ b/r5dev/vpc/keyvalues.cpp @@ -1,6 +1,6 @@ #include "core/stdafx.h" #include "vpc/keyvalues.h" -#include "rtech/stryder.h" +#include "rtech/stryder/stryder.h" #include "engine/sys_dll2.h" /////////////////////////////////////////////////////////////////////////////// diff --git a/r5dev/vproj/dedicated.vcxproj b/r5dev/vproj/dedicated.vcxproj index 0d65ae43..31598af3 100644 --- a/r5dev/vproj/dedicated.vcxproj +++ b/r5dev/vproj/dedicated.vcxproj @@ -189,7 +189,7 @@ <ClInclude Include="..\public\include\utility.h" /> <ClInclude Include="..\rtech\rtech_utils.h" /> <ClInclude Include="..\rtech\rtech_game.h" /> - <ClInclude Include="..\rtech\stryder.h" /> + <ClInclude Include="..\rtech\stryder\stryder.h" /> <ClInclude Include="..\server\IVEngineServer.h" /> <ClInclude Include="..\server\server.h" /> <ClInclude Include="..\squirrel\sqapi.h" /> @@ -398,7 +398,7 @@ <ClCompile Include="..\public\utility.cpp" /> <ClCompile Include="..\rtech\rtech_utils.cpp" /> <ClCompile Include="..\rtech\rtech_game.cpp" /> - <ClCompile Include="..\rtech\stryder.cpp" /> + <ClCompile Include="..\rtech\stryder\stryder.cpp" /> <ClCompile Include="..\server\IVEngineServer.cpp" /> <ClCompile Include="..\server\server.cpp" /> <ClCompile Include="..\squirrel\sqapi.cpp" /> diff --git a/r5dev/vproj/dedicated.vcxproj.filters b/r5dev/vproj/dedicated.vcxproj.filters index 0bc9bc50..fe528fd5 100644 --- a/r5dev/vproj/dedicated.vcxproj.filters +++ b/r5dev/vproj/dedicated.vcxproj.filters @@ -130,6 +130,9 @@ <Filter Include="thirdparty\lzham\lzhamdecomp\include"> <UniqueIdentifier>{40c41a94-4e9d-439f-9b16-68531ecc03a8}</UniqueIdentifier> </Filter> + <Filter Include="sdk\rtech\stryder"> + <UniqueIdentifier>{07362c29-d064-4bdb-97a6-6e3dbcdc8c02}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClInclude Include="..\client\client.h"> @@ -204,9 +207,6 @@ <ClInclude Include="..\public\include\bansystem.h"> <Filter>sdk\public\include</Filter> </ClInclude> - <ClInclude Include="..\rtech\stryder.h"> - <Filter>sdk\rtech</Filter> - </ClInclude> <ClInclude Include="..\rtech\rtech_utils.h"> <Filter>sdk\rtech</Filter> </ClInclude> @@ -804,6 +804,9 @@ <ClInclude Include="..\tier0\fasttimer.h"> <Filter>sdk\tier0</Filter> </ClInclude> + <ClInclude Include="..\rtech\stryder\stryder.h"> + <Filter>sdk\rtech\stryder</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <ClCompile Include="..\client\IVEngineClient.cpp"> @@ -854,9 +857,6 @@ <ClCompile Include="..\public\bansystem.cpp"> <Filter>sdk\public</Filter> </ClCompile> - <ClCompile Include="..\rtech\stryder.cpp"> - <Filter>sdk\rtech</Filter> - </ClCompile> <ClCompile Include="..\rtech\rtech_utils.cpp"> <Filter>sdk\rtech</Filter> </ClCompile> @@ -1007,6 +1007,9 @@ <ClCompile Include="..\tier0\fasttimer.cpp"> <Filter>sdk\tier0</Filter> </ClCompile> + <ClCompile Include="..\rtech\stryder\stryder.cpp"> + <Filter>sdk\rtech\stryder</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <None Include="..\Dedicated.def" /> diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index 1d3dccdb..9201a16f 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -71,7 +71,8 @@ <ClCompile Include="..\public\utility.cpp" /> <ClCompile Include="..\rtech\rtech_utils.cpp" /> <ClCompile Include="..\rtech\rtech_game.cpp" /> - <ClCompile Include="..\rtech\stryder.cpp" /> + <ClCompile Include="..\rtech\rui\rui.cpp" /> + <ClCompile Include="..\rtech\stryder\stryder.cpp" /> <ClCompile Include="..\server\IVEngineServer.cpp" /> <ClCompile Include="..\server\server.cpp" /> <ClCompile Include="..\squirrel\sqapi.cpp" /> @@ -184,7 +185,8 @@ <ClInclude Include="..\core\resource.h" /> <ClInclude Include="..\rtech\rtech_utils.h" /> <ClInclude Include="..\rtech\rtech_game.h" /> - <ClInclude Include="..\rtech\stryder.h" /> + <ClInclude Include="..\rtech\rui\rui.h" /> + <ClInclude Include="..\rtech\stryder\stryder.h" /> <ClInclude Include="..\server\IVEngineServer.h" /> <ClInclude Include="..\server\server.h" /> <ClInclude Include="..\squirrel\sqapi.h" /> diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index ecd83f31..3fa09ec5 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -160,6 +160,12 @@ <Filter Include="thirdparty\lzham\lzhamdecomp\include"> <UniqueIdentifier>{3446634c-a632-4281-a500-459a56668a6b}</UniqueIdentifier> </Filter> + <Filter Include="sdk\rtech\rui"> + <UniqueIdentifier>{3f399cbb-a487-4562-b651-f8ce846e5f94}</UniqueIdentifier> + </Filter> + <Filter Include="sdk\rtech\stryder"> + <UniqueIdentifier>{2535a97c-967a-40af-bb52-02033747b4f0}</UniqueIdentifier> + </Filter> </ItemGroup> <ItemGroup> <ClCompile Include="..\client\client.cpp"> @@ -210,9 +216,6 @@ <ClCompile Include="..\rtech\rtech_utils.cpp"> <Filter>sdk\rtech</Filter> </ClCompile> - <ClCompile Include="..\rtech\stryder.cpp"> - <Filter>sdk\rtech</Filter> - </ClCompile> <ClCompile Include="..\inputsystem\inputsystem.cpp"> <Filter>sdk\inputsystem</Filter> </ClCompile> @@ -408,6 +411,12 @@ <ClCompile Include="..\tier0\fasttimer.cpp"> <Filter>sdk\tier0</Filter> </ClCompile> + <ClCompile Include="..\rtech\rui\rui.cpp"> + <Filter>sdk\rtech\rui</Filter> + </ClCompile> + <ClCompile Include="..\rtech\stryder\stryder.cpp"> + <Filter>sdk\rtech\stryder</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\client\cdll_engine_int.h"> @@ -470,9 +479,6 @@ <ClInclude Include="..\rtech\rtech_utils.h"> <Filter>sdk\rtech</Filter> </ClInclude> - <ClInclude Include="..\rtech\stryder.h"> - <Filter>sdk\rtech</Filter> - </ClInclude> <ClInclude Include="..\inputsystem\inputsystem.h"> <Filter>sdk\inputsystem</Filter> </ClInclude> @@ -1166,6 +1172,12 @@ <ClInclude Include="..\tier0\cpu.h"> <Filter>sdk\tier0</Filter> </ClInclude> + <ClInclude Include="..\rtech\rui\rui.h"> + <Filter>sdk\rtech\rui</Filter> + </ClInclude> + <ClInclude Include="..\rtech\stryder\stryder.h"> + <Filter>sdk\rtech\stryder</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png">