From 8a274ecd30f2599158cc10397374edd853e03ef3 Mon Sep 17 00:00:00 2001 From: Syncer Deploy Date: Mon, 31 Aug 2026 13:32:00 -0400 Subject: [PATCH] fix dead air strafe direction --- packages/shared/src/dead-air-game.ts | 8 ++++---- packages/shared/test/dead-air.test.mjs | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/packages/shared/src/dead-air-game.ts b/packages/shared/src/dead-air-game.ts index e532376..9b50267 100644 --- a/packages/shared/src/dead-air-game.ts +++ b/packages/shared/src/dead-air-game.ts @@ -435,8 +435,8 @@ function simulatePlayer(player: DeadAirAuthorityPlayer, deltaSeconds: number): v const speed = player.sprinting && !player.carryingArtifact ? sprintSpeed : walkSpeed; const sin = Math.sin(player.yaw); const cos = Math.cos(player.yaw); - let desiredX = (sin * player.inputForward + cos * player.inputStrafe) * speed; - let desiredZ = (cos * player.inputForward - sin * player.inputStrafe) * speed; + let desiredX = (sin * player.inputForward - cos * player.inputStrafe) * speed; + let desiredZ = (cos * player.inputForward + sin * player.inputStrafe) * speed; const inputLength = Math.hypot(player.inputForward, player.inputStrafe); if (inputLength > 1) { desiredX /= inputLength; @@ -457,8 +457,8 @@ function simulateVisiblePlayer(player: DeadAirPlayerView, deltaSeconds: number): const speed = player.sprinting && !player.carryingArtifact ? sprintSpeed : walkSpeed; const sin = Math.sin(player.yaw); const cos = Math.cos(player.yaw); - let desiredX = (sin * player.inputForward + cos * player.inputStrafe) * speed; - let desiredZ = (cos * player.inputForward - sin * player.inputStrafe) * speed; + let desiredX = (sin * player.inputForward - cos * player.inputStrafe) * speed; + let desiredZ = (cos * player.inputForward + sin * player.inputStrafe) * speed; const inputLength = Math.hypot(player.inputForward, player.inputStrafe); if (inputLength > 1) { desiredX /= inputLength; diff --git a/packages/shared/test/dead-air.test.mjs b/packages/shared/test/dead-air.test.mjs index 63c0d15..d79aca3 100644 --- a/packages/shared/test/dead-air.test.mjs +++ b/packages/shared/test/dead-air.test.mjs @@ -126,3 +126,20 @@ test("visible wardens expose pose but redact combat inventory", () => { assert.equal(replicated.magazine, null); assert.equal(replicated.reserve, null); }); + +test("DEAD AIR strafe-right matches the first-person camera's screen right", () => { + const server = deadAirGame.createServer(); + server.addPlayer(1); + const player = server.currentState.players.find((candidate) => candidate.id === 1); + player.x = 0; + player.z = 25; + player.yaw = 0; + assert.deepEqual(server.submitInput(1, { + sequence: 1, + targetTick: 1, + observedTick: 0, + input: input({ strafe: 1, yaw: 0 }), + }), { accepted: true }); + server.step(); + assert.ok(player.x < 0, `camera-right at yaw 0 should reduce world x, saw ${player.x}`); +});