From 9e31ff0799a1137177dfb1d4ac7d235e7024d581 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 31 May 2012 10:07:30 +0000 Subject: [PATCH] - fixed: CheckForPushSpecial's window check must also check 3D floors in the back sector. SVN r3674 (trunk) --- src/p_map.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/p_map.cpp b/src/p_map.cpp index ccb5819532..6f5496054c 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -1649,9 +1649,27 @@ static void CheckForPushSpecial (line_t *line, int side, AActor *mobj, bool wind if (fzt >= mobj->z + mobj->height && bzt >= mobj->z + mobj->height && fzb <= mobj->z && bzb <= mobj->z) { + // we must also check if some 3D floor in the backsector may be blocking + #ifdef _3DFLOORS + for(unsigned int i=0;ibacksector->e->XFloor.ffloors.Size();i++) + { + F3DFloor* rover = line->backsector->e->XFloor.ffloors[i]; + + if (!(rover->flags & FF_SOLID) || !(rover->flags & FF_EXISTS)) continue; + + fixed_t ff_bottom = rover->bottom.plane->ZatPoint(mobj->x, mobj->y); + fixed_t ff_top = rover->top.plane->ZatPoint(mobj->x, mobj->y); + + if (ff_bottom < mobj->z + mobj->height && ff_top > mobj->z) + { + goto isblocking; + } + } + #endif return; } } +isblocking: if (mobj->flags2 & MF2_PUSHWALL) { P_ActivateLine (line, mobj, side, SPAC_Push);