Fix rng desync

This commit is contained in:
NepDisk 2024-09-09 15:16:21 -04:00
parent fed3bbb74f
commit e45ad78b18
2 changed files with 26 additions and 3 deletions

View file

@ -2046,6 +2046,9 @@ void G_BeginRecording(void)
// Save netvar data
CV_SaveDemoVars(&demo_p);
// Save "mapmusrng" used for altmusic selection
WRITEUINT8(demo_p, mapmusrng);
// Now store some info for each in-game player
@ -2935,6 +2938,9 @@ void G_DoPlayDemo(char *defdemoname)
// net var data
CV_LoadDemoVars(&demo_p);
// Load "mapmusrng" used for altmusic selection
mapmusrng = READUINT8(demo_p);
// Sigh ... it's an empty demo.
if (*demo_p == DEMOMARKER)

View file

@ -2500,10 +2500,27 @@ void S_InitLevelMusic(boolean fromnetsave)
{
if (!fromnetsave)
{
if (mapheaderinfo[gamemap-1]->musname_size > 1)
mapmusrng = P_RandomKey(mapheaderinfo[gamemap-1]->musname_size);
if (demo.playback)
{
if (mapheaderinfo[gamemap-1]->musname_size > 1)
{
UINT32 random = P_RandomFixed();
}
// mapmusrng has already been set by the demo; just make sure it's valid
if (mapmusrng >= mapheaderinfo[gamemap-1]->musname_size)
{
mapmusrng = 0;
}
}
else
mapmusrng = 0;
{
if (mapheaderinfo[gamemap-1]->musname_size > 1)
mapmusrng = P_RandomKey(mapheaderinfo[gamemap-1]->musname_size);
else
mapmusrng = 0;
}
}
strncpy(mapmusname, mapheaderinfo[gamemap-1]->musname[mapmusrng], 7);
mapmusname[6] = 0;