diff --git a/r5dev/core/init.cpp b/r5dev/core/init.cpp index c4e2ac07..b19ab519 100644 --- a/r5dev/core/init.cpp +++ b/r5dev/core/init.cpp @@ -86,6 +86,9 @@ #include "engine/sys_engine.h" #include "engine/sys_utils.h" #include "engine/sys_getmodes.h" +#ifndef DEDICATED +#include "engine/sys_mainwind.h" +#endif // !DEDICATED #include "engine/gl_matsysiface.h" #include "engine/gl_screen.h" #ifndef DEDICATED @@ -214,6 +217,9 @@ void Systems_Init() SysDll_Attach(); SysDll2_Attach(); SysUtils_Attach(); +#ifndef DEDICATED + SysGame_Attach(); +#endif // !DEDICATED #ifndef DEDICATED HCVideoMode_Common_Attach(); @@ -343,6 +349,9 @@ void Systems_Shutdown() SysDll_Detach(); SysDll2_Detach(); SysUtils_Detach(); +#ifndef DEDICATED + SysGame_Detach(); +#endif // DEDICATED #ifndef DEDICATED HCVideoMode_Common_Detach(); diff --git a/r5dev/engine/sys_mainwind.cpp b/r5dev/engine/sys_mainwind.cpp new file mode 100644 index 00000000..d058cfc2 --- /dev/null +++ b/r5dev/engine/sys_mainwind.cpp @@ -0,0 +1,30 @@ +//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======// +// +// Purpose: +// +//===========================================================================// +#include "core/stdafx.h" +#include "tier0/commandline.h" +#include "engine/sys_mainwind.h" + +//----------------------------------------------------------------------------- +// Purpose: plays the startup video's +//----------------------------------------------------------------------------- +void CGame::PlayStartupVideos(void) +{ + if (!CommandLine()->CheckParm("-novid")) + { + v_CGame__PlayStartupVideos(); + } +} + +/////////////////////////////////////////////////////////////////////////////// +void SysGame_Attach() +{ + DetourAttach((LPVOID*)&v_CGame__PlayStartupVideos, &CGame::PlayStartupVideos); +} + +void SysGame_Detach() +{ + DetourDetach((LPVOID*)&v_CGame__PlayStartupVideos, &CGame::PlayStartupVideos); +} \ No newline at end of file diff --git a/r5dev/engine/sys_mainwind.h b/r5dev/engine/sys_mainwind.h new file mode 100644 index 00000000..7775910f --- /dev/null +++ b/r5dev/engine/sys_mainwind.h @@ -0,0 +1,46 @@ +//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======// +// +// Purpose: +// +//===========================================================================// +#include "public/igame.h" + +inline CMemory p_CGame__PlayStartupVideos; +inline auto v_CGame__PlayStartupVideos = p_CGame__PlayStartupVideos.RCast<void (*)(void)>(); +//----------------------------------------------------------------------------- +// Purpose: Main game interface, including message pump and window creation +//----------------------------------------------------------------------------- +class CGame : public IGame +{ +public: + static void PlayStartupVideos(void); +}; + +void SysGame_Attach(); +void SysGame_Detach(); + +/////////////////////////////////////////////////////////////////////////////// +class VGame : public IDetour +{ + virtual void GetAdr(void) const + { + spdlog::debug("| FUN: CGame::PlayStartupVideos : {:#18x} |\n", p_CGame__PlayStartupVideos.GetPtr()); + spdlog::debug("+----------------------------------------------------------------+\n"); + } + virtual void GetFun(void) const + { +#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) + p_CGame__PlayStartupVideos = g_GameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x8B\xC4\x48\x81\xEC\x00\x00\x00\x00\x80\x3D\x00\x00\x00\x00\x00\x0F\x85\x00\x00\x00\x00\x48\x8B\x0D\x00\x00\x00\x00"), "xxxxxx????xx?????xx????xxx????"); +#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3) + p_CGame__PlayStartupVideos = g_GameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x48\x8B\xC4\x55\x48\x8D\xA8\x00\x00\x00\x00\x48\x81\xEC\x00\x00\x00\x00\x80\x3D\x00\x00\x00\x00\x00"), "xxxxxxx????xxx????xx?????"); +#endif + v_CGame__PlayStartupVideos = p_CGame__PlayStartupVideos.RCast<void (*)(void)>(); + } + virtual void GetVar(void) const { } + virtual void GetCon(void) const { } + virtual void Attach(void) const { } + virtual void Detach(void) const { } +}; +/////////////////////////////////////////////////////////////////////////////// + +REGISTER(VGame); \ No newline at end of file diff --git a/r5dev/public/icommandline.h b/r5dev/public/icommandline.h index 1d60ebf3..fe509da0 100644 --- a/r5dev/public/icommandline.h +++ b/r5dev/public/icommandline.h @@ -10,16 +10,16 @@ public: virtual const char* GetCmdLine(void) const = 0; - virtual const char* CheckParm(const char* psz, const char** ppszValue = NULL) const = 0; + virtual const char* CheckParm(const char* pszParm, const char** ppszValue = NULL) const = 0; virtual void RemoveParm(const char* pszParm) = 0; virtual void AppendParm(const char* pszParm, const char* pszValues) = 0; - virtual const char* ParmValue(const char* psz, const char* pDefaultVal = NULL) const = 0; - virtual int ParmValue(const char* psz, int nDefaultVal) const = 0; - virtual float ParmValue(const char* psz, float flDefaultVal) const = 0; + virtual const char* ParmValue(const char* pszParm, const char* pDefaultVal = NULL) const = 0; + virtual int ParmValue(const char* pszParm, int nDefaultVal) const = 0; + virtual float ParmValue(const char* pszParm, float flDefaultVal) const = 0; virtual int ParmCount(void) const = 0; - virtual int FindParm(const char* psz) const = 0; + virtual int FindParm(const char* pszParm) const = 0; virtual const char* GetParm(int nIndex) const = 0; virtual bool GuardLocked(void) const = 0; // True = mutex locked. virtual void SetParm(int nIndex, char const* pParm) = 0; diff --git a/r5dev/public/igame.h b/r5dev/public/igame.h new file mode 100644 index 00000000..c7dfaaf7 --- /dev/null +++ b/r5dev/public/igame.h @@ -0,0 +1,19 @@ +//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======// +// +// Purpose: +// +// $Workfile: $ +// $Date: $ +// $NoKeywords: $ +//===========================================================================// +#ifndef IGAME_H +#define IGAME_H + +class IGame +{ +public: + virtual ~IGame(void) { } + // TODO // +}; + +#endif // IGAME_H \ No newline at end of file diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj index 4d3d1c2d..9dc45183 100644 --- a/r5dev/vproj/clientsdk.vcxproj +++ b/r5dev/vproj/clientsdk.vcxproj @@ -49,6 +49,7 @@ <ClCompile Include="..\engine\sys_dll2.cpp" /> <ClCompile Include="..\engine\sys_engine.cpp" /> <ClCompile Include="..\engine\sys_getmodes.cpp" /> + <ClCompile Include="..\engine\sys_mainwind.cpp" /> <ClCompile Include="..\engine\sys_utils.cpp" /> <ClCompile Include="..\filesystem\basefilesystem.cpp" /> <ClCompile Include="..\filesystem\filesystem.cpp" /> @@ -197,6 +198,7 @@ <ClInclude Include="..\engine\sys_dll2.h" /> <ClInclude Include="..\engine\sys_engine.h" /> <ClInclude Include="..\engine\sys_getmodes.h" /> + <ClInclude Include="..\engine\sys_mainwind.h" /> <ClInclude Include="..\engine\sys_utils.h" /> <ClInclude Include="..\filesystem\basefilesystem.h" /> <ClInclude Include="..\filesystem\filesystem.h" /> @@ -265,6 +267,7 @@ <ClInclude Include="..\public\ifile.h" /> <ClInclude Include="..\public\ifilesystem.h" /> <ClInclude Include="..\public\iframetask.h" /> + <ClInclude Include="..\public\igame.h" /> <ClInclude Include="..\public\ihandleentity.h" /> <ClInclude Include="..\public\inetchannel.h" /> <ClInclude Include="..\public\inetmessage.h" /> diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters index 607c2890..085c791e 100644 --- a/r5dev/vproj/clientsdk.vcxproj.filters +++ b/r5dev/vproj/clientsdk.vcxproj.filters @@ -597,6 +597,9 @@ <ClCompile Include="..\engine\client\cl_ents_parse.cpp"> <Filter>sdk\engine\client</Filter> </ClCompile> + <ClCompile Include="..\engine\sys_mainwind.cpp"> + <Filter>sdk\engine</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\client\cdll_engine_int.h"> @@ -1760,6 +1763,12 @@ <ClInclude Include="..\engine\client\cl_ents_parse.h"> <Filter>sdk\engine\client</Filter> </ClInclude> + <ClInclude Include="..\engine\sys_mainwind.h"> + <Filter>sdk\engine</Filter> + </ClInclude> + <ClInclude Include="..\public\igame.h"> + <Filter>sdk\public</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png"> diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index d77e2633..30a1dcf6 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -51,6 +51,7 @@ <ClCompile Include="..\engine\sys_dll2.cpp" /> <ClCompile Include="..\engine\sys_engine.cpp" /> <ClCompile Include="..\engine\sys_getmodes.cpp" /> + <ClCompile Include="..\engine\sys_mainwind.cpp" /> <ClCompile Include="..\engine\sys_utils.cpp" /> <ClCompile Include="..\filesystem\basefilesystem.cpp" /> <ClCompile Include="..\filesystem\filesystem.cpp" /> @@ -209,6 +210,7 @@ <ClInclude Include="..\engine\sys_dll2.h" /> <ClInclude Include="..\engine\sys_engine.h" /> <ClInclude Include="..\engine\sys_getmodes.h" /> + <ClInclude Include="..\engine\sys_mainwind.h" /> <ClInclude Include="..\engine\sys_utils.h" /> <ClInclude Include="..\filesystem\basefilesystem.h" /> <ClInclude Include="..\filesystem\filesystem.h" /> @@ -290,6 +292,7 @@ <ClInclude Include="..\public\ifile.h" /> <ClInclude Include="..\public\ifilesystem.h" /> <ClInclude Include="..\public\iframetask.h" /> + <ClInclude Include="..\public\igame.h" /> <ClInclude Include="..\public\ihandleentity.h" /> <ClInclude Include="..\public\inetchannel.h" /> <ClInclude Include="..\public\inetmessage.h" /> diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index b678ae2c..d313f57f 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -636,6 +636,9 @@ <ClCompile Include="..\engine\client\cl_ents_parse.cpp"> <Filter>sdk\engine\client</Filter> </ClCompile> + <ClCompile Include="..\engine\sys_mainwind.cpp"> + <Filter>sdk\engine</Filter> + </ClCompile> </ItemGroup> <ItemGroup> <ClInclude Include="..\client\cdll_engine_int.h"> @@ -1847,6 +1850,12 @@ <ClInclude Include="..\engine\client\cl_ents_parse.h"> <Filter>sdk\engine\client</Filter> </ClInclude> + <ClInclude Include="..\engine\sys_mainwind.h"> + <Filter>sdk\engine</Filter> + </ClInclude> + <ClInclude Include="..\public\igame.h"> + <Filter>sdk\public</Filter> + </ClInclude> </ItemGroup> <ItemGroup> <Image Include="..\shared\resource\lockedserver.png">