foxygit / doom Log in
commit 7809162616f7c802945c430b51a0f656c1859144
Author:     kraflab <kraflab@gmail.com>
AuthorDate: Fri Jul 23 16:07:12 2021 +0200
Commit:     kraflab <kraflab@gmail.com>
CommitDate: Fri Jul 23 16:10:24 2021 +0200

    Fix hexen coop demo playback
---
 src/hexen/g_game.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/hexen/g_game.c b/src/hexen/g_game.c
index b5bb518c..a13e91ce 100644
--- a/src/hexen/g_game.c
+++ b/src/hexen/g_game.c
@@ -99,6 +99,7 @@ boolean lowres_turn;
 boolean shortticfix;            // calculate lowres turning like doom
 boolean demoplayback;
 boolean demoextend;
+boolean netdemo;
 byte *demobuffer, *demo_p, *demoend;
 boolean singledemo;             // quit after playing a demo from cmdline

@@ -1020,7 +1021,7 @@ void G_Ticker(void)
             if (demorecording)
                 G_WriteDemoTiccmd(cmd);

-            if (netgame && !(gametic % ticdup))
+            if (netgame && !netdemo && !(gametic % ticdup))
             {
                 if (gametic > BACKUPTICS
                     && consistancy[i][buf] != cmd->consistancy)
@@ -1794,6 +1795,7 @@ void G_InitNew(skill_t skill, int episode, int map)
         // loading a saved one from the menu, and only during playback.
         demorecording = false;
         demoplayback = false;
+        netdemo = false;
         usergame = true;            // will be set false if a demo
     }
     paused = false;
@@ -2093,6 +2095,12 @@ void G_DoPlayDemo(void)
         PlayerClass[i] = *demo_p++;
     }

+    if (playeringame[1] || M_CheckParm("-solo-net") > 0
+                        || M_CheckParm("-netdemo") > 0)
+    {
+        netgame = true;
+    }
+
     // Initialize world info, etc.
     G_StartNewInit();

@@ -2101,6 +2109,11 @@ void G_DoPlayDemo(void)
     precache = true;
     usergame = false;
     demoplayback = true;
+
+    if (netgame == true)
+    {
+        netdemo = true;
+    }
 }


@@ -2135,6 +2148,12 @@ void G_TimeDemo(char *name)
         PlayerClass[i] = *demo_p++;
     }

+    if (playeringame[1] || M_CheckParm("-solo-net") > 0
+                        || M_CheckParm("-netdemo") > 0)
+    {
+        netgame = true;
+    }
+
     G_InitNew(skill, episode, map);
     starttime = I_GetTime();

@@ -2142,6 +2161,11 @@ void G_TimeDemo(char *name)
     demoplayback = true;
     timingdemo = true;
     singletics = true;
+
+    if (netgame == true)
+    {
+        netdemo = true;
+    }
 }


@@ -2176,6 +2200,8 @@ boolean G_CheckDemoStatus(void)

         W_ReleaseLumpName(defdemoname);
         demoplayback = false;
+        netdemo = false;
+        netgame = false;
         H2_AdvanceDemo();
         return true;
     }