Recreate old water skipping
This commit is contained in:
parent
4fd41ab4d5
commit
9f937cc4ae
3 changed files with 18 additions and 15 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
23
src/p_mobj.c
23
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<<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++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue