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