Back to Provenance

3130

.changelog/3130.md

3.3.12.3 KB
Original Source

Added

  • RumbleSystemProfile — per-system haptic tuning presets for N64 Rumble Pak, PSX DualShock, GBA cartridge motor, GameCube, Switch HD Rumble, and Xbox dual-motor controllers
  • RumbleBurstClassifier — stateless timing-based classifier that maps burst duration and pulse rate to RumblePattern (shortTransient / mediumBurst / longSustained / rapidPulse)
  • System profile wiring in GCControllerHapticsManager — tracks burst timing, counts on/off pulses, and applies profile-derived motor scaling and sharpness
  • setSystemProfile(_:) and setSystemProfile(forSystemIdentifier:) public API on GCControllerHapticsManager
  • resetSystemProfile() on GCControllerHapticsManager — resets to generic tuning when emulation ends so the next core isn't affected by the previous system's profile
  • PVLibRetroRumbleHelper.setCurrentSystem(identifier:) — wires system profiles from libretro core load
  • Unit tests for classifier thresholds and profile lookup in PVCoreBridgeTests

Changed

  • PVLibRetroRumbleHelper.rumble() now uses duration: 10.0 (continuous until stopRumble()) instead of hardcoded 0.15s/0.08s
  • GCControllerHapticsManager.stopRumble() classifies burst duration and picks UIImpactFeedbackGenerator style (.heavy/.medium/.light/.rigid) based on pattern; device-fallback haptic is emitted only on stop (not on start) to avoid double-firing
  • Burst/pulse timing now uses monotonic ProcessInfo.systemUptime instead of Date() to avoid misclassification from NTP or DST clock adjustments
  • N64 rumble (PVMupen64Plus-NXCore+Rumble) updated to use N64-specific motor params (lowFreq: 1.0, highFreq: 0.2, duration: 10.0) and registers N64 profile on emulation start
  • PVMupen (the primary N64 core) now sets the N64 haptic profile on startEmulation and resets it on stopEmulation via MupenGameCore+Rumble
  • PVRetroArchCoreCore now sets/resets the per-system haptic profile on emulation start/stop, enabling system-tuned rumble for all RetroArch-wrapped cores (N64 mupen, Flycast, PrBoom, etc.)
  • apple_gamecontroller_joypad_set_rumble in PVRetroArchCore+Controls.m now tries PVLibRetroRumbleHelper first (timing-based classifier + per-system profile scaling + tvOS support), falling back to the legacy PVMFIRumbleController path only if the helper is unavailable