...I made two major mistakes with P_GetMobjGravity.

*Didn't take into account object scale
*Doubled force when on the ground (ignore what the comment of the line I moved says, it was relevant for slopes...)

This also led to a mistake with slopes, where I was double-multiplying by the gravity constant to get half (because of a quirk of numbers...)
This commit is contained in:
toasterbabe 2016-06-02 16:42:07 +01:00
parent 213a9632ca
commit 882622d2e7
2 changed files with 9 additions and 13 deletions

View File

@ -1316,9 +1316,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
if (mo->eflags & MFE_UNDERWATER && !goopgravity)
gravityadd = gravityadd/3;
if (!mo->momz) // mobj at stop, no floor, so feel the push of gravity!
gravityadd <<= 1;
if (mo->player)
{
if (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
@ -1402,6 +1399,8 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
if (mo->player && !!(mo->eflags & MFE_VERTICALFLIP) != wasflip)
P_PlayerFlip(mo);
gravityadd = FixedMul(gravityadd, mo->scale);
return gravityadd;
}
@ -1416,8 +1415,11 @@ void P_CheckGravity(mobj_t *mo, boolean affect)
{
fixed_t gravityadd = P_GetMobjGravity(mo);
if (!mo->momz) // mobj at stop, no floor, so feel the push of gravity!
gravityadd <<= 1;
if (affect)
mo->momz += FixedMul(gravityadd, mo->scale);
mo->momz += gravityadd;
if (mo->type == MT_SKIM && mo->z + mo->momz <= mo->watertop && mo->z >= mo->watertop)
{

View File

@ -812,7 +812,7 @@ void P_HandleSlopeLanding(mobj_t *thing, pslope_t *slope)
mom.y = thing->momy;
mom.z = thing->momz*2;
//CONS_Printf("langing on slope\n");
//CONS_Printf("Landing on slope\n");
// Reverse quantizing might could use its own function later
slope->zangle = ANGLE_MAX-slope->zangle;
@ -871,16 +871,10 @@ void P_ButteredSlope(mobj_t *mo)
thrust = FixedMul(thrust, FRACUNIT+P_AproxDistance(mo->momx, mo->momy)/16);
// This makes it harder to zigzag up steep slopes, as well as allows greater top speed when rolling down
// The strength of gravity depends on the global gravity base setting...
thrust = FixedMul(thrust, gravity);
// ...the sector-based gravity strength...
// Let's get the gravity strength for the object...
thrust = FixedMul(thrust, abs(P_GetMobjGravity(mo)));
// ...and the scale of the object.
thrust = FixedMul(thrust, mo->scale);
// Let's also multiply by friction for good measure.
// ... and its friction against the ground for good measure.
thrust = FixedMul(thrust, mo->friction);
P_Thrust(mo, mo->standingslope->xydirection, thrust);