diff --git a/source/games/duke/src/input.cpp b/source/games/duke/src/input.cpp
index 20ab0129f..83ace2bdb 100644
--- a/source/games/duke/src/input.cpp
+++ b/source/games/duke/src/input.cpp
@@ -897,18 +897,12 @@ void GameInterface::GetInput(InputPacket* packet, ControlInfo* const hidInput)
 
 	if (packet)
 	{
-		auto const pPlayer = &ps[myconnectindex];
-		auto const ang = pPlayer->angle.ang.asbuild();
+		auto cos = p->angle.ang.bcos();
+		auto sin = p->angle.ang.bsin();
 
 		*packet = loc;
-		auto fvel = loc.fvel;
-		auto svel = loc.svel;
-		packet->fvel = mulscale9(fvel, sintable[(ang + 2560) & 2047]) +
-			mulscale9(svel, sintable[(ang + 2048) & 2047]) +
-			pPlayer->fric.x;
-		packet->svel = mulscale9(fvel, sintable[(ang + 2048) & 2047]) +
-			mulscale9(svel, sintable[(ang + 1536) & 2047]) +
-			pPlayer->fric.y;
+		packet->fvel = mulscale9(loc.fvel, cos) + mulscale9(loc.svel, sin) + p->fric.x;
+		packet->svel = mulscale9(loc.fvel, sin) - mulscale9(loc.svel, cos) + p->fric.y;
 		loc = {};
 	}
 }