Make entire archive block for RNG

Also moved after Lua to remove the desyncs.
This commit is contained in:
Sally Coolatta 2022-09-25 15:50:41 -04:00
parent 4c3c588e3a
commit ba62851a85

View file

@ -53,6 +53,7 @@ UINT8 *save_p;
#define ARCHIVEBLOCK_THINKERS 0x7F37037C
#define ARCHIVEBLOCK_SPECIALS 0x7F228378
#define ARCHIVEBLOCK_WAYPOINTS 0x7F46498F
#define ARCHIVEBLOCK_RNG 0x7FAAB5BD
// Note: This cannot be bigger
// than an UINT16
@ -4452,17 +4453,6 @@ static inline void P_UnArchiveSPGame(INT16 mapoverride)
playeringame[consoleplayer] = true;
}
static void P_NetArchiveRNG(void)
{
size_t i;
for (i = 0; i < PRNUMCLASS; i++)
{
WRITEUINT32(save_p, P_GetInitSeed(i));
WRITEUINT32(save_p, P_GetRandSeed(i));
}
}
static void P_NetArchiveMisc(boolean resending)
{
size_t i;
@ -4486,8 +4476,6 @@ static void P_NetArchiveMisc(boolean resending)
WRITEUINT32(save_p, pig);
}
P_NetArchiveRNG();
WRITEUINT32(save_p, tokenlist);
WRITEUINT8(save_p, encoremode);
@ -4605,19 +4593,6 @@ static void P_NetArchiveMisc(boolean resending)
}
}
static inline void P_NetUnArchiveRNG(void)
{
size_t i;
for (i = 0; i < PRNUMCLASS; i++)
{
UINT32 init = READUINT32(save_p);
UINT32 seed = READUINT32(save_p);
P_SetRandSeedNet(i, init, seed);
}
}
static inline boolean P_NetUnArchiveMisc(boolean reloading)
{
size_t i;
@ -4654,8 +4629,6 @@ static inline boolean P_NetUnArchiveMisc(boolean reloading)
}
}
P_NetUnArchiveRNG();
tokenlist = READUINT32(save_p);
encoremode = (boolean)READUINT8(save_p);
@ -4832,6 +4805,35 @@ static inline boolean P_UnArchiveLuabanksAndConsistency(void)
return true;
}
static void P_NetArchiveRNG(void)
{
size_t i;
WRITEUINT32(save_p, ARCHIVEBLOCK_RNG);
for (i = 0; i < PRNUMCLASS; i++)
{
WRITEUINT32(save_p, P_GetInitSeed(i));
WRITEUINT32(save_p, P_GetRandSeed(i));
}
}
static inline void P_NetUnArchiveRNG(void)
{
size_t i;
if (READUINT32(save_p) != ARCHIVEBLOCK_RNG)
I_Error("Bad $$$.sav at archive block RNG");
for (i = 0; i < PRNUMCLASS; i++)
{
UINT32 init = READUINT32(save_p);
UINT32 seed = READUINT32(save_p);
P_SetRandSeedNet(i, init, seed);
}
}
void P_SaveGame(INT16 mapnum)
{
P_ArchiveMisc(mapnum);
@ -4876,6 +4878,8 @@ void P_SaveNetGame(boolean resending)
}
LUA_Archive(&save_p);
P_NetArchiveRNG();
P_ArchiveLuabanksAndConsistency();
}
@ -4924,6 +4928,8 @@ boolean P_LoadNetGame(boolean reloading)
LUA_UnArchive(&save_p);
P_NetUnArchiveRNG();
// The precipitation would normally be spawned in P_SetupLevel, which is called by
// P_NetUnArchiveMisc above. However, that would place it up before P_NetUnArchiveThinkers,
// so the thinkers would be deleted later. Therefore, P_SetupLevel will *not* spawn