mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-15 14:11:19 +00:00
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.
This commit is contained in:
parent
831c29ead7
commit
50ce152c69
1 changed files with 23 additions and 34 deletions
57
src/p_mobj.c
57
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)
|
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;
|
continue;
|
||||||
|
|
||||||
if (P_InsideANonSolidFFloor(mo, rover))
|
if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER))
|
||||||
{
|
goopgravity = true;
|
||||||
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->master->frontsector->verticalflip && gravityadd > 0)
|
if (!(rover->master->frontsector->gravity))
|
||||||
mo->eflags |= MFE_VERTICALFLIP;
|
continue;
|
||||||
|
|
||||||
no3dfloorgrav = false;
|
gravityadd = -FixedMul(gravity,
|
||||||
break;
|
(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)
|
||||||
{
|
{
|
||||||
if (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
|
if ((mo->player->pflags & PF_GLIDING)
|
||||||
|| (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4])))
|
|| (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
|
||||||
gravityadd = gravityadd/3; // less gravity while flying
|
|| (mo->state >= &states[S_PLAY_SPC1] && mo->state <= &states[S_PLAY_SPC4]))))
|
||||||
if (mo->player->pflags & PF_GLIDING)
|
gravityadd = gravityadd/3; // less gravity while flying/gliding
|
||||||
gravityadd = gravityadd/3; // less gravity while gliding
|
if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE))
|
||||||
if (mo->player->climbing)
|
|
||||||
gravityadd = 0;
|
|
||||||
if (mo->player->pflags & PF_NIGHTSMODE)
|
|
||||||
gravityadd = 0;
|
gravityadd = 0;
|
||||||
|
|
||||||
{
|
{
|
||||||
UINT8 bits = 0;
|
if (!!(mo->flags2 & MF2_OBJECTFLIP) != !!(mo->player->powers[pw_gravityboots]))
|
||||||
if (mo->flags2 & MF2_OBJECTFLIP)
|
|
||||||
bits ^= 1;
|
|
||||||
if (mo->player->powers[pw_gravityboots])
|
|
||||||
bits ^= 1;
|
|
||||||
if (bits & 1)
|
|
||||||
{
|
{
|
||||||
gravityadd = -gravityadd;
|
gravityadd = -gravityadd;
|
||||||
mo->eflags ^= MFE_VERTICALFLIP;
|
mo->eflags ^= MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!!(mo->eflags & MFE_VERTICALFLIP) != wasflip)
|
||||||
|
P_PlayerFlip(mo);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1347,10 +1339,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
if (mo->flags2 & MF2_OBJECTFLIP)
|
if (mo->flags2 & MF2_OBJECTFLIP)
|
||||||
{
|
{
|
||||||
mo->eflags |= MFE_VERTICALFLIP;
|
mo->eflags |= MFE_VERTICALFLIP;
|
||||||
if (gravityadd < 0) // Don't sink, only rise up
|
|
||||||
gravityadd *= -1;
|
|
||||||
if (mo->z + mo->height >= mo->ceilingz)
|
if (mo->z + mo->height >= mo->ceilingz)
|
||||||
gravityadd = 0;
|
gravityadd = 0;
|
||||||
|
else if (gravityadd < 0) // Don't sink, only rise up
|
||||||
|
gravityadd *= -1;
|
||||||
}
|
}
|
||||||
else //Otherwise, sort through the other exceptions.
|
else //Otherwise, sort through the other exceptions.
|
||||||
{
|
{
|
||||||
|
@ -1396,9 +1388,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
if (goopgravity)
|
if (goopgravity)
|
||||||
gravityadd = -gravityadd/5;
|
gravityadd = -gravityadd/5;
|
||||||
|
|
||||||
if (mo->player && !!(mo->eflags & MFE_VERTICALFLIP) != wasflip)
|
|
||||||
P_PlayerFlip(mo);
|
|
||||||
|
|
||||||
gravityadd = FixedMul(gravityadd, mo->scale);
|
gravityadd = FixedMul(gravityadd, mo->scale);
|
||||||
|
|
||||||
return gravityadd;
|
return gravityadd;
|
||||||
|
|
Loading…
Reference in a new issue