diff --git a/src/d_player.h b/src/d_player.h index 3ea48e244..6a2d04129 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -278,6 +278,7 @@ typedef enum pw_nights_linkfreeze, pw_nocontrol, //for linedef exec 427 + pw_justlaunched, // Launched off a slope this tic (0=none, 1=standard launch, 2=half-pipe launch) NUMPOWERS } powertype_t; diff --git a/src/dehacked.c b/src/dehacked.c index 5884bdd02..57d5b2241 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -9134,7 +9134,8 @@ static const char *const POWERS_LIST[] = { "NIGHTS_LINKFREEZE", //for linedef exec 427 - "NOCONTROL" + "NOCONTROL", + "JUSTLAUNCHED", }; static const char *const HUDITEMS_LIST[] = { diff --git a/src/p_mobj.c b/src/p_mobj.c index 10898f70e..03ca56aa8 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -1997,8 +1997,12 @@ void P_XYMovement(mobj_t *mo) { mo->momz = transfermomz; mo->standingslope = NULL; - if (player && (player->pflags & PF_SPINNING)) - player->pflags |= PF_THOKKED; + if (player) + { + player->powers[pw_justlaunched] = 2; + if (player->pflags & PF_SPINNING) + player->pflags |= PF_THOKKED; + } } } #endif @@ -3922,6 +3926,7 @@ static void P_PlayerMobjThinker(mobj_t *mobj) // Needed for gravity boots P_CheckGravity(mobj, false); + mobj->player->powers[pw_justlaunched] = 0; if (mobj->momx || mobj->momy) { P_XYMovement(mobj); diff --git a/src/p_slopes.c b/src/p_slopes.c index d584bb92d..6d5930882 100644 --- a/src/p_slopes.c +++ b/src/p_slopes.c @@ -726,6 +726,9 @@ void P_SlopeLaunch(mobj_t *mo) //CONS_Printf("Launched off of slope.\n"); mo->standingslope = NULL; + + if (mo->player) + mo->player->powers[pw_justlaunched] = 1; } //