diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7e82a01e2..54196be6d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -647,8 +647,6 @@ target_compile_options(SRB2SDL2 PRIVATE -Wall -Wno-c++11-compat -Wno-c++14-compat # No C++14 compat needed - -Wc++20-extensions - -Wc++23-extensions # Disallow newer language features entirely > # C++, Clang and Apple Clang diff --git a/src/g_game.c b/src/g_game.c index ba93a32ea..d80832774 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -4202,6 +4202,7 @@ void G_GPCupIntoRoundQueue(cupheader_t *cup, UINT8 setgametype, boolean setencor UINT8 i, levelindex = 0, bonusindex = 0; UINT8 bonusmodulo = max(1, (cup->numlevels+1)/(cup->numbonus+1)); UINT16 cupLevelNum; + INT32 bonusgt; // Levels are added to the queue in the following pattern. // For 5 Race rounds and 2 Bonus rounds, the most common case: @@ -4243,9 +4244,17 @@ void G_GPCupIntoRoundQueue(cupheader_t *cup, UINT8 setgametype, boolean setencor if (cupLevelNum < nummapheaders) { // In the case of Bonus rounds, we simply skip invalid maps. + if ((mapheaderinfo[cupLevelNum]->typeoflevel & TOL_BATTLE) == TOL_BATTLE) + { + bonusgt = GT_BATTLE; + } + else + { + bonusgt = G_GuessGametypeByTOL(mapheaderinfo[cupLevelNum]->typeoflevel); + } G_MapIntoRoundQueue( cupLevelNum, - G_GuessGametypeByTOL(mapheaderinfo[cupLevelNum]->typeoflevel), + bonusgt, setencore, // if this isn't correct, Got_Mapcmd will fix it false ); @@ -4313,9 +4322,22 @@ void G_GPCupIntoRoundQueue(cupheader_t *cup, UINT8 setgametype, boolean setencor cupLevelNum = emeraldcup->cachedlevels[CUPCACHE_SPECIAL]; if (cupLevelNum < nummapheaders) { + // In case of multiple TOLs, prioritize Special, then Versus, then guess. + if ((mapheaderinfo[cupLevelNum]->typeoflevel & TOL_SPECIAL) == TOL_SPECIAL) + { + bonusgt = GT_SPECIAL; + } + else if ((mapheaderinfo[cupLevelNum]->typeoflevel & TOL_VERSUS) == TOL_VERSUS) + { + bonusgt = GT_VERSUS; + } + else + { + bonusgt = G_GuessGametypeByTOL(mapheaderinfo[cupLevelNum]->typeoflevel); + } G_MapIntoRoundQueue( cupLevelNum, - G_GuessGametypeByTOL(mapheaderinfo[cupLevelNum]->typeoflevel), + bonusgt, setencore, // if this isn't correct, Got_Mapcmd will fix it true // Rank-restricted! ); diff --git a/src/k_follower.c b/src/k_follower.c index 74d52d6aa..232e509e3 100644 --- a/src/k_follower.c +++ b/src/k_follower.c @@ -477,10 +477,8 @@ void K_HandleFollower(player_t *player) if (fl->mode == FOLLOWERMODE_GROUND) { - sector_t *sec = R_PointInSubsector(sx, sy)->sector; - - fh = min(fh, P_GetFloorZ(player->follower, sec, sx, sy, NULL)); - ch = max(ch, P_GetCeilingZ(player->follower, sec, sx, sy, NULL) - ourheight); + fh = min(fh, P_FloorzAtPos(sx, sy, player->follower->z, ourheight)); + ch = max(ch, P_CeilingzAtPos(sx, sy, player->follower->z, ourheight) - ourheight); if (P_IsObjectOnGround(player->mo) == false) {