Recreate old water skipping

This commit is contained in:
NepDisk 2024-09-06 04:08:03 -04:00
parent 4fd41ab4d5
commit 9f937cc4ae
3 changed files with 18 additions and 15 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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<<FRACBITS;
//const fixed_t max = 8<<FRACBITS;
mobj->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++;
}