From ddfdb4ffd88b47de937bfb7e0f53d522a90f07f9 Mon Sep 17 00:00:00 2001
From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com>
Date: Tue, 17 May 2022 23:00:30 +0200
Subject: [PATCH] See description

Add '-nodiscord' and '-nobakedparticles' to launch params for dedicated.
Add hook for 'MemAlloc_Internal()'.
Rename loggers to be more consistent with naming.
Revert omitting frame pointers.
---
 r5dev/core/init.cpp                   |  8 ++++++--
 r5dev/core/logdef.cpp                 | 16 ++++++++--------
 r5dev/engine/net.cpp                  |  4 ++--
 r5dev/engine/sys_utils.cpp            |  6 +++---
 r5dev/filesystem/basefilesystem.cpp   |  2 +-
 r5dev/launcher/launcher.cpp           |  6 ++++--
 r5dev/launcher/launcher.h             |  4 ++--
 r5dev/squirrel/sqvm.cpp               |  4 ++--
 r5dev/tier0/tslist.cpp                | 17 +++++++++++++++++
 r5dev/tier0/tslist.h                  | 10 ++++++----
 r5dev/tier1/IConVar.cpp               |  4 ++--
 r5dev/tier1/cmd.cpp                   |  2 +-
 r5dev/vphysics/QHull.cpp              |  2 +-
 r5dev/vproj/clientsdk.vcxproj         |  3 ++-
 r5dev/vproj/clientsdk.vcxproj.filters |  3 +++
 r5dev/vproj/dedicated.vcxproj         |  2 ++
 r5dev/vproj/dedicated.vcxproj.filters |  3 +++
 r5dev/vproj/gamesdk.vcxproj           |  3 ++-
 r5dev/vproj/gamesdk.vcxproj.filters   |  3 +++
 19 files changed, 70 insertions(+), 32 deletions(-)
 create mode 100644 r5dev/tier0/tslist.cpp

diff --git a/r5dev/core/init.cpp b/r5dev/core/init.cpp
index 54ff50bd..13635e78 100644
--- a/r5dev/core/init.cpp
+++ b/r5dev/core/init.cpp
@@ -142,7 +142,9 @@ void Systems_Init()
 	DetourUpdateThread(GetCurrentThread());
 
 	// Hook functions
-	Launcher_Attatch();
+	//TSList_Attach();
+
+	Launcher_Attach();
 	IApplication_Attach();
 #ifdef DEDICATED
 	//PRX_Attach();
@@ -257,7 +259,9 @@ void Systems_Shutdown()
 	DetourUpdateThread(GetCurrentThread());
 
 	// Unhook functions
-	Launcher_Detatch();
+	//TSList_Detach();
+
+	Launcher_Detach();
 	IApplication_Detach();
 #ifdef DEDICATED
 	//PRX_Detach();
