diff --git a/src/p_map.c b/src/p_map.c index 14b69b575..39f7d1c54 100644 --- a/src/p_map.c +++ b/src/p_map.c @@ -975,6 +975,7 @@ static boolean PIT_CheckThing(mobj_t *thing) P_SetPlayerMobjState(tmthing, S_PLAY_WALK); tmthing->player->powers[pw_carry] = CR_ROLLOUT; P_SetTarget(&tmthing->tracer, thing); + P_SetObjectMomZ(thing, tmthing->momz, true); return false; } } diff --git a/src/p_user.c b/src/p_user.c index ec431a86a..5ce582dfc 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -948,17 +948,6 @@ void P_DoPlayerPain(player_t *player, mobj_t *source, mobj_t *inflictor) if (player->powers[pw_carry] == CR_ROPEHANG) P_SetTarget(&player->mo->tracer, NULL); - if (player->powers[pw_carry] == CR_ROLLOUT) - { - if (player->mo->tracer && !P_MobjWasRemoved(player->mo->tracer)) - { - player->mo->tracer->flags |= MF_PUSHABLE; - P_SetTarget(&player->mo->tracer->target, NULL); - } - P_SetTarget(&player->mo->tracer, NULL); - player->powers[pw_carry] = CR_NONE; - } - { angle_t ang; fixed_t fallbackspeed; @@ -1042,6 +1031,17 @@ void P_ResetPlayer(player_t *player) { player->pflags &= ~(PF_SPINNING|PF_STARTDASH|PF_STARTJUMP|PF_JUMPED|PF_NOJUMPDAMAGE|PF_GLIDING|PF_THOKKED|PF_CANCARRY|PF_SHIELDABILITY|PF_BOUNCING); + if (player->powers[pw_carry] == CR_ROLLOUT) + { + if (player->mo->tracer && !P_MobjWasRemoved(player->mo->tracer)) + { + player->mo->tracer->flags |= MF_PUSHABLE; + P_SetTarget(&player->mo->tracer->target, NULL); + } + P_SetTarget(&player->mo->tracer, NULL); + player->powers[pw_carry] = CR_NONE; + } + if (!(player->powers[pw_carry] == CR_NIGHTSMODE || player->powers[pw_carry] == CR_NIGHTSFALL || player->powers[pw_carry] == CR_BRAKGOOP || player->powers[pw_carry] == CR_MINECART)) player->powers[pw_carry] = CR_NONE;