diff --git a/src/g_demo.c b/src/g_demo.c index c331f8523..0c1cfb5ed 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -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) diff --git a/src/s_sound.c b/src/s_sound.c index 044e03ba8..d6c5854a9 100644 --- a/src/s_sound.c +++ b/src/s_sound.c @@ -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;