From 9f937cc4ae8ee0c2c123ca71e800a2560d04cc3a Mon Sep 17 00:00:00 2001 From: NepDisk <16447892+NepDisk@users.noreply.github.com> Date: Fri, 6 Sep 2024 04:08:03 -0400 Subject: [PATCH] Recreate old water skipping --- src/k_kart.c | 8 ++++---- src/k_kart.h | 2 +- src/p_mobj.c | 23 +++++++++++++---------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/k_kart.c b/src/k_kart.c index d1bc8afc0..cdcffe904 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -2706,9 +2706,9 @@ boolean K_TripwirePass(player_t *player) return (player->tripwirePass != TRIPWIRE_NONE); } -boolean K_MovingHorizontally(mobj_t *mobj) +boolean K_MovingHorizontally(player_t *player) { - return (P_AproxDistance(mobj->momx, mobj->momy) / 5 > abs(mobj->momz)); + return (player->speed/3 > abs(player->mo->momz)); } boolean K_WaterRun(player_t *player) @@ -2730,10 +2730,10 @@ boolean K_WaterSkip(player_t *player) { // Already waterskipping. // Simply make sure you haven't slowed down drastically. - return (player->speed > 20 * mapobjectscale); + return (K_GetKartSpeed(player,false,true)/3); } - return K_MovingHorizontally(player->mo); + return K_MovingHorizontally(player); } static fixed_t K_FlameShieldDashVar(INT32 val) diff --git a/src/k_kart.h b/src/k_kart.h index 91905d24c..4879e5fff 100644 --- a/src/k_kart.h +++ b/src/k_kart.h @@ -108,7 +108,7 @@ boolean K_ApplyOffroad(player_t *player); boolean K_SlopeResistance(player_t *player); tripwirepass_t K_TripwirePassConditions(player_t *player); boolean K_TripwirePass(player_t *player); -boolean K_MovingHorizontally(mobj_t *mobj); +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); diff --git a/src/p_mobj.c b/src/p_mobj.c index 94df355c2..5e82bd467 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1149,11 +1149,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo) P_PlayerFlip(mo); } - if (mo->player->waterskip) - { - gravityadd = (4*gravityadd)/3; - } - if (mo->player->pogospring) { gravityadd = (5*gravityadd)/2; @@ -3321,13 +3316,21 @@ void P_MobjCheckWater(mobj_t *mobj) P_SetScale(splish, mobj->scale); // skipping stone! - if (K_WaterSkip(p) == true) + if (K_WaterSkip(p) == true && ((!(mobj->eflags & MFE_VERTICALFLIP) && thingtop - mobj->momz > mobj->watertop) + || ((mobj->eflags & MFE_VERTICALFLIP) && mobj->z - mobj->momz < mobj->waterbottom))) { - const fixed_t hop = 5 * mapobjectscale; - mobj->momx = (4*mobj->momx)/5; - mobj->momy = (4*mobj->momy)/5; - mobj->momz = hop * P_MobjFlip(mobj); + 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)) + mobj->momz = FixedMul(-min, mobj->scale); p->waterskip++; }