App Details
An overlay that with companion SaltyNX plugin NX-FPS allows to set custom FPS in Nintendo Switch retail games.
Disclaimer: Tool is utilizing detection of graphics API to manipulate FPS and in special cases it requires using patches made per game for each version to get more than 30 FPS. You can find those patches HERE
Max supported yaml size is 32kB, though it can be expanded in next updates.
Requirements:
* Atmosphere CFW
* My fork of SaltyNX, version 0.5.1+
* NX-FPS 1.1+
* Tesla environment: ovlloader + Tesla Menu
Overlay runs in two modes:
* When game is running
If game is supported by SaltyNX and you installed everything correctly, you will see menu where first line states NX-FPS plugin is running. Explanation of each line:
Interval Mode - it's used by NVN API to set limiter to either 30 FPS (2) or 60 FPS (1 or 0 (0 means that game never bothered to set it, it can be also a sign that game is not utilizing NVN but EGL or Vulkan))
Custom FPS Target - it's used to lock game to certain FPS. If game is using engine proprietary FPS locks, it may not be able to unlock more than 30 FPS without additional patches.
Big number on the right - it shows how many frames have passed in last second for currently running game. This is to confirm that lock is working as expected.
Increase/Decrease FPS target - Change FPS Target by 5. Minimum is 15 FPS, max is 60 FPS. If FPS is set above 30 FPS, it sets interval mode to 1. Otherwise it sets interval to 2.
Disable custom FPS target - Removes FPS Target. Since we cannot predict what interval mode is expected at this point, it is in user's discretion to manipulate FPS to bring back correct interval before disabling FPS target.
Advanced settings - submenu which consists of:
Sync Wait - this is dangerous setting that disabled in most cases will crash game (for example Witcher 3 and Breath of The Wild), but in some can bring benefit of disabling double buffer at the cost of small graphical glitches (for example Xenoblade Chronicles 3). Use it with caution.
Convert config to patch file - if proper config file exists for this game and version, you will get an option to convert it to patch file that will be loaded when you will run this game next time. Patch is saved to SaltySD/plugins/FPSLocker/patches/*titleid_uppercase*/*buildid_uppercase*.bin
Delete patch file - if proper config file exists for this game and version, you will get an option to delete patch file so it won't be loaded when you will run this game next time.
Save settings - save profile for currently running game that will be loaded next time by plugin on boot automatically. Don't use it if you disabled Sync Wait and you didn't test it properly that it won't cause crash. Profile is saved in SaltySD/plugins/FPSLocker/*titleid_uppercase*.dat
* When game is not running:
It will list installed games (max 32) and as first option it's available "All" submenu.
Inside each one you will find two options:
Delete settings - it will delete file created by "Save settings" option
Delete patches - it will delete file created by "Convert config to patch file" option
Thanks to ~WerWolv for creating Tesla environment, and ~cucholix + ~Monked for tests.
Changelog
v2.3.0
Requires SaltyNX 1.4.0+ to work properly
- Removed save settings option, now every change is automatically saved
- Fixed bugged Display Sync Docked functionality
- Fix issue with both Wizards, being initiated, not returning to 60 Hz after pressing B
- Separate display overclocking settings for docked 720p
- Separate FPS targets saved for docked and handheld
- Hide Docked Settings options that were blocked (because of not being in docked mode or not using 720p/1080p modes)
- FPSLocker now is closed faster when game is running
v2.2.1
Separate Display Sync for handheld and docked
v2.2.0-release
- Add support for 720p/1080p docked mode refresh rates: 70, 72, 75, 80, 90, 95, 100, 110, 120 Hz (Requires SaltyNX 1.3.0: https://github.com/masagrator/SaltyNX/releases/tag/1.3.0-release)
- Add wizard for testing refresh rates from 70 up to 120 Hz for 1080p (for 720p it automatically unlocks all refresh rates supported by your display)
- Not all displays supporting 1080p signal with refresh rates higher than 75 Hz can be set to those higher refresh rates, more in README.
- Add support for changing refresh rates for Switch OLED and Retro Remake OLED displays. (Requires SaltyNX 1.3.0: https://github.com/masagrator/SaltyNX/releases/tag/1.3.0-release)
- For Switch OLED it comes with auto gamma curve adjustments on hardware level that are trying to reproduce original colors as close as possible, but because of nature of such approach it's not possible to do it perfectly (the worst case is at 60% brightness using 45 Hz). With that also comes another issue, the lower the refresh rate the lower max brightness.
- For Retro Remake SUPER5 first revision users, you must enable Retro Remake Mode in Display Settings. That is because we can't differentiate between first SUPER5 and already existing InnoLux display. That option won't show up for other users.
- Load game titles in background, resulting in faster boot times when game is not running
- Add support for languages: German, French, Russian, Brazilian Portuguese, Chinese Simplified (UI was redesigned to give them more space for text), it's set based on system language. You can force back English if you prefer.
2.1.6
Fix an issue with some capture cards triggering segfault when trying to access Docked settings because they store VIC index 0 which is invalid (f.e. NZXT Signal HD60, EVGA XR1 Lite)
2.1.5
Store Docked settings in ini file instead of EDID dump (this is a needed step to introduce proper docked display overclocking in future)
Use SaltyNX 1.2.6+ for proper support
Print your display's config name in Docked settings
For people that would want to know which config is which when exploring files, I added key "tvName", its value can be edited and it will be maintained. Don't use spaces, those will be removed next time you change settings
2.1.4
Improve "Reported max refresh rate" readings in Docked display settings.
2.1.3
Add "Halt unfocused game" in Advanced Settings (to work properly it requires SaltyNX 1.2.5+).
Some games are not suspended when your Switch is in Home Menu (for example Tales of Graces f). Enabling this option moves thread responsible for pushing frames to display into infinite loop when you are in Home Menu. Enabling this option can cause various issues depending on game, so be sure to not use it frivolously.
2.1.2
Add support for changing amount of buffers in Vulkan games (requires SaltyNX 1.2.3+)Fix an issue where at unstable internet connection checking Warehouse for info about patch takes 20-30 seconds instead of few seconds.
2.1.1
Add support for SaltyNX 1.2.1+
Added support for converting configs to new type of patches currently supported by SaltyNX. You must convert every config again to be compatible with SaltyNX 1.2.1 and newer. That's to futureproof support for OCing displays to 60+ Hz.
Now disabling "Allow patches to force 60Hz" in Docked Settings -> Additional settings also disables 4 second delay before cutscenes when playing in docked mode with patch that has such thing available, f.e. Yakuza and Xenoblade Chronicles 2, 3, X.