From fca5e2dc55969b0d2364a74b1c8c7354a4a9352b Mon Sep 17 00:00:00 2001
From: John FrostFox <john.frostfox@gmail.com>
Date: Mon, 27 Sep 2021 01:34:07 +0300
Subject: [PATCH] Polyobjects rotation fix

---
 src/p_saveg.c     | 68 -----------------------------------------------
 src/p_savenetrb.c | 14 +++++++---
 2 files changed, 11 insertions(+), 71 deletions(-)

diff --git a/src/p_saveg.c b/src/p_saveg.c
index e854fe5f3..995b528fa 100755
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -972,74 +972,6 @@ static void ResetSectors(void)
 	}
 }
 
-//
-// P_LocalArchiveWorld
-// Archives the world's state locally, regardless of differences from original state
-// Faster than NetArchiveWorld
-//
-static void P_LocalArchiveWorld(void)
-{
-	UINT8* put;
-
-	// paranoia something something
-	ClearNetColormaps();
-
-	WRITEUINT32(save_p, ARCHIVEBLOCK_WORLD);
-	put = save_p;
-
-	WRITEUINT32(put, numsectors * sizeof(sectors[0]));
-	WRITEUINT32(put, numlines * sizeof(lines[0]));
-
-	// dump all sector memory into the data
-	WRITEMEM(put, sectors, numsectors * sizeof(sectors[0]));
-	WRITEMEM(put, lines, numlines * sizeof(lines[0]));
-
-	save_p = put;
-}
-
-static void P_LocalUnArchiveWorld(void)
-{
-	UINT8* get = save_p;
-
-	if (READUINT32(get) != ARCHIVEBLOCK_WORLD)
-	{
-		I_Error("Bad SaveState at archive block World");
-	}
-
-	// preserve certain local variables
-	sector_t* preservedSectors = Z_Malloc(numsectors * sizeof(sector_t), PU_CACHE, NULL);
-
-	memcpy(preservedSectors, sectors, numsectors * sizeof(sector_t));
-
-	UINT32 sectorSize = READUINT32(get);
-	UINT32 lineSize = READUINT32(get);
-	READMEM(get, sectors, numsectors * sizeof(sectors[0]));
-	READMEM(get, lines, numlines * sizeof(lines[0]));
-
-	for (size_t i = 0; i < numsectors; i++)
-	{
-		sectors[i].thinglist = preservedSectors[i].thinglist;
-		sectors[i].touching_thinglist = preservedSectors[i].touching_thinglist;
-		sectors[i].preciplist = preservedSectors[i].preciplist;
-		sectors[i].touching_preciplist = preservedSectors[i].touching_preciplist;
-
-		if (sectors[i].thinglist == (mobj_t*)0xDDDDDDDD)
-		{
-			continue;
-		}
-
-		// restore preserved local stuff (tbh I don't really know what this is lol)
-		sectors[i].lightlist = preservedSectors[i].lightlist;
-		sectors[i].numlights = preservedSectors[i].numlights;
-		sectors[i].attached = preservedSectors[i].attached;
-		sectors[i].attachedsolid = preservedSectors[i].attachedsolid;
-	}
-
-	Z_Free(preservedSectors);
-
-	save_p = get;
-}
-
 #define FD_FLAGS 0x01
 #define FD_ALPHA 0x02
 
diff --git a/src/p_savenetrb.c b/src/p_savenetrb.c
index 4fde2d2d3..ff536d0f3 100755
--- a/src/p_savenetrb.c
+++ b/src/p_savenetrb.c
@@ -4936,6 +4936,8 @@ static inline void P_UnArchivePolyObj(polyobj_t *po)
 
 	id = READINT32(save_p);
 
+	po->angle = 0; //angle isn't in the original state because we store the absolute number 
+
 	angle = READANGLE(save_p);
 
 	x = READFIXED(save_p);
@@ -5813,6 +5815,8 @@ void P_SaveGameState(savestate_t* savestate)
 		mobj->mobjnum = i++;
 	}
 
+	//nothinkers aren't required for synching(?), so it's disabled for now
+	//it can be made as an option if the user wants to  
 	// UINT64 s;
 	// // including nothinkers...
 	// for (s = 0; s < numsectors; s++)
@@ -5832,7 +5836,8 @@ void P_SaveGameState(savestate_t* savestate)
 	P_NetArchivePlayers();
 	if (gamestate == GS_LEVEL)
 	{
-		P_NetArchiveWorld();
+		// P_NetArchiveWorld();
+		P_LocalArchiveWorld();
 		P_ArchivePolyObjects();
 		P_NetArchiveThinkers();
 		P_NetArchiveSpecials();
@@ -5877,7 +5882,8 @@ boolean P_LoadGameState(const savestate_t* savestate)
 	P_NetUnArchivePlayers();
 	if (gamestate == GS_LEVEL)
 	{
-		P_NetUnArchiveWorld();
+		// P_NetUnArchiveWorld();
+		P_LocalUnArchiveWorld();
 		P_UnArchivePolyObjects();
 		P_NetUnArchiveThinkers();
 		P_NetUnArchiveSpecials();
@@ -5886,7 +5892,9 @@ boolean P_LoadGameState(const savestate_t* savestate)
 		P_RelinkPointers();
 		P_FinishMobjs();
 	}
+	con_muted = true;
 	LUA_UnArchive();
+	con_muted = false;
 
 	// This is stupid and hacky, but maybe it'll work!
 	P_SetRandSeed(P_GetInitSeed());
@@ -5898,7 +5906,7 @@ boolean P_LoadGameState(const savestate_t* savestate)
 	// This is done in P_NetUnArchiveSpecials now.
 	P_UnArchiveLuabanksAndConsistency();
 	loadStateBenchmark = I_GetPreciseTime() - loadStateBenchmark;
-	save_p = NULL; //invalidate it
+	// save_p = NULL; //invalidate it//why??
 	return 0;
 }
 
-- 
GitLab