New air speed cap behavior

- Lowered from 75 units to 50 units
- Added easing to make the shift in speed feel natural
- (Also I'm now pretty sure it didn't actually work before...?!)
This commit is contained in:
TehRealSalt 2019-05-02 17:36:48 -04:00
parent eb5dc6a040
commit 20e5d59ae4
2 changed files with 13 additions and 11 deletions

View file

@ -2289,9 +2289,6 @@ fixed_t K_3dKartMovement(player_t *player, boolean onground, fixed_t forwardmove
newspeed = minspeed;
}
if (!P_IsObjectOnGround(player->mo) && newspeed > 75*mapobjectscale)
newspeed = 75*mapobjectscale;
finalspeed = newspeed - oldspeed;
// forwardmove is:

View file

@ -4691,13 +4691,6 @@ static void P_3dMovement(player_t *player)
//movepushforward = cmd->forwardmove * (thrustfactor * acceleration);
movepushforward = K_3dKartMovement(player, onground, cmd->forwardmove);
// allow very small movement while in air for gameplay
if (!onground)
movepushforward >>= 2; // proper air movement
// don't need to account for scale here with kart accel code
//movepushforward = FixedMul(movepushforward, player->mo->scale);
if (player->mo->movefactor != FRACUNIT) // Friction-scaled acceleration...
movepushforward = FixedMul(movepushforward, player->mo->movefactor);
@ -4761,6 +4754,18 @@ static void P_3dMovement(player_t *player)
player->mo->momx += totalthrust.x;
player->mo->momy += totalthrust.y;
if (!onground)
{
fixed_t airspeedcap = (50*mapobjectscale);
fixed_t speed = R_PointToDist2(0, 0, player->mo->momx, player->mo->momy);
if (speed > airspeedcap)
{
fixed_t newspeed = speed - ((speed - airspeedcap) / 32);
player->mo->momx = FixedMul(FixedDiv(player->mo->momx, speed), newspeed);
player->mo->momy = FixedMul(FixedDiv(player->mo->momy, speed), newspeed);
}
}
#endif
// Time to ask three questions:
@ -4777,7 +4782,7 @@ static void P_3dMovement(player_t *player)
if (newMagnitude > K_GetKartSpeed(player, true)) //topspeed)
{
fixed_t tempmomx, tempmomy;
if (oldMagnitude > K_GetKartSpeed(player, true) && onground) // SRB2Kart: onground check for air speed cap
if (oldMagnitude > K_GetKartSpeed(player, true))
{
if (newMagnitude > oldMagnitude)
{