mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'softer-stumble' into 'master'
Smoothlanding leniency (resolves #602) Closes #602 See merge request KartKrew/Kart!1428
This commit is contained in:
commit
b8b286b177
6 changed files with 34 additions and 11 deletions
19
src/k_kart.c
19
src/k_kart.c
|
|
@ -3921,7 +3921,7 @@ void K_StumblePlayer(player_t *player)
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||||
|
|
||||||
// Reset slope.
|
// Reset slope.
|
||||||
player->mo->pitch = player->mo->roll = 0;
|
P_ResetPitchRoll(player->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, boolean fromAir)
|
boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, boolean fromAir)
|
||||||
|
|
@ -3939,6 +3939,14 @@ boolean K_CheckStumble(player_t *player, angle_t oldPitch, angle_t oldRoll, bool
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (fromAir && player->airtime < STUMBLE_AIRTIME
|
||||||
|
&& player->airtime > 1) // ACHTUNG HACK, sorry. Ground-to-ground transitions sometimes have 1-tic airtime because collision blows
|
||||||
|
{
|
||||||
|
// Short airtime with no reaction window, probably a track traversal setpiece.
|
||||||
|
// Don't punish for these.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if ((player->mo->pitch == oldPitch)
|
if ((player->mo->pitch == oldPitch)
|
||||||
&& (player->mo->roll == oldRoll))
|
&& (player->mo->roll == oldRoll))
|
||||||
{
|
{
|
||||||
|
|
@ -4102,6 +4110,9 @@ void K_UpdateStumbleIndicator(player_t *player)
|
||||||
mobj->renderflags &= ~RF_HORIZONTALFLIP;
|
mobj->renderflags &= ~RF_HORIZONTALFLIP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (air && player->airtime < STUMBLE_AIRTIME)
|
||||||
|
delta = 0;
|
||||||
|
|
||||||
steepRange = ANGLE_90 - steepVal;
|
steepRange = ANGLE_90 - steepVal;
|
||||||
delta = max(0, abs(delta) - ((signed)steepVal));
|
delta = max(0, abs(delta) - ((signed)steepVal));
|
||||||
trans = ((FixedDiv(AngleFixed(delta), AngleFixed(steepRange)) * (NUMTRANSMAPS - 2)) + (FRACUNIT/2)) / FRACUNIT;
|
trans = ((FixedDiv(AngleFixed(delta), AngleFixed(steepRange)) * (NUMTRANSMAPS - 2)) + (FRACUNIT/2)) / FRACUNIT;
|
||||||
|
|
@ -4252,7 +4263,7 @@ static void K_HandleTumbleBounce(player_t *player)
|
||||||
player->tumbleHeight = 10;
|
player->tumbleHeight = 10;
|
||||||
player->pflags |= PF_TUMBLELASTBOUNCE;
|
player->pflags |= PF_TUMBLELASTBOUNCE;
|
||||||
player->mo->rollangle = 0; // p_user.c will stop rotating the player automatically
|
player->mo->rollangle = 0; // p_user.c will stop rotating the player automatically
|
||||||
player->mo->pitch = player->mo->roll = 0; // Prevent Kodachrome Void infinite
|
P_ResetPitchRoll(player->mo); // Prevent Kodachrome Void infinite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -6155,8 +6166,7 @@ void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, UINT8 sound)
|
||||||
mo->momz = FixedDiv(mo->momz, FixedSqrt(3*FRACUNIT));
|
mo->momz = FixedDiv(mo->momz, FixedSqrt(3*FRACUNIT));
|
||||||
}
|
}
|
||||||
|
|
||||||
mo->pitch = 0;
|
P_ResetPitchRoll(mo);
|
||||||
mo->roll = 0;
|
|
||||||
|
|
||||||
if (sound)
|
if (sound)
|
||||||
{
|
{
|
||||||
|
|
@ -10444,6 +10454,7 @@ static void K_KartSpindash(player_t *player)
|
||||||
// Update fastfall.
|
// Update fastfall.
|
||||||
player->fastfall = player->mo->momz;
|
player->fastfall = player->mo->momz;
|
||||||
player->spindash = 0;
|
player->spindash = 0;
|
||||||
|
P_ResetPitchRoll(player->mo);
|
||||||
|
|
||||||
if (player->fastfallBase == 0)
|
if (player->fastfallBase == 0)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -40,8 +40,10 @@ Make sure this matches the actual number of states
|
||||||
|
|
||||||
#define RR_PROJECTILE_FUSE (8*TICRATE)
|
#define RR_PROJECTILE_FUSE (8*TICRATE)
|
||||||
|
|
||||||
#define STUMBLE_STEEP_VAL ANG60
|
// 2023-08-26 +ang20 to Sal's OG values to make them friendlier - Tyron
|
||||||
#define STUMBLE_STEEP_VAL_AIR (ANG30 + ANG10)
|
#define STUMBLE_STEEP_VAL (ANG60 + ANG20)
|
||||||
|
#define STUMBLE_STEEP_VAL_AIR (ANG30 + ANG10 + ANG20)
|
||||||
|
#define STUMBLE_AIRTIME TICRATE
|
||||||
|
|
||||||
#define MAXRINGVOLUME 255
|
#define MAXRINGVOLUME 255
|
||||||
#define MINRINGVOLUME 100
|
#define MINRINGVOLUME 100
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,7 @@ static void DashRingLaunch(player_t *player, mobj_t *ring)
|
||||||
player->dashRingPushTics = DASHRING_PUSH_TICS;
|
player->dashRingPushTics = DASHRING_PUSH_TICS;
|
||||||
|
|
||||||
player->mo->rollangle = 0;
|
player->mo->rollangle = 0;
|
||||||
|
P_ResetPitchRoll(player->mo);
|
||||||
player->flashing = 0;
|
player->flashing = 0;
|
||||||
player->fastfall = 0;
|
player->fastfall = 0;
|
||||||
K_TumbleInterrupt(player);
|
K_TumbleInterrupt(player);
|
||||||
|
|
|
||||||
|
|
@ -569,6 +569,7 @@ void P_ExplodeMissile(mobj_t *mo);
|
||||||
void P_CheckGravity(mobj_t *mo, boolean affect);
|
void P_CheckGravity(mobj_t *mo, boolean affect);
|
||||||
void P_SetPitchRollFromSlope(mobj_t *mo, pslope_t *slope);
|
void P_SetPitchRollFromSlope(mobj_t *mo, pslope_t *slope);
|
||||||
void P_SetPitchRoll(mobj_t *mo, angle_t pitch, angle_t yaw);
|
void P_SetPitchRoll(mobj_t *mo, angle_t pitch, angle_t yaw);
|
||||||
|
void P_ResetPitchRoll(mobj_t *mo);
|
||||||
fixed_t P_ScaleFromMap(fixed_t n, fixed_t scale);
|
fixed_t P_ScaleFromMap(fixed_t n, fixed_t scale);
|
||||||
fixed_t P_GetMobjHead(const mobj_t *);
|
fixed_t P_GetMobjHead(const mobj_t *);
|
||||||
fixed_t P_GetMobjFeet(const mobj_t *);
|
fixed_t P_GetMobjFeet(const mobj_t *);
|
||||||
|
|
|
||||||
13
src/p_mobj.c
13
src/p_mobj.c
|
|
@ -1333,7 +1333,7 @@ void P_SetPitchRollFromSlope(mobj_t *mo, pslope_t *slope)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mo->pitch = mo->roll = 0;
|
P_ResetPitchRoll(mo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1348,6 +1348,15 @@ void P_SetPitchRoll(mobj_t *mo, angle_t pitch, angle_t yaw)
|
||||||
mo->pitch = FixedMul(pitch, FINECOSINE (yaw));
|
mo->pitch = FixedMul(pitch, FINECOSINE (yaw));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// P_ResetPitchRoll
|
||||||
|
//
|
||||||
|
void P_ResetPitchRoll(mobj_t *mo)
|
||||||
|
{
|
||||||
|
mo->pitch = 0;
|
||||||
|
mo->roll = 0;
|
||||||
|
}
|
||||||
|
|
||||||
#define STOPSPEED (FRACUNIT)
|
#define STOPSPEED (FRACUNIT)
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -7191,7 +7200,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
case MT_FLOATINGITEM:
|
case MT_FLOATINGITEM:
|
||||||
{
|
{
|
||||||
mobj->pitch = mobj->roll = 0;
|
P_ResetPitchRoll(mobj);
|
||||||
if (mobj->flags & MF_NOCLIPTHING)
|
if (mobj->flags & MF_NOCLIPTHING)
|
||||||
{
|
{
|
||||||
if (P_CheckDeathPitCollide(mobj))
|
if (P_CheckDeathPitCollide(mobj))
|
||||||
|
|
|
||||||
|
|
@ -488,8 +488,7 @@ void P_ResetPlayer(player_t *player)
|
||||||
|
|
||||||
if (player->mo != NULL && P_MobjWasRemoved(player->mo) == false)
|
if (player->mo != NULL && P_MobjWasRemoved(player->mo) == false)
|
||||||
{
|
{
|
||||||
player->mo->pitch = 0;
|
P_ResetPitchRoll(player->mo);
|
||||||
player->mo->roll = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue