From f39edc5eaac544425e63c8b0aae92cbe2db7773b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gustaf=20Alh=C3=A4ll?= <gustaf@hanicef.me>
Date: Fri, 28 Mar 2025 23:53:23 +0100
Subject: [PATCH] Add cvar for toggling preticker

---
 src/netcode/d_netcmd.c | 3 +++
 src/netcode/d_netcmd.h | 2 ++
 src/p_setup.c          | 3 ++-
 3 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/netcode/d_netcmd.c b/src/netcode/d_netcmd.c
index 85b123611..924d873e6 100644
--- a/src/netcode/d_netcmd.c
+++ b/src/netcode/d_netcmd.c
@@ -399,6 +399,8 @@ consvar_t cv_freedemocamera = CVAR_INIT("freedemocamera", "Off", NULL, CV_SAVE,
 // NOTE: this should be in hw_main.c, but we can't put it there as it breaks dedicated build
 consvar_t cv_glallowshaders = CVAR_INIT ("gr_allowcustomshaders", "On", "If on, clients are allowed to use custom OpenGL shaders", CV_NETVAR, CV_OnOff, NULL);
 
+consvar_t cv_preticker = CVAR_INIT ("preticker", "On", "If P_Ticker should be invoked twice before map starts, disabling improves load times and fixes map change bugs but can break some addons", CV_NETVAR, CV_OnOff, NULL);
+
 char timedemo_name[256];
 boolean timedemo_csv;
 char timedemo_csv_id[256];
@@ -642,6 +644,7 @@ void D_RegisterServerCommands(void)
 	CV_RegisterVar(&cv_chatspamprotection);
 	CV_RegisterVar(&cv_chatspamspeed);
 	CV_RegisterVar(&cv_chatspamburst);
+	CV_RegisterVar(&cv_preticker);
 }
 
 // =========================================================================
diff --git a/src/netcode/d_netcmd.h b/src/netcode/d_netcmd.h
index c11575575..9d995fd25 100644
--- a/src/netcode/d_netcmd.h
+++ b/src/netcode/d_netcmd.h
@@ -116,6 +116,8 @@ extern consvar_t cv_perfstats;
 extern consvar_t cv_ps_samplesize;
 extern consvar_t cv_ps_descriptor;
 
+extern consvar_t cv_preticker;
+
 extern char timedemo_name[256];
 extern boolean timedemo_csv;
 extern char timedemo_csv_id[256];
diff --git a/src/p_setup.c b/src/p_setup.c
index d8e4e5d67..ecc319e25 100644
--- a/src/p_setup.c
+++ b/src/p_setup.c
@@ -8152,7 +8152,8 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate)
 			if (playeringame[i])
 				G_CopyTiccmd(&players[i].cmd, &netcmds[buf][i], 1);
 		}
-		P_PreTicker(2);
+		if (cv_preticker.value)
+			P_PreTicker(2);
 		P_MapStart(); // just in case MapLoad modifies tmthing
 		LUA_HookInt(gamemap, HOOK(MapLoad));
 		P_MapEnd(); // just in case MapLoad modifies tmthing
-- 
GitLab