diff --git a/r5dev/core/init.cpp b/r5dev/core/init.cpp
index c2e311cb..8e955f89 100644
--- a/r5dev/core/init.cpp
+++ b/r5dev/core/init.cpp
@@ -382,7 +382,6 @@ void DetourRegister() // Register detour classes to be searched and hooked.
 	// Tier1
 	REGISTER(VCommandLine);
 	REGISTER(VConCommand);
-	REGISTER(VConVar);
 	REGISTER(VCVar);
 
 	// VPC
diff --git a/r5dev/launcher/IApplication.cpp b/r5dev/launcher/IApplication.cpp
index c573f345..4370aaea 100644
--- a/r5dev/launcher/IApplication.cpp
+++ b/r5dev/launcher/IApplication.cpp
@@ -40,7 +40,7 @@ bool CSourceAppSystemGroup::PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup
 {
 	ConVar::InitShipped();
 	ConVar::PurgeShipped();
-	ConCommand::Init();
+	ConCommand::StaticInit();
 	ConCommand::InitShipped();
 	ConCommand::PurgeShipped();
 	return CSourceAppSystemGroup__PreInit(pSourceAppSystemGroup);
diff --git a/r5dev/public/iconvar.h b/r5dev/public/iconvar.h
index 132ba219..6ef97a7d 100644
--- a/r5dev/public/iconvar.h
+++ b/r5dev/public/iconvar.h
@@ -129,7 +129,7 @@ typedef void (*FnChangeCallback_t)(IConVar* var, const char* pOldValue, float fl
 abstract_class IConVar
 {
 public:
-	virtual ~IConVar() = 0;
+	virtual ~IConVar() { };
 
 	// Value set
 	virtual void SetValue(const char* pValue) = 0;
diff --git a/r5dev/tier1/IConVar.cpp b/r5dev/tier1/IConVar.cpp
index 5112a229..9225a7b3 100644
--- a/r5dev/tier1/IConVar.cpp
+++ b/r5dev/tier1/IConVar.cpp
@@ -16,1092 +16,5 @@
 #include "public/iconvar.h"
 #include "public/iconcommand.h"
 
-//-----------------------------------------------------------------------------
-// Purpose: create
-//-----------------------------------------------------------------------------
-ConVar* ConVar::Create(const char* pszName, const char* pszDefaultValue, int nFlags, const char* pszHelpString, bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString)
-{
-	ConVar* pNewConVar = MemAllocSingleton()->Alloc<ConVar>(sizeof(ConVar)); // Allocate new memory with StdMemAlloc else we crash.
-	memset(pNewConVar, '\0', sizeof(ConVar));                                // Set all to null.
-
-	pNewConVar->m_pConCommandBaseVFTable = g_pConVarVBTable.RCast<IConCommandBase*>();
-	pNewConVar->m_pIConVarVFTable = g_pConVarVFTable.RCast<IConVar*>();
-
-	v_ConVar_Register(pNewConVar, pszName, pszDefaultValue, nFlags, pszHelpString, bMin, fMin, bMax, fMax, pCallback, pszUsageString);
-
-	return pNewConVar;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: destroy
-//-----------------------------------------------------------------------------
-void ConVar::Destroy(void)
-{
-	v_ConVar_Unregister(this);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: construct/allocate
-//-----------------------------------------------------------------------------
-ConVar::ConVar(void)
-	: m_pIConVarVFTable(nullptr)
-	, m_pParent(nullptr)
-	, m_pszDefaultValue(nullptr)
-	, m_bHasMin(false)
-	, m_fMinVal(0.f)
-	, m_bHasMax(false)
-	, m_fMaxVal(0.f)
-{
-	memset(&m_Value, '\0', sizeof(CVValue_t));
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: destructor
-//-----------------------------------------------------------------------------
-ConVar::~ConVar(void)
-{
-	if (m_Value.m_pszString)
-	{
-		MemAllocSingleton()->Free(m_Value.m_pszString);
-		m_Value.m_pszString = NULL;
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: initialize ConVar's
-//-----------------------------------------------------------------------------
-void ConVar::Init(void)
-{
-	//-------------------------------------------------------------------------
-	// ENGINE                                                                 |
-	hostdesc                       = ConVar::Create("hostdesc", "", FCVAR_RELEASE, "Host game server description.", false, 0.f, false, 0.f, nullptr, nullptr);
-	sdk_fixedframe_tickinterval    = ConVar::Create("sdk_fixedframe_tickinterval", "0.02", FCVAR_RELEASE, "The tick interval used by the SDK fixed frame.", false, 0.f, false, 0.f, nullptr, nullptr);
-	staticProp_defaultBuildFrustum = ConVar::Create("staticProp_defaultBuildFrustum", "0", FCVAR_DEVELOPMENTONLY, "Use the old solution for building static prop frustum culling.", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	cm_unset_all_cmdquery   = ConVar::Create("cm_unset_all_cmdquery"  , "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Returns false on every ConVar/ConCommand query ( !warning! ).", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	curl_debug      = ConVar::Create("curl_debug"     , "0" , FCVAR_DEVELOPMENTONLY, "Determines whether or not to enable curl debug logging.", false, 0.f, false, 0.f, nullptr, "1 = curl logs; 0 (zero) = no logs.");
-	curl_timeout    = ConVar::Create("curl_timeout"   , "15", FCVAR_DEVELOPMENTONLY, "Maximum time in seconds a curl transfer operation could take.", false, 0.f, false, 0.f, nullptr, nullptr);
-	ssl_verify_peer = ConVar::Create("ssl_verify_peer", "1" , FCVAR_DEVELOPMENTONLY, "Verify the authenticity of the peer's SSL certificate.", false, 0.f, false, 0.f, nullptr, "1 = curl verifies; 0 (zero) = no verification.");
-
-	rcon_address  = ConVar::Create("rcon_address",  "localhost", FCVAR_SERVER_CANNOT_QUERY | FCVAR_DONTRECORD | FCVAR_RELEASE, "Remote server access address.", false, 0.f, false, 0.f, nullptr, nullptr);
-	rcon_password = ConVar::Create("rcon_password", ""         , FCVAR_SERVER_CANNOT_QUERY | FCVAR_DONTRECORD | FCVAR_RELEASE, "Remote server access password (rcon is disabled if empty).", false, 0.f, false, 0.f, &RCON_PasswordChanged_f, nullptr);
-
-	r_debug_overlay_nodecay        = ConVar::Create("r_debug_overlay_nodecay"       , "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Keeps all debug overlays alive regardless of their lifetime. Use command 'clear_debug_overlays' to clear everything.", false, 0.f, false, 0.f, nullptr, nullptr);
-	r_debug_overlay_invisible      = ConVar::Create("r_debug_overlay_invisible"     , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Show invisible debug overlays (alpha < 1 = 255).", false, 0.f, false, 0.f, nullptr, nullptr);
-	r_debug_overlay_wireframe      = ConVar::Create("r_debug_overlay_wireframe"     , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Use wireframe in debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	r_debug_draw_depth_test        = ConVar::Create("r_debug_draw_depth_test"       , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Toggle depth test for other debug draw functionality.", false, 0.f, false, 0.f, nullptr, nullptr);
-	r_drawWorldMeshes              = ConVar::Create("r_drawWorldMeshes"             , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Render world meshes.", false, 0.f, false, 0.f, nullptr, nullptr);
-	r_drawWorldMeshesDepthOnly     = ConVar::Create("r_drawWorldMeshesDepthOnly"    , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Render world meshes (depth only).", false, 0.f, false, 0.f, nullptr, nullptr);
-	r_drawWorldMeshesDepthAtTheEnd = ConVar::Create("r_drawWorldMeshesDepthAtTheEnd", "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Render world meshes (depth at the end).", false, 0.f, false, 0.f, nullptr, nullptr);
-	//-------------------------------------------------------------------------
-	// SERVER                                                                 |
-#ifndef CLIENT_DLL
-	ai_ainDumpOnLoad             = ConVar::Create("ai_ainDumpOnLoad"            , "0", FCVAR_DEVELOPMENTONLY, "Dumps AIN data from node graphs loaded from the disk on load.", false, 0.f, false, 0.f, nullptr, nullptr);
-	ai_ainDebugConnect           = ConVar::Create("ai_ainDebugConnect"          , "0", FCVAR_DEVELOPMENTONLY, "Debug AIN node connections.", false, 0.f, false, 0.f, nullptr, nullptr);
-	ai_script_nodes_draw_range   = ConVar::Create("ai_script_nodes_draw_range"  , "0", FCVAR_DEVELOPMENTONLY, "Debug draw AIN script nodes ranging from shift index to this cvar.", false, 0.f, false, 0.f, nullptr, nullptr);
-	ai_script_nodes_draw_nearest = ConVar::Create("ai_script_nodes_draw_nearest", "1", FCVAR_DEVELOPMENTONLY, "Debug draw AIN script node links to nearest node (build order is used if null).", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	navmesh_always_reachable   = ConVar::Create("navmesh_always_reachable"   , "0"    , FCVAR_DEVELOPMENTONLY, "Marks goal poly from agent poly as reachable regardless of table data ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr);
-	navmesh_debug_type         = ConVar::Create("navmesh_debug_type"         , "0"    , FCVAR_DEVELOPMENTONLY, "NavMesh debug draw hull index.", true, 0.f, true, 4.f, nullptr, "0 = small, 1 = med_short, 2 = medium, 3 = large, 4 = extra large");
-	navmesh_debug_tile_range   = ConVar::Create("navmesh_debug_tile_range"   , "0"    , FCVAR_DEVELOPMENTONLY, "NavMesh debug draw tiles ranging from shift index to this cvar.", true, 0.f, false, 0.f, nullptr, nullptr);
-	navmesh_debug_camera_range = ConVar::Create("navmesh_debug_camera_range" , "2000" , FCVAR_DEVELOPMENTONLY, "Only debug draw tiles within this distance from camera origin.", true, 0.f, false, 0.f, nullptr, nullptr);
-#ifndef DEDICATED
-	navmesh_draw_bvtree            = ConVar::Create("navmesh_draw_bvtree"            , "-1", FCVAR_DEVELOPMENTONLY, "Draws the BVTree of the NavMesh tiles.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
-	navmesh_draw_portal            = ConVar::Create("navmesh_draw_portal"            , "-1", FCVAR_DEVELOPMENTONLY, "Draws the portal of the NavMesh tiles.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
-	navmesh_draw_polys             = ConVar::Create("navmesh_draw_polys"             , "-1", FCVAR_DEVELOPMENTONLY, "Draws the polys of the NavMesh tiles.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
-	navmesh_draw_poly_bounds       = ConVar::Create("navmesh_draw_poly_bounds"       , "-1", FCVAR_DEVELOPMENTONLY, "Draws the bounds of the NavMesh polys.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
-	navmesh_draw_poly_bounds_inner = ConVar::Create("navmesh_draw_poly_bounds_inner" , "0" , FCVAR_DEVELOPMENTONLY, "Draws the inner bounds of the NavMesh polys (requires navmesh_draw_poly_bounds).", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
-#endif // !DEDICATED
-	sv_showconnecting  = ConVar::Create("sv_showconnecting" , "1", FCVAR_RELEASE, "Logs information about the connecting client to the console.", false, 0.f, false, 0.f, nullptr, nullptr);
-	sv_globalBanlist   = ConVar::Create("sv_globalBanlist"  , "1", FCVAR_RELEASE, "Determines whether or not to use the global banned list.", false, 0.f, false, 0.f, nullptr, "0 = Disable, 1 = Enable.");
-	sv_pylonVisibility = ConVar::Create("sv_pylonVisibility", "0", FCVAR_RELEASE, "Determines the visibility to the Pylon master server.", false, 0.f, false, 0.f, nullptr, "0 = Offline, 1 = Hidden, 2 = Public.");
-	sv_pylonRefreshRate   = ConVar::Create("sv_pylonRefreshRate"  , "5.0", FCVAR_RELEASE, "Pylon host refresh rate (seconds).", true, 2.f, true, 8.f, nullptr, nullptr);
-	sv_banlistRefreshRate = ConVar::Create("sv_banlistRefreshRate", "1.0", FCVAR_RELEASE, "Banned list refresh rate (seconds).", true, 1.f, false, 0.f, nullptr, nullptr);
-	sv_statusRefreshRate  = ConVar::Create("sv_statusRefreshRate" , "0.5", FCVAR_RELEASE, "Server status refresh rate (seconds).", false, 0.f, false, 0.f, nullptr, nullptr);
-	sv_autoReloadRate     = ConVar::Create("sv_autoReloadRate"    , "0"  , FCVAR_RELEASE, "Time in seconds between each server auto-reload (disabled if null). ", true, 0.f, false, 0.f, nullptr, nullptr);
-	sv_quota_stringCmdsPerSecond = ConVar::Create("sv_quota_stringCmdsPerSecond", "16", FCVAR_RELEASE, "How many string commands per second clients are allowed to submit, 0 to disallow all string commands.", true, 0.f, false, 0.f, nullptr, nullptr);
-	sv_simulateBots = ConVar::Create("sv_simulateBots", "1", FCVAR_RELEASE, "Simulate user commands for bots on the server.", true, 0.f, false, 0.f, nullptr, nullptr);
-
-	sv_rcon_debug       = ConVar::Create("sv_rcon_debug"      , "0" , FCVAR_RELEASE, "Show rcon debug information ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr);
-	sv_rcon_sendlogs    = ConVar::Create("sv_rcon_sendlogs"   , "0" , FCVAR_RELEASE, "Network console logs to connected and authenticated sockets.", false, 0.f, false, 0.f, nullptr, nullptr);
-	sv_rcon_banpenalty  = ConVar::Create("sv_rcon_banpenalty" , "10", FCVAR_RELEASE, "Number of minutes to ban users who fail rcon authentication.", false, 0.f, false, 0.f, nullptr, nullptr);
-	sv_rcon_maxfailures = ConVar::Create("sv_rcon_maxfailures", "10", FCVAR_RELEASE, "Max number of times a user can fail rcon authentication before being banned.", true, 1.f, false, 0.f, nullptr, nullptr);
-	sv_rcon_maxignores  = ConVar::Create("sv_rcon_maxignores" , "15", FCVAR_RELEASE, "Max number of times a user can ignore the instruction message before being banned.", true, 1.f, false, 0.f, nullptr, nullptr);
-	sv_rcon_maxsockets  = ConVar::Create("sv_rcon_maxsockets" , "32", FCVAR_RELEASE, "Max number of accepted sockets before the server starts closing redundant sockets.", true, 1.f, false, 0.f, nullptr, nullptr);
-	sv_rcon_whitelist_address = ConVar::Create("sv_rcon_whitelist_address", "", FCVAR_RELEASE, "This address is not considered a 'redundant' socket and will never be banned for failed authentication attempts.", false, 0.f, false, 0.f, nullptr, "Format: '::ffff:127.0.0.1'");
-#endif // !CLIENT_DLL
-#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
-	bhit_depth_test = ConVar::Create("bhit_depth_test", "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Use depth test for bullet ray trace overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	bhit_abs_origin = ConVar::Create("bhit_abs_origin", "1", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Draw entity's predicted abs origin upon bullet impact for trajectory debugging (requires 'r_visualizetraces' to be set!).", false, 0.f, false, 0.f, nullptr, nullptr);
-#endif // !GAMEDLL_S0 && !GAMEDLL_S1
-	//-------------------------------------------------------------------------
-	// CLIENT                                                                 |
-#ifndef DEDICATED
-	cl_rcon_request_sendlogs = ConVar::Create("cl_rcon_request_sendlogs", "1" , FCVAR_RELEASE, "Request the rcon server to send console logs on connect.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_quota_stringCmdsPerSecond = ConVar::Create("cl_quota_stringCmdsPerSecond", "16" , FCVAR_RELEASE, "How many string commands per second user is allowed to submit, 0 to allow all submissions.", true, 0.f, false, 0.f, nullptr, nullptr);
-
-	cl_notify_invert_x = ConVar::Create("cl_notify_invert_x", "0", FCVAR_DEVELOPMENTONLY, "Inverts the X offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_notify_invert_y = ConVar::Create("cl_notify_invert_y", "0", FCVAR_DEVELOPMENTONLY, "Inverts the Y offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_notify_offset_x = ConVar::Create("cl_notify_offset_x", "10", FCVAR_DEVELOPMENTONLY, "X offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_notify_offset_y = ConVar::Create("cl_notify_offset_y", "10", FCVAR_DEVELOPMENTONLY, "Y offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	cl_showsimstats      = ConVar::Create("cl_showsimstats"     , "0"  , FCVAR_DEVELOPMENTONLY, "Shows the tick counter for the server/client simulation and the render frame.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_simstats_invert_x = ConVar::Create("cl_simstats_invert_x", "1"  , FCVAR_DEVELOPMENTONLY, "Inverts the X offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_simstats_invert_y = ConVar::Create("cl_simstats_invert_y", "1"  , FCVAR_DEVELOPMENTONLY, "Inverts the Y offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_simstats_offset_x = ConVar::Create("cl_simstats_offset_x", "650", FCVAR_DEVELOPMENTONLY, "X offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_simstats_offset_y = ConVar::Create("cl_simstats_offset_y", "120", FCVAR_DEVELOPMENTONLY, "Y offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	cl_showgpustats      = ConVar::Create("cl_showgpustats"     , "0", FCVAR_DEVELOPMENTONLY, "Texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_gpustats_invert_x = ConVar::Create("cl_gpustats_invert_x", "1", FCVAR_DEVELOPMENTONLY, "Inverts the X offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_gpustats_invert_y = ConVar::Create("cl_gpustats_invert_y", "1", FCVAR_DEVELOPMENTONLY, "Inverts the Y offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_gpustats_offset_x = ConVar::Create("cl_gpustats_offset_x", "650", FCVAR_DEVELOPMENTONLY, "X offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_gpustats_offset_y = ConVar::Create("cl_gpustats_offset_y", "105", FCVAR_DEVELOPMENTONLY, "Y offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	cl_showmaterialinfo      = ConVar::Create("cl_showmaterialinfo"     , "0"  , FCVAR_DEVELOPMENTONLY, "Draw info for the material under the crosshair on screen.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_materialinfo_offset_x = ConVar::Create("cl_materialinfo_offset_x", "0"  , FCVAR_DEVELOPMENTONLY, "X offset for material debug info overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	cl_materialinfo_offset_y = ConVar::Create("cl_materialinfo_offset_y", "420", FCVAR_DEVELOPMENTONLY, "Y offset for material debug info overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-
-	con_drawnotify = ConVar::Create("con_drawnotify", "0", FCVAR_RELEASE, "Draws the RUI console to the hud.", false, 0.f, false, 0.f, nullptr, nullptr);
-	con_notifylines     = ConVar::Create("con_notifylines"    , "3" , FCVAR_MATERIAL_SYSTEM_THREAD, "Number of console lines to overlay for debugging.", true, 1.f, false, 0.f, nullptr, nullptr);
-	con_notifytime      = ConVar::Create("con_notifytime"     , "6" , FCVAR_MATERIAL_SYSTEM_THREAD, "How long to display recent console text to the upper part of the game window.", false, 1.f, false, 50.f, nullptr, nullptr);
-
-	con_notify_invert_x = ConVar::Create("con_notify_invert_x", "0" , FCVAR_MATERIAL_SYSTEM_THREAD, "Inverts the X offset for RUI console overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	con_notify_invert_y = ConVar::Create("con_notify_invert_y", "0" , FCVAR_MATERIAL_SYSTEM_THREAD, "Inverts the Y offset for RUI console overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
-	con_notify_offset_x = ConVar::Create("con_notify_offset_x", "10", FCVAR_MATERIAL_SYSTEM_THREAD, "X offset for RUI console overlay.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_offset_y = ConVar::Create("con_notify_offset_y", "10", FCVAR_MATERIAL_SYSTEM_THREAD, "Y offset for RUI console overlay.", false, 1.f, false, 50.f, nullptr, nullptr);
-
-	con_notify_script_server_clr  = ConVar::Create("con_notify_script_server_clr", "130 120 245 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Script SERVER VM RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_script_client_clr  = ConVar::Create("con_notify_script_client_clr", "117 116 139 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Script CLIENT VM RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_script_ui_clr      = ConVar::Create("con_notify_script_ui_clr"    , "200 110 110 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Script UI VM RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-
-	con_notify_native_server_clr = ConVar::Create("con_notify_native_server_clr", "20 50 248 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native SERVER RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_client_clr = ConVar::Create("con_notify_native_client_clr", "70 70 70 255"   , FCVAR_MATERIAL_SYSTEM_THREAD, "Native CLIENT RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_ui_clr     = ConVar::Create("con_notify_native_ui_clr"    , "200 60 60 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native UI RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_engine_clr = ConVar::Create("con_notify_native_engine_clr", "255 255 255 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Native engine RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_fs_clr     = ConVar::Create("con_notify_native_fs_clr"    , "0 100 225 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native FileSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_rtech_clr  = ConVar::Create("con_notify_native_rtech_clr" , "25 120 20 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native RTech RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_ms_clr     = ConVar::Create("con_notify_native_ms_clr"    , "200 20 180 255" , FCVAR_MATERIAL_SYSTEM_THREAD, "Native MaterialSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_audio_clr  = ConVar::Create("con_notify_native_audio_clr" , "238 43 10 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native AudioSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_native_video_clr  = ConVar::Create("con_notify_native_video_clr" , "115 0 235 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native VideoSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-
-	con_notify_netcon_clr  = ConVar::Create("con_notify_netcon_clr" , "255 255 255 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Net console RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_common_clr  = ConVar::Create("con_notify_common_clr" , "255 140 80 255" , FCVAR_MATERIAL_SYSTEM_THREAD, "Common RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-
-	con_notify_warning_clr = ConVar::Create("con_notify_warning_clr", "180 180 20 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Warning RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-	con_notify_error_clr   = ConVar::Create("con_notify_error_clr"  , "225 20 20 255" , FCVAR_MATERIAL_SYSTEM_THREAD, "Error RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
-
-	con_max_lines                 = ConVar::Create("con_max_lines"                , "1024", FCVAR_DEVELOPMENTONLY, "Maximum number of lines in the console before cleanup starts.", true, 1.f, false, 0.f, nullptr, nullptr);
-	con_max_history               = ConVar::Create("con_max_history"              , "512" , FCVAR_DEVELOPMENTONLY, "Maximum number of command submission items before history cleanup starts.", true, 0.f, false, 0.f, nullptr, nullptr);
-	con_suggestion_limit          = ConVar::Create("con_suggestion_limit"         , "128" , FCVAR_DEVELOPMENTONLY, "Maximum number of suggestions the autocomplete window will show for the console.", true, 0.f, false, 0.f, nullptr, nullptr);
-	con_suggestion_showhelptext   = ConVar::Create("con_suggestion_showhelptext"  , "1"   , FCVAR_DEVELOPMENTONLY, "Show CommandBase help text in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr);
-	con_suggestion_showflags      = ConVar::Create("con_suggestion_showflags"     , "1"   , FCVAR_DEVELOPMENTONLY, "Show CommandBase flags in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr);
-	con_suggestion_flags_realtime = ConVar::Create("con_suggestion_flags_realtime", "1"   , FCVAR_DEVELOPMENTONLY, "Whether to show compile-time or run-time CommandBase flags.", false, 0.f, false, 0.f, nullptr, nullptr);
-#endif // !DEDICATED
-	//-------------------------------------------------------------------------
-	// FILESYSTEM                                                             |
-	fs_showWarnings                   = ConVar::Create("fs_showWarnings"                       , "0", FCVAR_DEVELOPMENTONLY, "Logs the FileSystem warnings to the console, filtered by 'fs_warning_level' ( !slower! ).", true, 0.f, true, 2.f, nullptr, "0 = log to file. 1 = 0 + log to console. 2 = 1 + log to notify.");
-	fs_packedstore_entryblock_stats   = ConVar::Create("fs_packedstore_entryblock_stats"       , "0", FCVAR_DEVELOPMENTONLY, "Logs the stats of each file entry in the VPK during decompression ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr);
-	fs_packedstore_workspace          = ConVar::Create("fs_packedstore_workspace" , "platform/ship/", FCVAR_DEVELOPMENTONLY, "Determines the current VPK workspace.", false, 0.f, false, 0.f, nullptr, nullptr);
-	fs_packedstore_compression_level  = ConVar::Create("fs_packedstore_compression_level", "default", FCVAR_DEVELOPMENTONLY, "Determines the VPK compression level.", false, 0.f, false, 0.f, nullptr, "fastest faster default better uber");
-	fs_packedstore_max_helper_threads = ConVar::Create("fs_packedstore_max_helper_threads"    , "-1", FCVAR_DEVELOPMENTONLY, "Max # of additional \"helper\" threads to create during compression.", true, -1, true, LZHAM_MAX_HELPER_THREADS, nullptr, "Must range between [-1,LZHAM_MAX_HELPER_THREADS], where -1=max practical.");
-	//-------------------------------------------------------------------------
-	// MATERIALSYSTEM                                                         |
-#ifndef DEDICATED
-	mat_alwaysComplain = ConVar::Create("mat_alwaysComplain", "0", FCVAR_RELEASE | FCVAR_MATERIAL_SYSTEM_THREAD, "Always complain when a material is missing.", false, 0.f, false, 0.f, nullptr, nullptr);
-#endif // !DEDICATED
-	//-------------------------------------------------------------------------
-	// SQUIRREL                                                               |
-	script_show_output      = ConVar::Create("script_show_output" , "0", FCVAR_RELEASE, "Prints the VM output to the console ( !slower! ).", true, 0.f, true, 2.f, nullptr, "0 = log to file. 1 = 0 + log to console. 2 = 1 + log to notify.");
-	script_show_warning     = ConVar::Create("script_show_warning", "0", FCVAR_RELEASE, "Prints the VM warning output to the console ( !slower! ).", true, 0.f, true, 2.f, nullptr, "0 = log to file. 1 = 0 + log to console. 2 = 1 + log to notify.");
-	//-------------------------------------------------------------------------
-	// NETCHANNEL                                                             |
-	net_tracePayload           = ConVar::Create("net_tracePayload"          , "0", FCVAR_DEVELOPMENTONLY                    , "Log the payload of the send/recv datagram to a file on the disk.", false, 0.f, false, 0.f, nullptr, nullptr);
-	net_encryptionEnable       = ConVar::Create("net_encryptionEnable"      , "1", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED , "Use AES encryption on game packets.", false, 0.f, false, 0.f, nullptr, nullptr);
-	net_useRandomKey           = ConVar::Create("net_useRandomKey"          , "1"                        , FCVAR_RELEASE    , "Use random AES encryption key for game packets.", false, 0.f, false, 0.f, &NET_UseRandomKeyChanged_f, nullptr);
-	net_processTimeBudget      = ConVar::Create("net_processTimeBudget"     ,"200"                       , FCVAR_RELEASE    , "Net message process time budget in milliseconds (removing netchannel if exceeded).", true, 0.f, false, 0.f, nullptr, "0 = disabled.");
-	//-------------------------------------------------------------------------
-	// NETWORKSYSTEM                                                          |
-	pylon_matchmaking_hostname = ConVar::Create("pylon_matchmaking_hostname", "ms.r5reloaded.com", FCVAR_RELEASE, "Holds the pylon matchmaking hostname.", false, 0.f, false, 0.f, &MP_HostName_Changed_f, nullptr);
-	pylon_host_update_interval = ConVar::Create("pylon_host_update_interval", "5"                , FCVAR_RELEASE, "Length of time in seconds between each status update interval to master server.", true, 5.f, false, 0.f, nullptr, nullptr);
-	pylon_showdebuginfo        = ConVar::Create("pylon_showdebuginfo"       , "0"                , FCVAR_RELEASE, "Shows debug output for pylon.", false, 0.f, false, 0.f, nullptr, nullptr);
-	//-------------------------------------------------------------------------
-	// RTECH API                                                              |
-	rtech_debug = ConVar::Create("rtech_debug", "0", FCVAR_DEVELOPMENTONLY, "Shows debug output for the RTech system.", false, 0.f, false, 0.f, nullptr, nullptr);
-	//-------------------------------------------------------------------------
-	// RUI                                                                    |
-#ifndef DEDICATED
-	rui_drawEnable = ConVar::Create("rui_drawEnable", "1", FCVAR_RELEASE, "Draws the RUI if set.", false, 0.f, false, 0.f, nullptr, " 1 = Draw, 0 = No Draw.");
-#endif // !DEDICATED
-	//-------------------------------------------------------------------------
-	// MILES                                                                  |
-#ifndef DEDICATED
-	miles_debug = ConVar::Create("miles_debug", "0", FCVAR_RELEASE, "Enables debug prints for the Miles Sound System", false, 0.f, false, 0.f, nullptr, " 1 = Print, 0 = No Print");
-#endif // !DEDICATED
-	//-------------------------------------------------------------------------
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: initialize shipped ConVar's
-//-----------------------------------------------------------------------------
-void ConVar::InitShipped(void)
-{
-#ifndef CLIENT_DLL
-	ai_script_nodes_draw             = g_pCVar->FindVar("ai_script_nodes_draw");
-#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
-	bhit_enable                      = g_pCVar->FindVar("bhit_enable");
-#endif // !GAMEDLL_S0 && !GAMEDLL_S1
-#endif // !CLIENT_DLL
-	developer                        = g_pCVar->FindVar("developer");
-	fps_max                          = g_pCVar->FindVar("fps_max");
-	fs_showAllReads                  = g_pCVar->FindVar("fs_showAllReads");
-#ifndef DEDICATED
-	cl_threaded_bone_setup           = g_pCVar->FindVar("cl_threaded_bone_setup");
-#endif // !DEDICATED
-	single_frame_shutdown_for_reload = g_pCVar->FindVar("single_frame_shutdown_for_reload");
-	enable_debug_overlays            = g_pCVar->FindVar("enable_debug_overlays");
-	debug_draw_box_depth_test        = g_pCVar->FindVar("debug_draw_box_depth_test");
-	model_defaultFadeDistScale       = g_pCVar->FindVar("model_defaultFadeDistScale");
-	model_defaultFadeDistMin         = g_pCVar->FindVar("model_defaultFadeDistMin");
-#ifndef DEDICATED
-	miles_language                   = g_pCVar->FindVar("miles_language");
-	rui_defaultDebugFontFace         = g_pCVar->FindVar("rui_defaultDebugFontFace");
-	r_visualizetraces                = g_pCVar->FindVar("r_visualizetraces");
-	r_visualizetraces_duration       = g_pCVar->FindVar("r_visualizetraces_duration");
-#endif // !DEDICATED
-	staticProp_no_fade_scalar        = g_pCVar->FindVar("staticProp_no_fade_scalar");
-	staticProp_gather_size_weight    = g_pCVar->FindVar("staticProp_gather_size_weight");
-	stream_overlay                   = g_pCVar->FindVar("stream_overlay");
-	stream_overlay_mode              = g_pCVar->FindVar("stream_overlay_mode");
-	sv_visualizetraces               = g_pCVar->FindVar("sv_visualizetraces");
-	sv_visualizetraces_duration      = g_pCVar->FindVar("sv_visualizetraces_duration");
-	old_gather_props                 = g_pCVar->FindVar("old_gather_props");
-#ifndef DEDICATED
-	origin_disconnectWhenOffline     = g_pCVar->FindVar("origin_disconnectWhenOffline");
-#endif // !DEDICATED
-	mp_gamemode                      = g_pCVar->FindVar("mp_gamemode");
-	hostname                         = g_pCVar->FindVar("hostname");
-	hostip                           = g_pCVar->FindVar("hostip");
-	hostport                         = g_pCVar->FindVar("hostport");
-	host_hasIrreversibleShutdown     = g_pCVar->FindVar("host_hasIrreversibleShutdown");
-	net_usesocketsforloopback        = g_pCVar->FindVar("net_usesocketsforloopback");
-#ifndef CLIENT_DLL
-	sv_stats = g_pCVar->FindVar("sv_stats");
-
-	sv_updaterate_mp = g_pCVar->FindVar("sv_updaterate_mp");
-	sv_updaterate_sp = g_pCVar->FindVar("sv_updaterate_sp");
-
-	sv_showhitboxes = g_pCVar->FindVar("sv_showhitboxes");
-	sv_forceChatToTeamOnly = g_pCVar->FindVar("sv_forceChatToTeamOnly");
-
-	sv_showhitboxes->SetMin(-1); // Allow user to go over each entity manually without going out of bounds.
-	sv_showhitboxes->SetMax(NUM_ENT_ENTRIES - 1);
-
-	sv_forceChatToTeamOnly->RemoveFlags(FCVAR_DEVELOPMENTONLY);
-	sv_forceChatToTeamOnly->AddFlags(FCVAR_REPLICATED);
-
-	ai_script_nodes_draw->SetValue(-1);
-#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1) && !defined (GAMEDLL_S2)
-	bhit_enable->SetValue(0);
-#endif // !(GAMEDLL_S0) || !(GAMEDLL_S1) || !(GAMEDLL_S2)
-#endif // !CLIENT_DLL
-#ifndef DEDICATED
-	cl_threaded_bone_setup->RemoveFlags(FCVAR_DEVELOPMENTONLY);
-	rui_defaultDebugFontFace->RemoveFlags(FCVAR_DEVELOPMENTONLY);
-	origin_disconnectWhenOffline->RemoveFlags(FCVAR_DEVELOPMENTONLY);
-#endif // !DEDICATED
-	mp_gamemode->RemoveFlags(FCVAR_DEVELOPMENTONLY);
-	mp_gamemode->RemoveChangeCallback(mp_gamemode->m_fnChangeCallbacks[0]);
-	mp_gamemode->InstallChangeCallback(MP_GameMode_Changed_f, false);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: unregister/disable extraneous ConVar's.
-//-----------------------------------------------------------------------------
-void ConVar::PurgeShipped(void)
-{
-#ifdef DEDICATED
-	const char* pszToPurge[] =
-	{
-		"bink_materials_enabled",
-		"communities_enabled",
-		"community_frame_run",
-		"ime_enabled",
-		"origin_igo_mutes_sound_enabled",
-		"twitch_shouldQuery",
-		"voice_enabled",
-	};
-
-	for (size_t i = 0; i < SDK_ARRAYSIZE(pszToPurge); i++)
-	{
-		if (ConVar* pCVar = g_pCVar->FindVar(pszToPurge[i]))
-		{
-			pCVar->SetValue(0);
-		}
-	}
-#endif // DEDICATED
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: clear all hostname ConVar's.
-//-----------------------------------------------------------------------------
-void ConVar::PurgeHostNames(void)
-{
-	const char* pszHostNames[] =
-	{
-		"assetdownloads_hostname",
-		"communities_hostname",
-		"matchmaking_hostname",
-		"party_hostname",
-		"persistence_hostname",
-		"persistenceDef_hostname",
-		"pin_telemetry_hostname",
-		"publication_hostname",
-		"serverReports_hostname",
-		"skill_hostname",
-		"speechtotext_hostname",
-		"staticfile_hostname",
-		"stats_hostname",
-		"steamlink_hostname",
-		"subscription_hostname",
-		"users_hostname"
-	};
-
-	for (size_t i = 0; i < SDK_ARRAYSIZE(pszHostNames); i++)
-	{
-		if (ConVar* pCVar = g_pCVar->FindVar(pszHostNames[i]))
-		{
-			pCVar->SetValue("0.0.0.0");
-		}
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Add's flags to ConVar.
-// Input  : nFlags - 
-//-----------------------------------------------------------------------------
-void ConVar::AddFlags(int nFlags)
-{
-	m_pParent->m_nFlags |= nFlags;
-
-#ifdef ALLOW_DEVELOPMENT_CVARS
-	m_pParent->m_nFlags &= ~FCVAR_DEVELOPMENTONLY;
-#endif
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Removes flags from ConVar.
-// Input  : nFlags - 
-//-----------------------------------------------------------------------------
-void ConVar::RemoveFlags(int nFlags)
-{
-	m_nFlags &= ~nFlags;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns the base ConVar name.
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* ConVar::GetBaseName(void) const
-{
-	return m_pParent->m_pszName;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns the ConVar help text.
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* ConVar::GetHelpText(void) const
-{
-	return m_pParent->m_pszHelpString;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns the ConVar usage text.
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* ConVar::GetUsageText(void) const
-{
-	return m_pParent->m_pszUsageString;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as a boolean.
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConVar::GetBool(void) const
-{
-	return !!GetInt();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as a float.
-// Output : float
-//-----------------------------------------------------------------------------
-float ConVar::GetFloat(void) const
-{
-	return m_pParent->m_Value.m_fValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as a double.
-// Output : double
-//-----------------------------------------------------------------------------
-double ConVar::GetDouble(void) const
-{
-	return static_cast<double>(m_pParent->m_Value.m_fValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as an integer.
-// Output : int
-//-----------------------------------------------------------------------------
-int ConVar::GetInt(void) const
-{
-	return m_pParent->m_Value.m_nValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as an integer (64-bit).
-// Output : int
-//-----------------------------------------------------------------------------
-int64_t ConVar::GetInt64(void) const
-{
-	return static_cast<int64_t>(m_pParent->m_Value.m_nValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as a size type.
-// Output : int
-//-----------------------------------------------------------------------------
-size_t ConVar::GetSizeT(void) const
-{
-	return static_cast<size_t>(m_pParent->m_Value.m_nValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as a color.
-// Output : Color
-//-----------------------------------------------------------------------------
-Color ConVar::GetColor(void) const
-{
-	unsigned char* pColorElement = (reinterpret_cast<unsigned char*>(&m_pParent->m_Value.m_nValue));
-	return Color(pColorElement[0], pColorElement[1], pColorElement[2], pColorElement[3]);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Return ConVar value as a string.
-// Output : const char *
-//-----------------------------------------------------------------------------
-const char* ConVar::GetString(void) const
-{
-	if (m_nFlags & FCVAR_NEVER_AS_STRING)
-	{
-		return "FCVAR_NEVER_AS_STRING";
-	}
-
-	char const* str = m_pParent->m_Value.m_pszString;
-	return str ? str : "";
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : flMaxVal - 
-//-----------------------------------------------------------------------------
-void ConVar::SetMax(float flMaxVal)
-{
-	m_pParent->m_fMaxVal = flMaxVal;
-	m_pParent->m_bHasMax = true;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : flMinVal - 
-//-----------------------------------------------------------------------------
-void ConVar::SetMin(float flMinVal)
-{
-	m_pParent->m_fMinVal = flMinVal;
-	m_pParent->m_bHasMin = true;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : flMinVal - 
-// Output : true if there is a min set.
-//-----------------------------------------------------------------------------
-bool ConVar::GetMin(float& flMinVal) const
-{
-	flMinVal = m_pParent->m_fMinVal;
-	return m_pParent->m_bHasMin;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : flMaxVal - 
-// Output : true if there is a max set.
-//-----------------------------------------------------------------------------
-bool ConVar::GetMax(float& flMaxVal) const
-{
-	flMaxVal = m_pParent->m_fMaxVal;
-	return m_pParent->m_bHasMax;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: returns the min value.
-// Output : float
-//-----------------------------------------------------------------------------
-float ConVar::GetMinValue(void) const
-{
-	return m_pParent->m_fMinVal;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: returns the max value.
-// Output : float
-//-----------------------------------------------------------------------------
-float ConVar::GetMaxValue(void) const
-{
-	return m_pParent->m_fMaxVal;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: checks if ConVar has min value.
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConVar::HasMin(void) const
-{
-	return m_pParent->m_bHasMin;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: checks if ConVar has max value.
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConVar::HasMax(void) const
-{
-	return m_pParent->m_bHasMax;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets the ConVar int value.
-// Input  : nValue - 
-//-----------------------------------------------------------------------------
-void ConVar::SetValue(int nValue)
-{
-	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
-	pCVar->InternalSetIntValue(nValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets the ConVar float value.
-// Input  : flValue - 
-//-----------------------------------------------------------------------------
-void ConVar::SetValue(float flValue)
-{
-	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
-	pCVar->InternalSetFloatValue(flValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets the ConVar string value.
-// Input  : *szValue - 
-//-----------------------------------------------------------------------------
-void ConVar::SetValue(const char* pszValue)
-{
-	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
-	pCVar->InternalSetValue(pszValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets the ConVar color value.
-// Input  : value - 
-//-----------------------------------------------------------------------------
-void ConVar::SetValue(Color value)
-{
-	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
-	pCVar->InternalSetColorValue(value);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : *pszValue - 
-//-----------------------------------------------------------------------------
-void ConVar::InternalSetValue(const char* pszValue)
-{
-	if (IsFlagSet(FCVAR_MATERIAL_THREAD_MASK))
-	{
-		if (g_pCVar && !g_pCVar->IsMaterialThreadSetAllowed())
-		{
-			g_pCVar->QueueMaterialThreadSetValue(this, pszValue);
-			return;
-		}
-	}
-
-	char szTempValue[32];
-	const char* pszNewValue;
-
-	// Only valid for root convars.
-	assert(m_pParent == this);
-
-	pszNewValue = const_cast<char*>(pszValue);
-	if (!pszNewValue)
-	{
-		pszNewValue = "";
-	}
-
-	if (!SetColorFromString(pszNewValue))
-	{
-		// Not a color, do the standard thing
-		double dblValue = atof(pszNewValue); // Use double to avoid 24-bit restriction on integers and allow storing timestamps or dates in convars
-		float flNewValue = static_cast<float>(dblValue);
-
-		if (!IsFinite(flNewValue))
-		{
-			Warning(eDLL_T::ENGINE, "Warning: ConVar '%s' = '%s' is infinite, clamping value.\n", GetBaseName(), pszNewValue);
-			flNewValue = FLT_MAX;
-		}
-
-		if (ClampValue(flNewValue))
-		{
-			snprintf(szTempValue, sizeof(szTempValue), "%f", flNewValue);
-			pszNewValue = szTempValue;
-		}
-
-		// Redetermine value
-		m_Value.m_fValue = flNewValue;
-		m_Value.m_nValue = static_cast<int>(m_Value.m_fValue);
-	}
-
-	if (!(m_nFlags & FCVAR_NEVER_AS_STRING))
-	{
-		ChangeStringValue(pszNewValue);
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : *nValue - 
-//-----------------------------------------------------------------------------
-void ConVar::InternalSetIntValue(int nValue)
-{
-	if (nValue == m_Value.m_nValue)
-		return;
-
-	if (IsFlagSet(FCVAR_MATERIAL_THREAD_MASK))
-	{
-		if (g_pCVar && !g_pCVar->IsMaterialThreadSetAllowed())
-		{
-			g_pCVar->QueueMaterialThreadSetValue(this, nValue);
-			return;
-		}
-	}
-
-	assert(m_pParent == this); // Only valid for root convars.
-
-	float fValue = static_cast<float>(nValue);
-	if (ClampValue(fValue))
-	{
-		nValue = static_cast<int>(fValue);
-	}
-
-	// Redetermine value
-	m_Value.m_fValue = fValue;
-	m_Value.m_nValue = nValue;
-
-	if (!(m_nFlags & FCVAR_NEVER_AS_STRING))
-	{
-		char szTempVal[32];
-		snprintf(szTempVal, sizeof(szTempVal), "%d", nValue);
-		ChangeStringValue(szTempVal);
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : *flValue - 
-//-----------------------------------------------------------------------------
-void ConVar::InternalSetFloatValue(float flValue)
-{
-	if (flValue == m_Value.m_fValue)
-		return;
-
-	if (IsFlagSet(FCVAR_MATERIAL_THREAD_MASK))
-	{
-		if (g_pCVar && !g_pCVar->IsMaterialThreadSetAllowed())
-		{
-			g_pCVar->QueueMaterialThreadSetValue(this, flValue);
-			return;
-		}
-	}
-
-	assert(m_pParent == this); // Only valid for root convars.
-
-	// Check bounds
-	ClampValue(flValue);
-
-	// Redetermine value
-	m_Value.m_fValue = flValue;
-	m_Value.m_nValue = static_cast<int>(flValue);
-
-	if (!(m_nFlags & FCVAR_NEVER_AS_STRING))
-	{
-		char szTempVal[32];
-		snprintf(szTempVal, sizeof(szTempVal), "%f", flValue);
-		ChangeStringValue(szTempVal);
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-// Input  : *value - 
-//-----------------------------------------------------------------------------
-void ConVar::InternalSetColorValue(Color value)
-{
-	// Stuff color values into an int
-	int nValue = 0;
-
-	unsigned char* pColorElement = (reinterpret_cast<unsigned char*>(&nValue));
-	pColorElement[0] = value[0];
-	pColorElement[1] = value[1];
-	pColorElement[2] = value[2];
-	pColorElement[3] = value[3];
-
-	// Call the int internal set
-	InternalSetIntValue(nValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Reset to default value.
-//-----------------------------------------------------------------------------
-void ConVar::Revert(void)
-{
-	SetValue(m_pszDefaultValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Check whether to clamp and then perform clamp.
-// Input  : flValue - 
-// Output : Returns true if value changed.
-//-----------------------------------------------------------------------------
-bool ConVar::ClampValue(float& flValue)
-{
-	if (m_bHasMin && (flValue < m_fMinVal))
-	{
-		flValue = m_fMinVal;
-		return true;
-	}
-
-	if (m_bHasMax && (flValue > m_fMaxVal))
-	{
-		flValue = m_fMaxVal;
-		return true;
-	}
-
-	return false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: returns the default ConVar value.
-// Output : const char
-//-----------------------------------------------------------------------------
-const char* ConVar::GetDefault(void) const
-{
-	return m_pParent->m_pszDefaultValue;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets the default ConVar value.
-// Input  : *pszDefault -
-//-----------------------------------------------------------------------------
-void ConVar::SetDefault(const char* pszDefault)
-{
-	static const char* pszEmpty = "";
-	m_pszDefaultValue = pszDefault ? pszDefault : pszEmpty;
-	assert(m_pszDefaultValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: sets the ConVar color value from string.
-// Input  : *pszValue - 
-//-----------------------------------------------------------------------------
-bool ConVar::SetColorFromString(const char* pszValue)
-{
-	bool bColor = false;
-
-	// Try pulling RGBA color values out of the string.
-	int nRGBA[4];
-	int nParamsRead = sscanf_s(pszValue, "%i %i %i %i", &(nRGBA[0]), &(nRGBA[1]), &(nRGBA[2]), &(nRGBA[3]));
-
-	if (nParamsRead >= 3)
-	{
-		// This is probably a color!
-		if (nParamsRead == 3)
-		{
-			// Assume they wanted full alpha.
-			nRGBA[3] = 255;
-		}
-
-		if (nRGBA[0] >= 0 && nRGBA[0] <= 255 &&
-			nRGBA[1] >= 0 && nRGBA[1] <= 255 &&
-			nRGBA[2] >= 0 && nRGBA[2] <= 255 &&
-			nRGBA[3] >= 0 && nRGBA[3] <= 255)
-		{
-			//printf("*** WOW! Found a color!! ***\n");
-
-			// This is definitely a color!
-			bColor = true;
-
-			// Stuff all the values into each byte of our int.
-			unsigned char* pColorElement = (reinterpret_cast<unsigned char*>(&m_Value.m_nValue));
-			pColorElement[0] = nRGBA[0];
-			pColorElement[1] = nRGBA[1];
-			pColorElement[2] = nRGBA[2];
-			pColorElement[3] = nRGBA[3];
-
-			// Copy that value into our float.
-			m_Value.m_fValue = static_cast<float>(m_Value.m_nValue);
-		}
-	}
-
-	return bColor;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: changes the ConVar string value.
-// Input  : *pszTempVal - flOldValue
-//-----------------------------------------------------------------------------
-void ConVar::ChangeStringValue(const char* pszTempVal)
-{
-	Assert(!(m_nFlags & FCVAR_NEVER_AS_STRING));
-
-	char* pszOldValue = (char*)stackalloc(m_Value.m_iStringLength);
-	memcpy(pszOldValue, m_Value.m_pszString, m_Value.m_iStringLength);
-
-	size_t len = strlen(pszTempVal) + 1;
-
-	if (len > m_Value.m_iStringLength)
-	{
-		if (m_Value.m_pszString)
-		{
-			MemAllocSingleton()->Free(m_Value.m_pszString);
-		}
-
-		m_Value.m_pszString = MemAllocSingleton()->Alloc<char>(len);
-		m_Value.m_iStringLength = len;
-	}
-
-	memcpy(reinterpret_cast<void*>(m_Value.m_pszString), pszTempVal, len);
-
-	// Invoke any necessary callback function
-	for (int i = 0; i < m_fnChangeCallbacks.Count(); ++i)
-	{
-		m_fnChangeCallbacks[i](reinterpret_cast<IConVar*>(&m_pIConVarVFTable), pszOldValue, NULL);
-	}
-
-	if (g_pCVar)
-	{
-		g_pCVar->CallGlobalChangeCallbacks(this, pszOldValue);
-	}
-
-	stackfree(pszOldValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: changes the ConVar string value without calling the callback
-// (Size of new string must be equal or lower than m_iStringLength!!!)
-// Input  : *pszTempVal - flOldValue
-//-----------------------------------------------------------------------------
-void ConVar::ChangeStringValueUnsafe(const char* pszNewValue)
-{
-	m_Value.m_pszString = const_cast<char*>(pszNewValue);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Install a change callback (there shouldn't already be one....)
-// Input  : callback - 
-//			bInvoke - 
-//-----------------------------------------------------------------------------
-void ConVar::InstallChangeCallback(FnChangeCallback_t callback, bool bInvoke /*=true*/)
-{
-	if (!callback)
-	{
-		Warning(eDLL_T::ENGINE, "%s: called with NULL callback, ignoring!!!\n", __FUNCTION__);
-		return;
-	}
-
-	if (m_pParent->m_fnChangeCallbacks.Find(callback) != m_pParent->m_fnChangeCallbacks.InvalidIndex())
-	{
-		// Same ptr added twice, sigh...
-		Warning(eDLL_T::ENGINE, "%s: ignoring duplicate change callback!!!\n", __FUNCTION__);
-		return;
-	}
-
-	m_pParent->m_fnChangeCallbacks.AddToTail(callback);
-
-	// Call it immediately to set the initial value...
-	if (bInvoke)
-	{
-		callback(reinterpret_cast<IConVar*>(&m_pIConVarVFTable), m_Value.m_pszString, m_Value.m_fValue);
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Install a change callback (there shouldn't already be one....)
-// Input  : callback - 
-//-----------------------------------------------------------------------------
-void ConVar::RemoveChangeCallback(FnChangeCallback_t callback)
-{
-	m_pParent->m_fnChangeCallbacks.FindAndRemove(callback);
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Checks if ConVar is registered.
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConVar::IsRegistered(void) const
-{
-	return m_pParent->m_bRegistered;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns true if this is a command 
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConVar::IsCommand(void) const
-{
-	return false;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Test each ConVar query before setting the value.
-// Input  : *pConVar - nFlags
-// Output : False if change is permitted, true if not.
-//-----------------------------------------------------------------------------
-bool ConVar::IsFlagSetInternal(const ConVar* pConVar, int nFlags)
-{
-	if (cm_unset_all_cmdquery->GetBool())
-	{
-		// Returning false on all queries may cause problems.
-		return false;
-	}
-	// Default behavior.
-	return pConVar->HasFlags(nFlags) != 0;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-//-----------------------------------------------------------------------------
-void ConVar_AppendFlags(ConCommandBase* var, char* buf, size_t bufsize)
-{
-	for (int i = 0; i < ARRAYSIZE(g_PrintConVarFlags); ++i)
-	{
-		const ConVarFlagsToString_t& info = g_PrintConVarFlags[i];
-		if (var->IsFlagSet(info.m_nFlag))
-		{
-			char append[128];
-			V_snprintf(append, sizeof(append), " %s", info.m_pszDesc);
-			V_strncat(buf, append, bufsize);
-		}
-	}
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: 
-//-----------------------------------------------------------------------------
-void ConVar_PrintDescription(ConCommandBase* pVar)
-{
-	bool bMin, bMax;
-	float fMin, fMax;
-	const char* pStr;
-
-	Assert(pVar);
-
-	Color clr(255, 100, 100, 255);
-
-	char outstr[4096];
-	outstr[0] = 0;
-
-	if (!pVar->IsCommand())
-	{
-		ConVar* var = (ConVar*)pVar;
-
-		bMin = var->GetMin(fMin);
-		bMax = var->GetMax(fMax);
-
-		const char* value = NULL;
-		char tempVal[256];
-
-		if (var->IsFlagSet(FCVAR_NEVER_AS_STRING))
-		{
-			value = tempVal;
-
-			int intVal = var->GetInt();
-			float floatVal = var->GetFloat();
-
-			if (fabs((float)intVal - floatVal) < 0.000001)
-			{
-				V_snprintf(tempVal, sizeof(tempVal), "%d", intVal);
-			}
-			else
-			{
-				V_snprintf(tempVal, sizeof(tempVal), "%f", floatVal);
-			}
-		}
-		else
-		{
-			value = var->GetString();
-		}
-
-		if (value)
-		{
-			AppendPrintf(outstr, sizeof(outstr), "\"%s\" = \"%s\"", var->GetName(), value);
-
-			if (V_stricmp(value, var->GetDefault()))
-			{
-				AppendPrintf(outstr, sizeof(outstr), " ( def. \"%s\" )", var->GetDefault());
-			}
-		}
-
-		if (bMin)
-		{
-			AppendPrintf(outstr, sizeof(outstr), " min. %f", fMin);
-		}
-		if (bMax)
-		{
-			AppendPrintf(outstr, sizeof(outstr), " max. %f", fMax);
-		}
-	}
-	else
-	{
-		ConCommand* var = (ConCommand*)pVar;
-
-		AppendPrintf(outstr, sizeof(outstr), "\"%s\" ", var->GetName());
-	}
-
-	ConVar_AppendFlags(pVar, outstr, sizeof(outstr));
-
-	pStr = pVar->GetHelpText();
-	if (pStr && *pStr)
-	{
-		DevMsg(eDLL_T::ENGINE, "%-80s - %.80s\n", outstr, pStr);
-	}
-	else
-	{
-		DevMsg(eDLL_T::ENGINE, "%-80s\n", outstr);
-	}
-}
-
-///////////////////////////////////////////////////////////////////////////////
-void VConVar::Attach() const
-{
-	DetourAttach((LPVOID*)&v_ConVar_IsFlagSet, &ConVar::IsFlagSetInternal);
-	DetourAttach((LPVOID*)&v_ConVar_PrintDescription, &ConVar_PrintDescription);
-}
-
-void VConVar::Detach() const
-{
-	DetourDetach((LPVOID*)&v_ConVar_IsFlagSet, &ConVar::IsFlagSetInternal);
-	DetourDetach((LPVOID*)&v_ConVar_PrintDescription, &ConVar_PrintDescription);
-}
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/r5dev/tier1/IConVar.h b/r5dev/tier1/IConVar.h
index 9b5a72fa..6f70f09b 100644
--- a/r5dev/tier1/IConVar.h
+++ b/r5dev/tier1/IConVar.h
@@ -1,157 +1 @@
 #pragma once
-#include "tier1/cmd.h"
-#include "mathlib/color.h"
-#include "public/iconvar.h"
-#include "tier1/utlvector.h"
-
-//-----------------------------------------------------------------------------
-// Purpose: A console variable
-//-----------------------------------------------------------------------------
-class ConVar : public ConCommandBase
-{
-public:
-	static ConVar* Create(const char* pszName, const char* pszDefaultValue, int nFlags, const char* pszHelpString,
-		bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString);
-	void Destroy(void);
-
-	ConVar(void);
-	~ConVar(void);
-
-	static void Init(void);
-	static void InitShipped(void);
-
-	static void PurgeShipped(void);
-	static void PurgeHostNames(void);
-
-	void AddFlags(int nFlags);
-	void RemoveFlags(int nFlags);
-
-	const char* GetBaseName(void) const;
-	const char* GetHelpText(void) const;
-	const char* GetUsageText(void) const;
-
-	bool GetBool(void) const;
-	float GetFloat(void) const;
-	double GetDouble(void) const;
-	int GetInt(void) const;
-	int64_t GetInt64(void) const;
-	size_t GetSizeT(void) const;
-	Color GetColor(void) const;
-	const char* GetString(void) const;
-
-	void SetMax(float flMaxValue);
-	void SetMin(float flMinValue);
-	bool GetMin(float& flMinValue) const;
-	bool GetMax(float& flMaxValue) const;
-	float GetMinValue(void) const;
-	float GetMaxValue(void) const;
-	bool HasMin(void) const;
-	bool HasMax(void) const;
-
-	void SetValue(int nValue);
-	void SetValue(float flValue);
-	void SetValue(const char* pszValue);
-	void SetValue(Color clValue);
-
-	void InternalSetValue(const char* pszValue);
-	void InternalSetIntValue(int nValue);
-	void InternalSetFloatValue(float flValue);
-	void InternalSetColorValue(Color value);
-
-	void Revert(void);
-	bool ClampValue(float& flValue);
-
-	const char* GetDefault(void) const;
-	void SetDefault(const char* pszDefault);
-	bool SetColorFromString(const char* pszValue);
-
-	void ChangeStringValue(const char* pszTempValue);
-	void ChangeStringValueUnsafe(const char* pszNewValue);
-
-	void InstallChangeCallback(FnChangeCallback_t callback, bool bInvoke);
-	void RemoveChangeCallback(FnChangeCallback_t callback);
-
-	bool IsRegistered(void) const;
-	bool IsCommand(void) const;
-
-	bool IsFlagSet(int nFlags) const { return IsFlagSetInternal(this, nFlags); };
-	static bool IsFlagSetInternal(const ConVar* pConVar, int nFlags);
-
-	struct CVValue_t
-	{
-		char*      m_pszString;
-		size_t     m_iStringLength;
-		float      m_fValue;
-		int        m_nValue;
-	};
-
-	IConVar*       m_pIConVarVFTable; //0x0040
-	ConVar*        m_pParent        ; //0x0048
-	const char*    m_pszDefaultValue; //0x0050
-	CVValue_t      m_Value          ; //0c0058
-	bool           m_bHasMin        ; //0x0070
-	float          m_fMinVal        ; //0x0074
-	bool           m_bHasMax        ; //0x0078
-	float          m_fMaxVal        ; //0x007C
-	CUtlVector<FnChangeCallback_t> m_fnChangeCallbacks; //0x0080
-}; //Size: 0x00A0
-static_assert(sizeof(ConVar) == 0xA0);
-
-/* ==== ICONVAR ========================================================================================================================================================= */
-inline CMemory p_ConVar_Register;
-inline auto v_ConVar_Register = p_ConVar_Register.RCast<void* (*)(ConVar* thisptr, const char* szName, const char* szDefaultValue, int nFlags, const char* szHelpString, bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString)>();
-
-inline CMemory p_ConVar_Unregister;
-inline auto v_ConVar_Unregister = p_ConVar_Unregister.RCast<void (*)(ConVar* thisptr)>();
-
-inline CMemory p_ConVar_IsFlagSet;
-inline auto v_ConVar_IsFlagSet = p_ConVar_IsFlagSet.RCast<bool (*)(ConVar* pConVar, int nFlag)>();
-
-inline CMemory p_ConVar_PrintDescription;
-inline auto v_ConVar_PrintDescription = p_ConVar_PrintDescription.RCast<void* (*)(ConCommandBase* pVar)>();
-
-inline CMemory g_pConVarVBTable;
-inline CMemory g_pConVarVFTable;
-
-///////////////////////////////////////////////////////////////////////////////
-void ConVar_PrintDescription(ConCommandBase* pVar);
-
-///////////////////////////////////////////////////////////////////////////////
-class VConVar : public IDetour
-{
-	virtual void GetAdr(void) const
-	{
-		LogConAdr("ConVar::`vbtable'", g_pConVarVBTable.GetPtr());
-		LogConAdr("ConVar::`vftable'", g_pConVarVFTable.GetPtr());
-		LogFunAdr("ConVar::Register", p_ConVar_Register.GetPtr());
-		LogFunAdr("ConVar::Unregister", p_ConVar_Unregister.GetPtr());
-		LogFunAdr("ConVar::IsFlagSet", p_ConVar_IsFlagSet.GetPtr());
-		LogFunAdr("ConVar_PrintDescription", p_ConVar_PrintDescription.GetPtr());
-	}
-	virtual void GetFun(void) const
-	{
-#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
-		p_ConVar_Register = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 48 89 7C 24 ?? 41 56 48 83 EC 30 F3 0F 10 44 24 ??");
-		p_ConVar_Unregister = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 57 48 83 EC 20 48 8B 59 58 48 8D 05 ?? ?? ?? ??");
-#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
-		p_ConVar_Register = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 40 F3 0F 10 84 24 ?? ?? ?? ??");
-		p_ConVar_Unregister = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B 79 58");
-#endif
-		p_ConVar_IsFlagSet = g_GameDll.FindPatternSIMD("48 8B 41 48 85 50 38");
-		p_ConVar_PrintDescription = g_GameDll.FindPatternSIMD("B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 2B E0 48 8B 01 48 89 9C 24 ?? ?? ?? ??");
-
-		v_ConVar_IsFlagSet = p_ConVar_IsFlagSet.RCast<bool (*)(ConVar*, int)>();
-		v_ConVar_Register = p_ConVar_Register.RCast<void* (*)(ConVar*, const char*, const char*, int, const char*, bool, float, bool, float, FnChangeCallback_t, const char*)>();
-		v_ConVar_Unregister = p_ConVar_Unregister.RCast<void (*)(ConVar*)>();
-		v_ConVar_PrintDescription = p_ConVar_PrintDescription.RCast<void* (*)(ConCommandBase*)>();
-	}
-	virtual void GetVar(void) const { }
-	virtual void GetCon(void) const
-	{
-		g_pConVarVBTable = g_GameDll.GetVirtualMethodTable(".?AVConVar@@", 0);
-		g_pConVarVFTable = g_GameDll.GetVirtualMethodTable(".?AVConVar@@", 1);
-	}
-	virtual void Attach(void) const;
-	virtual void Detach(void) const;
-};
-///////////////////////////////////////////////////////////////////////////////
diff --git a/r5dev/tier1/cmd.cpp b/r5dev/tier1/cmd.cpp
index ba03dffd..23d22e5e 100644
--- a/r5dev/tier1/cmd.cpp
+++ b/r5dev/tier1/cmd.cpp
@@ -12,6 +12,7 @@
 #include "tier1/cvar.h"
 #include "tier1/characterset.h"
 #include "tier1/utlstring.h"
+#include "public/const.h"
 #include "vstdlib/completion.h"
 #include "vstdlib/callback.h"
 
@@ -274,18 +275,23 @@ void CCommand::Reset()
 //-----------------------------------------------------------------------------
 // Purpose: create
 //-----------------------------------------------------------------------------
-ConCommand* ConCommand::Create(const char* pszName, const char* pszHelpString, const char* pszUsageString,
+ConCommand* ConCommand::StaticCreate(const char* pszName, const char* pszHelpString, const char* pszUsageString,
 	int nFlags, FnCommandCallback_t pCallback, FnCommandCompletionCallback pCompletionFunc)
 {
 	ConCommand* pCommand = MemAllocSingleton()->Alloc<ConCommand>(sizeof(ConCommand));
-	memset(pCommand, '\0', sizeof(ConCommand));
+	*(ConCommandBase**)pCommand = g_pConCommandVFTable;
+
+	pCommand->m_pNext = nullptr;
+	pCommand->m_bRegistered = false;
 
-	pCommand->m_pConCommandBaseVFTable = g_pConCommandVFTable.RCast<IConCommandBase*>();
 	pCommand->m_pszName = pszName;
 	pCommand->m_pszHelpString = pszHelpString;
 	pCommand->m_pszUsageString = pszUsageString;
+	pCommand->s_pAccessor = nullptr;
 	pCommand->m_nFlags = nFlags;
+
 	pCommand->m_nNullCallBack = NullSub;
+	pCommand->m_pSubCallback = nullptr;
 	pCommand->m_fnCommandCallback = pCallback;
 	pCommand->m_bHasCompletionCallback = pCompletionFunc != nullptr ? true : false;
 	pCommand->m_bUsingNewCommandCallback = true;
@@ -293,7 +299,6 @@ ConCommand* ConCommand::Create(const char* pszName, const char* pszHelpString, c
 	pCommand->m_fnCompletionCallback = pCompletionFunc ? pCompletionFunc : CallbackStub;
 
 	g_pCVar->RegisterConCommand(pCommand);
-
 	return pCommand;
 }
 
@@ -310,86 +315,78 @@ ConCommand::ConCommand()
 	, m_bUsingCommandCallbackInterface(false)
 {
 }
-
-//-----------------------------------------------------------------------------
-// Purpose: destructor
-//-----------------------------------------------------------------------------
-ConCommand::~ConCommand()
-{
-}
-
 //-----------------------------------------------------------------------------
 // Purpose: ConCommand registration
 //-----------------------------------------------------------------------------
-void ConCommand::Init(void)
+void ConCommand::StaticInit(void)
 {
 	//-------------------------------------------------------------------------
 	// ENGINE DLL                                                             |
 #if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
-	ConCommand::Create("bhit", "Bullet-hit trajectory debug.", nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_GAMEDLL, BHit_f, nullptr);
+	ConCommand::StaticCreate("bhit", "Bullet-hit trajectory debug.", nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_GAMEDLL, BHit_f, nullptr);
 #endif // !GAMEDLL_S0 && !GAMEDLL_S1
 #ifndef DEDICATED
-	ConCommand::Create("line", "Draw a debug line.",       nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, Line_f, nullptr);
-	ConCommand::Create("sphere", "Draw a debug sphere.",   nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, Sphere_f, nullptr);
-	ConCommand::Create("capsule", "Draw a debug capsule.", nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, Capsule_f, nullptr);
+	ConCommand::StaticCreate("line", "Draw a debug line.",       nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, Line_f, nullptr);
+	ConCommand::StaticCreate("sphere", "Draw a debug sphere.",   nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, Sphere_f, nullptr);
+	ConCommand::StaticCreate("capsule", "Draw a debug capsule.", nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, Capsule_f, nullptr);
 #endif //!DEDICATED
-	ConCommand::Create("con_help", "Shows the colors and description of each context.", nullptr, FCVAR_RELEASE, CON_Help_f, nullptr);
+	ConCommand::StaticCreate("con_help", "Shows the colors and description of each context.", nullptr, FCVAR_RELEASE, CON_Help_f, nullptr);
 #ifndef CLIENT_DLL
-	ConCommand::Create("reload_playlists", "Reloads the playlists file.", nullptr, FCVAR_RELEASE, Host_ReloadPlaylists_f, nullptr);
+	ConCommand::StaticCreate("reload_playlists", "Reloads the playlists file.", nullptr, FCVAR_RELEASE, Host_ReloadPlaylists_f, nullptr);
 #endif // !CLIENT_DLL
 	//-------------------------------------------------------------------------
 	// SERVER DLL                                                             |
 #ifndef CLIENT_DLL
-	ConCommand::Create("script", "Run input code as SERVER script on the VM.", nullptr, FCVAR_GAMEDLL | FCVAR_CHEAT, SQVM_ServerScript_f, nullptr);
-	ConCommand::Create("sv_kick", "Kick a client from the server by user name.", "sv_kick \"<userId>\"", FCVAR_RELEASE, Host_Kick_f, nullptr);
-	ConCommand::Create("sv_kickid", "Kick a client from the server by handle, nucleus id or ip address.", "sv_kickid \"<handle>\"/\"<nucleusId>/<ipAddress>\"", FCVAR_RELEASE, Host_KickID_f, nullptr);
-	ConCommand::Create("sv_ban", "Bans a client from the server by user name.", "sv_ban <userId>", FCVAR_RELEASE, Host_Ban_f, nullptr);
-	ConCommand::Create("sv_banid", "Bans a client from the server by handle, nucleus id or ip address.", "sv_banid \"<handle>\"/\"<nucleusId>/<ipAddress>\"", FCVAR_RELEASE, Host_BanID_f, nullptr);
-	ConCommand::Create("sv_unban", "Unbans a client from the server by nucleus id or ip address.", "sv_unban \"<nucleusId>\"/\"<ipAddress>\"", FCVAR_RELEASE, Host_Unban_f, nullptr);
-	ConCommand::Create("sv_reloadbanlist", "Reloads the banned list.", nullptr, FCVAR_RELEASE, Host_ReloadBanList_f, nullptr);
-	ConCommand::Create("sv_addbot", "Creates a bot on the server.", nullptr, FCVAR_RELEASE, CC_CreateFakePlayer_f, nullptr);
-	ConCommand::Create("navmesh_hotswap", "Hot swap the NavMesh for all hulls.", nullptr, FCVAR_DEVELOPMENTONLY, Detour_HotSwap_f, nullptr);
+	ConCommand::StaticCreate("script", "Run input code as SERVER script on the VM.", nullptr, FCVAR_GAMEDLL | FCVAR_CHEAT, SQVM_ServerScript_f, nullptr);
+	ConCommand::StaticCreate("sv_kick", "Kick a client from the server by user name.", "sv_kick \"<userId>\"", FCVAR_RELEASE, Host_Kick_f, nullptr);
+	ConCommand::StaticCreate("sv_kickid", "Kick a client from the server by handle, nucleus id or ip address.", "sv_kickid \"<handle>\"/\"<nucleusId>/<ipAddress>\"", FCVAR_RELEASE, Host_KickID_f, nullptr);
+	ConCommand::StaticCreate("sv_ban", "Bans a client from the server by user name.", "sv_ban <userId>", FCVAR_RELEASE, Host_Ban_f, nullptr);
+	ConCommand::StaticCreate("sv_banid", "Bans a client from the server by handle, nucleus id or ip address.", "sv_banid \"<handle>\"/\"<nucleusId>/<ipAddress>\"", FCVAR_RELEASE, Host_BanID_f, nullptr);
+	ConCommand::StaticCreate("sv_unban", "Unbans a client from the server by nucleus id or ip address.", "sv_unban \"<nucleusId>\"/\"<ipAddress>\"", FCVAR_RELEASE, Host_Unban_f, nullptr);
+	ConCommand::StaticCreate("sv_reloadbanlist", "Reloads the banned list.", nullptr, FCVAR_RELEASE, Host_ReloadBanList_f, nullptr);
+	ConCommand::StaticCreate("sv_addbot", "Creates a bot on the server.", nullptr, FCVAR_RELEASE, CC_CreateFakePlayer_f, nullptr);
+	ConCommand::StaticCreate("navmesh_hotswap", "Hot swap the NavMesh for all hulls.", nullptr, FCVAR_DEVELOPMENTONLY, Detour_HotSwap_f, nullptr);
 #endif // !CLIENT_DLL
 #ifndef DEDICATED
 	//-------------------------------------------------------------------------
 	// CLIENT DLL                                                             |
-	ConCommand::Create("script_client", "Run input code as CLIENT script on the VM.", nullptr, FCVAR_CLIENTDLL | FCVAR_CHEAT, SQVM_ClientScript_f, nullptr);
-	ConCommand::Create("rcon", "Forward RCON query to remote server.", "rcon \"<query>\"", FCVAR_CLIENTDLL | FCVAR_RELEASE, RCON_CmdQuery_f, nullptr);
-	ConCommand::Create("rcon_disconnect", "Disconnect from RCON server.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, RCON_Disconnect_f, nullptr);
+	ConCommand::StaticCreate("script_client", "Run input code as CLIENT script on the VM.", nullptr, FCVAR_CLIENTDLL | FCVAR_CHEAT, SQVM_ClientScript_f, nullptr);
+	ConCommand::StaticCreate("rcon", "Forward RCON query to remote server.", "rcon \"<query>\"", FCVAR_CLIENTDLL | FCVAR_RELEASE, RCON_CmdQuery_f, nullptr);
+	ConCommand::StaticCreate("rcon_disconnect", "Disconnect from RCON server.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, RCON_Disconnect_f, nullptr);
 
-	ConCommand::Create("con_history", "Shows the developer console submission history.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_LogHistory_f, nullptr);
-	ConCommand::Create("con_removeline", "Removes a range of lines from the developer console.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_RemoveLine_f, nullptr);
-	ConCommand::Create("con_clearlines", "Clears all lines from the developer console.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_ClearLines_f, nullptr);
-	ConCommand::Create("con_clearhistory", "Clears all submissions from the developer console history.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_ClearHistory_f, nullptr);
+	ConCommand::StaticCreate("con_history", "Shows the developer console submission history.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_LogHistory_f, nullptr);
+	ConCommand::StaticCreate("con_removeline", "Removes a range of lines from the developer console.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_RemoveLine_f, nullptr);
+	ConCommand::StaticCreate("con_clearlines", "Clears all lines from the developer console.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_ClearLines_f, nullptr);
+	ConCommand::StaticCreate("con_clearhistory", "Clears all submissions from the developer console history.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, CON_ClearHistory_f, nullptr);
 
-	ConCommand::Create("toggleconsole", "Show/hide the developer console.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, ToggleConsole_f, nullptr);
-	ConCommand::Create("togglebrowser", "Show/hide the server browser.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, ToggleBrowser_f, nullptr);
+	ConCommand::StaticCreate("toggleconsole", "Show/hide the developer console.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, ToggleConsole_f, nullptr);
+	ConCommand::StaticCreate("togglebrowser", "Show/hide the server browser.", nullptr, FCVAR_CLIENTDLL | FCVAR_RELEASE, ToggleBrowser_f, nullptr);
 	//-------------------------------------------------------------------------
 	// UI DLL                                                                 |
-	ConCommand::Create("script_ui", "Run input code as UI script on the VM.", nullptr, FCVAR_CLIENTDLL | FCVAR_CHEAT, SQVM_UIScript_f, nullptr);
+	ConCommand::StaticCreate("script_ui", "Run input code as UI script on the VM.", nullptr, FCVAR_CLIENTDLL | FCVAR_CHEAT, SQVM_UIScript_f, nullptr);
 #endif // !DEDICATED
 	//-------------------------------------------------------------------------
 	// FILESYSTEM API                                                         |
-	ConCommand::Create("fs_vpk_mount",  "Mount a VPK file for FileSystem usage.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Mount_f, nullptr);
-	ConCommand::Create("fs_vpk_unmount",  "Unmount a VPK file and clear its cache.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Unmount_f, nullptr);
-	ConCommand::Create("fs_vpk_build",  "Build a VPK file from current workspace.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Pack_f, nullptr);
-	ConCommand::Create("fs_vpk_unpack", "Unpack all files from a VPK file.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Unpack_f, nullptr);
+	ConCommand::StaticCreate("fs_vpk_mount",  "Mount a VPK file for FileSystem usage.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Mount_f, nullptr);
+	ConCommand::StaticCreate("fs_vpk_unmount",  "Unmount a VPK file and clear its cache.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Unmount_f, nullptr);
+	ConCommand::StaticCreate("fs_vpk_build",  "Build a VPK file from current workspace.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Pack_f, nullptr);
+	ConCommand::StaticCreate("fs_vpk_unpack", "Unpack all files from a VPK file.", nullptr, FCVAR_DEVELOPMENTONLY, VPK_Unpack_f, nullptr);
 	//-------------------------------------------------------------------------
 	// RTECH API                                                              |
-	ConCommand::Create("rtech_strtoguid", "Calculates the GUID from input data.", nullptr, FCVAR_DEVELOPMENTONLY, RTech_StringToGUID_f, nullptr);
-	ConCommand::Create("pak_decompress", "Decompresses specified RPAK file.", nullptr, FCVAR_DEVELOPMENTONLY, RTech_Decompress_f, RTech_PakDecompress_f_CompletionFunc);
-	ConCommand::Create("pak_requestload", "Requests asynchronous load for specified RPAK file.", nullptr, FCVAR_DEVELOPMENTONLY, Pak_RequestLoad_f, RTech_PakLoad_f_CompletionFunc);
-	ConCommand::Create("pak_requestunload", "Requests unload for specified RPAK file or ID.", nullptr, FCVAR_DEVELOPMENTONLY, Pak_RequestUnload_f, RTech_PakUnload_f_CompletionFunc);
-	ConCommand::Create("pak_swap", "Requests swap for specified RPAK file or ID", nullptr, FCVAR_DEVELOPMENTONLY, Pak_Swap_f, nullptr);
-	ConCommand::Create("pak_listpaks", "Display a list of the loaded Pak files.", nullptr, FCVAR_RELEASE, Pak_ListPaks_f, nullptr);
-	ConCommand::Create("pak_listtypes", "Display a list of the registered asset types.", nullptr, FCVAR_RELEASE, Pak_ListTypes_f, nullptr);
+	ConCommand::StaticCreate("rtech_strtoguid", "Calculates the GUID from input data.", nullptr, FCVAR_DEVELOPMENTONLY, RTech_StringToGUID_f, nullptr);
+	ConCommand::StaticCreate("pak_decompress", "Decompresses specified RPAK file.", nullptr, FCVAR_DEVELOPMENTONLY, RTech_Decompress_f, RTech_PakDecompress_f_CompletionFunc);
+	ConCommand::StaticCreate("pak_requestload", "Requests asynchronous load for specified RPAK file.", nullptr, FCVAR_DEVELOPMENTONLY, Pak_RequestLoad_f, RTech_PakLoad_f_CompletionFunc);
+	ConCommand::StaticCreate("pak_requestunload", "Requests unload for specified RPAK file or ID.", nullptr, FCVAR_DEVELOPMENTONLY, Pak_RequestUnload_f, RTech_PakUnload_f_CompletionFunc);
+	ConCommand::StaticCreate("pak_swap", "Requests swap for specified RPAK file or ID", nullptr, FCVAR_DEVELOPMENTONLY, Pak_Swap_f, nullptr);
+	ConCommand::StaticCreate("pak_listpaks", "Display a list of the loaded Pak files.", nullptr, FCVAR_RELEASE, Pak_ListPaks_f, nullptr);
+	ConCommand::StaticCreate("pak_listtypes", "Display a list of the registered asset types.", nullptr, FCVAR_RELEASE, Pak_ListTypes_f, nullptr);
 	//-------------------------------------------------------------------------
 	// NETCHANNEL                                                             |
-	ConCommand::Create("net_setkey", "Sets user specified base64 net key.", nullptr, FCVAR_RELEASE, NET_SetKey_f, nullptr);
-	ConCommand::Create("net_generatekey", "Generates and sets a random base64 net key.", nullptr, FCVAR_RELEASE, NET_GenerateKey_f, nullptr);
+	ConCommand::StaticCreate("net_setkey", "Sets user specified base64 net key.", nullptr, FCVAR_RELEASE, NET_SetKey_f, nullptr);
+	ConCommand::StaticCreate("net_generatekey", "Generates and sets a random base64 net key.", nullptr, FCVAR_RELEASE, NET_GenerateKey_f, nullptr);
 	//-------------------------------------------------------------------------
 	// TIER0                                                                  |
-	ConCommand::Create("sig_getadr", "Logs the sigscan results to the console.", nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_HIDDEN, SIG_GetAdr_f, nullptr);
+	ConCommand::StaticCreate("sig_getadr", "Logs the sigscan results to the console.", nullptr, FCVAR_DEVELOPMENTONLY | FCVAR_HIDDEN, SIG_GetAdr_f, nullptr);
 }
 
 //-----------------------------------------------------------------------------
@@ -544,68 +541,6 @@ void ConCommand::PurgeShipped(void)
 #endif // DEDICATED
 }
 
-//-----------------------------------------------------------------------------
-// Purpose: Returns true if this is a command 
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConCommand::IsCommand(void) const
-{
-	return true;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Calls the autocompletion method to get autocompletion suggestions
-// Input  : *partial - 
-//			&commands - 
-// Output : The number of autocompletion entries
-//-----------------------------------------------------------------------------
-int ConCommand::AutoCompleteSuggest(const char* partial, CUtlVector< CUtlString >& commands)
-{
-	return ConCommand_AutoCompleteSuggest(this, partial, commands);
-}
-
-//-----------------------------------------------------------------------------
-// Returns true if the console command can autocomplete 
-//-----------------------------------------------------------------------------
-bool ConCommand::CanAutoComplete(void) const
-{
-	return m_bHasCompletionCallback;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns true if this is a command 
-// Output : bool
-//-----------------------------------------------------------------------------
-bool ConCommandBase::IsCommand(void) const
-{
-	return m_pConCommandBaseVFTable != g_pConVarVBTable.RCast<void*>();
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Has this cvar been registered
-// Output : Returns true on success, false on failure.
-//-----------------------------------------------------------------------------
-bool ConCommandBase::IsRegistered(void) const
-{
-	return m_bRegistered;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Test each ConCommand query before execution.
-// Input  : *pCommandBase - nFlags 
-// Output : False if execution is permitted, true if not.
-//-----------------------------------------------------------------------------
-bool ConCommandBase::IsFlagSetInternal(const ConCommandBase* pCommandBase, int nFlags)
-{
-	if (cm_unset_all_cmdquery->GetBool())
-	{
-		// Returning false on all queries may cause problems.
-		return false;
-	}
-	// Default behavior.
-	return pCommandBase->HasFlags(nFlags) != 0;
-}
-
 //-----------------------------------------------------------------------------
 // Purpose: Checks if ConCommand has requested flags.
 // Input  : nFlags - 
@@ -616,33 +551,6 @@ bool ConCommandBase::HasFlags(int nFlags) const
 	return m_nFlags & nFlags;
 }
 
-//-----------------------------------------------------------------------------
-// Purpose: Add's flags to ConCommand.
-// Input  : nFlags - 
-//-----------------------------------------------------------------------------
-void ConCommandBase::AddFlags(int nFlags)
-{
-	m_nFlags |= nFlags;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Removes flags from ConCommand.
-// Input  : nFlags - 
-//-----------------------------------------------------------------------------
-void ConCommandBase::RemoveFlags(int nFlags)
-{
-	m_nFlags &= ~nFlags;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns current flags.
-// Output : int
-//-----------------------------------------------------------------------------
-int ConCommandBase::GetFlags(void) const
-{
-	return m_nFlags;
-}
-
 //-----------------------------------------------------------------------------
 // Purpose: 
 // Output : const ConCommandBase
@@ -652,33 +560,6 @@ ConCommandBase* ConCommandBase::GetNext(void) const
 	return m_pNext;
 }
 
-//-----------------------------------------------------------------------------
-// Purpose: Returns the ConCommandBase name.
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* ConCommandBase::GetName(void) const
-{
-	return m_pszName;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns the ConCommandBase help text.
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* ConCommandBase::GetHelpText(void) const
-{
-	return m_pszHelpString;
-}
-
-//-----------------------------------------------------------------------------
-// Purpose: Returns the ConCommandBase usage text.
-// Output : const char*
-//-----------------------------------------------------------------------------
-const char* ConCommandBase::GetUsageText(void) const
-{
-	return m_pszUsageString;
-}
-
 //-----------------------------------------------------------------------------
 // Purpose: Copies string using local new/delete operators
 // Input  : *szFrom - 
@@ -703,6 +584,873 @@ char* ConCommandBase::CopyString(const char* szFrom) const
 	return szTo;
 }
 
+//-----------------------------------------------------------------------------
+// Purpose: create
+//-----------------------------------------------------------------------------
+ConVar* ConVar::StaticCreate(const char* pszName, const char* pszDefaultValue, int nFlags, const char* pszHelpString, bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString)
+{
+	ConVar* pNewConVar = MemAllocSingleton()->Alloc<ConVar>(sizeof(ConVar)); // Allocate new memory with StdMemAlloc else we crash.
+
+	pNewConVar->m_bRegistered = false;
+	*(ConVar**)pNewConVar = g_pConVarVBTable;
+	char* pConVarVFTable = (char*)pNewConVar + sizeof(ConCommandBase);
+	*(IConVar**)pConVarVFTable = g_pConVarVFTable;
+
+	pNewConVar->m_pszName = nullptr;
+	pNewConVar->m_pszHelpString = nullptr;
+	pNewConVar->m_pszUsageString = nullptr;
+	pNewConVar->s_pAccessor = nullptr;
+	pNewConVar->m_nFlags = FCVAR_NONE;
+	pNewConVar->m_pNext = nullptr;
+
+	pNewConVar->m_fnChangeCallbacks.Init();
+
+	v_ConVar_Register(pNewConVar, pszName, pszDefaultValue, nFlags, pszHelpString, bMin, fMin, bMax, fMax, pCallback, pszUsageString);
+	return pNewConVar;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: destroy
+//-----------------------------------------------------------------------------
+void ConVar::Destroy(void)
+{
+	v_ConVar_Unregister(this);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: construct/allocate
+//-----------------------------------------------------------------------------
+ConVar::ConVar(void)
+	: m_pParent(nullptr)
+	, m_pszDefaultValue(nullptr)
+	, m_bHasMin(false)
+	, m_fMinVal(0.f)
+	, m_bHasMax(false)
+	, m_fMaxVal(0.f)
+{
+	m_Value.m_pszString = nullptr;
+	m_Value.m_iStringLength = 0;
+	m_Value.m_fValue = 0.0f;
+	m_Value.m_nValue = 0;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: destructor
+//-----------------------------------------------------------------------------
+//ConVar::~ConVar(void)
+//{
+//	if (m_Value.m_pszString)
+//	{
+//		MemAllocSingleton()->Free(m_Value.m_pszString);
+//		m_Value.m_pszString = NULL;
+//	}
+//}
+
+//-----------------------------------------------------------------------------
+// Purpose: initialize ConVar's
+//-----------------------------------------------------------------------------
+void ConVar::Init(void)
+{
+	//-------------------------------------------------------------------------
+	// ENGINE                                                                 |
+	hostdesc                       = ConVar::StaticCreate("hostdesc", "", FCVAR_RELEASE, "Host game server description.", false, 0.f, false, 0.f, nullptr, nullptr);
+	sdk_fixedframe_tickinterval    = ConVar::StaticCreate("sdk_fixedframe_tickinterval", "0.02", FCVAR_RELEASE, "The tick interval used by the SDK fixed frame.", false, 0.f, false, 0.f, nullptr, nullptr);
+	staticProp_defaultBuildFrustum = ConVar::StaticCreate("staticProp_defaultBuildFrustum", "0", FCVAR_DEVELOPMENTONLY, "Use the old solution for building static prop frustum culling.", false, 0.f, false, 0.f, nullptr, nullptr);
+
+	curl_debug      = ConVar::StaticCreate("curl_debug"     , "0" , FCVAR_DEVELOPMENTONLY, "Determines whether or not to enable curl debug logging.", false, 0.f, false, 0.f, nullptr, "1 = curl logs; 0 (zero) = no logs.");
+	curl_timeout    = ConVar::StaticCreate("curl_timeout"   , "15", FCVAR_DEVELOPMENTONLY, "Maximum time in seconds a curl transfer operation could take.", false, 0.f, false, 0.f, nullptr, nullptr);
+	ssl_verify_peer = ConVar::StaticCreate("ssl_verify_peer", "1" , FCVAR_DEVELOPMENTONLY, "Verify the authenticity of the peer's SSL certificate.", false, 0.f, false, 0.f, nullptr, "1 = curl verifies; 0 (zero) = no verification.");
+
+	rcon_address  = ConVar::StaticCreate("rcon_address",  "localhost", FCVAR_SERVER_CANNOT_QUERY | FCVAR_DONTRECORD | FCVAR_RELEASE, "Remote server access address.", false, 0.f, false, 0.f, nullptr, nullptr);
+	rcon_password = ConVar::StaticCreate("rcon_password", ""         , FCVAR_SERVER_CANNOT_QUERY | FCVAR_DONTRECORD | FCVAR_RELEASE, "Remote server access password (rcon is disabled if empty).", false, 0.f, false, 0.f, &RCON_PasswordChanged_f, nullptr);
+
+	r_debug_overlay_nodecay        = ConVar::StaticCreate("r_debug_overlay_nodecay"       , "0", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Keeps all debug overlays alive regardless of their lifetime. Use command 'clear_debug_overlays' to clear everything.", false, 0.f, false, 0.f, nullptr, nullptr);
+	r_debug_overlay_invisible      = ConVar::StaticCreate("r_debug_overlay_invisible"     , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Show invisible debug overlays (alpha < 1 = 255).", false, 0.f, false, 0.f, nullptr, nullptr);
+	r_debug_overlay_wireframe      = ConVar::StaticCreate("r_debug_overlay_wireframe"     , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Use wireframe in debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	r_debug_draw_depth_test        = ConVar::StaticCreate("r_debug_draw_depth_test"       , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Toggle depth test for other debug draw functionality.", false, 0.f, false, 0.f, nullptr, nullptr);
+	r_drawWorldMeshes              = ConVar::StaticCreate("r_drawWorldMeshes"             , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Render world meshes.", false, 0.f, false, 0.f, nullptr, nullptr);
+	r_drawWorldMeshesDepthOnly     = ConVar::StaticCreate("r_drawWorldMeshesDepthOnly"    , "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Render world meshes (depth only).", false, 0.f, false, 0.f, nullptr, nullptr);
+	r_drawWorldMeshesDepthAtTheEnd = ConVar::StaticCreate("r_drawWorldMeshesDepthAtTheEnd", "1", FCVAR_DEVELOPMENTONLY | FCVAR_CHEAT, "Render world meshes (depth at the end).", false, 0.f, false, 0.f, nullptr, nullptr);
+	//-------------------------------------------------------------------------
+	// SERVER                                                                 |
+#ifndef CLIENT_DLL
+	ai_ainDumpOnLoad             = ConVar::StaticCreate("ai_ainDumpOnLoad"            , "0", FCVAR_DEVELOPMENTONLY, "Dumps AIN data from node graphs loaded from the disk on load.", false, 0.f, false, 0.f, nullptr, nullptr);
+	ai_ainDebugConnect           = ConVar::StaticCreate("ai_ainDebugConnect"          , "0", FCVAR_DEVELOPMENTONLY, "Debug AIN node connections.", false, 0.f, false, 0.f, nullptr, nullptr);
+	ai_script_nodes_draw_range   = ConVar::StaticCreate("ai_script_nodes_draw_range"  , "0", FCVAR_DEVELOPMENTONLY, "Debug draw AIN script nodes ranging from shift index to this cvar.", false, 0.f, false, 0.f, nullptr, nullptr);
+	ai_script_nodes_draw_nearest = ConVar::StaticCreate("ai_script_nodes_draw_nearest", "1", FCVAR_DEVELOPMENTONLY, "Debug draw AIN script node links to nearest node (build order is used if null).", false, 0.f, false, 0.f, nullptr, nullptr);
+
+	navmesh_always_reachable   = ConVar::StaticCreate("navmesh_always_reachable"   , "0"    , FCVAR_DEVELOPMENTONLY, "Marks goal poly from agent poly as reachable regardless of table data ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr);
+	navmesh_debug_type         = ConVar::StaticCreate("navmesh_debug_type"         , "0"    , FCVAR_DEVELOPMENTONLY, "NavMesh debug draw hull index.", true, 0.f, true, 4.f, nullptr, "0 = small, 1 = med_short, 2 = medium, 3 = large, 4 = extra large");
+	navmesh_debug_tile_range   = ConVar::StaticCreate("navmesh_debug_tile_range"   , "0"    , FCVAR_DEVELOPMENTONLY, "NavMesh debug draw tiles ranging from shift index to this cvar.", true, 0.f, false, 0.f, nullptr, nullptr);
+	navmesh_debug_camera_range = ConVar::StaticCreate("navmesh_debug_camera_range" , "2000" , FCVAR_DEVELOPMENTONLY, "Only debug draw tiles within this distance from camera origin.", true, 0.f, false, 0.f, nullptr, nullptr);
+#ifndef DEDICATED
+	navmesh_draw_bvtree            = ConVar::StaticCreate("navmesh_draw_bvtree"            , "-1", FCVAR_DEVELOPMENTONLY, "Draws the BVTree of the NavMesh tiles.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
+	navmesh_draw_portal            = ConVar::StaticCreate("navmesh_draw_portal"            , "-1", FCVAR_DEVELOPMENTONLY, "Draws the portal of the NavMesh tiles.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
+	navmesh_draw_polys             = ConVar::StaticCreate("navmesh_draw_polys"             , "-1", FCVAR_DEVELOPMENTONLY, "Draws the polys of the NavMesh tiles.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
+	navmesh_draw_poly_bounds       = ConVar::StaticCreate("navmesh_draw_poly_bounds"       , "-1", FCVAR_DEVELOPMENTONLY, "Draws the bounds of the NavMesh polys.", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
+	navmesh_draw_poly_bounds_inner = ConVar::StaticCreate("navmesh_draw_poly_bounds_inner" , "0" , FCVAR_DEVELOPMENTONLY, "Draws the inner bounds of the NavMesh polys (requires navmesh_draw_poly_bounds).", false, 0.f, false, 0.f, nullptr, "Index: > 0 && < mesh->m_tileCount");
+#endif // !DEDICATED
+	sv_showconnecting  = ConVar::StaticCreate("sv_showconnecting" , "1", FCVAR_RELEASE, "Logs information about the connecting client to the console.", false, 0.f, false, 0.f, nullptr, nullptr);
+	sv_globalBanlist   = ConVar::StaticCreate("sv_globalBanlist"  , "1", FCVAR_RELEASE, "Determines whether or not to use the global banned list.", false, 0.f, false, 0.f, nullptr, "0 = Disable, 1 = Enable.");
+	sv_pylonVisibility = ConVar::StaticCreate("sv_pylonVisibility", "0", FCVAR_RELEASE, "Determines the visibility to the Pylon master server.", false, 0.f, false, 0.f, nullptr, "0 = Offline, 1 = Hidden, 2 = Public.");
+	sv_pylonRefreshRate   = ConVar::StaticCreate("sv_pylonRefreshRate"  , "5.0", FCVAR_RELEASE, "Pylon host refresh rate (seconds).", true, 2.f, true, 8.f, nullptr, nullptr);
+	sv_banlistRefreshRate = ConVar::StaticCreate("sv_banlistRefreshRate", "1.0", FCVAR_RELEASE, "Banned list refresh rate (seconds).", true, 1.f, false, 0.f, nullptr, nullptr);
+	sv_statusRefreshRate  = ConVar::StaticCreate("sv_statusRefreshRate" , "0.5", FCVAR_RELEASE, "Server status refresh rate (seconds).", false, 0.f, false, 0.f, nullptr, nullptr);
+	sv_autoReloadRate     = ConVar::StaticCreate("sv_autoReloadRate"    , "0"  , FCVAR_RELEASE, "Time in seconds between each server auto-reload (disabled if null). ", true, 0.f, false, 0.f, nullptr, nullptr);
+	sv_quota_stringCmdsPerSecond = ConVar::StaticCreate("sv_quota_stringCmdsPerSecond", "16", FCVAR_RELEASE, "How many string commands per second clients are allowed to submit, 0 to disallow all string commands.", true, 0.f, false, 0.f, nullptr, nullptr);
+	sv_simulateBots = ConVar::StaticCreate("sv_simulateBots", "1", FCVAR_RELEASE, "Simulate user commands for bots on the server.", true, 0.f, false, 0.f, nullptr, nullptr);
+
+	sv_rcon_debug       = ConVar::StaticCreate("sv_rcon_debug"      , "0" , FCVAR_RELEASE, "Show rcon debug information ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr);
+	sv_rcon_sendlogs    = ConVar::StaticCreate("sv_rcon_sendlogs"   , "0" , FCVAR_RELEASE, "Network console logs to connected and authenticated sockets.", false, 0.f, false, 0.f, nullptr, nullptr);
+	sv_rcon_banpenalty  = ConVar::StaticCreate("sv_rcon_banpenalty" , "10", FCVAR_RELEASE, "Number of minutes to ban users who fail rcon authentication.", false, 0.f, false, 0.f, nullptr, nullptr);
+	sv_rcon_maxfailures = ConVar::StaticCreate("sv_rcon_maxfailures", "10", FCVAR_RELEASE, "Max number of times a user can fail rcon authentication before being banned.", true, 1.f, false, 0.f, nullptr, nullptr);
+	sv_rcon_maxignores  = ConVar::StaticCreate("sv_rcon_maxignores" , "15", FCVAR_RELEASE, "Max number of times a user can ignore the instruction message before being banned.", true, 1.f, false, 0.f, nullptr, nullptr);
+	sv_rcon_maxsockets  = ConVar::StaticCreate("sv_rcon_maxsockets" , "32", FCVAR_RELEASE, "Max number of accepted sockets before the server starts closing redundant sockets.", true, 1.f, false, 0.f, nullptr, nullptr);
+	sv_rcon_whitelist_address = ConVar::StaticCreate("sv_rcon_whitelist_address", "", FCVAR_RELEASE, "This address is not considered a 'redundant' socket and will never be banned for failed authentication attempts.", false, 0.f, false, 0.f, nullptr, "Format: '::ffff:127.0.0.1'");
+#endif // !CLIENT_DLL
+#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
+	bhit_depth_test = ConVar::StaticCreate("bhit_depth_test", "0", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Use depth test for bullet ray trace overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	bhit_abs_origin = ConVar::StaticCreate("bhit_abs_origin", "1", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED, "Draw entity's predicted abs origin upon bullet impact for trajectory debugging (requires 'r_visualizetraces' to be set!).", false, 0.f, false, 0.f, nullptr, nullptr);
+#endif // !GAMEDLL_S0 && !GAMEDLL_S1
+	//-------------------------------------------------------------------------
+	// CLIENT                                                                 |
+#ifndef DEDICATED
+	cl_rcon_request_sendlogs = ConVar::StaticCreate("cl_rcon_request_sendlogs", "1" , FCVAR_RELEASE, "Request the rcon server to send console logs on connect.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_quota_stringCmdsPerSecond = ConVar::StaticCreate("cl_quota_stringCmdsPerSecond", "16" , FCVAR_RELEASE, "How many string commands per second user is allowed to submit, 0 to allow all submissions.", true, 0.f, false, 0.f, nullptr, nullptr);
+
+	cl_notify_invert_x = ConVar::StaticCreate("cl_notify_invert_x", "0", FCVAR_DEVELOPMENTONLY, "Inverts the X offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_notify_invert_y = ConVar::StaticCreate("cl_notify_invert_y", "0", FCVAR_DEVELOPMENTONLY, "Inverts the Y offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_notify_offset_x = ConVar::StaticCreate("cl_notify_offset_x", "10", FCVAR_DEVELOPMENTONLY, "X offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_notify_offset_y = ConVar::StaticCreate("cl_notify_offset_y", "10", FCVAR_DEVELOPMENTONLY, "Y offset for console notify debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+
+	cl_showsimstats      = ConVar::StaticCreate("cl_showsimstats"     , "0"  , FCVAR_DEVELOPMENTONLY, "Shows the tick counter for the server/client simulation and the render frame.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_simstats_invert_x = ConVar::StaticCreate("cl_simstats_invert_x", "1"  , FCVAR_DEVELOPMENTONLY, "Inverts the X offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_simstats_invert_y = ConVar::StaticCreate("cl_simstats_invert_y", "1"  , FCVAR_DEVELOPMENTONLY, "Inverts the Y offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_simstats_offset_x = ConVar::StaticCreate("cl_simstats_offset_x", "650", FCVAR_DEVELOPMENTONLY, "X offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_simstats_offset_y = ConVar::StaticCreate("cl_simstats_offset_y", "120", FCVAR_DEVELOPMENTONLY, "Y offset for simulation debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+
+	cl_showgpustats      = ConVar::StaticCreate("cl_showgpustats"     , "0", FCVAR_DEVELOPMENTONLY, "Texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_gpustats_invert_x = ConVar::StaticCreate("cl_gpustats_invert_x", "1", FCVAR_DEVELOPMENTONLY, "Inverts the X offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_gpustats_invert_y = ConVar::StaticCreate("cl_gpustats_invert_y", "1", FCVAR_DEVELOPMENTONLY, "Inverts the Y offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_gpustats_offset_x = ConVar::StaticCreate("cl_gpustats_offset_x", "650", FCVAR_DEVELOPMENTONLY, "X offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_gpustats_offset_y = ConVar::StaticCreate("cl_gpustats_offset_y", "105", FCVAR_DEVELOPMENTONLY, "Y offset for texture streaming debug overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+
+	cl_showmaterialinfo      = ConVar::StaticCreate("cl_showmaterialinfo"     , "0"  , FCVAR_DEVELOPMENTONLY, "Draw info for the material under the crosshair on screen.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_materialinfo_offset_x = ConVar::StaticCreate("cl_materialinfo_offset_x", "0"  , FCVAR_DEVELOPMENTONLY, "X offset for material debug info overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	cl_materialinfo_offset_y = ConVar::StaticCreate("cl_materialinfo_offset_y", "420", FCVAR_DEVELOPMENTONLY, "Y offset for material debug info overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+
+	con_drawnotify = ConVar::StaticCreate("con_drawnotify", "0", FCVAR_RELEASE, "Draws the RUI console to the hud.", false, 0.f, false, 0.f, nullptr, nullptr);
+	con_notifylines     = ConVar::StaticCreate("con_notifylines"    , "3" , FCVAR_MATERIAL_SYSTEM_THREAD, "Number of console lines to overlay for debugging.", true, 1.f, false, 0.f, nullptr, nullptr);
+	con_notifytime      = ConVar::StaticCreate("con_notifytime"     , "6" , FCVAR_MATERIAL_SYSTEM_THREAD, "How long to display recent console text to the upper part of the game window.", false, 1.f, false, 50.f, nullptr, nullptr);
+
+	con_notify_invert_x = ConVar::StaticCreate("con_notify_invert_x", "0" , FCVAR_MATERIAL_SYSTEM_THREAD, "Inverts the X offset for RUI console overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	con_notify_invert_y = ConVar::StaticCreate("con_notify_invert_y", "0" , FCVAR_MATERIAL_SYSTEM_THREAD, "Inverts the Y offset for RUI console overlay.", false, 0.f, false, 0.f, nullptr, nullptr);
+	con_notify_offset_x = ConVar::StaticCreate("con_notify_offset_x", "10", FCVAR_MATERIAL_SYSTEM_THREAD, "X offset for RUI console overlay.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_offset_y = ConVar::StaticCreate("con_notify_offset_y", "10", FCVAR_MATERIAL_SYSTEM_THREAD, "Y offset for RUI console overlay.", false, 1.f, false, 50.f, nullptr, nullptr);
+
+	con_notify_script_server_clr  = ConVar::StaticCreate("con_notify_script_server_clr", "130 120 245 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Script SERVER VM RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_script_client_clr  = ConVar::StaticCreate("con_notify_script_client_clr", "117 116 139 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Script CLIENT VM RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_script_ui_clr      = ConVar::StaticCreate("con_notify_script_ui_clr"    , "200 110 110 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Script UI VM RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+
+	con_notify_native_server_clr = ConVar::StaticCreate("con_notify_native_server_clr", "20 50 248 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native SERVER RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_client_clr = ConVar::StaticCreate("con_notify_native_client_clr", "70 70 70 255"   , FCVAR_MATERIAL_SYSTEM_THREAD, "Native CLIENT RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_ui_clr     = ConVar::StaticCreate("con_notify_native_ui_clr"    , "200 60 60 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native UI RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_engine_clr = ConVar::StaticCreate("con_notify_native_engine_clr", "255 255 255 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Native engine RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_fs_clr     = ConVar::StaticCreate("con_notify_native_fs_clr"    , "0 100 225 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native FileSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_rtech_clr  = ConVar::StaticCreate("con_notify_native_rtech_clr" , "25 120 20 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native RTech RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_ms_clr     = ConVar::StaticCreate("con_notify_native_ms_clr"    , "200 20 180 255" , FCVAR_MATERIAL_SYSTEM_THREAD, "Native MaterialSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_audio_clr  = ConVar::StaticCreate("con_notify_native_audio_clr" , "238 43 10 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native AudioSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_native_video_clr  = ConVar::StaticCreate("con_notify_native_video_clr" , "115 0 235 255"  , FCVAR_MATERIAL_SYSTEM_THREAD, "Native VideoSystem RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+
+	con_notify_netcon_clr  = ConVar::StaticCreate("con_notify_netcon_clr" , "255 255 255 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Net console RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_common_clr  = ConVar::StaticCreate("con_notify_common_clr" , "255 140 80 255" , FCVAR_MATERIAL_SYSTEM_THREAD, "Common RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+
+	con_notify_warning_clr = ConVar::StaticCreate("con_notify_warning_clr", "180 180 20 255", FCVAR_MATERIAL_SYSTEM_THREAD, "Warning RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+	con_notify_error_clr   = ConVar::StaticCreate("con_notify_error_clr"  , "225 20 20 255" , FCVAR_MATERIAL_SYSTEM_THREAD, "Error RUI console overlay log color.", false, 1.f, false, 50.f, nullptr, nullptr);
+
+	con_max_lines                 = ConVar::StaticCreate("con_max_lines"                , "1024", FCVAR_DEVELOPMENTONLY, "Maximum number of lines in the console before cleanup starts.", true, 1.f, false, 0.f, nullptr, nullptr);
+	con_max_history               = ConVar::StaticCreate("con_max_history"              , "512" , FCVAR_DEVELOPMENTONLY, "Maximum number of command submission items before history cleanup starts.", true, 0.f, false, 0.f, nullptr, nullptr);
+	con_suggestion_limit          = ConVar::StaticCreate("con_suggestion_limit"         , "128" , FCVAR_DEVELOPMENTONLY, "Maximum number of suggestions the autocomplete window will show for the console.", true, 0.f, false, 0.f, nullptr, nullptr);
+	con_suggestion_showhelptext   = ConVar::StaticCreate("con_suggestion_showhelptext"  , "1"   , FCVAR_DEVELOPMENTONLY, "Show CommandBase help text in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr);
+	con_suggestion_showflags      = ConVar::StaticCreate("con_suggestion_showflags"     , "1"   , FCVAR_DEVELOPMENTONLY, "Show CommandBase flags in autocomplete window.", false, 0.f, false, 0.f, nullptr, nullptr);
+	con_suggestion_flags_realtime = ConVar::StaticCreate("con_suggestion_flags_realtime", "1"   , FCVAR_DEVELOPMENTONLY, "Whether to show compile-time or run-time CommandBase flags.", false, 0.f, false, 0.f, nullptr, nullptr);
+#endif // !DEDICATED
+	//-------------------------------------------------------------------------
+	// FILESYSTEM                                                             |
+	fs_showWarnings                   = ConVar::StaticCreate("fs_showWarnings"                       , "0", FCVAR_DEVELOPMENTONLY, "Logs the FileSystem warnings to the console, filtered by 'fs_warning_level' ( !slower! ).", true, 0.f, true, 2.f, nullptr, "0 = log to file. 1 = 0 + log to console. 2 = 1 + log to notify.");
+	fs_packedstore_entryblock_stats   = ConVar::StaticCreate("fs_packedstore_entryblock_stats"       , "0", FCVAR_DEVELOPMENTONLY, "Logs the stats of each file entry in the VPK during decompression ( !slower! ).", false, 0.f, false, 0.f, nullptr, nullptr);
+	fs_packedstore_workspace          = ConVar::StaticCreate("fs_packedstore_workspace" , "platform/ship/", FCVAR_DEVELOPMENTONLY, "Determines the current VPK workspace.", false, 0.f, false, 0.f, nullptr, nullptr);
+	fs_packedstore_compression_level  = ConVar::StaticCreate("fs_packedstore_compression_level", "default", FCVAR_DEVELOPMENTONLY, "Determines the VPK compression level.", false, 0.f, false, 0.f, nullptr, "fastest faster default better uber");
+	fs_packedstore_max_helper_threads = ConVar::StaticCreate("fs_packedstore_max_helper_threads"    , "-1", FCVAR_DEVELOPMENTONLY, "Max # of additional \"helper\" threads to create during compression.", true, -1, true, LZHAM_MAX_HELPER_THREADS, nullptr, "Must range between [-1,LZHAM_MAX_HELPER_THREADS], where -1=max practical.");
+	//-------------------------------------------------------------------------
+	// MATERIALSYSTEM                                                         |
+#ifndef DEDICATED
+	mat_alwaysComplain = ConVar::StaticCreate("mat_alwaysComplain", "0", FCVAR_RELEASE | FCVAR_MATERIAL_SYSTEM_THREAD, "Always complain when a material is missing.", false, 0.f, false, 0.f, nullptr, nullptr);
+#endif // !DEDICATED
+	//-------------------------------------------------------------------------
+	// SQUIRREL                                                               |
+	script_show_output      = ConVar::StaticCreate("script_show_output" , "0", FCVAR_RELEASE, "Prints the VM output to the console ( !slower! ).", true, 0.f, true, 2.f, nullptr, "0 = log to file. 1 = 0 + log to console. 2 = 1 + log to notify.");
+	script_show_warning     = ConVar::StaticCreate("script_show_warning", "0", FCVAR_RELEASE, "Prints the VM warning output to the console ( !slower! ).", true, 0.f, true, 2.f, nullptr, "0 = log to file. 1 = 0 + log to console. 2 = 1 + log to notify.");
+	//-------------------------------------------------------------------------
+	// NETCHANNEL                                                             |
+	net_tracePayload           = ConVar::StaticCreate("net_tracePayload"          , "0", FCVAR_DEVELOPMENTONLY                    , "Log the payload of the send/recv datagram to a file on the disk.", false, 0.f, false, 0.f, nullptr, nullptr);
+	net_encryptionEnable       = ConVar::StaticCreate("net_encryptionEnable"      , "1", FCVAR_DEVELOPMENTONLY | FCVAR_REPLICATED , "Use AES encryption on game packets.", false, 0.f, false, 0.f, nullptr, nullptr);
+	net_useRandomKey           = ConVar::StaticCreate("net_useRandomKey"          , "1"                        , FCVAR_RELEASE    , "Use random AES encryption key for game packets.", false, 0.f, false, 0.f, &NET_UseRandomKeyChanged_f, nullptr);
+	net_processTimeBudget      = ConVar::StaticCreate("net_processTimeBudget"     ,"200"                       , FCVAR_RELEASE    , "Net message process time budget in milliseconds (removing netchannel if exceeded).", true, 0.f, false, 0.f, nullptr, "0 = disabled.");
+	//-------------------------------------------------------------------------
+	// NETWORKSYSTEM                                                          |
+	pylon_matchmaking_hostname = ConVar::StaticCreate("pylon_matchmaking_hostname", "ms.r5reloaded.com", FCVAR_RELEASE, "Holds the pylon matchmaking hostname.", false, 0.f, false, 0.f, &MP_HostName_Changed_f, nullptr);
+	pylon_host_update_interval = ConVar::StaticCreate("pylon_host_update_interval", "5"                , FCVAR_RELEASE, "Length of time in seconds between each status update interval to master server.", true, 5.f, false, 0.f, nullptr, nullptr);
+	pylon_showdebuginfo        = ConVar::StaticCreate("pylon_showdebuginfo"       , "0"                , FCVAR_RELEASE, "Shows debug output for pylon.", false, 0.f, false, 0.f, nullptr, nullptr);
+	//-------------------------------------------------------------------------
+	// RTECH API                                                              |
+	rtech_debug = ConVar::StaticCreate("rtech_debug", "0", FCVAR_DEVELOPMENTONLY, "Shows debug output for the RTech system.", false, 0.f, false, 0.f, nullptr, nullptr);
+	//-------------------------------------------------------------------------
+	// RUI                                                                    |
+#ifndef DEDICATED
+	rui_drawEnable = ConVar::StaticCreate("rui_drawEnable", "1", FCVAR_RELEASE, "Draws the RUI if set.", false, 0.f, false, 0.f, nullptr, " 1 = Draw, 0 = No Draw.");
+#endif // !DEDICATED
+	//-------------------------------------------------------------------------
+	// MILES                                                                  |
+#ifndef DEDICATED
+	miles_debug = ConVar::StaticCreate("miles_debug", "0", FCVAR_RELEASE, "Enables debug prints for the Miles Sound System", false, 0.f, false, 0.f, nullptr, " 1 = Print, 0 = No Print");
+#endif // !DEDICATED
+	//-------------------------------------------------------------------------
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: initialize shipped ConVar's
+//-----------------------------------------------------------------------------
+void ConVar::InitShipped(void)
+{
+#ifndef CLIENT_DLL
+	ai_script_nodes_draw             = g_pCVar->FindVar("ai_script_nodes_draw");
+#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1)
+	bhit_enable                      = g_pCVar->FindVar("bhit_enable");
+#endif // !GAMEDLL_S0 && !GAMEDLL_S1
+#endif // !CLIENT_DLL
+	developer                        = g_pCVar->FindVar("developer");
+	fps_max                          = g_pCVar->FindVar("fps_max");
+	fs_showAllReads                  = g_pCVar->FindVar("fs_showAllReads");
+#ifndef DEDICATED
+	cl_threaded_bone_setup           = g_pCVar->FindVar("cl_threaded_bone_setup");
+#endif // !DEDICATED
+	single_frame_shutdown_for_reload = g_pCVar->FindVar("single_frame_shutdown_for_reload");
+	enable_debug_overlays            = g_pCVar->FindVar("enable_debug_overlays");
+	debug_draw_box_depth_test        = g_pCVar->FindVar("debug_draw_box_depth_test");
+	model_defaultFadeDistScale       = g_pCVar->FindVar("model_defaultFadeDistScale");
+	model_defaultFadeDistMin         = g_pCVar->FindVar("model_defaultFadeDistMin");
+#ifndef DEDICATED
+	miles_language                   = g_pCVar->FindVar("miles_language");
+	rui_defaultDebugFontFace         = g_pCVar->FindVar("rui_defaultDebugFontFace");
+	r_visualizetraces                = g_pCVar->FindVar("r_visualizetraces");
+	r_visualizetraces_duration       = g_pCVar->FindVar("r_visualizetraces_duration");
+#endif // !DEDICATED
+	staticProp_no_fade_scalar        = g_pCVar->FindVar("staticProp_no_fade_scalar");
+	staticProp_gather_size_weight    = g_pCVar->FindVar("staticProp_gather_size_weight");
+	stream_overlay                   = g_pCVar->FindVar("stream_overlay");
+	stream_overlay_mode              = g_pCVar->FindVar("stream_overlay_mode");
+	sv_visualizetraces               = g_pCVar->FindVar("sv_visualizetraces");
+	sv_visualizetraces_duration      = g_pCVar->FindVar("sv_visualizetraces_duration");
+	old_gather_props                 = g_pCVar->FindVar("old_gather_props");
+#ifndef DEDICATED
+	origin_disconnectWhenOffline     = g_pCVar->FindVar("origin_disconnectWhenOffline");
+#endif // !DEDICATED
+	mp_gamemode                      = g_pCVar->FindVar("mp_gamemode");
+	hostname                         = g_pCVar->FindVar("hostname");
+	hostip                           = g_pCVar->FindVar("hostip");
+	hostport                         = g_pCVar->FindVar("hostport");
+	host_hasIrreversibleShutdown     = g_pCVar->FindVar("host_hasIrreversibleShutdown");
+	net_usesocketsforloopback        = g_pCVar->FindVar("net_usesocketsforloopback");
+#ifndef CLIENT_DLL
+	sv_stats = g_pCVar->FindVar("sv_stats");
+
+	sv_updaterate_mp = g_pCVar->FindVar("sv_updaterate_mp");
+	sv_updaterate_sp = g_pCVar->FindVar("sv_updaterate_sp");
+
+	sv_showhitboxes = g_pCVar->FindVar("sv_showhitboxes");
+	sv_forceChatToTeamOnly = g_pCVar->FindVar("sv_forceChatToTeamOnly");
+
+	sv_showhitboxes->SetMin(-1); // Allow user to go over each entity manually without going out of bounds.
+	sv_showhitboxes->SetMax(NUM_ENT_ENTRIES - 1);
+
+	sv_forceChatToTeamOnly->RemoveFlags(FCVAR_DEVELOPMENTONLY);
+	sv_forceChatToTeamOnly->AddFlags(FCVAR_REPLICATED);
+
+	ai_script_nodes_draw->SetValue(-1);
+#if !defined (GAMEDLL_S0) && !defined (GAMEDLL_S1) && !defined (GAMEDLL_S2)
+	bhit_enable->SetValue(0);
+#endif // !(GAMEDLL_S0) || !(GAMEDLL_S1) || !(GAMEDLL_S2)
+#endif // !CLIENT_DLL
+#ifndef DEDICATED
+	cl_threaded_bone_setup->RemoveFlags(FCVAR_DEVELOPMENTONLY);
+	rui_defaultDebugFontFace->RemoveFlags(FCVAR_DEVELOPMENTONLY);
+	origin_disconnectWhenOffline->RemoveFlags(FCVAR_DEVELOPMENTONLY);
+#endif // !DEDICATED
+	mp_gamemode->RemoveFlags(FCVAR_DEVELOPMENTONLY);
+	mp_gamemode->RemoveChangeCallback(mp_gamemode->m_fnChangeCallbacks[0]);
+	mp_gamemode->InstallChangeCallback(MP_GameMode_Changed_f, false);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: unregister/disable extraneous ConVar's.
+//-----------------------------------------------------------------------------
+void ConVar::PurgeShipped(void)
+{
+#ifdef DEDICATED
+	const char* pszToPurge[] =
+	{
+		"bink_materials_enabled",
+		"communities_enabled",
+		"community_frame_run",
+		"ime_enabled",
+		"origin_igo_mutes_sound_enabled",
+		"twitch_shouldQuery",
+		"voice_enabled",
+	};
+
+	for (size_t i = 0; i < SDK_ARRAYSIZE(pszToPurge); i++)
+	{
+		if (ConVar* pCVar = g_pCVar->FindVar(pszToPurge[i]))
+		{
+			pCVar->SetValue(0);
+		}
+	}
+#endif // DEDICATED
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: clear all hostname ConVar's.
+//-----------------------------------------------------------------------------
+void ConVar::PurgeHostNames(void)
+{
+	const char* pszHostNames[] =
+	{
+		"assetdownloads_hostname",
+		"communities_hostname",
+		"matchmaking_hostname",
+		"party_hostname",
+		"persistence_hostname",
+		"persistenceDef_hostname",
+		"pin_telemetry_hostname",
+		"publication_hostname",
+		"serverReports_hostname",
+		"skill_hostname",
+		"speechtotext_hostname",
+		"staticfile_hostname",
+		"stats_hostname",
+		"steamlink_hostname",
+		"subscription_hostname",
+		"users_hostname"
+	};
+
+	for (size_t i = 0; i < SDK_ARRAYSIZE(pszHostNames); i++)
+	{
+		if (ConVar* pCVar = g_pCVar->FindVar(pszHostNames[i]))
+		{
+			pCVar->SetValue("0.0.0.0");
+		}
+	}
+}
+
+////-----------------------------------------------------------------------------
+//// Purpose: Returns the base ConVar name.
+//// Output : const char*
+////-----------------------------------------------------------------------------
+//const char* ConVar::GetBaseName(void) const
+//{
+//	return m_pParent->m_pszName;
+//}
+//
+////-----------------------------------------------------------------------------
+//// Purpose: Returns the ConVar help text.
+//// Output : const char*
+////-----------------------------------------------------------------------------
+//const char* ConVar::GetHelpText(void) const
+//{
+//	return m_pParent->m_pszHelpString;
+//}
+//
+////-----------------------------------------------------------------------------
+//// Purpose: Returns the ConVar usage text.
+//// Output : const char*
+////-----------------------------------------------------------------------------
+//const char* ConVar::GetUsageText(void) const
+//{
+//	return m_pParent->m_pszUsageString;
+//}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a boolean.
+// Output : bool
+//-----------------------------------------------------------------------------
+bool ConVar::GetBool(void) const
+{
+	return !!GetInt();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a float.
+// Output : float
+//-----------------------------------------------------------------------------
+float ConVar::GetFloat(void) const
+{
+	return m_pParent->m_Value.m_fValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a double.
+// Output : double
+//-----------------------------------------------------------------------------
+double ConVar::GetDouble(void) const
+{
+	return static_cast<double>(m_pParent->m_Value.m_fValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as an integer.
+// Output : int
+//-----------------------------------------------------------------------------
+int ConVar::GetInt(void) const
+{
+	return m_pParent->m_Value.m_nValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as an integer (64-bit).
+// Output : int
+//-----------------------------------------------------------------------------
+int64_t ConVar::GetInt64(void) const
+{
+	return static_cast<int64_t>(m_pParent->m_Value.m_nValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a size type.
+// Output : int
+//-----------------------------------------------------------------------------
+size_t ConVar::GetSizeT(void) const
+{
+	return static_cast<size_t>(m_pParent->m_Value.m_nValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a color.
+// Output : Color
+//-----------------------------------------------------------------------------
+Color ConVar::GetColor(void) const
+{
+	unsigned char* pColorElement = (reinterpret_cast<unsigned char*>(&m_pParent->m_Value.m_nValue));
+	return Color(pColorElement[0], pColorElement[1], pColorElement[2], pColorElement[3]);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Return ConVar value as a string.
+// Output : const char *
+//-----------------------------------------------------------------------------
+const char* ConVar::GetString(void) const
+{
+	if (m_nFlags & FCVAR_NEVER_AS_STRING)
+	{
+		return "FCVAR_NEVER_AS_STRING";
+	}
+
+	char const* str = m_pParent->m_Value.m_pszString;
+	return str ? str : "";
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+// Input  : flMaxVal - 
+//-----------------------------------------------------------------------------
+void ConVar::SetMax(float flMaxVal)
+{
+	m_pParent->m_fMaxVal = flMaxVal;
+	m_pParent->m_bHasMax = true;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+// Input  : flMinVal - 
+//-----------------------------------------------------------------------------
+void ConVar::SetMin(float flMinVal)
+{
+	m_pParent->m_fMinVal = flMinVal;
+	m_pParent->m_bHasMin = true;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+// Input  : flMinVal - 
+// Output : true if there is a min set.
+//-----------------------------------------------------------------------------
+bool ConVar::GetMin(float& flMinVal) const
+{
+	flMinVal = m_pParent->m_fMinVal;
+	return m_pParent->m_bHasMin;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+// Input  : flMaxVal - 
+// Output : true if there is a max set.
+//-----------------------------------------------------------------------------
+bool ConVar::GetMax(float& flMaxVal) const
+{
+	flMaxVal = m_pParent->m_fMaxVal;
+	return m_pParent->m_bHasMax;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: returns the min value.
+// Output : float
+//-----------------------------------------------------------------------------
+float ConVar::GetMinValue(void) const
+{
+	return m_pParent->m_fMinVal;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: returns the max value.
+// Output : float
+//-----------------------------------------------------------------------------
+float ConVar::GetMaxValue(void) const
+{
+	return m_pParent->m_fMaxVal;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: checks if ConVar has min value.
+// Output : bool
+//-----------------------------------------------------------------------------
+bool ConVar::HasMin(void) const
+{
+	return m_pParent->m_bHasMin;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: checks if ConVar has max value.
+// Output : bool
+//-----------------------------------------------------------------------------
+bool ConVar::HasMax(void) const
+{
+	return m_pParent->m_bHasMax;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the ConVar int value.
+// Input  : nValue - 
+//-----------------------------------------------------------------------------
+void ConVar::SetValue(int nValue)
+{
+	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
+	pCVar->InternalSetIntValue(nValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the ConVar float value.
+// Input  : flValue - 
+//-----------------------------------------------------------------------------
+void ConVar::SetValue(float flValue)
+{
+	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
+	pCVar->InternalSetFloatValue(flValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the ConVar string value.
+// Input  : *szValue - 
+//-----------------------------------------------------------------------------
+void ConVar::SetValue(const char* pszValue)
+{
+	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
+	pCVar->InternalSetValue(pszValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the ConVar color value.
+// Input  : value - 
+//-----------------------------------------------------------------------------
+void ConVar::SetValue(Color value)
+{
+	ConVar* pCVar = reinterpret_cast<ConVar*>(m_pParent);
+	pCVar->InternalSetColorValue(value);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+// Input  : *value - 
+//-----------------------------------------------------------------------------
+void ConVar::InternalSetColorValue(Color value)
+{
+	// Stuff color values into an int
+	int nValue = 0;
+
+	unsigned char* pColorElement = (reinterpret_cast<unsigned char*>(&nValue));
+	pColorElement[0] = value[0];
+	pColorElement[1] = value[1];
+	pColorElement[2] = value[2];
+	pColorElement[3] = value[3];
+
+	// Call the int internal set
+	InternalSetIntValue(nValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Reset to default value.
+//-----------------------------------------------------------------------------
+void ConVar::Revert(void)
+{
+	SetValue(m_pszDefaultValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: returns the default ConVar value.
+// Output : const char
+//-----------------------------------------------------------------------------
+const char* ConVar::GetDefault(void) const
+{
+	return m_pParent->m_pszDefaultValue;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the default ConVar value.
+// Input  : *pszDefault -
+//-----------------------------------------------------------------------------
+void ConVar::SetDefault(const char* pszDefault)
+{
+	static const char* pszEmpty = "";
+	m_pszDefaultValue = pszDefault ? pszDefault : pszEmpty;
+	assert(m_pszDefaultValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: sets the ConVar color value from string.
+// Input  : *pszValue - 
+//-----------------------------------------------------------------------------
+bool ConVar::SetColorFromString(const char* pszValue)
+{
+	bool bColor = false;
+
+	// Try pulling RGBA color values out of the string.
+	int nRGBA[4];
+	int nParamsRead = sscanf_s(pszValue, "%i %i %i %i", &(nRGBA[0]), &(nRGBA[1]), &(nRGBA[2]), &(nRGBA[3]));
+
+	if (nParamsRead >= 3)
+	{
+		// This is probably a color!
+		if (nParamsRead == 3)
+		{
+			// Assume they wanted full alpha.
+			nRGBA[3] = 255;
+		}
+
+		if (nRGBA[0] >= 0 && nRGBA[0] <= 255 &&
+			nRGBA[1] >= 0 && nRGBA[1] <= 255 &&
+			nRGBA[2] >= 0 && nRGBA[2] <= 255 &&
+			nRGBA[3] >= 0 && nRGBA[3] <= 255)
+		{
+			//printf("*** WOW! Found a color!! ***\n");
+
+			// This is definitely a color!
+			bColor = true;
+
+			// Stuff all the values into each byte of our int.
+			unsigned char* pColorElement = (reinterpret_cast<unsigned char*>(&m_Value.m_nValue));
+			pColorElement[0] = nRGBA[0];
+			pColorElement[1] = nRGBA[1];
+			pColorElement[2] = nRGBA[2];
+			pColorElement[3] = nRGBA[3];
+
+			// Copy that value into our float.
+			m_Value.m_fValue = static_cast<float>(m_Value.m_nValue);
+		}
+	}
+
+	return bColor;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: changes the ConVar string value.
+// Input  : *pszTempVal - flOldValue
+//-----------------------------------------------------------------------------
+void ConVar::ChangeStringValue(const char* pszTempVal)
+{
+	Assert(!(m_nFlags & FCVAR_NEVER_AS_STRING));
+
+	char* pszOldValue = (char*)stackalloc(m_Value.m_iStringLength);
+	memcpy(pszOldValue, m_Value.m_pszString, m_Value.m_iStringLength);
+
+	size_t len = strlen(pszTempVal) + 1;
+
+	if (len > m_Value.m_iStringLength)
+	{
+		if (m_Value.m_pszString)
+		{
+			MemAllocSingleton()->Free(m_Value.m_pszString);
+		}
+
+		m_Value.m_pszString = MemAllocSingleton()->Alloc<char>(len);
+		m_Value.m_iStringLength = len;
+	}
+
+	memcpy(reinterpret_cast<void*>(m_Value.m_pszString), pszTempVal, len);
+
+	// Invoke any necessary callback function
+	for (int i = 0; i < m_fnChangeCallbacks.Count(); ++i)
+	{
+		m_fnChangeCallbacks[i](this, pszOldValue, NULL);
+	}
+
+	if (g_pCVar)
+	{
+		g_pCVar->CallGlobalChangeCallbacks(this, pszOldValue);
+	}
+
+	stackfree(pszOldValue);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Install a change callback (there shouldn't already be one....)
+// Input  : callback - 
+//			bInvoke - 
+//-----------------------------------------------------------------------------
+void ConVar::InstallChangeCallback(FnChangeCallback_t callback, bool bInvoke /*=true*/)
+{
+	if (!callback)
+	{
+		Warning(eDLL_T::ENGINE, "%s: Called with NULL callback; ignoring!!!\n", __FUNCTION__);
+		return;
+	}
+
+	if (m_pParent->m_fnChangeCallbacks.Find(callback) != m_pParent->m_fnChangeCallbacks.InvalidIndex())
+	{
+		// Same ptr added twice, sigh...
+		Warning(eDLL_T::ENGINE, "%s: Ignoring duplicate change callback!!!\n", __FUNCTION__);
+		return;
+	}
+
+	m_pParent->m_fnChangeCallbacks.AddToTail(callback);
+
+	// Call it immediately to set the initial value...
+	if (bInvoke)
+	{
+		callback(this, m_Value.m_pszString, m_Value.m_fValue);
+	}
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Install a change callback (there shouldn't already be one....)
+// Input  : callback - 
+//-----------------------------------------------------------------------------
+void ConVar::RemoveChangeCallback(FnChangeCallback_t callback)
+{
+	m_pParent->m_fnChangeCallbacks.FindAndRemove(callback);
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+//-----------------------------------------------------------------------------
+void ConVar_AppendFlags(ConCommandBase* var, char* buf, size_t bufsize)
+{
+	for (int i = 0; i < ARRAYSIZE(g_PrintConVarFlags); ++i)
+	{
+		const ConVarFlagsToString_t& info = g_PrintConVarFlags[i];
+		if (var->IsFlagSet(info.m_nFlag))
+		{
+			char append[128];
+			V_snprintf(append, sizeof(append), " %s", info.m_pszDesc);
+			V_strncat(buf, append, bufsize);
+		}
+	}
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: 
+//-----------------------------------------------------------------------------
+void ConVar_PrintDescription(ConCommandBase* pVar)
+{
+	bool bMin, bMax;
+	float fMin, fMax;
+	const char* pStr;
+
+	Assert(pVar);
+
+	Color clr(255, 100, 100, 255);
+
+	char outstr[4096];
+	outstr[0] = 0;
+
+	if (!pVar->IsCommand())
+	{
+		ConVar* var = (ConVar*)pVar;
+
+		bMin = var->GetMin(fMin);
+		bMax = var->GetMax(fMax);
+
+		const char* value = NULL;
+		char tempVal[256];
+
+		if (var->IsFlagSet(FCVAR_NEVER_AS_STRING))
+		{
+			value = tempVal;
+
+			int intVal = var->GetInt();
+			float floatVal = var->GetFloat();
+
+			if (fabs((float)intVal - floatVal) < 0.000001)
+			{
+				V_snprintf(tempVal, sizeof(tempVal), "%d", intVal);
+			}
+			else
+			{
+				V_snprintf(tempVal, sizeof(tempVal), "%f", floatVal);
+			}
+		}
+		else
+		{
+			value = var->GetString();
+		}
+
+		if (value)
+		{
+			AppendPrintf(outstr, sizeof(outstr), "\"%s\" = \"%s\"", var->GetName(), value);
+
+			if (V_stricmp(value, var->GetDefault()))
+			{
+				AppendPrintf(outstr, sizeof(outstr), " ( def. \"%s\" )", var->GetDefault());
+			}
+		}
+
+		if (bMin)
+		{
+			AppendPrintf(outstr, sizeof(outstr), " min. %f", fMin);
+		}
+		if (bMax)
+		{
+			AppendPrintf(outstr, sizeof(outstr), " max. %f", fMax);
+		}
+	}
+	else
+	{
+		ConCommand* var = (ConCommand*)pVar;
+
+		AppendPrintf(outstr, sizeof(outstr), "\"%s\" ", var->GetName());
+	}
+
+	ConVar_AppendFlags(pVar, outstr, sizeof(outstr));
+
+	pStr = pVar->GetHelpText();
+	if (pStr && *pStr)
+	{
+		DevMsg(eDLL_T::ENGINE, "%-80s - %.80s\n", outstr, pStr);
+	}
+	else
+	{
+		DevMsg(eDLL_T::ENGINE, "%-80s\n", outstr);
+	}
+}
+
 //-----------------------------------------------------------------------------
 // Purpose: Returns current player calling this function
 // Output : ECommandTarget_t - 
@@ -766,11 +1514,11 @@ bool Cmd_ForwardToServer(const CCommand* args)
 ///////////////////////////////////////////////////////////////////////////////
 void VConCommand::Attach() const
 {
-	DetourAttach((LPVOID*)&ConCommandBase_IsFlagSet, &ConCommandBase::IsFlagSetInternal);
 	DetourAttach((LPVOID*)&v_Cmd_ForwardToServer, &Cmd_ForwardToServer);
+	DetourAttach((LPVOID*)&v_ConVar_PrintDescription, &ConVar_PrintDescription);
 }
 void VConCommand::Detach() const
 {
-	DetourDetach((LPVOID*)&ConCommandBase_IsFlagSet, &ConCommandBase::IsFlagSetInternal);
 	DetourDetach((LPVOID*)&v_Cmd_ForwardToServer, &Cmd_ForwardToServer);
+	DetourDetach((LPVOID*)&v_ConVar_PrintDescription, &ConVar_PrintDescription);
 }
diff --git a/r5dev/tier1/cmd.h b/r5dev/tier1/cmd.h
index dd831bcd..7538ebee 100644
--- a/r5dev/tier1/cmd.h
+++ b/r5dev/tier1/cmd.h
@@ -1,9 +1,23 @@
-#pragma once
+//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======//
+//
+// Purpose: 
+//
+// $Workfile:     $
+// $Date:         $
+//
+//-----------------------------------------------------------------------------
+// $NoKeywords: $
+//===========================================================================//
+
+#ifndef CONVAR_H
+#define CONVAR_H
+
 #include "tier1/utlvector.h"
 #include "tier1/utlstring.h"
 #include "tier1/characterset.h"
 #include "public/iconvar.h"
 #include "public/iconcommand.h"
+#include "mathlib/color.h"
 
 //-----------------------------------------------------------------------------
 // Forward declarations
@@ -91,35 +105,44 @@ private:
 class ConCommandBase
 {
 public:
+	virtual ~ConCommandBase(void) { };
+
+	virtual bool IsCommand(void) const = 0;
+	virtual bool IsFlagSet(int nFlags) const = 0;
+
+	virtual void AddFlags(int nFlags) = 0;
+	virtual void RemoveFlags(int nFlags) = 0;
+
+	virtual int GetFlags(void) const = 0;
+	// Official name 'GetName', couldn't be used due to name ambiguity
+	// with the 'GetName' function in the IConVar class.
+	virtual const char* GetName(void) const = 0;
+	virtual const char* GetHelpText(void) const = 0;
+	virtual const char* GetUsageText(void) const = 0;
+
+	virtual void SetAccessor(IConCommandBaseAccessor* pAccessor) = 0;
+	virtual bool IsRegistered(void) const = 0;
+
+	virtual int GetDLLIdentifier() const = 0;
+	virtual ConCommandBase* Create (const char* szName, const char* szHelpString,
+		int nFlags, const char* pszUsageString) = 0;
+
+	virtual void				Init() = 0;
+
 	bool HasFlags(int nFlags) const;
-	void AddFlags(int nFlags);
-	void RemoveFlags(int nFlags);
 
-	bool IsCommand(void) const;
-	bool IsRegistered(void) const;
-
-	bool IsFlagSet(int nFlags) const { return IsFlagSetInternal(this, nFlags); };
-	static bool IsFlagSetInternal(const ConCommandBase* pCommandBase, int nFlags);
-
-	int GetFlags(void) const;
 	ConCommandBase* GetNext(void) const;
-	const char* GetName(void) const;
-	const char* GetHelpText(void) const;
-	const char* GetUsageText(void) const;
-
 	char* CopyString(const char* szFrom) const;
 
-	IConCommandBase* m_pConCommandBaseVFTable; //0x0000
 	ConCommandBase*          m_pNext;          //0x0008
 	bool                     m_bRegistered;    //0x0010
-	char                     pad_0011[7];      //0x0011
 	const char*              m_pszName;        //0x0018
 	const char*              m_pszHelpString;  //0x0020
 	const char*              m_pszUsageString; //0x0028
 	IConCommandBaseAccessor* s_pAccessor;      //0x0030 <-- unused since executable is monolithic.
 	int                      m_nFlags;         //0x0038
-	char                     pad_003C[4];      //0x003C
 }; //Size: 0x0040
+static_assert(sizeof(ConCommandBase) == 0x40);
 
 //-----------------------------------------------------------------------------
 // Purpose: The console invoked command
@@ -128,19 +151,17 @@ class ConCommand : public ConCommandBase
 {
 	friend class CCvar;
 public:
-	static ConCommand* Create(const char* szName, const char* szHelpString, const char* pszUsageString,
+	ConCommand(void);
+
+	static ConCommand* StaticCreate(const char* szName, const char* szHelpString, const char* pszUsageString,
 		int nFlags, FnCommandCallback_t pCallback, FnCommandCompletionCallback pCommandCompletionCallback);
 
-	ConCommand(void);
-	~ConCommand(void);
-
-	static void Init(void);
+	static void StaticInit(void);
 	static void InitShipped(void);
 	static void PurgeShipped(void);
-	bool IsCommand(void) const;
 
-	/*virtual*/ int AutoCompleteSuggest(const char* partial, CUtlVector< CUtlString >& commands);
-	/*virtual*/ bool CanAutoComplete(void) const;
+	virtual int AutoCompleteSuggest(const char* partial, CUtlVector< CUtlString >& commands) = 0;
+	virtual bool CanAutoComplete(void) const = 0;
 
 	void*          m_nNullCallBack; //0x0040
 	void*          m_pSubCallback;  //0x0048
@@ -154,7 +175,7 @@ public:
 
 	union
 	{
-		FnCommandCompletionCallback	m_fnCompletionCallback;
+		FnCommandCompletionCallback m_fnCompletionCallback;
 		ICommandCompletionCallback* m_pCommandCompletionCallback;
 	};
 
@@ -163,6 +184,99 @@ public:
 	bool m_bUsingCommandCallbackInterface : 1;
 };
 
+//-----------------------------------------------------------------------------
+// Purpose: A console variable
+//-----------------------------------------------------------------------------
+class ConVar : public ConCommandBase, public IConVar
+{
+	friend class CCvar;
+	friend class ConVarRef;
+
+public:
+	static ConVar* StaticCreate(const char* pszName, const char* pszDefaultValue, int nFlags, const char* pszHelpString,
+		bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString);
+	void Destroy(void);
+
+	ConVar(void);
+	virtual ~ConVar(void) { };
+
+	static void Init(void);
+	static void InitShipped(void);
+
+	static void PurgeShipped(void);
+	static void PurgeHostNames(void);
+
+	bool GetBool(void) const;
+	float GetFloat(void) const;
+	double GetDouble(void) const;
+	int GetInt(void) const;
+	int64_t GetInt64(void) const;
+	size_t GetSizeT(void) const;
+	Color GetColor(void) const;
+	const char* GetString(void) const;
+
+	void SetMax(float flMaxValue);
+	void SetMin(float flMinValue);
+	bool GetMin(float& flMinValue) const;
+	bool GetMax(float& flMaxValue) const;
+	float GetMinValue(void) const;
+	float GetMaxValue(void) const;
+	bool HasMin(void) const;
+	bool HasMax(void) const;
+
+	void SetValue(int nValue);
+	void SetValue(float flValue);
+	void SetValue(const char* pszValue);
+	void SetValue(Color clValue);
+
+	virtual void InternalSetValue(const char* pszValue) = 0;
+	virtual void InternalSetFloatValue(float flValue) = 0;
+	virtual void InternalSetIntValue(int nValue) = 0;
+	void InternalSetColorValue(Color value);
+
+	virtual __int64 Unknown0(unsigned int a2) = 0;
+	virtual __int64 Unknown1(const char* a2) = 0;
+
+	void Revert(void);
+	virtual bool ClampValue(float& flValue) = 0;
+
+	const char* GetDefault(void) const;
+	void SetDefault(const char* pszDefault);
+	bool SetColorFromString(const char* pszValue);
+
+	virtual void ChangeStringValue(const char* pszTempValue) = 0;
+	virtual void Create(const char* pszName, const char* pszDefaultValue, int nFlags, const char* pszHelpString,
+		bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString) = 0;
+
+	void InstallChangeCallback(FnChangeCallback_t callback, bool bInvoke);
+	void RemoveChangeCallback(FnChangeCallback_t callback);
+
+	virtual bool IsFlagSet(int nFlags) { return (nFlags & m_pParent->m_nFlags) ? true : false; };
+	virtual const char* GetName(void) const { return m_pParent->m_pszName; };
+
+	struct CVValue_t
+	{
+		char*      m_pszString;
+		size_t     m_iStringLength;
+		float      m_fValue;
+		int        m_nValue;
+	};
+
+	ConVar*        m_pParent;         //0x0048
+	const char*    m_pszDefaultValue; //0x0050
+	CVValue_t      m_Value;           //0c0058
+	bool           m_bHasMin;         //0x0070
+	float          m_fMinVal;         //0x0074
+	bool           m_bHasMax;         //0x0078
+	float          m_fMaxVal;         //0x007C
+	CUtlVector<FnChangeCallback_t> m_fnChangeCallbacks; //0x0080
+}; //Size: 0x00A0
+static_assert(sizeof(ConVar) == 0xA0);
+
+///////////////////////////////////////////////////////////////////////////////
+void ConVar_PrintDescription(ConCommandBase* pVar);
+
+
 /* ==== COMMAND_BUFFER ================================================================================================================================================== */
 inline CMemory p_Cbuf_AddText;
 inline auto Cbuf_AddText = p_Cbuf_AddText.RCast<void (*)(ECommandTarget_t eTarget, const char* pText, cmd_source_t cmdSource)>();
@@ -186,7 +300,23 @@ inline auto NullSub = p_NullSub.RCast<void(*)(void)>();
 inline CMemory p_CallbackStub;
 inline FnCommandCompletionCallback CallbackStub = p_CallbackStub.RCast<FnCommandCompletionCallback>();
 
-inline CMemory g_pConCommandVFTable;
+inline ConCommandBase* g_pConCommandVFTable;
+
+/* ==== ICONVAR ========================================================================================================================================================= */
+inline CMemory p_ConVar_Register;
+inline auto v_ConVar_Register = p_ConVar_Register.RCast<void* (*)(ConVar* thisptr, const char* szName, const char* szDefaultValue, int nFlags, const char* szHelpString, bool bMin, float fMin, bool bMax, float fMax, FnChangeCallback_t pCallback, const char* pszUsageString)>();
+
+inline CMemory p_ConVar_Unregister;
+inline auto v_ConVar_Unregister = p_ConVar_Unregister.RCast<void (*)(ConVar* thisptr)>();
+
+inline CMemory p_ConVar_IsFlagSet;
+inline auto v_ConVar_IsFlagSet = p_ConVar_IsFlagSet.RCast<bool (*)(ConVar* pConVar, int nFlag)>();
+
+inline CMemory p_ConVar_PrintDescription;
+inline auto v_ConVar_PrintDescription = p_ConVar_PrintDescription.RCast<void* (*)(ConCommandBase* pVar)>();
+
+inline ConVar* g_pConVarVBTable;
+inline IConVar* g_pConVarVFTable;
 
 ///////////////////////////////////////////////////////////////////////////////
 ECommandTarget_t Cbuf_GetCurrentPlayer(void);
@@ -196,9 +326,15 @@ class VConCommand : public IDetour
 {
 	virtual void GetAdr(void) const
 	{
-		LogConAdr("ConCommand::`vftable'", g_pConCommandVFTable.GetPtr());
-		LogConAdr("ConCommand::AutoCompleteSuggest", p_ConCommand_AutoCompleteSuggest.GetPtr());
+		LogConAdr("ConCommand::`vftable'", reinterpret_cast<uintptr_t>(g_pConCommandVFTable));
+		LogConAdr("ConVar::`vbtable'", reinterpret_cast<uintptr_t>(g_pConVarVBTable));
+		LogConAdr("ConVar::`vftable'", reinterpret_cast<uintptr_t>(g_pConVarVFTable));
 		LogFunAdr("ConCommandBase::IsFlagSet", p_ConCommandBase_IsFlagSet.GetPtr());
+		LogConAdr("ConCommand::AutoCompleteSuggest", p_ConCommand_AutoCompleteSuggest.GetPtr());
+		LogFunAdr("ConVar::Register", p_ConVar_Register.GetPtr());
+		LogFunAdr("ConVar::Unregister", p_ConVar_Unregister.GetPtr());
+		LogFunAdr("ConVar::IsFlagSet", p_ConVar_IsFlagSet.GetPtr());
+		LogFunAdr("ConVar_PrintDescription", p_ConVar_PrintDescription.GetPtr());
 		LogFunAdr("Cbuf_AddText", p_Cbuf_AddText.GetPtr());
 		LogFunAdr("Cbuf_Execute", p_Cbuf_Execute.GetPtr());
 		LogFunAdr("Cmd_ForwardToServer", p_Cmd_ForwardToServer.GetPtr());
@@ -209,26 +345,47 @@ class VConCommand : public IDetour
 	{
 		p_ConCommand_AutoCompleteSuggest    = g_GameDll.FindPatternSIMD("40 ?? B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 2B E0 F6 41 60 04");
 		p_ConCommandBase_IsFlagSet          = g_GameDll.FindPatternSIMD("85 51 38 0F 95 C0 C3");
+
+#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1)
+		p_ConVar_Register                   = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 48 89 7C 24 ?? 41 56 48 83 EC 30 F3 0F 10 44 24 ??");
+		p_ConVar_Unregister                 = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 57 48 83 EC 20 48 8B 59 58 48 8D 05 ?? ?? ?? ??");
+#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3)
+		p_ConVar_Register                   = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 40 F3 0F 10 84 24 ?? ?? ?? ??");
+		p_ConVar_Unregister                 = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B 79 58");
+#endif
+		p_ConVar_IsFlagSet                  = g_GameDll.FindPatternSIMD("48 8B 41 48 85 50 38");
+		p_ConVar_PrintDescription           = g_GameDll.FindPatternSIMD("B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 2B E0 48 8B 01 48 89 9C 24 ?? ?? ?? ??");
+
 		p_Cbuf_AddText                      = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 63 D9 41 8B F8 48 8D 0D ?? ?? ?? ?? 48 8B F2 FF 15 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 41 B9 ?? ?? ?? ??");
 		p_Cbuf_Execute                      = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 FF 15 ?? ?? ?? ??");
 		p_Cmd_ForwardToServer               = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 81 EC ?? ?? ?? ?? 44 8B 59 04");
 		p_NullSub                           = g_GameDll.FindPatternSIMD("C2 ?? ?? CC CC CC CC CC CC CC CC CC CC CC CC CC 40 53 48 83 EC 20 48 8D 05 ?? ?? ?? ??");
 		p_CallbackStub                      = g_GameDll.FindPatternSIMD("33 C0 C3 CC CC CC CC CC CC CC CC CC CC CC CC CC 80 49 68 08");
 
-		ConCommand_AutoCompleteSuggest = p_ConCommand_AutoCompleteSuggest.RCast<bool (*)(ConCommand*, const char*, CUtlVector< CUtlString >&)>();
-		Cbuf_AddText = p_Cbuf_AddText.RCast<void (*)(ECommandTarget_t, const char*, cmd_source_t)>();           /*48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 63 D9 41 8B F8 48 8D 0D ?? ?? ?? ?? 48 8B F2 FF 15 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 41 B9 ?? ?? ?? ??*/
-		Cbuf_Execute = p_Cbuf_Execute.RCast<void (*)(void)>();                                                  /*48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 FF 15 ?? ?? ?? ??*/
-		v_Cmd_ForwardToServer             = p_Cmd_ForwardToServer.RCast<bool (*)(const CCommand*)>();           /*48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 81 EC ?? ?? ?? ?? 44 8B 59 04*/
-		ConCommandBase_IsFlagSet          = p_ConCommandBase_IsFlagSet.RCast<bool (*)(ConCommandBase*, int)>(); /*85 51 38 0F 95 C0 C3*/
-		NullSub                           = p_NullSub.RCast<void(*)(void)>();                                   /*C2 00 00 CC CC CC CC CC CC CC CC CC CC CC CC CC 40 53 48 83 EC 20 48 8D 05 ?? ?? ?? ??*/
-		CallbackStub                      = p_CallbackStub.RCast<FnCommandCompletionCallback>();                /*33 C0 C3 CC CC CC CC CC CC CC CC CC CC CC CC CC 80 49 68 08*/ /*UserMathErrorFunction*/
+		ConCommandBase_IsFlagSet            = p_ConCommandBase_IsFlagSet.RCast<bool (*)(ConCommandBase*, int)>(); /*85 51 38 0F 95 C0 C3*/
+		ConCommand_AutoCompleteSuggest      = p_ConCommand_AutoCompleteSuggest.RCast<bool (*)(ConCommand*, const char*, CUtlVector< CUtlString >&)>();
+
+		v_ConVar_IsFlagSet                  = p_ConVar_IsFlagSet.RCast<bool (*)(ConVar*, int)>();
+		v_ConVar_Register                   = p_ConVar_Register.RCast<void* (*)(ConVar*, const char*, const char*, int, const char*, bool, float, bool, float, FnChangeCallback_t, const char*)>();
+		v_ConVar_Unregister                 = p_ConVar_Unregister.RCast<void (*)(ConVar*)>();
+		v_ConVar_PrintDescription           = p_ConVar_PrintDescription.RCast<void* (*)(ConCommandBase*)>();
+
+		Cbuf_AddText                        = p_Cbuf_AddText.RCast<void (*)(ECommandTarget_t, const char*, cmd_source_t)>(); /*48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 63 D9 41 8B F8 48 8D 0D ?? ?? ?? ?? 48 8B F2 FF 15 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 41 B9 ?? ?? ?? ??*/
+		Cbuf_Execute                        = p_Cbuf_Execute.RCast<void (*)(void)>();                                        /*48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 FF 15 ?? ?? ?? ??*/
+		v_Cmd_ForwardToServer               = p_Cmd_ForwardToServer.RCast<bool (*)(const CCommand*)>();           /*48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 81 EC ?? ?? ?? ?? 44 8B 59 04*/
+		NullSub                             = p_NullSub.RCast<void(*)(void)>();                                   /*C2 00 00 CC CC CC CC CC CC CC CC CC CC CC CC CC 40 53 48 83 EC 20 48 8D 05 ?? ?? ?? ??*/
+		CallbackStub                        = p_CallbackStub.RCast<FnCommandCompletionCallback>();                /*33 C0 C3 CC CC CC CC CC CC CC CC CC CC CC CC CC 80 49 68 08*/ /*UserMathErrorFunction*/
 	}
 	virtual void GetVar(void) const { }
 	virtual void GetCon(void) const 
 	{
-		g_pConCommandVFTable = g_GameDll.GetVirtualMethodTable(".?AVConCommand@@");
+		g_pConCommandVFTable = g_GameDll.GetVirtualMethodTable(".?AVConCommand@@").RCast<ConCommandBase*>();
+		g_pConVarVBTable = g_GameDll.GetVirtualMethodTable(".?AVConVar@@", 0).RCast<ConVar*>();
+		g_pConVarVFTable = g_GameDll.GetVirtualMethodTable(".?AVConVar@@", 1).RCast<IConVar*>();
 	}
 	virtual void Attach(void) const;
 	virtual void Detach(void) const;
 };
 ///////////////////////////////////////////////////////////////////////////////
+
+#endif // CONVAR_H
diff --git a/r5dev/tier1/cvar.cpp b/r5dev/tier1/cvar.cpp
index 2dd6b671..668cc3c0 100644
--- a/r5dev/tier1/cvar.cpp
+++ b/r5dev/tier1/cvar.cpp
@@ -11,7 +11,6 @@
 ConVar* sdk_fixedframe_tickinterval        = nullptr;
 ConVar* single_frame_shutdown_for_reload   = nullptr;
 ConVar* old_gather_props                   = nullptr;
-ConVar* cm_unset_all_cmdquery              = nullptr;
 
 ConVar* enable_debug_overlays              = nullptr;
 ConVar* debug_draw_box_depth_test          = nullptr;
diff --git a/r5dev/tier1/cvar.h b/r5dev/tier1/cvar.h
index 12cba5b1..fa6450b8 100644
--- a/r5dev/tier1/cvar.h
+++ b/r5dev/tier1/cvar.h
@@ -7,7 +7,6 @@
 extern ConVar* sdk_fixedframe_tickinterval;
 extern ConVar* single_frame_shutdown_for_reload;
 extern ConVar* old_gather_props;
-extern ConVar* cm_unset_all_cmdquery;
 
 extern ConVar* enable_debug_overlays;
 extern ConVar* debug_draw_box_depth_test;
@@ -282,7 +281,7 @@ protected:
 		ConVarSetType_t m_nType;
 		int m_nInt;
 		float m_flFloat;
-		//CUtlString m_String; // !TODO:
+		CUtlString m_String;
 	};
 
 	class CCVarIteratorInternal : public ICVarIteratorInternal
diff --git a/r5dev/tier1/utlvector.h b/r5dev/tier1/utlvector.h
index 944db699..c8773746 100644
--- a/r5dev/tier1/utlvector.h
+++ b/r5dev/tier1/utlvector.h
@@ -61,6 +61,14 @@ public:
 	// Copy the array.
 	CUtlVector<T, A>& operator=(const CUtlVector<T, A>& other);
 
+	// NOTE<R5SDK>:
+	// Do not call after initialization or after adding elements.
+	// This is added so it could be constructed nicely. Since the
+	// game executable in monolithic, we couldn't import the malloc
+	// functions, and thus not construct automatically when using
+	// the game's memalloc singleton.
+	void Init();
+
 	// element access
 	T& operator[](int i);
 	const T& operator[](int i) const;
@@ -655,6 +663,14 @@ inline CUtlVector<T, A>& CUtlVector<T, A>::operator=(const CUtlVector<T, A>& oth
 	return *this;
 }
 
+template< typename T, class A >
+void CUtlVector<T, A>::Init()
+{
+	m_Memory.m_pMemory = nullptr;
+	m_Memory.m_nAllocationCount = 0;
+	m_Memory.m_nGrowSize = 0;
+	m_Size = 0;
+}
 
 //-----------------------------------------------------------------------------
 // element access