diff --git a/r5dev/core/logdef.cpp b/r5dev/core/logdef.cpp
index 63e86c29..36df6c9d 100644
--- a/r5dev/core/logdef.cpp
+++ b/r5dev/core/logdef.cpp
@@ -45,14 +45,14 @@ void SpdLog_Init(void)
 	 * ROTATE LOGGER SETUP  *
 	 ************************/
 	{
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_warn_logger", "platform\\logs\\sqvm_warn.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_print_logger", "platform\\logs\\sqvm_print.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("dev_message_logger", "platform\\logs\\dev_message.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("warn_message_logger", "platform\\logs\\sdk_warn.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("error_message_logger", "platform\\logs\\sdk_error.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("qhull_debug_logger",   "platform\\logs\\qhull_print.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("netchan_packet_logger", "platform\\logs\\net_trace.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
-		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("filesystem_warn_logger", "platform\\logs\\fs_warn.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_warn" , "platform\\logs\\sqvm_warn.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_info" , "platform\\logs\\sqvm_info.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_info"  , "platform\\logs\\sdk_info.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_warn"  , "platform\\logs\\sdk_warn.log"  , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sdk_error" , "platform\\logs\\sdk_error.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("qhull_info", "platform\\logs\\qhull_info.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("net_trace" , "platform\\logs\\net_trace.log" , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
+		spdlog::rotating_logger_mt<spdlog::synchronous_factory>("fs_warn"   , "platform\\logs\\fs_warn.log"   , SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
 	}
 
 	spdlog::set_level(spdlog::level::trace);
diff --git a/r5dev/engine/net.cpp b/r5dev/engine/net.cpp
index 31707326..b4265159 100644
--- a/r5dev/engine/net.cpp
+++ b/r5dev/engine/net.cpp
@@ -33,7 +33,7 @@ bool NET_ReceiveDatagram(int iSocket, netpacket_s* pInpacket, bool bEncrypted)
 	if (result && net_tracePayload->GetBool())
 	{
 		// Log received packet data.
-		HexDump("[+] NET_ReceiveDatagram", "netchan_packet_logger", &pInpacket->pData[NULL], pInpacket->wiresize);
+		HexDump("[+] NET_ReceiveDatagram", "net_trace", &pInpacket->pData[NULL], pInpacket->wiresize);
 	}
 	return result;
 }
@@ -53,7 +53,7 @@ int NET_SendDatagram(SOCKET s, void* pPayload, int iLenght, v_netadr_t* pAdr, bo
 	if (result && net_tracePayload->GetBool())
 	{
 		// Log transmitted packet data.
-		HexDump("[+] NET_SendDatagram", "netchan_packet_logger", pPayload, iLenght);
+		HexDump("[+] NET_SendDatagram", "net_trace", pPayload, iLenght);
 	}
 	return result;
 }
diff --git a/r5dev/engine/sys_utils.cpp b/r5dev/engine/sys_utils.cpp
index bfed0bd1..f3a32848 100644
--- a/r5dev/engine/sys_utils.cpp
+++ b/r5dev/engine/sys_utils.cpp
@@ -105,7 +105,7 @@ void DevMsg(eDLL_T idx, const char* fmt, ...)
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("dev_message_logger");
+	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sdk_info");
 
 	s_LogMutex.lock();
 	{/////////////////////////////
@@ -213,7 +213,7 @@ void Warning(eDLL_T idx, const char* fmt, ...)
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("warn_message_logger");
+	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sdk_warn");
 
 	s_LogMutex.lock();
 	{/////////////////////////////
@@ -290,7 +290,7 @@ void Error(eDLL_T idx, const char* fmt, ...)
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("error_message_logger");
+	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sdk_error");
 
 	s_LogMutex.lock();
 	{/////////////////////////////
diff --git a/r5dev/filesystem/basefilesystem.cpp b/r5dev/filesystem/basefilesystem.cpp
index 65e88e26..bd4c217f 100644
--- a/r5dev/filesystem/basefilesystem.cpp
+++ b/r5dev/filesystem/basefilesystem.cpp
@@ -72,7 +72,7 @@ void CBaseFileSystem::Warning(CBaseFileSystem* pFileSystem, FileWarningLevel_t l
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> fslogger = spdlog::get("filesystem_warn_logger");
+	static std::shared_ptr<spdlog::logger> fslogger = spdlog::get("fs_warn");
 
 	{/////////////////////////////
 		va_list args{};
diff --git a/r5dev/launcher/launcher.cpp b/r5dev/launcher/launcher.cpp
index e0e90c82..606f6cab 100644
--- a/r5dev/launcher/launcher.cpp
+++ b/r5dev/launcher/launcher.cpp
@@ -78,8 +78,10 @@ void AppendSDKParametersPreInit()
 	CommandLine()->AppendParm("-collate", "");
 	CommandLine()->AppendParm("-multiple", "");
 	CommandLine()->AppendParm("-noorigin", "");
+	CommandLine()->AppendParm("-nodiscord", "");
 	CommandLine()->AppendParm("-novid", "");
 	CommandLine()->AppendParm("-noshaderapi", "");
+	CommandLine()->AppendParm("-nobakedparticles", "");
 	CommandLine()->AppendParm("-nosound", "");
 	CommandLine()->AppendParm("-nojoy", "");
 	CommandLine()->AppendParm("-nomouse", "");
@@ -159,7 +161,7 @@ const char* ExitCodeToString(int nCode)
 	}
 }
 
-void Launcher_Attatch()
+void Launcher_Attach()
 {
 	DetourAttach((LPVOID*)&v_WinMain, &HWinMain);
 	DetourAttach((LPVOID*)&v_LauncherMain, &LauncherMain);
@@ -168,7 +170,7 @@ void Launcher_Attatch()
 #endif
 }
 
-void Launcher_Detatch()
+void Launcher_Detach()
 {
 	DetourDetach((LPVOID*)&v_WinMain, &HWinMain);
 	DetourDetach((LPVOID*)&v_LauncherMain, &LauncherMain);
diff --git a/r5dev/launcher/launcher.h b/r5dev/launcher/launcher.h
index bb30e854..1ca0cc75 100644
--- a/r5dev/launcher/launcher.h
+++ b/r5dev/launcher/launcher.h
@@ -17,8 +17,8 @@ string LoadConfigFile(const string& svConfig);
 void ParseAndApplyConfigFile(const string& svConfig);
 const char* ExitCodeToString(int nCode);
 
-void Launcher_Attatch();
-void Launcher_Detatch();
+void Launcher_Attach();
+void Launcher_Detach();
 
 ///////////////////////////////////////////////////////////////////////////////
 class VLauncher : public IDetour
diff --git a/r5dev/squirrel/sqvm.cpp b/r5dev/squirrel/sqvm.cpp
index cae6c735..f0a61d35 100644
--- a/r5dev/squirrel/sqvm.cpp
+++ b/r5dev/squirrel/sqvm.cpp
@@ -59,7 +59,7 @@ SQRESULT HSQVM_PrintFunc(HSQUIRRELVM v, SQChar* fmt, ...)
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_print_logger");
+	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_info");
 
 	s_LogMutex.lock();
 	{/////////////////////////////
@@ -187,7 +187,7 @@ SQRESULT HSQVM_WarningFunc(HSQUIRRELVM v, SQInteger a2, SQInteger a3, SQInteger*
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_warn_logger");
+	static std::shared_ptr<spdlog::logger> sqlogger = spdlog::get("sqvm_warn");
 
 	std::string vmStr = SQVM_LOG_T[static_cast<int>(context)].c_str();
 	std::string svConstructor(*ppString, *nStringSize); // Get string from memory via std::string constructor.
diff --git a/r5dev/tier0/tslist.cpp b/r5dev/tier0/tslist.cpp
new file mode 100644
index 00000000..42b7b0c4
--- /dev/null
+++ b/r5dev/tier0/tslist.cpp
@@ -0,0 +1,17 @@
+#include "core/stdafx.h"
+#include "tier0/tslist.h"
+
+void* MemAlloc_Internal(void* pPool, int64_t nSize)
+{
+	return v_MemAlloc_Internal(pPool, nSize);
+}
+
+void TSList_Attach()
+{
+	DetourAttach((LPVOID*)&v_MemAlloc_Internal, &MemAlloc_Internal);
+}
+
+void TSList_Detach()
+{
+	DetourDetach((LPVOID*)&v_MemAlloc_Internal, &MemAlloc_Internal);
+}
\ No newline at end of file
diff --git a/r5dev/tier0/tslist.h b/r5dev/tier0/tslist.h
index f497ea78..6c1771db 100644
--- a/r5dev/tier0/tslist.h
+++ b/r5dev/tier0/tslist.h
@@ -2,16 +2,18 @@
 #define TSLIST_H
 
 inline CMemory p_MemAlloc_Internal;
-inline auto malloc_internal = p_MemAlloc_Internal.RCast<void* (*)(void* pBool, int64_t nSize)>();
+inline auto v_MemAlloc_Internal = p_MemAlloc_Internal.RCast<void* (*)(void* pPool, int64_t nSize)>();
 
 inline CMemory p_MemAlloc_Wrapper;
-inline auto MemAlloc_Wrapper = p_MemAlloc_Wrapper.RCast<void* (*)(size_t)>();
+inline auto v_MemAlloc_Wrapper = p_MemAlloc_Wrapper.RCast<void* (*)(size_t)>();
 
 inline CMemory p_CTSListBase_Wrapper;
 inline auto CTSListBase_Wrapper = p_CTSListBase_Wrapper.RCast<void* (*)(void)>();
 
 inline CMemory g_pMallocPool;
 
+void TSList_Attach();
+void TSList_Detach();
 ///////////////////////////////////////////////////////////////////////////////
 class VTSListBase : public IDetour
 {
@@ -36,8 +38,8 @@ class VTSListBase : public IDetour
 		p_CTSListBase_Wrapper = g_mGameDll.FindPatternSIMD(reinterpret_cast<rsig_t>("\x40\x53\x48\x83\xEC\x20\xBB\x00\x00\x00\x00\x33\xC0"), "xxxxxxx????xx");
 
 		CTSListBase_Wrapper = p_CTSListBase_Wrapper.RCast<void* (*)(void)>();     /*40 53 48 83 EC 20 BB ?? ?? ?? ?? 33 C0*/
-		MemAlloc_Wrapper = p_MemAlloc_Wrapper.RCast<void* (*)(size_t)>();         /*40 53 48 83 EC 20 48 8B 05 6B 83 25 0D 48 8B D9*/
-		malloc_internal = p_MemAlloc_Internal.RCast<void* (*)(void*, int64_t)>(); /*E9 ?? ?? ?? ?? CC CC CC 40 53 48 83 EC 20 48 8D 05 ?? ?? ?? ??*/
+		v_MemAlloc_Wrapper = p_MemAlloc_Wrapper.RCast<void* (*)(size_t)>();         /*40 53 48 83 EC 20 48 8B 05 6B 83 25 0D 48 8B D9*/
+		v_MemAlloc_Internal = p_MemAlloc_Internal.RCast<void* (*)(void*, int64_t)>(); /*E9 ?? ?? ?? ?? CC CC CC 40 53 48 83 EC 20 48 8D 05 ?? ?? ?? ??*/
 	}
 	virtual void GetVar(void) const
 	{
diff --git a/r5dev/tier1/IConVar.cpp b/r5dev/tier1/IConVar.cpp
index 289591e4..79a1b0b3 100644
--- a/r5dev/tier1/IConVar.cpp
+++ b/r5dev/tier1/IConVar.cpp
@@ -18,8 +18,8 @@
 //-----------------------------------------------------------------------------
 ConVar::ConVar(const char* pszName, const char* pszDefaultValue, int nFlags, const char* pszHelpString, bool bMin, float fMin, bool bMax, float fMax, void* pCallback, const char* pszUsageString)
 {
-	ConVar* pNewConVar = reinterpret_cast<ConVar*>(MemAlloc_Wrapper(sizeof(ConVar))); // Allocate new memory with StdMemAlloc else we crash.
-	memset(pNewConVar, '\0', sizeof(ConVar));                                         // Set all to null.
+	ConVar* pNewConVar = reinterpret_cast<ConVar*>(v_MemAlloc_Wrapper(sizeof(ConVar))); // Allocate new memory with StdMemAlloc else we crash.
+	memset(pNewConVar, '\0', sizeof(ConVar));                                           // Set all to null.
 
 	pNewConVar->m_pConCommandBaseVTable = g_pConVarVtable.RCast<void*>();
 	pNewConVar->m_pIConVarVTable = g_pIConVarVtable.RCast<void*>();
diff --git a/r5dev/tier1/cmd.cpp b/r5dev/tier1/cmd.cpp
index 5948402c..138fdce5 100644
--- a/r5dev/tier1/cmd.cpp
+++ b/r5dev/tier1/cmd.cpp
@@ -98,7 +98,7 @@ bool CCommand::HasOnlyDigits(int nIndex) const
 //-----------------------------------------------------------------------------
 ConCommand::ConCommand(const char* pszName, const char* pszHelpString, int nFlags, void* pCallback, void* pCommandCompletionCallback)
 {
-	ConCommand* pCommand = reinterpret_cast<ConCommand*>(MemAlloc_Wrapper(sizeof(ConCommand))); // Allocate new memory with StdMemAlloc else we crash.
+	ConCommand* pCommand = reinterpret_cast<ConCommand*>(v_MemAlloc_Wrapper(sizeof(ConCommand))); // Allocate new memory with StdMemAlloc else we crash.
 	memset(pCommand, '\0', sizeof(ConCommand)); // Set all to null.
 
 	pCommand->m_pConCommandBaseVTable = g_pConCommandVtable.RCast<void*>();
diff --git a/r5dev/vphysics/QHull.cpp b/r5dev/vphysics/QHull.cpp
index 9e7f8776..f1decd0f 100644
--- a/r5dev/vphysics/QHull.cpp
+++ b/r5dev/vphysics/QHull.cpp
@@ -15,7 +15,7 @@ int HQHull_PrintFunc(const char* fmt, ...)
 
 	static std::shared_ptr<spdlog::logger> iconsole = spdlog::get("game_console");
 	static std::shared_ptr<spdlog::logger> wconsole = spdlog::get("win_console");
-	static std::shared_ptr<spdlog::logger> qhlogger = spdlog::get("qhull_debug_logger");
+	static std::shared_ptr<spdlog::logger> qhlogger = spdlog::get("qhull_info");
 
 	s_LogMutex.lock();
 	{/////////////////////////////
diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj
index 8fbc7982..c8ce73fc 100644
--- a/r5dev/vproj/clientsdk.vcxproj
+++ b/r5dev/vproj/clientsdk.vcxproj
@@ -89,6 +89,7 @@
     <ClCompile Include="..\tier0\cputopology.cpp" />
     <ClCompile Include="..\tier0\fasttimer.cpp" />
     <ClCompile Include="..\tier0\jobthread.cpp" />
+    <ClCompile Include="..\tier0\tslist.cpp" />
     <ClCompile Include="..\tier1\bitbuf.cpp" />
     <ClCompile Include="..\tier1\cmd.cpp" />
     <ClCompile Include="..\tier1\cvar.cpp" />
@@ -547,7 +548,7 @@
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <DisableSpecificWarnings>
       </DisableSpecificWarnings>
-      <OmitFramePointers>true</OmitFramePointers>
+      <OmitFramePointers>false</OmitFramePointers>
       <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <LanguageStandard_C>stdc17</LanguageStandard_C>
diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters
index 51a6d9b6..9f0d706b 100644
--- a/r5dev/vproj/clientsdk.vcxproj.filters
+++ b/r5dev/vproj/clientsdk.vcxproj.filters
@@ -486,6 +486,9 @@
     <ClCompile Include="..\engine\clockdriftmgr.cpp">
       <Filter>sdk\engine</Filter>
     </ClCompile>
+    <ClCompile Include="..\tier0\tslist.cpp">
+      <Filter>sdk\tier0</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\client\cdll_engine_int.h">
diff --git a/r5dev/vproj/dedicated.vcxproj b/r5dev/vproj/dedicated.vcxproj
index d51f858a..e0bced32 100644
--- a/r5dev/vproj/dedicated.vcxproj
+++ b/r5dev/vproj/dedicated.vcxproj
@@ -101,6 +101,7 @@
       <StringPooling>true</StringPooling>
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <LanguageStandard_C>stdc17</LanguageStandard_C>
+      <OmitFramePointers>false</OmitFramePointers>
     </ClCompile>
     <Link>
       <SubSystem>Console</SubSystem>
@@ -496,6 +497,7 @@
     <ClCompile Include="..\tier0\cputopology.cpp" />
     <ClCompile Include="..\tier0\fasttimer.cpp" />
     <ClCompile Include="..\tier0\jobthread.cpp" />
+    <ClCompile Include="..\tier0\tslist.cpp" />
     <ClCompile Include="..\tier1\bitbuf.cpp" />
     <ClCompile Include="..\tier1\cmd.cpp" />
     <ClCompile Include="..\tier1\cvar.cpp" />
diff --git a/r5dev/vproj/dedicated.vcxproj.filters b/r5dev/vproj/dedicated.vcxproj.filters
index 6e35170b..5ee867fb 100644
--- a/r5dev/vproj/dedicated.vcxproj.filters
+++ b/r5dev/vproj/dedicated.vcxproj.filters
@@ -1325,6 +1325,9 @@
     <ClCompile Include="..\engine\clockdriftmgr.cpp">
       <Filter>sdk\engine</Filter>
     </ClCompile>
+    <ClCompile Include="..\tier0\tslist.cpp">
+      <Filter>sdk\tier0</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="..\Dedicated.def" />
diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj
index e42dbfd6..2b2d2dfa 100644
--- a/r5dev/vproj/gamesdk.vcxproj
+++ b/r5dev/vproj/gamesdk.vcxproj
@@ -97,6 +97,7 @@
     <ClCompile Include="..\tier0\cputopology.cpp" />
     <ClCompile Include="..\tier0\fasttimer.cpp" />
     <ClCompile Include="..\tier0\jobthread.cpp" />
+    <ClCompile Include="..\tier0\tslist.cpp" />
     <ClCompile Include="..\tier1\bitbuf.cpp" />
     <ClCompile Include="..\tier1\cmd.cpp" />
     <ClCompile Include="..\tier1\cvar.cpp" />
@@ -566,7 +567,7 @@
       <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
       <DisableSpecificWarnings>
       </DisableSpecificWarnings>
-      <OmitFramePointers>true</OmitFramePointers>
+      <OmitFramePointers>false</OmitFramePointers>
       <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
       <LanguageStandard_C>stdc17</LanguageStandard_C>
diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters
index 779d1e00..49c5e3db 100644
--- a/r5dev/vproj/gamesdk.vcxproj.filters
+++ b/r5dev/vproj/gamesdk.vcxproj.filters
@@ -516,6 +516,9 @@
     <ClCompile Include="..\engine\clockdriftmgr.cpp">
       <Filter>sdk\engine</Filter>
     </ClCompile>
+    <ClCompile Include="..\tier0\tslist.cpp">
+      <Filter>sdk\tier0</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\client\cdll_engine_int.h">