From cb34ea138822abbdc16d31a12c59c3c7a44b0f43 Mon Sep 17 00:00:00 2001 From: Sally Coolatta Date: Sat, 2 May 2020 02:01:39 -0400 Subject: [PATCH] Consider FOFs when figuring out sectors to be careful near --- src/k_bot.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/k_bot.c b/src/k_bot.c index 7af7869cc..e3c1bfd08 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -209,7 +209,7 @@ static fixed_t K_DistanceOfLineFromPoint(fixed_t v1x, fixed_t v1y, fixed_t v2x, return P_AproxDistance(cx - px, cy - py); } -static boolean K_BotHatesThisSector(player_t *player, sector_t *sec) +static boolean K_BotHatesThisSectorsSpecial(player_t *player, sector_t *sec) { switch (GETSECSPECIAL(sec->special, 1)) { @@ -229,6 +229,54 @@ static boolean K_BotHatesThisSector(player_t *player, sector_t *sec) return false; } +static boolean K_BotHatesThisSector(player_t *player, sector_t *sec) +{ + const boolean flip = (player->mo->eflags & MFE_VERTICALFLIP); + INT32 flag; + ffloor_t *rover; + + if (flip) + { + flag = SF_FLIPSPECIAL_CEILING; + } + else + { + flag = SF_FLIPSPECIAL_FLOOR; + } + + if (sec->flags & flag) + { + if (K_BotHatesThisSectorsSpecial(player, sec)) + { + return true; + } + } + + for (rover = sec->ffloors; rover; rover = rover->next) + { + if (!(rover->flags & FF_EXISTS)) + { + continue; + } + + if (!(rover->master->frontsector->flags & flag)) + { + continue; + } + + if (((*rover->bottomheight >= player->mo->z + player->mo->height) && (flip)) + || ((*rover->topheight <= player->mo->z) && (!flip))) + { + if (K_BotHatesThisSectorsSpecial(player, sec)) + { + return true; + } + } + } + + return false; +} + mobj_t *botmo = NULL; fixed_t distancetocheck = 0;