From 824dedb0e86b8b83558f257437ed23ed2e176955 Mon Sep 17 00:00:00 2001
From: Riku Salminen <rvvs1999@gmail.com>
Date: Mon, 9 Nov 2020 18:55:00 -0500
Subject: [PATCH 1/4] Make the replay camera follow the player

---
 src/p_tick.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/p_tick.c b/src/p_tick.c
index f84ae96c0..4fd08f987 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -639,7 +639,12 @@ void P_Ticker(boolean run)
 		if (demorecording)
 			G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
 		if (demoplayback)
+		{
 			G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
+			P_SetPlayerAngle(&players[consoleplayer], players[consoleplayer].mo->angle);
+			P_ForceLocalAngle(&players[consoleplayer], players[consoleplayer].mo->angle);
+			localaiming = players[consoleplayer].aiming;
+		}
 
 		LUAh_PreThinkFrame();
 

From 7c79f702340662c6d8f370b9ef709181c690f49b Mon Sep 17 00:00:00 2001
From: Riku Salminen <rvvs1999@gmail.com>
Date: Tue, 10 Nov 2020 04:17:25 -0500
Subject: [PATCH 2/4] Update p_tick.c, got rid of an useless angle change
 function

---
 src/p_tick.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/p_tick.c b/src/p_tick.c
index 4fd08f987..b49b27cc8 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -640,10 +640,10 @@ void P_Ticker(boolean run)
 			G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
 		if (demoplayback)
 		{
-			G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
-			P_SetPlayerAngle(&players[consoleplayer], players[consoleplayer].mo->angle);
-			P_ForceLocalAngle(&players[consoleplayer], players[consoleplayer].mo->angle);
-			localaiming = players[consoleplayer].aiming;
+			player_t* p = &players[consoleplayer];
+			G_ReadDemoTiccmd(&p->cmd, 0);
+			P_ForceLocalAngle(p, p->mo->angle);
+			localaiming = p->aiming;
 		}
 
 		LUAh_PreThinkFrame();

From 241453056b41837c4918a81f06a9f35894f670ce Mon Sep 17 00:00:00 2001
From: Riku Salminen <rvvs1999@gmail.com>
Date: Tue, 10 Nov 2020 04:31:26 -0500
Subject: [PATCH 3/4] Update p_tick.c, Replacing mobj angle with cmd angleturn

---
 src/p_tick.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/p_tick.c b/src/p_tick.c
index b49b27cc8..15ec57054 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -642,7 +642,7 @@ void P_Ticker(boolean run)
 		{
 			player_t* p = &players[consoleplayer];
 			G_ReadDemoTiccmd(&p->cmd, 0);
-			P_ForceLocalAngle(p, p->mo->angle);
+			P_ForceLocalAngle(p, p->cmd.angleturn << 16);
 			localaiming = p->aiming;
 		}
 

From 7eeb75260be9d3a5b068ec377e186d22498f4de9 Mon Sep 17 00:00:00 2001
From: Riku Salminen <38985578+Riku-S@users.noreply.github.com>
Date: Tue, 10 Nov 2020 13:06:47 +0200
Subject: [PATCH 4/4] Try to add cvars for old camera

---
 src/d_netcmd.c | 2 ++
 src/p_tick.c   | 8 ++++++--
 src/p_tick.h   | 1 +
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/d_netcmd.c b/src/d_netcmd.c
index 68b8ecfc1..ac1c0da1e 100644
--- a/src/d_netcmd.c
+++ b/src/d_netcmd.c
@@ -884,6 +884,8 @@ void D_RegisterClientCommands(void)
 //	CV_RegisterVar(&cv_grid);
 //	CV_RegisterVar(&cv_snapto);
 
+	CV_RegisterVar(&cv_freedemocamera);
+	
 	// add cheat commands
 	COM_AddCommand("noclip", Command_CheatNoClip_f);
 	COM_AddCommand("god", Command_CheatGod_f);
diff --git a/src/p_tick.c b/src/p_tick.c
index 15ec57054..05ffefa7a 100644
--- a/src/p_tick.c
+++ b/src/p_tick.c
@@ -37,6 +37,7 @@ tic_t leveltime;
 
 // The entries will behave like both the head and tail of the lists.
 thinker_t thlist[NUM_THINKERLISTS];
+consvar_t cv_freedemocamera = {"freedemocamera", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
 
 void Command_Numthinkers_f(void)
 {
@@ -642,8 +643,11 @@ void P_Ticker(boolean run)
 		{
 			player_t* p = &players[consoleplayer];
 			G_ReadDemoTiccmd(&p->cmd, 0);
-			P_ForceLocalAngle(p, p->cmd.angleturn << 16);
-			localaiming = p->aiming;
+			if (!cv_freedemocamera.value)
+			{
+				P_ForceLocalAngle(p, p->cmd.angleturn << 16);
+				localaiming = p->aiming;
+			}
 		}
 
 		LUAh_PreThinkFrame();
diff --git a/src/p_tick.h b/src/p_tick.h
index 1fb88f3f2..3b04a427a 100644
--- a/src/p_tick.h
+++ b/src/p_tick.h
@@ -19,6 +19,7 @@
 #endif
 
 extern tic_t leveltime;
+extern consvar_t cv_freedemocamera;
 
 // Called by G_Ticker. Carries out all thinking of enemies and players.
 void Command_Numthinkers_f(void);