diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg index 0064304221a205a48016e759802cfaa3a37d6381..6abf14a35882157e710eb2b5891fbe9b9babe7f6 100644 --- a/extras/conf/SRB2-22.cfg +++ b/extras/conf/SRB2-22.cfg @@ -578,6 +578,7 @@ linedeftypes title = "Per-Sector Gravity"; prefix = "(1)"; flags64text = "[6] Flip in reverse gravity"; + flags8192text = "[13] Override MF2_OBJECTFLIP"; } 5 diff --git a/src/p_mobj.c b/src/p_mobj.c index 36253569b96b0a21d4e670721d9f136e7b5c9296..a4f2147e56f7862eebee753ea1fe9f9ab807a4e6 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1464,7 +1464,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo) gravityadd = -FixedMul(gravity, gravfactor); if ((rover->master->frontsector->flags & MSF_GRAVITYFLIP) && gravityadd > 0) + { + if (rover->master->frontsector->specialflags & SSF_GRAVITYOVERRIDE) + mo->flags2 &= ~MF2_OBJECTFLIP; mo->eflags |= MFE_VERTICALFLIP; + } no3dfloorgrav = false; break; @@ -1476,7 +1480,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo) gravityadd = -FixedMul(gravity, P_GetSectorGravityFactor(mo->subsector->sector)); if ((mo->subsector->sector->flags & MSF_GRAVITYFLIP) && gravityadd > 0) + { + if (mo->subsector->sector->specialflags & SSF_GRAVITYOVERRIDE) + mo->flags2 &= ~MF2_OBJECTFLIP; mo->eflags |= MFE_VERTICALFLIP; + } } // Less gravity underwater. diff --git a/src/p_spec.c b/src/p_spec.c index 03ed298e89d71e4498d0171b61a751d50aabebd9..4ebf5ccd3e67897a90b53a3046fcdafc6325516f 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -6283,6 +6283,9 @@ void P_SpawnSpecials(boolean fromnetsave) else sectors[s].flags &= ~MSF_GRAVITYFLIP; + if (lines[i].flags & ML_EFFECT6) + sectors[s].specialflags |= SSF_GRAVITYOVERRIDE; + CheckForReverseGravity |= (sectors[s].flags & MSF_GRAVITYFLIP); } break; diff --git a/src/r_defs.h b/src/r_defs.h index e91f864ac309ded2b8e81c4137054dd6c19bf5f1..38c6e25f7eab51364515a88d468c2f7067eb9501 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -315,6 +315,7 @@ typedef enum SSF_FINISHLINE = 1<<17, SSF_ROPEHANG = 1<<18, SSF_JUMPFLIP = 1<<19, + SSF_GRAVITYOVERRIDE = 1<<20, } sectorspecialflags_t; typedef enum