diff --git a/src/k_kart.c b/src/k_kart.c index 11a85ab4d..e80ef4c4f 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2695,11 +2695,6 @@ boolean K_TripwirePass(player_t *player) return (player->tripwirePass != TRIPWIRE_NONE); } -boolean K_MovingHorizontally(player_t *player) -{ - return (player->speed/3 > abs(player->mo->momz)); -} - boolean K_WaterRun(player_t *player) { if (player->waterrun) @@ -2707,24 +2702,6 @@ boolean K_WaterRun(player_t *player) return false; } -boolean K_WaterSkip(player_t *player) -{ - if (player->waterskip > 2) - { - // Already finished waterskipping. - return false; - } - - if (player->waterskip > 0) - { - // Already waterskipping. - // Simply make sure you haven't slowed down drastically. - return (K_GetKartSpeed(player,false,true)/3); - } - - return K_MovingHorizontally(player); -} - static fixed_t K_FlameShieldDashVar(INT32 val) { // 1 second = 75% + 50% top speed diff --git a/src/k_kart.h b/src/k_kart.h index 09940e70d..e9de53f4b 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -107,9 +107,7 @@ boolean K_SlopeResistance(player_t *player); fixed_t K_PlayerTripwireSpeedThreshold(player_t *player); tripwirepass_t K_TripwirePassConditions(player_t *player); boolean K_TripwirePass(player_t *player); -boolean K_MovingHorizontally(player_t *player); boolean K_WaterRun(player_t *player); -boolean K_WaterSkip(player_t *player); void K_SquishPlayer(player_t *player, mobj_t *inflictor, mobj_t *source); void K_ApplyTripWire(player_t *player, tripwirestate_t state); fixed_t K_GetKartSpeedFromStat(UINT8 kartspeed); diff --git a/src/p_mobj.c b/src/p_mobj.c index 4bc1c8e2d..1aab374d1 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3355,17 +3355,18 @@ void P_MobjCheckWater(mobj_t *mobj) P_SetScale(splish, mobj->scale); // skipping stone! - if (K_WaterSkip(p) == true && ((!(mobj->eflags & MFE_VERTICALFLIP) && thingtop - mobj->momz > mobj->watertop) - || ((mobj->eflags & MFE_VERTICALFLIP) && mobj->z - mobj->momz < mobj->waterbottom))) + if (p && p->waterskip < 2 + && ((p->speed/3 > abs(mobj->momz)) // Going more forward than horizontal, so you can skip across the water. + || (p->speed > K_GetKartSpeed(p,false,true)/3 && p->waterskip)) // Already skipped once, so you can skip once more! + && ((!(mobj->eflags & MFE_VERTICALFLIP) && thingtop - mobj->momz > mobj->watertop) + || ((mobj->eflags & MFE_VERTICALFLIP) && mobj->z - mobj->momz < mobj->waterbottom))) { - const fixed_t min = 6<momx = mobj->momx/2; mobj->momy = mobj->momy/2; mobj->momz = -mobj->momz/2; - + if (!(mobj->eflags & MFE_VERTICALFLIP) && mobj->momz < FixedMul(min, mobj->scale)) mobj->momz = FixedMul(min, mobj->scale); else if (mobj->eflags & MFE_VERTICALFLIP && mobj->momz > FixedMul(-min, mobj->scale))