diff --git a/src/k_hud.c b/src/k_hud.c index 639d8ac9b..2d76337da 100644 --- a/src/k_hud.c +++ b/src/k_hud.c @@ -4294,22 +4294,7 @@ static void K_drawBattleFullscreen(void) } // FREE PLAY? - if (K_Cooperative() == false) - { - UINT8 i; - - // check to see if there's anyone else at all - for (i = 0; i < MAXPLAYERS; i++) - { - if (i == displayplayers[0]) - continue; - if (playeringame[i] && !players[i].spectator) - break; - } - - if (i == MAXPLAYERS) - K_drawKartFreePlay(); - } + K_drawKartFreePlay(); } static void K_drawKartFirstPerson(void) @@ -4701,12 +4686,13 @@ static void K_drawTrickCool(void) void K_drawKartFreePlay(void) { - // Doesn't support splitscreens higher than 2 for real estate reasons. - if (!LUA_HudEnabled(hud_freeplay)) return; - if (modeattacking || grandprixinfo.gp || bossinfo.valid || stplyr->spectator) + if (stplyr->spectator == true) + return; + + if (M_NotFreePlay(stplyr) == true) return; if (lt_exitticker < TICRATE/2) @@ -5181,8 +5167,7 @@ void K_drawKartHUD(void) V_DrawScaledPatch(BASEVIDWIDTH/2 - (SHORT(kp_yougotem->width)/2), 32, V_HUDTRANS, kp_yougotem); // Draw FREE PLAY. - if (islonesome && K_Cooperative() == false && gametype != GT_TUTORIAL) - K_drawKartFreePlay(); + K_drawKartFreePlay(); if (r_splitscreen == 0 && (stplyr->pflags & PF_WRONGWAY) && ((leveltime / 8) & 1)) { diff --git a/src/m_cond.c b/src/m_cond.c index 4e3f31392..45db53caf 100644 --- a/src/m_cond.c +++ b/src/m_cond.c @@ -624,13 +624,21 @@ void M_UpdateConditionSetsPending(void) } } -static boolean M_NotFreePlay(player_t *player) +boolean M_NotFreePlay(player_t *player) { UINT8 i; - // Rounds that permit Cooperative play can be played by yourself without being FREE PLAY. - if (K_Cooperative()) + if (K_CanChangeRules(true) == false) + { + // Rounds with direction are never FREE PLAY. return true; + } + + if (battleprisons) + { + // Prison Break is battle's FREE PLAY. + return false; + } for (i = 0; i < MAXPLAYERS; i++) { diff --git a/src/m_cond.h b/src/m_cond.h index f65bba15b..c7712d5f7 100644 --- a/src/m_cond.h +++ b/src/m_cond.h @@ -325,6 +325,8 @@ void M_ClearConditionSet(UINT8 set); void M_ClearSecrets(void); void M_ClearStats(void); +boolean M_NotFreePlay(player_t *player); + // Updating conditions and unlockables boolean M_CheckCondition(condition_t *cn, player_t *player); boolean M_UpdateUnlockablesAndExtraEmblems(boolean loud, boolean doall);