diff --git a/src/p_user.c b/src/p_user.c
index b3bfb763c16d8676a1ab2566a0b3fa88cdf64a8e..57cb056fd7812abdc216354b102ef3415f980fe5 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -12727,7 +12727,10 @@ void P_PlayerAfterThink(player_t *player)
 				if (player->cmd.forwardmove || player->cmd.sidemove)
 				{
 					rock->flags2 |= MF2_STRONGBOX; // signifies the rock should not slow to a halt
-					rock->movedir = (player->cmd.angleturn << FRACBITS) + R_PointToAngle2(0, 0, player->cmd.forwardmove << FRACBITS, -player->cmd.sidemove << FRACBITS);
+					if (twodlevel || (mo->flags2 & MF2_TWOD))
+						rock->movedir = mo->angle;
+					else
+						rock->movedir = (player->cmd.angleturn << FRACBITS) + R_PointToAngle2(0, 0, player->cmd.forwardmove << FRACBITS, -player->cmd.sidemove << FRACBITS);
 					P_Thrust(rock, rock->movedir, rock->scale >> 1);
 				}
 				else