diff --git a/src/k_bot.cpp b/src/k_bot.cpp index 1d827138a..5855e52a8 100644 --- a/src/k_bot.cpp +++ b/src/k_bot.cpp @@ -2160,3 +2160,10 @@ void K_UpdateBotGameplayVars(player_t *player) K_UpdateBotGameplayVarsItemUsage(player); } + +boolean K_BotUnderstandsItem(kartitems_t item) +{ + if (item == KITEM_BALLHOG) + return false; // Sorry. MRs welcome! + return true; +} diff --git a/src/k_bot.h b/src/k_bot.h index e58e4e8be..66d015ac7 100644 --- a/src/k_bot.h +++ b/src/k_bot.h @@ -401,6 +401,7 @@ void K_BotItemUsage(const player_t *player, ticcmd_t *cmd, INT16 turnamt); void K_BotPickItemPriority(player_t *player); +boolean K_BotUnderstandsItem(kartitems_t item); #ifdef __cplusplus } // extern "C" diff --git a/src/k_kart.c b/src/k_kart.c index 202c1dab4..d88128a40 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -9584,6 +9584,11 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd) player->pflags2 &= ~PF2_SUPERTRANSFERVFX; } + if (K_PlayerUsesBotMovement(player) && !K_BotUnderstandsItem(player->itemtype) && player->itemamount) + { + K_DropItems(player); + } + if (player->transfer) { if (player->fastfall) diff --git a/src/k_roulette.c b/src/k_roulette.c index 7b53fba25..88eaec7d4 100644 --- a/src/k_roulette.c +++ b/src/k_roulette.c @@ -929,6 +929,9 @@ static void K_PushToRouletteItemList(itemroulette_t *const roulette, INT32 item) --------------------------------------------------*/ static void K_AddItemToReel(const player_t *player, itemroulette_t *const roulette, kartitems_t item) { + if (player && K_PlayerUsesBotMovement(player) && !K_BotUnderstandsItem(item)) + return; + K_PushToRouletteItemList(roulette, item); if (player == NULL) @@ -1235,6 +1238,17 @@ static boolean K_TimingPermitsItem(kartitems_t item, const itemroulette_t *roule return true; } +static void K_FixEmptyRoulette(const player_t *player, itemroulette_t *const roulette) +{ + if (roulette->itemListLen > 0) + return; + + if (K_PlayerUsesBotMovement(player)) // Bots can't use certain items. Give them _something_. + K_PushToRouletteItemList(roulette, KITEM_SUPERRING); + else // Players can use all items, so this should never happen. + K_PushToRouletteItemList(roulette, KITEM_SAD); +} + /*-------------------------------------------------- void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulette, boolean ringbox, boolean dryrun) @@ -1379,6 +1393,7 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet if (K_ForcedSPB(player, roulette) == true) { K_AddItemToReel(player, roulette, KITEM_SPB); + K_FixEmptyRoulette(player, roulette); return; } @@ -1403,6 +1418,7 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet // singleItem = KITEM_SAD by default, // so it will be used when all items are turned off. K_AddItemToReel(player, roulette, singleItem); + K_FixEmptyRoulette(player, roulette); return; } @@ -1758,6 +1774,8 @@ void K_FillItemRouletteData(const player_t *player, itemroulette_t *const roulet totalSpawnChance--; } + + K_FixEmptyRoulette(player, roulette); } /*--------------------------------------------------