diff --git a/src/GBACartMotionPak.cpp b/src/GBACartMotionPak.cpp index 2d77022f40..047b0f9756 100644 --- a/src/GBACartMotionPak.cpp +++ b/src/GBACartMotionPak.cpp @@ -113,7 +113,8 @@ u8 CartMotionPakHomebrew::SRAMRead(u32 addr) return 0; case 8: // Read Z rotation - ShiftVal = RotationToMotionPak(Platform::Addon_MotionQuery(Platform::MotionRotationZ, UserData)) << 4; + // CHECKME: This is a guess, compare with real hardware + ShiftVal = RotationToMotionPak(-Platform::Addon_MotionQuery(Platform::MotionRotationZ, UserData)) << 4; return 0; case 10: // Identify cart diff --git a/src/frontend/qt_sdl/EmuInstanceInput.cpp b/src/frontend/qt_sdl/EmuInstanceInput.cpp index eb47635f04..fb3b5f63db 100644 --- a/src/frontend/qt_sdl/EmuInstanceInput.cpp +++ b/src/frontend/qt_sdl/EmuInstanceInput.cpp @@ -140,13 +140,35 @@ float EmuInstance::inputMotionQuery(melonDS::Platform::MotionQueryType type) { if (controller && hasAccelerometer) if (SDL_GameControllerGetSensorData(controller, SDL_SENSOR_ACCEL, values, 3) == 0) - return values[type % 3]; + { + // Map values from DS console orientation to SDL controller orientation. + switch (type) + { + case melonDS::Platform::MotionAccelerationX: + return values[0]; + case melonDS::Platform::MotionAccelerationY: + return -values[2]; + case melonDS::Platform::MotionAccelerationZ: + return values[1]; + } + } } else if (type <= melonDS::Platform::MotionRotationZ) { if (controller && hasGyroscope) if (SDL_GameControllerGetSensorData(controller, SDL_SENSOR_GYRO, values, 3) == 0) - return values[type % 3]; + { + // Map values from DS console orientation to SDL controller orientation. + switch (type) + { + case melonDS::Platform::MotionRotationX: + return values[0]; + case melonDS::Platform::MotionRotationY: + return -values[2]; + case melonDS::Platform::MotionRotationZ: + return values[1]; + } + } } return 0.0f; }