diff --git a/src/k_kart.c b/src/k_kart.c index d556b97f4..646d0587b 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -3277,6 +3277,17 @@ boolean K_WaterRun(player_t *player) return false; } +boolean K_WaterSkip(player_t *player) +{ + if (player->speed/3 > abs(player->mo->momz)) // Going more forward than horizontal, so you can skip across the water. + return true; + + if (player->speed > 20*mapobjectscale && player->waterskip) // Already skipped once, so you can skip once more! + return true; + + return false; +} + 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 1c75288e5..03ecb80b3 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -143,6 +143,7 @@ boolean K_SlopeResistance(player_t *player); tripwirepass_t K_TripwirePassConditions(player_t *player); boolean K_TripwirePass(player_t *player); boolean K_WaterRun(player_t *player); +boolean K_WaterSkip(player_t *player); void K_ApplyTripWire(player_t *player, tripwirestate_t state); INT16 K_GetSpindashChargeTime(player_t *player); fixed_t K_GetSpindashChargeSpeed(player_t *player); diff --git a/src/p_mobj.c b/src/p_mobj.c index 9b08f0e75..69c5c5c5d 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -3317,10 +3317,7 @@ void P_MobjCheckWater(mobj_t *mobj) } // skipping stone! - 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 > 20*mapobjectscale && p->waterskip)) // Already skipped once, so you can skip once more! - && (splashValid == true)) + if (p && p->waterskip < 2 && K_WaterSkip(p) && (splashValid == true)) { const fixed_t hop = 5 * mobj->scale;