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">