diff --git a/src/objects/wpzturbine.c b/src/objects/wpzturbine.c index f86f11da6..be7f075de 100644 --- a/src/objects/wpzturbine.c +++ b/src/objects/wpzturbine.c @@ -237,7 +237,6 @@ void Obj_playerWPZTurbine(player_t *p) if (mode && !distreached) p->turbineangle = (INT32)R_PointToAngle2(t->x, t->y, pmo->x, pmo->y); - p->spinouttimer = TICRATE; pmo->pitch = 0; // determine target x/y/z @@ -344,7 +343,6 @@ void Obj_playerWPZTurbine(player_t *p) pmo->momy = (pmo->momy*17)/10; } - p->spinouttimer = 0; pmo->flags &= ~MF_NOCLIP; } } diff --git a/src/p_user.c b/src/p_user.c index 5895b6cbc..7754d785c 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2539,9 +2539,19 @@ void P_MovePlayer(player_t *player) player->glanceDir = 0; player->pflags &= ~PF_GAINAX; } - else if ((player->pflags & PF_FAULT) || (player->spinouttimer > 0)) + else if ((player->pflags & PF_FAULT) || (player->spinouttimer > 0) || (player->turbine && (player->mo->flags & MF_NOCLIP))) { - UINT16 speed = ((player->pflags & PF_FAULT) ? player->nocontrol : player->spinouttimer)/8; + tic_t timer = 0; + + if ((player->pflags & PF_FAULT)) + timer = player->nocontrol; + else if (player->spinouttimer > 0) + timer = player->spinouttimer; + else if (player->turbine && (player->mo->flags & MF_NOCLIP)) + timer = TICRATE; + + UINT16 speed = timer / 8; + if (speed > 8) speed = 8; else if (speed < 1)