diff --git a/src/g_game.c b/src/g_game.c index 345b65d95..a2804a566 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -1249,6 +1249,10 @@ boolean G_IsTitleCardAvailable(void) if (gametyperules & GTR_SPECIALSTART) return false; + // ALso. + if (K_PodiumSequence() == true) + return false; + // The title card is available. return true; } diff --git a/src/k_podium.c b/src/k_podium.c index 2f1694f52..ef455475b 100644 --- a/src/k_podium.c +++ b/src/k_podium.c @@ -94,6 +94,21 @@ gp_rank_e K_PodiumGrade(void) return podiumData.grade; } +/*-------------------------------------------------- + boolean K_PodiumHasEmerald(void) + + See header file for description. +--------------------------------------------------*/ +boolean K_PodiumHasEmerald(void) +{ + if (K_PodiumSequence() == false) + { + return false; + } + + return podiumData.rank.specialWon; +} + /*-------------------------------------------------- UINT8 K_GetPodiumPosition(player_t *player) @@ -284,6 +299,7 @@ boolean K_StartCeremony(void) G_SetGametype(GT_RACE); G_DoLoadLevelEx(false, GS_CEREMONY); + wipegamestate = GS_CEREMONY; // I don't know what else to do here r_splitscreen = 0; // Only one screen for the ceremony R_ExecuteSetViewSize(); diff --git a/src/k_podium.h b/src/k_podium.h index d7b04e3e4..eb73a7aae 100644 --- a/src/k_podium.h +++ b/src/k_podium.h @@ -69,6 +69,20 @@ boolean K_PodiumRanking(void); gp_rank_e K_PodiumGrade(void); +/*-------------------------------------------------- + boolean K_PodiumHasEmerald(void) + + Returns whether the Emerald or Prize was collected. + + Input Arguments:- + N/A + + Return:- + true if the Emerald/Prize was collected during the GP, otherwise false. +--------------------------------------------------*/ +boolean K_PodiumHasEmerald(void); + + /*-------------------------------------------------- UINT8 K_GetPodiumPosition(player_t *player); diff --git a/src/p_setup.c b/src/p_setup.c index 958bfa22e..ee0c5d2eb 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -8216,8 +8216,17 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) } } - if (gametyperules & GTR_SPECIALSTART) + if (K_PodiumHasEmerald()) { + // Special Stage out + if (ranspecialwipe != 2) + S_StartSound(NULL, sfx_s3k6a); + levelfadecol = 0; + wipetype = wipe_encore_towhite; + } + else if (gametyperules & GTR_SPECIALSTART) + { + // Special Stage in if (ranspecialwipe != 2) S_StartSound(NULL, sfx_s3kaf); levelfadecol = 0; @@ -8225,6 +8234,7 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) } else if (skipstats == 1) { + // MapWarp if (ranspecialwipe != 2) S_StartSound(NULL, sfx_s3k73); levelfadecol = 0; @@ -8232,11 +8242,13 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) } else if (encoremode) { + // Encore levelfadecol = 0; wipetype = wipe_encore_towhite; } else { + // Default levelfadecol = 31; }