diff --git a/source/core/gameinput.cpp b/source/core/gameinput.cpp
index 170233cd2..9cd87b092 100644
--- a/source/core/gameinput.cpp
+++ b/source/core/gameinput.cpp
@@ -119,8 +119,8 @@ void processMovement(InputPacket* const currInput, InputPacket* const inputBuffe
 
 	// determine player input.
 	const auto turning = buttonMap.ButtonDown(gamefunc_Turn_Right) - buttonMap.ButtonDown(gamefunc_Turn_Left);
-	const auto moving = buttonMap.ButtonDown(gamefunc_Move_Forward) - buttonMap.ButtonDown(gamefunc_Move_Backward) + hidInput->dz * scaleAdjustf;
-	const auto strafing = buttonMap.ButtonDown(gamefunc_Strafe_Right) - buttonMap.ButtonDown(gamefunc_Strafe_Left) - hidInput->dx * scaleAdjustf;
+	const auto moving = buttonMap.ButtonDown(gamefunc_Move_Forward) - buttonMap.ButtonDown(gamefunc_Move_Backward) + hidInput->dforward * scaleAdjustf;
+	const auto strafing = buttonMap.ButtonDown(gamefunc_Strafe_Right) - buttonMap.ButtonDown(gamefunc_Strafe_Left) - hidInput->dside * scaleAdjustf;
 
 	// process player angle input.
 	if (!(buttonMap.ButtonDown(gamefunc_Strafe) && allowstrafe))
diff --git a/source/core/inputstate.cpp b/source/core/inputstate.cpp
index e340ada4b..b548311fe 100644
--- a/source/core/inputstate.cpp
+++ b/source/core/inputstate.cpp
@@ -215,9 +215,9 @@ ControlInfo CONTROL_GetInput()
 		I_GetAxes(joyaxes);
 
 		hidInput.dyaw += -joyaxes[JOYAXIS_Yaw];
-		hidInput.dx += joyaxes[JOYAXIS_Side] * .5f;
-		hidInput.dz += joyaxes[JOYAXIS_Forward] * .5f;
 		hidInput.dpitch += -joyaxes[JOYAXIS_Pitch];
+		hidInput.dforward += joyaxes[JOYAXIS_Forward] * .5f;
+		hidInput.dside += joyaxes[JOYAXIS_Side] * .5f;		
 	}
 
 	return hidInput;
