From 75e77189d60c11a2cdfba55268a076c424407f58 Mon Sep 17 00:00:00 2001 From: TehRealSalt Date: Wed, 30 May 2018 18:38:30 -0400 Subject: [PATCH] Fix Star/Mega music persisting after death for splitscreen players --- src/g_game.c | 9 ++------ src/k_kart.c | 2 +- src/p_user.c | 63 ++++++++++++++++++++++++++-------------------------- 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/src/g_game.c b/src/g_game.c index cdde5d50..595126fe 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2481,15 +2481,10 @@ void G_PlayerReborn(INT32 player) mapmusname[6] = 0; mapmusflags = mapheaderinfo[gamemap-1]->mustrack & MUSIC_TRACKMASK; } - //SRB2kart - leveltime stuff - if (leveltime > 157) - { - S_ChangeMusic(mapmusname, mapmusflags, true); - if (p->laps == (unsigned)(cv_numlaps.value - 1)) - S_SpeedMusic(1.2f); - } } + P_RestoreMusic(p); + if (leveltime > 157 && !p->spectator) p->kartstuff[k_lakitu] = 48; // Lakitu Spawner diff --git a/src/k_kart.c b/src/k_kart.c index 67149294..8ac1a747 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -1172,7 +1172,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) // Plays the music after the starting countdown. if (P_IsLocalPlayer(player) && leveltime == 158) - S_ChangeMusicInternal(mapmusname, true); + S_ChangeMusic(mapmusname, mapmusflags, true); } void K_KartPlayerAfterThink(player_t *player) diff --git a/src/p_user.c b/src/p_user.c index 1245ed17..13da9a0e 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1164,41 +1164,21 @@ void P_RestoreMusic(player_t *player) if (!player->exiting) { // Item - Mega Mushroom - if (player->kartstuff[k_growshrinktimer] > 1) + if (player->kartstuff[k_growshrinktimer] > 1 && player->playerstate == PST_LIVE) S_ChangeMusicInternal("mega", true); - // Item - Star - else if (player->kartstuff[k_startimer] > 1) + else if (player->kartstuff[k_startimer] > 1 && player->playerstate == PST_LIVE) S_ChangeMusicInternal("minvnc", false); - - // Event - Final Lap - else if (player->laps == (UINT8)(cv_numlaps.value - 1)) + else if (leveltime > 157) { - S_SpeedMusic(1.2f); + // Event - Final Lap + if (player->laps == (UINT8)(cv_numlaps.value - 1)) + S_SpeedMusic(1.2f); S_ChangeMusic(mapmusname, mapmusflags, true); } else - S_ChangeMusic(mapmusname, mapmusflags, true); + S_StopMusic(); } - - /* SRB2kart - old stuff - if (player->powers[pw_super] && !(mapheaderinfo[gamemap-1]->levelflags & LF_NOSSMUSIC)) - S_ChangeMusicInternal("supers", true); - else if (player->powers[pw_invulnerability] > 1) - S_ChangeMusicInternal((mariomode) ? "minvnc" : "invinc", false); - else if (player->powers[pw_sneakers] > 1 && !player->powers[pw_super]) - { - if (mapheaderinfo[gamemap-1]->levelflags & LF_SPEEDMUSIC) - { - S_SpeedMusic(1.4f); - S_ChangeMusic(mapmusname, mapmusflags, true); - } - else - S_ChangeMusicInternal("shoes", true); - } - else - S_ChangeMusic(mapmusname, mapmusflags, true); - */ } // @@ -8152,12 +8132,31 @@ static void P_DeathThink(player_t *player) { if (player->deadtimer != gameovertics) ; - // Restore the other player's music once we're dead for long enough + // Restore the first available player's music once we're dead for long enough // -- that is, as long as they aren't dead too - else if (player == &players[displayplayer] && players[secondarydisplayplayer].lives > 0) - P_RestoreMusic(&players[secondarydisplayplayer]); - else if (player == &players[secondarydisplayplayer] && players[displayplayer].lives > 0) - P_RestoreMusic(&players[displayplayer]); + else + { + INT32 i; + + for (i = 0; i < 4; i++) + { + if (i > splitscreen) + break; + + if (i == 0 && player != &players[displayplayer] && players[displayplayer].lives > 0) + P_RestoreMusic(&players[displayplayer]); + else if (i == 1 && player != &players[secondarydisplayplayer] && players[secondarydisplayplayer].lives > 0) + P_RestoreMusic(&players[secondarydisplayplayer]); + else if (i == 2 && player != &players[thirddisplayplayer] && players[thirddisplayplayer].lives > 0) + P_RestoreMusic(&players[thirddisplayplayer]); + else if (i == 3 && player != &players[fourthdisplayplayer] && players[fourthdisplayplayer].lives > 0) + P_RestoreMusic(&players[fourthdisplayplayer]); + else + continue; + + break; + } + } } }