VVVVVV/desktop_version/src
Misa 5e557ffd1a Fix regression with playing the same track after it fades out
With commit 48313169b6 (PR #453),
AllyTally added a single-case patch for a regression, instead of fixing
it at its root cause.

In fact, that commit only fixes the music if Presenting VVVVVV is
playing while exiting to the menu, not if you enter a level that plays
Presenting VVVVVV - so it only fixes it going one way, and not going the
other way around; neither fixing also all the other cases this could
happen.

It doesn't, say, fix the case where you are exited to the menu
automatically after collecting the last crewmate in the level (or if the
level calls gamestate 1013 itself), which is what happens in my MIRA-VIU
TAS video at the end, and which I noted in the description of that video
( https://www.youtube.com/watch?v=OYQO4ePbYW4&t=111 ).

So, the problem here is that when musicclass::play() is called, it sees
that currentsong is the same as its input, and decides that since the
music is already playing, it shouldn't play the music again. Thus, the
music fades out, and we get silence instead of the music playing again.

But I said this was a regression. Why didn't this happen in 2.2? Well,
it's because of the fact that 2.2 sets currentsong to -1 (no music
playing at all) immediately when starting a fadeout, and not when the
fadeout completes (commit facb079b35,
PR #316). As you can imagine, this discrepancy could lead to bugs, given
that the game would think that music wasn't playing when in actuality it
was, but fixing this bug could also break code that expected this wrong
behavior. And in this case, it has.

So to properly fix the root cause of this, instead of naïvely
single-case patching out every case that comes up randomly, in
musicclass::play(), the function will now ignore if the input given is
the same as currentsong if the music is currently fading out.
2021-01-04 19:16:35 -05:00
..
BinaryBlob.cpp Use SDL stdlib funcs for free/malloc/strcmp 2020-08-14 09:51:19 -04:00
BinaryBlob.h Check index of tracks in musicclass::init() 2020-08-14 09:51:19 -04:00
BlockV.cpp Remove unnecessary string initializations from constructors 2020-07-08 19:14:21 -04:00
BlockV.h Consistently use angle brackets for SDL.h includes 2020-07-19 21:37:40 -04:00
Credits.h Fix entities in the Warp Zone's gray tileset not being gray in the editor (#480) 2020-09-25 13:35:03 -04:00
Ent.cpp Add entclass::ishumanoid() 2020-11-03 13:31:56 -05:00
Ent.h Add entclass::ishumanoid() 2020-11-03 13:31:56 -05:00
Entity.cpp Remove unused function entityclass::fixfriction() 2021-01-02 09:06:42 -05:00
Entity.h Remove unused function entityclass::fixfriction() 2021-01-02 09:06:42 -05:00
Enums.h Hello WWWWWWorld! 2020-01-08 10:37:50 -05:00
FileSystemUtils.cpp Fix other array decay too 2020-08-09 13:39:12 -04:00
FileSystemUtils.h Only re-color one-ways if assets are not mounted 2020-06-30 18:06:14 -04:00
Finalclass.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Finalclass.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
GOGNetwork.c Ifdef out network code for M&P 2020-08-02 23:43:55 -04:00
Game.cpp Fix bringing up map menu during gamemode(teleporter) 2020-12-28 21:12:51 -05:00
Game.h Fix bringing up map menu during gamemode(teleporter) 2020-12-28 21:12:51 -05:00
Graphics.cpp Remove unused function Graphics::textboxmove() 2021-01-02 09:06:42 -05:00
Graphics.h Remove unused function Graphics::textboxmove() 2021-01-02 09:06:42 -05:00
GraphicsResources.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
GraphicsResources.h Consistently use angle brackets for SDL.h includes 2020-07-19 21:37:40 -04:00
GraphicsUtil.cpp Remove unused function FlipSurfaceHorizontal() 2021-01-02 09:06:42 -05:00
GraphicsUtil.h Remove unused function FlipSurfaceHorizontal() 2021-01-02 09:06:42 -05:00
Input.cpp Revert hardcoded check for track 6 when quitting to menu 2021-01-04 19:16:35 -05:00
Input.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
KeyPoll.cpp Remove unused function KeyPoll::isUp() 2021-01-02 09:06:42 -05:00
KeyPoll.h Remove unused function KeyPoll::isUp() 2021-01-02 09:06:42 -05:00
Labclass.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Labclass.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Logic.cpp Fix player being invisible upon loading into game again 2020-12-28 16:22:13 -05:00
Logic.h Move all fixed-timestep render updates to new file RenderFixed.cpp 2020-12-18 12:01:02 -05:00
MakeAndPlay.h Re-comment out #define MAKEANDPLAY 2020-02-09 10:42:03 -05:00
Map.cpp Reset invis and lifeseq when loading in, in mapclass::resetplayer() 2020-12-28 16:43:13 -05:00
Map.h Fix player being invisible upon loading into game again 2020-12-28 16:22:13 -05:00
Maths.h Include math.h instead of cmath 2020-11-17 12:17:04 -05:00
Music.cpp Fix regression with playing the same track after it fades out 2021-01-04 19:16:35 -05:00
Music.h Don't reset entire musicclass when mounting and unmounting assets 2020-11-12 19:11:13 -05:00
Network.c Remove unnecessary externs from network func forward decls 2020-08-02 23:43:55 -04:00
Network.h Add support for multiple Network backends, stub in GOGNetwork 2020-01-13 11:15:22 -05:00
Otherlevel.cpp Bounds check all entity getters that can return 0 2020-09-25 13:51:47 -04:00
Otherlevel.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
Render.cpp Use SDL_arraysize() - 1 to take length of INTERIM_COMMIT 2020-12-26 00:57:51 -05:00
Render.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
RenderFixed.cpp Fix bringing up map menu during gamemode(teleporter) 2020-12-28 21:12:51 -05:00
RenderFixed.h Move all fixed-timestep render updates to new file RenderFixed.cpp 2020-12-18 12:01:02 -05:00
Screen.cpp Allow Game::savestats() to accept a pointer to ScreenSettings 2020-12-21 20:15:30 -05:00
Screen.h Allow Game::savestats() to accept a pointer to ScreenSettings 2020-12-21 20:15:30 -05:00
ScreenSettings.h Factor out screen settings to ScreenSettings struct 2020-12-18 10:02:18 -05:00
Script.cpp Fix bringing up map menu during gamemode(teleporter) 2020-12-28 21:12:51 -05:00
Script.h Clean up and prevent unnecessary qualifiers to self 2020-09-28 01:34:40 -04:00
Scripts.cpp Make 'custom_' check more readable 2020-09-27 16:31:40 -04:00
SoundSystem.cpp Remove unused function SoundSystem::playMusic() 2021-01-02 09:06:42 -05:00
SoundSystem.h Remove unused function SoundSystem::playMusic() 2021-01-02 09:06:42 -05:00
Spacestation2.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Spacestation2.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
SteamNetwork.c Ifdef out network code for M&P 2020-08-02 23:43:55 -04:00
TerminalScripts.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
Textbox.cpp Remove allowspecial, replace with opaqueness check 2020-08-06 22:12:15 -04:00
Textbox.h Remove allowspecial, replace with opaqueness check 2020-08-06 22:12:15 -04:00
Tower.cpp Remove zeroed arrays from tower functions in M&P 2020-08-03 00:29:15 -04:00
Tower.h Change all tilemaps to be short[1200] instead of int[1200] 2020-07-19 16:25:53 -04:00
TowerBG.h Refactor tower background to use a separate object instead 2020-11-03 13:25:03 -05:00
UtilityClass.cpp Clean up and prevent unnecessary qualifiers to self 2020-09-28 01:34:40 -04:00
UtilityClass.h Clean up and prevent unnecessary qualifiers to self 2020-09-28 01:34:40 -04:00
Version.h Don't recompile all files when the commit hash is changed 2020-12-25 20:17:01 -05:00
Version.h.in Don't recompile all files when the commit hash is changed 2020-12-25 20:17:01 -05:00
WarpClass.cpp Separate includes into sections and alphabetize them 2020-07-19 21:37:40 -04:00
WarpClass.h Remove unnecessary includes from header files 2020-07-19 21:37:40 -04:00
XMLUtils.cpp Move all settings to settings.vvv 2020-11-04 12:06:57 -05:00
XMLUtils.h Move all settings to settings.vvv 2020-11-04 12:06:57 -05:00
editor.cpp Remove unused function editorclass::warpzonematch() 2021-01-02 09:06:42 -05:00
editor.h Remove unused function editorclass::warpzonematch() 2021-01-02 09:06:42 -05:00
main.cpp De-duplicate script.running checks 2020-12-24 12:01:37 -05:00
preloader.cpp Allow pressing ACTION to skip fake loading screen 2020-12-20 15:19:22 -08:00
preloader.h Allow pressing ACTION to skip fake loading screen 2020-12-20 15:19:22 -08:00