Player left/right movement is slightly off. Fix this with some basic trig rotation transforms. (Keyboard control is tested. Analogue stick control is untested, though if it's wrong it's probably only reversed.) --- blobandconquer-0.90.orig/src/player.cpp +++ blobandconquer-0.90/src/player.cpp @@ -645,8 +645,8 @@ speed = engine->axis1X; speed /= ANALOG_MOVE; - player->velocity.x += (PLAYER_ACCEL * speed * -sin(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); - player->velocity.y += (PLAYER_ACCEL * speed * cos(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.x += (PLAYER_ACCEL * speed * cos(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.y += (PLAYER_ACCEL * speed * sin(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); player->rotation.x = 270 + toDegrees(game->cameraAdjustedRadian); } @@ -655,8 +655,8 @@ speed = engine->axis1X; speed /= ANALOG_MOVE; - player->velocity.x += (PLAYER_ACCEL * speed * -sin(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); - player->velocity.y += (PLAYER_ACCEL * speed * cos(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.x += (PLAYER_ACCEL * speed * cos(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.y += (PLAYER_ACCEL * speed * sin(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); player->rotation.x = 90 + toDegrees(game->cameraAdjustedRadian); } @@ -730,16 +730,16 @@ if (game->isControl(CTRL_LEFT)) { - player->velocity.x += (-PLAYER_ACCEL * moveSpeed * -sin(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); - player->velocity.y += (-PLAYER_ACCEL * moveSpeed * cos(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.x += (PLAYER_ACCEL * moveSpeed * -cos(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.y += (PLAYER_ACCEL * moveSpeed * -sin(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); player->rotation.x = 270 + toDegrees(game->cameraAdjustedRadian); walkTurn = true; } if (game->isControl(CTRL_RIGHT)) { - player->velocity.x += (PLAYER_ACCEL * moveSpeed * -sin(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); - player->velocity.y += (PLAYER_ACCEL * moveSpeed * cos(game->cameraAdjustedRadian - 1.5)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.x += (PLAYER_ACCEL * moveSpeed * cos(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.y += (PLAYER_ACCEL * moveSpeed * sin(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); player->rotation.x = 90 + toDegrees(game->cameraAdjustedRadian); walkTurn = true; } @@ -765,8 +765,8 @@ if (game->isControl(CTRL_DOWN)) { - player->velocity.x += (-PLAYER_ACCEL * moveSpeed * -sin(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); - player->velocity.y += (-PLAYER_ACCEL * moveSpeed * cos(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.x += (PLAYER_ACCEL * moveSpeed * sin(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); + player->velocity.y += (PLAYER_ACCEL * moveSpeed * -cos(game->cameraAdjustedRadian)) * engine->getTimeDifference(TD_LOGIC); player->rotation.x = toDegrees(game->cameraAdjustedRadian); if (game->isControl(CTRL_LEFT))