Skip to content

BetterAngle Pro v6.0.4

Choose a tag to compare

@github-actions github-actions released this 06 Jun 06:23
· 12 commits to main since this release

BetterAngle Pro v6.0.4

  • Fix: Startup crash when saved profile index is out of range. If settings.json held a selectedProfileIdx pointing to a profile that no longer exists (e.g. after deleting a profile), the app would crash immediately on launch before any UI appeared. The index is now clamped to a valid range before use.
  • Fix: Ghost HUD on monitor hotplug/unplug. WM_DISPLAYCHANGE was moving the overlay window to the new monitor with a direct SetWindowPos, skipping the ghost-prevention blank that drag and the Display dropdown already use. Unplugging a monitor while the overlay was on it could leave a frozen HUD copy on the desktop. The handler now blanks and hides the old layered surface before repositioning, matching the WM_USER+101 path.
  • Fix: HUD slightly off-screen on first launch. The default g_hudX was initialised to -1, so on a brand-new install the angle readout started 1 pixel off the left edge of the screen. Default is now 40 (matching g_hudY).
  • Fix: Dashboard crosshair toggle resets offset. Enabling the crosshair via the Dashboard toggle was unconditionally zeroing the crosshair offset (X/Y position), discarding any custom placement the user had set. The hotkey toggle never did this; the dashboard toggle now matches that behaviour and preserves the saved offset.
  • Fix: 10-monitor hard limit in ROI monitor detection. Auto-detecting which monitor an ROI drag started on was capped at 10 iterations. On systems with more than 10 monitors the detection could silently fail. The loop now uses GetSystemMetrics(SM_CMONITORS) for the actual count.
  • Fix: Sleep(10) stall in Win32 message loop. RefreshHotkeys was sleeping 10 ms on the HUD message thread every time hotkeys were re-registered (every Fortnite focus change / alt-tab). This briefly stalled the message pump on every switch.
  • Fix: Transition lock threads could log after shutdown. The detached BlockInput threads spawned on glide↔dive and alt-tab transitions did not check g_running, so they could call into the logger and update timestamps after the app had started tearing down. They now guard those writes with a g_running check.
  • Fix: Update download URL data race. g_dynamicDownloadUrl was a bare std::wstring written by the update-check background thread and read by the download thread with no synchronisation. The URL is now captured by value before the download thread is spawned.
  • Fix: DetectorThread data race on g_isSelectionActive. The detector thread was reading g_currentSelection (a plain non-atomic enum) written by the Win32 thread. The detector now reads g_isSelectionActive which is std::atomic<bool>, eliminating the data race.