diff --git a/src/k_kart.c b/src/k_kart.c index 3804235c5..5cb6235c9 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -125,11 +125,6 @@ void K_TimerReset(void) g_pointlimit = 0; } -boolean K_ShouldSpawnDuelItems(void) -{ - return (inDuel == true || (grandprixinfo.gp && grandprixinfo.eventmode == GPEVENT_BONUS)); -} - static void K_SpawnItemCapsules(void) { mapthing_t *mt = mapthings; @@ -281,7 +276,10 @@ void K_TimerInit(void) timelimitintics = K_TimeLimitForGametype(); g_pointlimit = K_PointLimitForGametype(); - if (K_ShouldSpawnDuelItems()) + // K_TimerInit is called after all mapthings are spawned, + // so they didn't know if it's supposed to be a duel + // (inDuel is always false before K_TimerInit is called). + if (inDuel) { K_SpawnDuelOnlyItems(); } diff --git a/src/k_kart.h b/src/k_kart.h index 3224e1256..ec4fe9fa1 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -233,8 +233,6 @@ void K_KartEbrakeVisuals(player_t *p); void K_HandleDirectionalInfluence(player_t *player); fixed_t K_DefaultPlayerRadius(player_t *player); -boolean K_ShouldSpawnDuelItems(void); - // sound stuff for lua void K_PlayAttackTaunt(mobj_t *source); void K_PlayBoostTaunt(mobj_t *source); diff --git a/src/p_mobj.c b/src/p_mobj.c index ce279a0d4..497275b93 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -12486,12 +12486,18 @@ static boolean P_AllowMobjSpawn(mapthing_t* mthing, mobjtype_t i) break; } - if (!K_ShouldSpawnDuelItems()) + // This duel check is tricky. + // At map load, inDuel is always false, because + // K_TimerInit is called afterward. K_TimerInit will then + // spawn all the duel mode objects itself, which ends up + // calling this function again. + // So that's why this check is even here. + if (inDuel == false && (grandprixinfo.gp == false || grandprixinfo.eventmode != GPEVENT_BONUS)) { if (K_IsDuelItem(i) == true && K_DuelItemAlwaysSpawns(mthing) == false) { - // Only spawns in Duels. + // Only spawns in Duels or GP bonus rounds. return false; } }