v1.5.2

July 2, 2026

Improvements to gameplay capture, controller hotkey customization, save management, and the in-game notification system.

Highlights

  • In-Game Screenshots: Capture the current frame at any moment with a keyboard hotkey or controller button. Saves PNGs to ~/Pictures/TruchiEmu//, named after the ROM and timestamp, with a quick-view pill and a flash confirmation
  • Controller Hotkey Mapping: Bind hotkeys to gamepad buttons (via GCController identifiers or SDL button indices) directly in Hotkey settings. Capture flow listens for the next press on the active controller
  • Save Manager: Bulk "Delete all saves" action with an explicit confirmation dialog covering every per-game entry
  • Notification Pill Test Action: Trigger a sample in-app notification from settings to verify permissions, action buttons, and dismiss behavior
  • Notification Pill Refinements: Cleaner pill visuals, more reliable auto-dismiss timing, and improved authorization flow
  • Localized Hotkey Strings: New translations for screenshot, training controls, and the new hotkey management UI across English, Spanish, and Portuguese

Detailed Changes

  • Added ScreenshotService for Metal texture โ†’ PNG capture, with per-system directory layout and safe filename sanitization
  • Added screenshot flash overlay and ScreenshotPillOverlay with quick "Open" / "Reveal in Finder"
  • Added Help shortcut entry for โ‡งโŒ˜S (screenshot) plus localized help.shortcut.screenshot strings
  • Added screenshot settings catalog entry and hotkey action (.screenshot)
  • Added ControllerHotkeyBinding, ControllerHotkeySource, and capture coordinator for binding hotkeys to gamepad buttons
  • Refactored HotkeyConfigSettingsView with three capture surfaces (primary, secondary, controller)
  • Added "Delete all saves" with safe two-step confirmation in the save manager
  • Added "Test notification" affordance so users can validate notification authorization and pill rendering
  • Tweaked in-game notification timing, visual hierarchy, and explicit dismiss handling
  • Updated en.json, es.json, and pt.json with new keys
  • Build: codesign re-sign phase now runs reliably in Release; librashader dylib is staged into Frameworks/ with the correct install name