Merge branch 'water-physics' into 'master'

Altered water physics

See merge request KartKrew/Kart!261
This commit is contained in:
Sal 2020-05-14 18:47:08 -04:00
commit 9921dfbb05
2 changed files with 44 additions and 8 deletions

View file

@ -6745,6 +6745,11 @@ static INT16 K_GetKartDriftValue(player_t *player, fixed_t countersteer)
basedrift += (basedrift / greasetics) * player->kartstuff[k_tiregrease];
}
if (player->mo->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER))
{
countersteer = 3*countersteer/2;
}
return basedrift + (FixedMul(driftadjust * FRACUNIT, countersteer) / FRACUNIT);
}
@ -6780,6 +6785,11 @@ INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue)
turnvalue = 5*turnvalue/4;
}
if (player->mo->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER))
{
turnvalue = 3*turnvalue/2;
}
turnvalue = FixedMul(turnvalue * FRACUNIT, weightadjust) / FRACUNIT; // Weight has a small effect on turning
return turnvalue;
@ -7900,6 +7910,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
player->mo->friction += 1228;
if (player->mo->eflags & (MFE_UNDERWATER|MFE_TOUCHWATER))
player->mo->friction += 614;
// Wipeout slowdown
if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow])
{

View file

@ -1248,29 +1248,45 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
}
// Less gravity underwater.
if (mo->eflags & MFE_UNDERWATER && !goopgravity)
gravityadd = gravityadd/3;
if ((mo->eflags & MFE_UNDERWATER) && !goopgravity)
{
if (mo->momz * P_MobjFlip(mo) <= 0)
{
gravityadd = 4*gravityadd/3;
}
else
{
gravityadd = gravityadd/3;
}
}
if (mo->player)
{
//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))
{
return 0;
}
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;
}
if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way
{
P_PlayerFlip(mo);
}
if (mo->player->kartstuff[k_pogospring])
{
gravityadd = (5*gravityadd)/2;
}
if (mo->player->kartstuff[k_waterskip])
{
gravityadd = (4*gravityadd)/3;
}
}
else
{
@ -1278,10 +1294,15 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
if (mo->flags2 & MF2_OBJECTFLIP)
{
mo->eflags |= MFE_VERTICALFLIP;
if (mo->z + mo->height >= mo->ceilingz)
{
gravityadd = 0;
}
else if (gravityadd < 0) // Don't sink, only rise up
gravityadd *= -1;
{
gravityadd = -gravityadd;
}
}
else //Otherwise, sort through the other exceptions.
{
@ -1316,7 +1337,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
}
break;
case MT_WATERDROP:
gravityadd >>= 1;
gravityadd /= 2;
break;
case MT_BANANA:
case MT_EGGMANITEM:
@ -1341,7 +1362,9 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
// Goop has slower, reversed gravity
if (goopgravity)
{
gravityadd = -gravityadd/5;
}
gravityadd = FixedMul(gravityadd, mo->scale);