From 98ef7a8675d7f216fd465bb528eb1be36c2a340d Mon Sep 17 00:00:00 2001 From: Misa Date: Thu, 12 Nov 2020 15:55:58 -0800 Subject: [PATCH] Don't reset entire musicclass when mounting and unmounting assets musicclass::init() re-initializes every attribute of musicclass unnecessarily, when initialization should be put in a constructor instead. This is bad, because music.init() gets called whenever we enter and exit a custom level that has assets. Otherwise, this would result in a bug where music.usingmmmmmm would be reset, causing you to revert to PPPPPP on the title screen whenever you enter a level with MMMMMM selected and exit it. This also causes a confusing desync between game.usingmmmmmm and music.usingmmmmmm since the values of the two variables are now different (these duplicate variables should probably be removed, too, and a lot of other duplicate variables like these exist, too, which are a real headache). Which means despite MMMMMM playing on the title screen, exiting the game and re-launching it will play PPPPPP instead. What's even more is that going to game options and switching to PPPPPP will play PPPPPP, but afterwards launching and re-entering will play MMMMMM. Again, having duplicate variables is very bad, and should probably be fixed, but that's a separate patch. --- desktop_version/src/Music.cpp | 39 +++++++++++++++++++---------------- desktop_version/src/Music.h | 1 + 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/desktop_version/src/Music.cpp b/desktop_version/src/Music.cpp index d2450800..01da28f5 100644 --- a/desktop_version/src/Music.cpp +++ b/desktop_version/src/Music.cpp @@ -10,6 +10,27 @@ void songend(); +musicclass::musicclass() +{ + safeToProcessMusic= false; + m_doFadeInVol = false; + musicVolume = MIX_MAX_VOLUME; + FadeVolAmountPerFrame = 0; + + currentsong = 0; + nicechange = -1; + nicefade = false; + resumesong = 0; + quick_fade = true; + + songStart = 0; + songEnd = 0; + + Mix_HookMusicFinished(&songend); + + usingmmmmmm = false; +} + void musicclass::init() { for (size_t i = 0; i < soundTracks.size(); ++i) { @@ -129,24 +150,6 @@ void musicclass::init() num_pppppp_tracks++; } - - safeToProcessMusic= false; - m_doFadeInVol = false; - musicVolume = MIX_MAX_VOLUME; - FadeVolAmountPerFrame = 0; - - currentsong = 0; - nicechange = -1; - nicefade = false; - resumesong = 0; - quick_fade = true; - - songStart = 0; - songEnd = 0; - - Mix_HookMusicFinished(&songend); - - usingmmmmmm = false; } void songend() diff --git a/desktop_version/src/Music.h b/desktop_version/src/Music.h index 6717015c..ae5ed9da 100644 --- a/desktop_version/src/Music.h +++ b/desktop_version/src/Music.h @@ -11,6 +11,7 @@ class musicclass { public: + musicclass(); void init(); void play(int t, const double position_sec = 0.0, const int fadein_ms = 3000);