foxygit / doom Log in
commit d5b1a695090eb49da3a4277686a30920cd5de046
Author:     Ryan Krafnick <kraflab@gmail.com>
AuthorDate: Fri Mar 12 16:12:58 2021 +0100
Commit:     GitHub <noreply@github.com>
CommitDate: Fri Mar 12 16:12:58 2021 +0100

    Fix heretic coop demos (#1358)

    * Fix heretic coop demos

    * Align whitespace
---
 src/heretic/g_game.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/heretic/g_game.c b/src/heretic/g_game.c
index 2e0c44f5..f85de205 100644
--- a/src/heretic/g_game.c
+++ b/src/heretic/g_game.c
@@ -115,6 +115,7 @@ boolean longtics;               // specify high resolution turning in demos
 boolean lowres_turn;
 boolean shortticfix;            // calculate lowres turning like doom
 boolean demoplayback;
+boolean netdemo;
 boolean demoextend;
 byte *demobuffer, *demo_p, *demoend;
 boolean singledemo;             // quit after playing a demo from cmdline
@@ -1070,7 +1071,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)
@@ -1691,6 +1692,7 @@ void G_InitNew(skill_t skill, int episode, int map)
     paused = false;
     demorecording = false;
     demoplayback = false;
+    netdemo = false;
     viewactive = true;
     gameepisode = episode;
     gamemap = map;
@@ -1987,11 +1989,22 @@ void G_DoPlayDemo(void)
     for (i = 0; i < MAXPLAYERS; i++)
         playeringame[i] = (*demo_p++) != 0;

+    if (playeringame[1] || M_CheckParm("-solo-net") > 0
+                        || M_CheckParm("-netdemo") > 0)
+    {
+    	netgame = true;
+    }
+
     precache = false;           // don't spend a lot of time in loadlevel
     G_InitNew(skill, episode, map);
     precache = true;
     usergame = false;
     demoplayback = true;
+
+    if (netgame == true)
+    {
+      netdemo = true;
+    }
 }


@@ -2025,6 +2038,12 @@ void G_TimeDemo(char *name)
         playeringame[i] = (*demo_p++) != 0;
     }

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

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


@@ -2066,6 +2090,8 @@ boolean G_CheckDemoStatus(void)

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