From 50ce152c69fa11faef84cb51f215d787852d4742 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 28 Aug 2016 13:19:17 +0100 Subject: [PATCH 1/6] Cleaned up some performance issues in Skytop Zone (2.1.16: THE SUGOI UPDATE) arising from some inefficiencies with P_GetMobjGravity. FPS drops only occasionally to 34 now, which is a big improvement when I was frequently getting 27 in Salt's 15andahalf.exe. --- src/p_mobj.c | 57 +++++++++++++++++++++------------------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 62dee0a67..91451e06e 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1278,25 +1278,23 @@ fixed_t P_GetMobjGravity(mobj_t *mo) for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next) { - if (!(rover->flags & FF_EXISTS)) + if (!((rover->flags & FF_EXISTS) && (P_InsideANonSolidFFloor(mo, rover)))) continue; - if (P_InsideANonSolidFFloor(mo, rover)) - { - if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER)) - goopgravity = true; - if (rover->master->frontsector->gravity) - { - gravityadd = -FixedMul(gravity, - (FixedDiv(*rover->master->frontsector->gravity>>FRACBITS, 1000))); + if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER)) + goopgravity = true; - if (rover->master->frontsector->verticalflip && gravityadd > 0) - mo->eflags |= MFE_VERTICALFLIP; + if (!(rover->master->frontsector->gravity)) + continue; - no3dfloorgrav = false; - break; - } - } + gravityadd = -FixedMul(gravity, + (FixedDiv(*rover->master->frontsector->gravity>>FRACBITS, 1000))); + + if (rover->master->frontsector->verticalflip && gravityadd > 0) + mo->eflags |= MFE_VERTICALFLIP; + + no3dfloorgrav = false; + break; } } @@ -1318,28 +1316,22 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (mo->player) { - if (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly] - || (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4]))) - gravityadd = gravityadd/3; // less gravity while flying - if (mo->player->pflags & PF_GLIDING) - gravityadd = gravityadd/3; // less gravity while gliding - if (mo->player->climbing) - gravityadd = 0; - if (mo->player->pflags & PF_NIGHTSMODE) + if ((mo->player->pflags & PF_GLIDING) + || (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly] + || (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4])))) + gravityadd = gravityadd/3; // less gravity while flying/gliding + if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE)) gravityadd = 0; { - UINT8 bits = 0; - if (mo->flags2 & MF2_OBJECTFLIP) - bits ^= 1; - if (mo->player->powers[pw_gravityboots]) - bits ^= 1; - if (bits & 1) + if (!!(mo->flags2 & MF2_OBJECTFLIP) != !!(mo->player->powers[pw_gravityboots])) { gravityadd = -gravityadd; mo->eflags ^= MFE_VERTICALFLIP; } } + if (!!(mo->eflags & MFE_VERTICALFLIP) != wasflip) + P_PlayerFlip(mo); } else { @@ -1347,10 +1339,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (mo->flags2 & MF2_OBJECTFLIP) { mo->eflags |= MFE_VERTICALFLIP; - if (gravityadd < 0) // Don't sink, only rise up - gravityadd *= -1; if (mo->z + mo->height >= mo->ceilingz) gravityadd = 0; + else if (gravityadd < 0) // Don't sink, only rise up + gravityadd *= -1; } else //Otherwise, sort through the other exceptions. { @@ -1396,9 +1388,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (goopgravity) gravityadd = -gravityadd/5; - if (mo->player && !!(mo->eflags & MFE_VERTICALFLIP) != wasflip) - P_PlayerFlip(mo); - gravityadd = FixedMul(gravityadd, mo->scale); return gravityadd; From c0f5f22b6a11d66f68ff72ba1127f640964dfacf Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 28 Aug 2016 13:51:32 +0100 Subject: [PATCH 2/6] Suggested improvement by MI on irc. --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 91451e06e..a66e9cf7c 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1278,7 +1278,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next) { - if (!((rover->flags & FF_EXISTS) && (P_InsideANonSolidFFloor(mo, rover)))) + if (!(rover->flags & FF_EXISTS) || !P_InsideANonSolidFFloor(mo, rover)) continue; if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER)) From 25ab97786285cc89a66b5f2c765b5632c85af905 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 28 Aug 2016 14:06:20 +0100 Subject: [PATCH 3/6] ...didn't realise P_InsideANonSolidFFloor checks for FF_EXISTS itself, so HM --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index a66e9cf7c..7a96dfd53 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1278,7 +1278,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next) { - if (!(rover->flags & FF_EXISTS) || !P_InsideANonSolidFFloor(mo, rover)) + if (!P_InsideANonSolidFFloor(mo, rover)) // P_InsideANonSolidFFloor checks for FF_EXISTS itself continue; if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER)) From e8775419d135a40ea549824fe90139c8d134cbc4 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 28 Aug 2016 14:09:15 +0100 Subject: [PATCH 4/6] Removed now-irrelevant braces. --- src/p_mobj.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 7a96dfd53..547941e70 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1323,12 +1323,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE)) gravityadd = 0; + if (!!(mo->flags2 & MF2_OBJECTFLIP) != !!(mo->player->powers[pw_gravityboots])) { - if (!!(mo->flags2 & MF2_OBJECTFLIP) != !!(mo->player->powers[pw_gravityboots])) - { - gravityadd = -gravityadd; - mo->eflags ^= MFE_VERTICALFLIP; - } + gravityadd = -gravityadd; + mo->eflags ^= MFE_VERTICALFLIP; } if (!!(mo->eflags & MFE_VERTICALFLIP) != wasflip) P_PlayerFlip(mo); From 3bad307e2d464eeae5d106183db6b7620c6e3bd7 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 28 Aug 2016 20:46:56 +0100 Subject: [PATCH 5/6] Sorry, Inu. --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 547941e70..68f4f40f6 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1278,7 +1278,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next) { - if (!P_InsideANonSolidFFloor(mo, rover)) // P_InsideANonSolidFFloor checks for FF_EXISTS itself + if (!(rover->flags & FF_EXISTS) || !P_InsideANonSolidFFloor(mo, rover)) // P_InsideANonSolidFFloor checks for FF_EXISTS itself, but let's not always call this function continue; if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER)) From 6ff75d2aa1bd6f2aa32e8e5a65de2e7ce79525ec Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sat, 3 Sep 2016 21:37:52 +0100 Subject: [PATCH 6/6] Double negation becomes single negation, with handy comment! --- src/p_mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_mobj.c b/src/p_mobj.c index 68f4f40f6..eaef05aaa 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1323,7 +1323,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo) if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE)) gravityadd = 0; - if (!!(mo->flags2 & MF2_OBJECTFLIP) != !!(mo->player->powers[pw_gravityboots])) + if (!(mo->flags2 & MF2_OBJECTFLIP) != !(mo->player->powers[pw_gravityboots])) // negated to turn numeric into bool - would be double negated, but not needed if both would be { gravityadd = -gravityadd; mo->eflags ^= MFE_VERTICALFLIP;