FPSLocker Switch: Difference between revisions
More actions
3.3.1 |
3.3.2 |
||
| Line 4: | Line 4: | ||
|description=Set custom FPS target in retail games. | |description=Set custom FPS target in retail games. | ||
|author=masagrator | |author=masagrator | ||
|lastupdated=2026/ | |lastupdated=2026/04/13 | ||
|type=Overlays | |type=Overlays | ||
|version=3.3. | |version=3.3.2 | ||
|license=GPL-2.0 | |license=GPL-2.0 | ||
|download=https://dlhb.gamebrew.org/switchhomebrews/fpslockernx.7z | |download=https://dlhb.gamebrew.org/switchhomebrews/fpslockernx.7z | ||
| Line 123: | Line 123: | ||
==Changelog== | ==Changelog== | ||
'''3.3.2 2026/04/13''' | |||
* Improved titles loading time in Games List for 22.0.0+ FW | |||
** 22.0.0 improved exeuction time of <code>nsGetApplicationControlData()</code> and its alternatives by 4x in comparison to 21.0.0 - as long as you use standard 0 or 1 flag (<code>nsGetApplicationControlData()</code> doesn't expose that flag and uses 0). | |||
* Reduced overlay size by 45 kB | |||
* Updated internal titleid base. | |||
'''3.3.1 2026/02/24''' | '''3.3.1 2026/02/24''' | ||
* Fix an issue with Change Refresh Rate not showing up when Docked Display Sync was off | * Fix an issue with Change Refresh Rate not showing up when Docked Display Sync was off | ||
Latest revision as of 23:45, 16 April 2026
| FPSLocker | |
|---|---|
| General | |
| Author | masagrator |
| Type | Overlays |
| Version | 3.3.2 |
| License | GPL-2.0 |
| Last Updated | 2026/04/13 |
| Links | |
| Download | |
| Website | |
| Source | |
| Support Author | |
An overlay that with SaltyNX allows you to set custom FPS in Nintendo Switch retail games.
You can see the video how it works (with Witcher 3 dynamic resolution config mod to make anything above 30 FPS available).
The tool utilizes detection of the graphics API to manipulate FPS, and in special cases, it requires using patches made specifically for each game version to achieve more than 30 FPS. Overlay has a built-in option to download configs used to make patches. Repository storing those configs can be found here. Max supported yaml size is 32kB, though it can be expanded in the future.
Warning: It is not advised to use 60 FPS cheats/mods simultaneously with this tool, either you need a cheat or FPSLocker, you don't need both at once. This can cause compatibility issues leading to crashes.
Installation
Requirements:
- Atmosphere CFW
- SaltyNX 1.7.4+
- Tesla environment: Ultrahand
- Overclocking toolset (And don't expect to run games in docked mode at locked 60 FPS without ridiculously beefy clocks, no - 1963/998/2133 clocks are not beefy enough in most cases)
- sys-dock and read its README to unlock 120 Hz in OLEDs while docked + fix an issue with glitchy horizontal lines if you get them on any Switch while docked.
Atmosphere CFW is required. SX OS and other CFWs are not supported. It's advised to use Atmosphere's USB Transfer Tool homebrew to transfer files. If you use Hekate's USB Mass Storage and you will be putting files using any other Operating System than Windows, you must run Hekate's Archive Bit Fixer after putting all files.
To install:
- Download SaltyNX, copy the folders
SaltySDandatmosphereto the root of your SD card, accept any popup about overwriting folders. - Download Ultrahand (sdout.zip), unpack it, copy all unpacked folders to the root of sdcard, accept any popup about overwriting folders.
- Download Status Monitor Overlay, copy
Status-Monitor-Overlay.ovltoswitch\.overlaysfolder. It may not be visible in USB Mass Storage, but it's there. - Download FPSLocker, copy FPSLocker.ovl to
switch\.overlaysfolder. It may not be visible in USB Mass Storage, but it's there. - Download sys-clk, copy all 3 folders to the root of SD card, accept any popup about overwriting folders.
- If are have Switch OLED and you want to play in docked mode at high refresh rates: Download sys-dock, copy all 2 folders to the root of sdcard, accept any popup about overwriting folders.
- Restart Switch, now you can access overlays by pressing all 3 buttons at once: L, D-Pad Down and Right Stick (aka pressing it).
Additionally for FPSLocker download newest set of patches from FPSLocker Warehouse for games that need more things to be tweaked to get proper FPS boost.
User guide
Overlay runs in two modes:
- When the game is running.
- When the game is not running.
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.
The best approach if you want to run 30 FPS games at higher FPS:
- Connect your Switch to the internet, in FPSLocker go to
Advanced Settings, pressCheck/download config file. If your game and version are compatible with the FPSLocker Warehouse repository, the menu will be refreshed with the optionConvert config to patchappearing. Press on it, restart the game, and now change the FPS target in FPSLocker. - Go to Advanced Settings, if you see "Set/Active/Available buffers: 2/2/3", press on
Set buffering, chooseTriple (force).
Explanation of each option:
Interval Mode- It's used by NVN and EGL API to set vsync. Value 2 means that every frame shows at least 2x longer than by default, so at 60 Hz display you get 30 FPS max. Accepted range is 1-4. Unset value reported as 0 is treated the same way as 1.Custom FPS Target- It's used to lock the game to a certain FPS. If the game is using engine proprietary FPS locks, it may not be able to unlock more than 30 FPS without additional patches.FPS- It shows how many frames have passed in the last second for the currently running game. This is to confirm that the lock is working as expected.Patch file doesn't exist.- It shows up when overlay is 100% sure that for FPSLocker to properly work in this specific game it needs FPSLocker patch, but you don't have one. Readtl;drhow to get config and convert it to patch (though config may not exist for your game generally or for specific game's version you are using).Increase/Decrease FPS target- Shows up only in handheld mode. Change FPS Target by 5. Minimum is 15 FPS, max is 60 FPS.Change FPS target- Shows up only in docked mode. Shows up table with different FPS values, from 15 to 60 by default with possibility of expanding to 120 FPS.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:- If game is using NVN
Window Sync Wait- This is dangerous setting that disabled can crash game, but in some can bring benefit of disabling double buffer vsync at the cost of small graphical glitches (check list of games compatible with this solution at the bottom of README). Use it with caution. It won't show if game is not using double buffer.Set Buffering- If game is using any other buffering than double, this option will show that will allow you to force game to run at any other buffering that is not higher than original one (so f.e. you cannot change double buffer to triple buffer). Lowering buffer is recommended only for games that have near perfect performance at 30 or 60 FPS, but suffer from bad framepacing or big input lag. If you will force double buffer in games with uneven performance, FPS drops will be very severe. In some games it can be applied only at boot of game, so after changing buffering you may be forced to restart game (such info will pop up inside menu if it's needed).- Explanation of
Set/Active/Available Buffers:- Set - How many buffers were set by using
nvnWindowSetNumActiveTextures. If game is not using it, it will be 0. It can be used by games to set lower buffer value than reserved space allows. If this is detected to be used and lower than Available Buffers, you can use "(force)" variant next to default option. Without(force)it will reset to default settings. - Active - How many buffers are actually used by game.
- Available - How many buffers is actually provided to NVN. We can use this information to force games to utilize all buffers when they are not doing it.
- Set - How many buffers were set by using
- Explanation of
- If game is using Vulkan
Set Buffering- Switch between double buffer and triple buffer. Lowering buffer is recommended only for games that have near perfect performance at 30 or 60 FPS, but suffer from bad framepacing or big input lag. If you will force double buffer in games with uneven performance, FPS drops will be very severe. It can be applied only at boot of game, so after changing buffering you must restart game.
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 toSaltySD/plugins/FPSLocker/patches/*titleid_uppercase*/*buildid_uppercase*.binDelete 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.Check/download config file- Checks in Warehouse repository if config for this game and version exists. If exists, it is downloaded and also checked if it's the same as the one on sdcard. If it's not, overlay will remove existing patch and config file, and user must manually convert new config to patch file. 0x312 error means we got unexpected file from github. Any other error code means that something is happening with your connection or github server.Halt unfocused game- Some games are not suspended when your Switch is in home menu. Enabling this option forces kernel to suspend game asap if game is out of focus.
- If game is using NVN
Display settings- submenu related to display refresh rate. Consists of:Increase refresh rate- Shows up only in handheld mode. Change display refresh rate up to 60 Hz.Decrease refresh rate- Shows up only in handheld mode. Change display refresh rate down to 40 Hz (for OLED to 45 Hz).Change refresh rate- Shows up only in docked mode. Choose display refresh rate from list.Handheld Display Sync/Docked Display Sync- When turned on, all three options above are not available, display refresh rate is changed only when game is running, and matches refresh rate with FPS Target.60 HZ in HOME Menu- if Handheld Display Sync is turned on, whenever you go to HOME Menu while game is running SaltyNX will always make sure to run it at 60 Hz in handheld.Retro Remake Mode- this option shows only for people that use Lite with screenInnoLux 2J055IA-27A (Rev B1)orRetro Remake SUPER5(first revision only). That is because Retro Remake displays require special approach to change refresh rate, and first version of SUPER5 is spoofing ID of already existing display, which makes it impossible to detect which one is in use, so user must manually enable it if they are using SUPER5 display. All other Retro Remake displays are detected automatically.Docked Settings- submenu related to display refresh rate of external displays. Not accessible for Lite units. Consists of:myDP link rate- It will reportHBRorHBR2mode. HBR mode doesn't allow going higher than 75 Hz at 1080p for non-OLED units, for OLED units it depends on how much DP lanes your dock supports (all original docks have 2 active DP lanes which means max 75 Hz at 1080p). In case of 75 Hz being max at 1080p, 60 Hz is the real max if you want audio to work. More at the bottom of readme.Config ID- What is the name of config file used to store settings for your currently connected display. You can find file inSaltySD/plugins/FPSLocker/ExtDisplaysfolder.Allowed refresh rates- you can check and edit manually which refresh rates are enabled for currently connected external display. It consists of 40, 45, 50 and 55 Hz. By default 50 is turned on, everything else is turned off.Display underclock wizard- it goes automatically through refresh rates from 40 to 55, user is asked to press required button to confirm it's working, if not pressed for 15 seconds it goes to next refresh rate. After checking all refresh rates you are moved toAllowed refresh ratesmenu to check results.Display overclock wizard- it shows only if external display reported max refresh rate is equal or above 70 Hz. Goes automatically through refresh rates from 70 to max your display supports with cap being 120 Hz, user is asked to press required button to confirm it's working, if not pressed for 10 seconds it goes to next refresh rate. After checking all refresh rates you are moved toAllowed refresh ratesmenu to check results.Frameskip tester- It allows to check if your display is showing currently used signal at native refresh rates. Many displays may support for example 50 Hz, but they are still displaying stuff at 60 Hz. Instructions how to use it are provided when this menu is selected. This menu is also available in handheld mode.Additional settings- submenu with options related to how FPSLocker/FPSLocker patches are working in docked mode. Currently you can choose from:Allow patches to force 60 Hz- some FPSLocker patches are forcing 60 Hz to fix framepacing issues with 30 FPS cutscenes. When such change happens, game is paused for 4 seconds before continuing. By default is turned on. Turning it off will apply only FPS lock without changing refresh rate and without delay.Use lowest refresh rate for unmatched FPS targets- For example for 60 Hz display 35 FPS target may not have avaialble refresh rate matching it. By enabling this option you will get lowest enabled refresh rate inAllowed refresh ratesmenu. This option is disabled by default, which will result in setting 60 Hz in that case.60 HZ in HOME Menu- if Docked Display Sync is turned on, whenever you go to HOME Menu while game is running SaltyNX will always make sure to run it at 60 Hz for this particular display.
When game is not running
You will have two submenus to choose from:
Games list- 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- As name implies.Delete patches- It will delete file created by "Convert config to patch file" option.
Display settings- You can read about in previous section.Force English language- If you prefer using English, this option will force overlay to use it. It is achieved by self-modifying executable, so after updating overlay to newer release it will be turned off.
Sync Wait
Games where you can disable double buffer vsync by turning off Window Sync Wait in FPSLocker:
- Batman - The Telltale Series (Warehouse patch enables triple buffer, so there is no need to use this option)
- Pokemon Legends: Arceus
- Pokémon Legends: Z-A
- Pokemon Scarlet
- Pokemon Violet
- Sonic Frontier
- The Legend of Zelda: Tears of the Kingdom (Warehouse patch enables triple buffer, so there is no need to use this option)
- Xenoblade Chronicles: Definitive Edition
- Xenoblade Chronicles 2
- Xenoblade Chronicles 3
- Xenoblade Chronicles X
Media
FPSLocker on Switch homebrew to unlock FPS in game (Tralala LS)
Changelog
3.3.2 2026/04/13
- Improved titles loading time in Games List for 22.0.0+ FW
- 22.0.0 improved exeuction time of
nsGetApplicationControlData()and its alternatives by 4x in comparison to 21.0.0 - as long as you use standard 0 or 1 flag (nsGetApplicationControlData()doesn't expose that flag and uses 0).
- 22.0.0 improved exeuction time of
- Reduced overlay size by 45 kB
- Updated internal titleid base.
3.3.1 2026/02/24
- Fix an issue with Change Refresh Rate not showing up when Docked Display Sync was off
- Add support for new type of NACP introduced with The Legend of Zelda: Breath of The Wild 1.9.0, now title is showing up properly.
- Titles for "Games list" are retrieved faster by 10-15% on 21.0.0+
3.3.0 2026/02/15
- Fixed numerous issues that occured when using sys-dock sysmodule
- Fixed an issue with emoji indicator next to HBR mode that was not properly aligned in different languages than English
- Changed emoji behavior next to HBR mode so ❌ occurs only for HBR mode with 2 DP lanes, in case of 4 DP lanes or HBR2 it will show ✅.
- Updated internal titleid base.
3.2.4 2026/01/31
- Add Traditional Chinese language (Thanks to @david082321 for #89)
- Updated internal titleid base.
3.2.3 2025/12/27
- Fixed an issue where running game with different program than main one resulted in no game version showing up in Advanced Settings
- Updated internal titleid base.
3.2.2 2025/12/18
- Fix 0x207 error showing up for some people
- It was a combination of using nx-ovlloader in 4MB mode and overlay using too big socket buffers which I increased recently when debugging some other errors, which resulted in socket buffers taking 4x more space.
- Update internal titleid base.
3.2.1 2025/12/09
- Fix an issue with game specific "Delete settings" option not deleting settings for different programs than main one (limited to first 16 IDs).
- Update internal titleid base.
3.2.0 2025/12/08
- Add an alternative source "Gitee" for downloading FPSLocker configs that is not blocked by China and other countries that block Github/are blocked by Github. I used it as first source because it's universally available, though it may be a bit slower to use for people located further from China.
- Big thanks to sskyNS for hosting automated clone repository on Gitee (because it requires Chinese phone number to create repository).
- So first is checked Gitee, if config was not found it checks readme on gitee, then it moves to github to check for config and if not found, it checks readme on Github.
- Now you can exit Advanced settings even in the middle of
Check/Download config fileconnection, session will be terminated before going back to main menu. - When config file is not found in Warehouse, percentage indicator will show up when downloading README.
- Change license to GPLv2 to comply with libtesla.
- Update internal titleid base.
3.1.1 2025/12/06
Games listtitles now load faster by 35% on average on FW 19.0.0+- Found a different way to retrieve titles which is faster than original function. Added PR to libnx so other people can use it.
- If you are using old enough SaltyNX for BID to show only zeroes,
Check/Download config filewill instantly time out. - Updated internal titleid base.
- Updated Chinese Simplified translation. Thanks to @naicfeng #80
3.1.0 2025/11/16
- Added compatibility for Atmosphere 1.10.0+.
- Older FPSLocker releases can have random issues when used with Atmosphere 1.10.0 and newer.
- This release is backwards compatible so you can use it with older Atmosphere too.
- It is required to update to SaltyNX 1.6.0+ for the same reason!
- When using Check/Download config file and when config file was not found, but it was confirmed that game is listed in Warehouse with different version, now newest listed update is printed.
- Updated internal titleid base.
3.0.6 2025/11/10
- When using the
Check/Download config file, information will be sent to my own tracker. This will provide a clearer view of what people would like to be available in the Warehouse. No personal data or hardware data is sent.- To avoid introducing a visibly worse experience when using the
Check/Download config file, I set the connection to terminate if it takes longer than 1 second.
- To avoid introducing a visibly worse experience when using the
- Updated internal titleid base.
3.0.5 2025/11/08
- Now if game has no config available on sdcard, in Advanced settings below provided TID and BID you will see also game versions:
- Developer game version | Internal game version's major value / Raw internal game version.
- Updated internal titleid base.
3.0.4 2025/11/01
- Fix Halt unfocused game state not being saved in certain situations.
- Update internal titleid base.
3.0.3 2025/10/28
- Fix config to patch conversion in scenario where MASTER_WRITE's asm_a64 type included BL instruction with direct offset (this fixes an issue with config for Kirby's Dream Buffet).
3.0.2 2025/10/18
- Multiple fixes in FPSLocker config to patch conversion related to assembly instructions (no config was affected by it as of 17.10.2025, but this was hindering slightly process of writing them).
LDRBandLDRHnow don't return error when instruction has provided fixed offset.TBZandTBNZnow support goto labels.- All condiitonal branches are now supported.
- Updated titleid base to match current day status.
3.0.1 2925/09/14
- Add support for SaltyNX 1.5.2 new feature which allows changing buffering in real time in supported NVN games (if game is not compatible with that real time feature, in
Set Bufferingmenu you will see notice "It will be applied on next game boot"). - Remember that some games are designed in the way where you won't see any difference in FPS behavior between double and triple buffer, usually that's a result of missing some NVN synchronization calls (which can cause GPU race conditions, but I guess it's fine for them) - example of such game is
The Hundred Line. - Updating to SaltyNX 1.5.2+ is required!
3.0.0 2025/09/08
- Add support for next generation of FPSLocker configs called "v4".
- Allows putting code caves and new variables inside SaltyNX Core, which allows easier updating of more complex configs + helps avoiding conflicts with cheats using caves.
- More functionality when using branches in assembly.
- "v3" branch in FPSLocker Warehouse is now removed, and "v3.1" branch will be removed in next week.
- User is now informed in main menu with red text "Patch file doesn't exist." when currently running game is known that it should use FPSLocker patch but FPSLocker didn't detect it.
- Updating SaltyNX to 1.5.0+ version is required.
- Edit 07.09.2025 22:26 GMT: Fixed an issue with links to addons and Warehouse README.
- Edit 08.09.2025 17:28 GMT: Forgot to make unsafeCheck "true" by default.
2.4.0 2025/08/14
- Add support for FPSLocker configs utilizing "asm_a64" in MASTER_WRITE. It allows writing human readable assembly instead of using big endian integers like it was before
- Switch to new branch v3.1 in Warehouse which will support this new type of writing assembly, v3 branch which was used in previous FPSLocker versions is now deprecated and will be removed in 1-2 months.
2.3.1 2025/08/05
- Add option "60 Hz in HOME Menu" in Display settings and Docked Settings->Additional Settings. More in README.
- Requires SaltyNX 1.4.3+ to work properly!
2.3.0 2025/08/01
- 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.
2.2.1 2025/07/14
- Separate Display Sync for handheld and docked.
2.2.0 2025/07/12
- Add support for 720p/1080p docked mode refresh rates:
70, 72, 75, 80, 90, 95, 100, 110, 120 Hz(Requires SaltyNX 1.3.0+)- 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+)
- 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.
- Read README for more informations.
- Shadow update 12.07.2025 17:17 GMT: fix line in overclock wizard asking to confirm 40 Hz instead of 70 Hz.
- Shadow update 12.07.2025 21:25 GMT: Fix an issue with Change FPS Target menu immediately returning at 1080p output.
2.1.6 2025/05/31
- 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 2025/05/28
- 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 2025/05/27
- Improve "Reported max refresh rate" readings in Docked display settings.
2.1.3 2025/05/23
- 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 2025/05/17
- 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 2025/05/04
- 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.
2.1.0 2024/12/19
- Added support for changing refresh rates in docked mode. Read more in README.
- Changed some design choices of libtesla to make it less taxing on CPU. Fixes issues where opening FPSLocker could cause visible performance drop in some games.
- Whenever FPSLocker patch is currently forcing 60 Hz, overlay will inform about this in main menu.
- SaltyNX 1.2.0+ is REQUIRED! Using older SaltyNX versions can and probably will cause issues!
- For Xenoblade Chronicles and The Legend of Zelda games it is required to redownload config from Warehouse and convert it to patch, otherwise expect issues.
2.0.3 2024/10/11
Check/download config filecall is now done in a separate thread.- This fixes problem with overlay being unresponsive.
- You get additional info.
- You still won't be able to exit Advanced settings until thread has finished work.
- Now there is a timeout that if thread runs for longer than 30 seconds, it will return, unlocking overlay.
- Few text changes related to received informations from
Check/download config file.
2.0.2 2024/10/10
- Remake Advanced Settings page
- Now "Check/download config file" when cannot find patch file in Warehouse, it will check games list for possible informations as:
- If this titleid is listed.
- If titleid is listed, then if BID is listed and how patch recommendation looks like for it.
- If titleid is listed and BID is not listed, then how patch recommendation looks like for latest listed BID.
- More detailed informations when using options in FPSLocker Patches category.
- Now "Check/download config file" when cannot find patch file in Warehouse, it will check games list for possible informations as:
2.0.1 2024/08/19
- Fix a bug that was crashing OS when trying to disable/enable Display Sync while game not supported by SaltyNX was running.
2.0 2024/06/25
- Add Display settings menu to change LCD refresh rate (don't put Switch to dock with changed refresh rate while game is running, otherwise there is a chance game will crash), not available for OLED model. SaltyNX 0.8.0+ is required for this menu to show. More in readme.
- Add support for next revision of game configs that make them smaller and move most of calculations to FPSLocker overlay itself.
- Move from c++20 to c++23
1.2.8a 2024/03/11
- Fix "Set Buffering" in games with Quadruple Buffering.
1.2.8 2024/02/15
- Fix retrieving BID from games using new RTLD (such as Tomb Raider I-III Remastered).
- To fix compability with new RTLDs fully, it is necessary to update SaltyNX to at least 0.7.2 version.
1.2.7 2024/02/03
- Add support for downloading additional files from Warehouse if config file have "Addons" entry. Used currently only to fix compability issue in Tears of the Kingdom with atmosphere's romfs listing cache creation which allows loading romfs mods.
1.2.6a 2023/12/28
- Fix overlay lock not working since libnx 4.5.0 release.
1.2.6 2023/12/08
- Add option in Advanced Settings to download config from repository Check/download config file. More in README.
- Slightly redesign Advanced Settings UI.
1.2.5a 2023/11/21
- Fix saving settings if "plugins" folder doesn't exist inside SaltySD folder.
1.2.5 2023/10/01
- Add support for SaltyNX 0.7.0+.
1.2.4 2023/06/09
- Print titleid and buildid if no config is found
- Allow using all available buffers when game is not using all of them.
- For this release to properly work it is required to update NX-FPS to version 1.5.4
1.2.3 2023/05/30
- Allow in games using Quadruple Buffering (for example Assassin's Creed The Ezio Collection) to force Triple Buffering.
- When saving settings with different Buffering than Double, Window Sync will be reseted to Enabled.
1.2.2 2023/05/23
- Allow setting double buffer in games that are using triple buffer.
- More in README.
- NX-FPS 1.5.2+ is required.
1.2.1 2023/05/20
- Add "Semi-Enabled" option for Window Sync that doesn't timeout nvnSyncWait if at least second consecutive frame was rendered below 8.3ms.
- At cost of slightly worse performance it solved issues in Tears of the Kingdom with longer loading times and screen tearing in menus at 60 FPS.
- It is required to update NX-FPS to version 1.5.1+ for this to work.
1.2.0 2023/05/16
- Add support for MASTER_WRITE entry in FPSLocker patches that allows to patch any part of main before game is booted (when applied in Advanced Settings you will see "Master Write was loaded to game"). This is to allow patches to redirect assembly that normally read values from Read Only sections to code caves or patching executable to disable double buffer.
- Change name "Sync Wait" to "Window Sync Wait"
- Now if game config that can be converted to patch is not available, instead of error code overlay will print
Game config file not found. - NX-FPS 1.5.0+ is required to properly support new patches.
1.1.4 2023/05/06
- FPSLocker now can show how many framebuffers is used by NVN and show it in Advanced Settings.
- "Buffered frames: 2" = game is using real double buffer.
- Since this number cannot be changed on the fly, this is just an information update.
1.1.3 2023/04/05
- Provide better API detection.
- Now you can see if game is using NVN, EGL or Vulkan in Advanced Settings.
- Requires updating NX-FPS to at least 1.3 version.
1.1.2 2023/04/02
- Fix RTLD detection in older games to get proper BID (f.e. in L.A. Noire).
1.1.1 2023/04/02
- Updated libtesla to fix random crash in docked mode related to freeing framebuffer.
1.1.0 2023/03/19
- Add support for creating LOCK patches from yaml configs.
1.0.0 2023/03/08
- First Release.
Credits
Thanks to:
- ~WerWolv for creating Tesla environment
- ~cucholix + ~Monked for tests
- ~CTCaer for info about Samsung OLED panels
- ~NaGa for tests on Retro Remake SUPER5 display and providing me with a Switch OLED unit
- and backers, including: Jorge Conceição, zany tofu, Lei Feng, brandon foster, AlM, Alex Haley, Stefano Bigio, Le Duc, Sylvixor x
- Anonymous contributor who found how to unlock full refresh rate range for Switch OLED in dock.
Translation:
- German: ~Lightos_
- French: ~ganonlebucher
- Russian: ~usagi
- Brazilian Portuguese: ~Fl4sh
- Chinese Simplified: ~Soneoy, ~Tone Darkwell
- Chinese Traditional: david082321
External links
- Twitter - https://twitter.com/masagratordev/status/1658144998313844736
- GitHub - https://github.com/masagrator/FPSLocker
- GitHub - https://github.com/masagrator/FPSLocker-Warehouse
- GBAtemp - https://gbatemp.net/threads/fpslocker-set-custom-fps-target-in-retail-games.627764/
- Homebrew App Store - https://apps.fortheusers.org/switch/FPSLocker