@@ -405,18 +405,18 @@ void ApplyGlobalInput(InputPacket& input, ControlInfo* hidInput, bool const crou
 	if (hidInput && buttonMap.ButtonDown(gamefunc_Dpad_Select))
 	{
 		// These buttons should not autorepeat. The game handlers are not really equipped for that.
-		if (hidInput->dz > 0 && !(dpad_lock & 1)) { dpad_lock |= 1;  input.setNewWeapon(WeaponSel_Prev); }
+		if (hidInput->dforward > 0 && !(dpad_lock & 1)) { dpad_lock |= 1;  input.setNewWeapon(WeaponSel_Prev); }
 		else dpad_lock &= ~1;
-		if (hidInput->dz < 0 && !(dpad_lock & 2)) { dpad_lock |= 2;  input.setNewWeapon(WeaponSel_Next); }
+		if (hidInput->dforward < 0 && !(dpad_lock & 2)) { dpad_lock |= 2;  input.setNewWeapon(WeaponSel_Next); }
 		else dpad_lock &= ~2;
-		if ((hidInput->dx < 0 || hidInput->dyaw < 0) && !(dpad_lock & 4)) { dpad_lock |= 4;  input.actions |= SB_INVPREV; }
+		if ((hidInput->dside < 0 || hidInput->dyaw < 0) && !(dpad_lock & 4)) { dpad_lock |= 4;  input.actions |= SB_INVPREV; }
 		else dpad_lock &= ~4;
-		if ((hidInput->dx > 0 || hidInput->dyaw > 0) && !(dpad_lock & 8)) { dpad_lock |= 8;  input.actions |= SB_INVNEXT; }
+		if ((hidInput->dside > 0 || hidInput->dyaw > 0) && !(dpad_lock & 8)) { dpad_lock |= 8;  input.actions |= SB_INVNEXT; }
 		else dpad_lock &= ~8;
 
 		// This eats the controller input for regular use
-		hidInput->dx = 0;
-		hidInput->dz = 0;
+		hidInput->dside = 0;
+		hidInput->dforward = 0;
 		hidInput->dyaw = 0;
 	}
 	else dpad_lock = 0;
@@ -424,14 +424,14 @@ void ApplyGlobalInput(InputPacket& input, ControlInfo* hidInput, bool const crou
 	input.actions |= ActionsToSend;
 	ActionsToSend = 0;
 
-	if (buttonMap.ButtonDown(gamefunc_Aim_Up) || (buttonMap.ButtonDown(gamefunc_Dpad_Aiming) && hidInput->dz > 0)) 
+	if (buttonMap.ButtonDown(gamefunc_Aim_Up) || (buttonMap.ButtonDown(gamefunc_Dpad_Aiming) && hidInput->dforward > 0)) 
 		input.actions |= SB_AIM_UP;
 
-	if ((buttonMap.ButtonDown(gamefunc_Aim_Down) || (buttonMap.ButtonDown(gamefunc_Dpad_Aiming) && hidInput->dz < 0))) 
+	if ((buttonMap.ButtonDown(gamefunc_Aim_Down) || (buttonMap.ButtonDown(gamefunc_Dpad_Aiming) && hidInput->dforward < 0))) 
 		input.actions |= SB_AIM_DOWN;
 
 	if (buttonMap.ButtonDown(gamefunc_Dpad_Aiming))
-		hidInput->dz = 0;
+		hidInput->dforward = 0;
 
 	if (buttonMap.ButtonDown(gamefunc_Jump))
 		input.actions |= SB_JUMP;
diff --git a/source/core/inputstate.h b/source/core/inputstate.h
index 4782fb79f..568acdf6c 100644
--- a/source/core/inputstate.h
+++ b/source/core/inputstate.h
@@ -16,9 +16,9 @@
 
 struct ControlInfo
 {
-	float       dx;
-	float       dy;
-	float       dz;
+	float       dside;
+	float       dup;
+	float       dforward;
 	float       dyaw;
 	float       dpitch;
 	float       droll;
diff --git a/source/games/duke/src/input.cpp b/source/games/duke/src/input.cpp
index d6508ff76..758bbd27a 100644
--- a/source/games/duke/src/input.cpp
+++ b/source/games/duke/src/input.cpp
@@ -582,7 +582,7 @@ static float motoApplyTurn(player_struct* p, ControlInfo* const hidInput, bool c
 		if (kbdLeft || kbdRight || p->moto_drink || hidInput->mouseturnx || hidInput->dyaw)
 		{
 			constexpr float velScale = (3.f / 10.f);
-			const float baseVel = (buttonMap.ButtonDown(gamefunc_Move_Backward) || hidInput->dz < 0) && p->MotoSpeed <= 0 ? -VEHICLETURN : VEHICLETURN;
+			const float baseVel = (buttonMap.ButtonDown(gamefunc_Move_Backward) || hidInput->dforward < 0) && p->MotoSpeed <= 0 ? -VEHICLETURN : VEHICLETURN;
 
 			if (kbdLeft || p->moto_drink < 0 || hidInput->mouseturnx < 0 || hidInput->dyaw < 0)
 			{
@@ -744,8 +744,8 @@ static void processVehicleInput(player_struct *p, ControlInfo* const hidInput, I
 
 	if (p->OnBoat || !p->moto_underwater)
 	{
-		p->vehForwardScale = min((buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) + hidInput->dz, 1.f); 
-		p->vehReverseScale = min(buttonMap.ButtonDown(gamefunc_Move_Backward) + -hidInput->dz, 1.f);
+		p->vehForwardScale = min((buttonMap.ButtonDown(gamefunc_Move_Forward) || buttonMap.ButtonDown(gamefunc_Strafe)) + hidInput->dforward, 1.f); 
+		p->vehReverseScale = min(buttonMap.ButtonDown(gamefunc_Move_Backward) + -hidInput->dforward, 1.f);
 		p->vehBraking = buttonMap.ButtonDown(gamefunc_Run);
 	}