Use old waterskipping code for accuracy

This commit is contained in:
NepDisk 2024-10-05 21:55:13 -04:00
parent 2788d699d4
commit 4f9f23f75c
3 changed files with 6 additions and 30 deletions

View file

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

View file

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

View file

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