Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

SaltyNX Switch: Difference between revisions

From GameBrew
No edit summary
No edit summary
 
(35 intermediate revisions by 2 users not shown)
Line 4: Line 4:
|description=Background process for the Nintendo Switch for file/code modification
|description=Background process for the Nintendo Switch for file/code modification
|author=masagrator
|author=masagrator
|lastupdated=2023/04/02
|lastupdated=2024/12/19
|type=Other Apps
|type=Plugins
|version=0.5.2
|version=1.2
|license=Mixed
|license=Mixed
|download=https://dlhb.gamebrew.org/switchhomebrews/saltynxswitch.7z
|download=https://dlhb.gamebrew.org/switchhomebrews/saltynxswitch.7z
Line 13: Line 13:
|donation=https://ko-fi.com/masagrator
|donation=https://ko-fi.com/masagrator
}}
}}
{{#seo:
SaltyNX is a process running in the background that allows for code injection and modification. It is utilized by various tools such as ReverseNX-Tool, [[ReverseNX-RT Switch|ReverseNX-RT]], and [[Status Monitor Overlay Switch|Status Monitor]] in conjunction with [[NX-FPS Switch|NX-FPS]], [[UnityGraphics Switch|UnityGraphics]], and several Smash mods.
|title=Switch Homebrew Apps (Other Apps) - GameBrew
|title_mode=append
|image=saltynxswitch.png
|image_alt=SaltyNX
}}
SaltyNX is a process running in the background that allows for code injection and modification. It is utilized by various tools such as ReverseNX-Tool, [[ReverseNX-RT Switch|ReverseNX-RT]], and Status Monitor in conjunction with [[NX-FPS Switch|NX-FPS]], UnityGraphics, and several Smash mods.


Originally developed by [https://github.com/shinyquagsire23/SaltyNX shinyquagsire23], SaltyNX has not received updates since July 2019. As a result, Masagrator have taken on the responsibility of maintaining it, ensuring compatibility with the latest devkit and firmware versions, incorporating additional functionalities, and addressing any issues that arise.
This is a based on shinyquagsire23's [https://github.com/shinyquagsire23/SaltyNX SaltyNX] with includes many QoL improvements and beside plugins support also supports patches.


== How To Setup ==
Since 0.7.0 version NX-FPS and ReverseNX-RT are an intergral part of SaltyNX Core. This allows us to run them in 64-bit games not compatible with plugins.  
* For Atmosphere >=0.10.1 just put folders from archive to root of your sdcard.
* For Atmosphere &lt;=0.9.4 and any other CFW rename <code>contents</code> folder to <code>titles</code>
* For SX OS remember to rename <code>atmosphere</code> folder to <code>sxos</code>
Remember to restart Switch.


==Patches pattern==
Since 1.0.0 32-bit games are supported (external plugins are not supported for them).
* filename is symbol of function with filetype <code>.asm64</code>,
* inside file write with hex editor instructions that you want to overwrite for this function,
* put this file either to <code>SaltySD/patches</code> to make it work for every game, or to <code>SaltySD/patches/*titleid*</code> to make it work for specific game.


For additional functions you need [https://github.com/masagrator/SaltyNX-Tool SaltyNX-Tool].
== Installation ==
How to install:
* Atmosphere &gt;=0.10.1 - Put folders from archive to root of your sdcard.
* Atmosphere &lt;=0.9.4 and any other CFW - Rename <code>contents</code> folder to <code>titles</code>.
* SX OS - Remember to rename <code>atmosphere</code> folder to <code>sxos</code>.
* Remember to restart Switch.


==Compatibility==
'''Notes:''' If you have [[NX-FPS Switch|NX-FPS]] and an older version of [[ReverseNX-RT Switch|ReverseNX-RT]] installed, make sure you delete NX-FPS.elf and ReverseNX-RT.elf ffrom SaltySD/plugins folder.
Tests were done on FW 7.0.1-16.0.0 with Atmosphere up to 1.5.0


===No technical support for===
==User guide==
* Atmosphere forks
===Patches pattern===
* SX OS
* Filename is symbol of function with filetype <code>.asm64</code>, <code>.asm32</code> for 32-bit games,
* Kosmos
* Inside file write with hex editor instructions that you want to put into this function.
* ReinX
* Put this file either to <code>SaltySD/patches</code> to make it work for every game, or to <code>SaltySD/patches/*titleid*</code> to make it work for specific game.


==Screenshot==
For additional functions you need [[SaltyNX-Tool Switch|SaltyNX-Tool]].
[[image:saltynxswitch.png]]


== List of titles not compatible with plugins/patches ==
==Compatibility==
 
It is required to have FW installed at least 10.0.0 version.
{| class="wikitable"
! Title
! plugins/all
! Why?
|-
| Alien: Isolation
| plugins
| Heap related
|-
| Azure Striker Gunvolt: Striker Pack
| all
| 32-bit game, not supported
|-
| Baldur's Gate and Baldur's Gate II: Enhanced Editions
| all
| 32-bit game, not supported
|-
| DEADLY PREMONITION Origins
| all
| 32-bit game, not supported
|-
| Dies irae Amantes amentes For Nintendo Switch
| all
| 32-bit game, not supported
|-
| Goat Simulator
| all
| 32-bit game, not supported
|-
| Grandia Collection
| all
| Only launcher is 64-bit, games are 32-bit
|-
| Grid: Autosport
| plugins
| Heap related
|-
| Immortals Fenyx Rising
| plugins
| Heap related
|-
| LIMBO
| all
| 32-bit game, not supported
|-
| Luigi's Mansion 3
| plugins
| Heap related
|-
| Mario Kart 8
| all
| 32-bit game, not supported
|-
| Mario Strikers: Battle League
| plugins
| Heap related
|-
| Megadimension Neptunia VII
| all
| 32-bit game, not supported
|-
| Moero Chronicle Hyper
| all
| 32-bit game, not supported
|-
| Moero Crystal H
| all
| 32-bit game, not supported
|-
| Monster Hunter Generations Ultimate
| all
| 32-bit game, not supported
|-
| New Super Mario Bros. U Deluxe
| all
| 32-bit game, not supported
|-
| Ni no Kuni: Wrath of the White Witch
| all
| 32-bit game, not supported
|-
| Olympic Games Tokyo 2020 – The Official Video Game™
| plugins
| Heap related
|-
| Pikmin 3 Deluxe
| all
| 32-bit game, not supported
|-
| Planescape: Torment and Icewind Dale
| all
| 32-bit game, not supported
|-
| Stubbs the Zombie in Rebel Without a Pulse
| all
| heap related
|-
| Tokyo Mirage Session #FE Encore
| all
| 32-bit game, not supported
|-
| Valkyria Chronicles
| all
| 32-bit game, not supported
|-
| Witcher 3 GOTY (version 3.2)
| all
| heap related
|-
| World of Goo
| all
| 32-bit game, not supported
|-
| YouTube
| plugins
| Unknown
|}


Titles other than 32-bit are added to exceptions.txt which is treated as Black list, you can find it in root of repo. SaltyNX reads it from SaltySD folder. <code>X</code> at the beginning of titleid means that this game will not load any patches and plugins.
No technical support for: Atmosphere forks, SX OS, Kosmos, ReinX.


32-bit games are ignored by default for patches and plugins.
==Known issues==
 
* Instability with some homebrews and sysmodules (like emuiibo).
==Known Issues==
* You need to have at least Hekate 5.0.2 if you don't want issues related to Hekate.
* Instability with some homebrews and sysmodules (like emuiibo),
* You need to have at least Hekate 5.0.2 if you don't want issues related to Hekate,
* 32 bit games are unsupported,
* Cheats using directly heap addresses may not work properly while using plugins.
* Cheats using directly heap addresses may not work properly while using plugins.


==Changelog==
==Changelog==
'''1.2.0'''
* Add support for changing refresh rates in docked mode from 40 up to 60 Hz.
* Sysmodule now supports newest libnx.
* Core is now completely independent from new libnx versions.
* Math formula for changing refresh rate in handheld mode was drastically improved.
* In NX-FPS now various functions related to pushing frames to display share common function for counting FPS, which results in avoiding situations where different APIs could have different issues.
* Refresh rate is written to NX-FPS -> displaySync pointer whenever game runs with display sync turned on.
* Now SaltyNX disabled in SaltyNX-Tool won't cause anymore issues with dmnt.gen2 when attaching with monitor wait application.
* Thanks to all people who were testing this for the last 3 weeks.
'''1.1.1'''
* ReverseNX-RT
** Fix issue with The Legend of Zelda: Echoes of Wisdom compatibility.
** Fix issue with Unravel Two compatibility.
'''1.1.0'''
* Sysmodule:
** Migrated compilation from libnx_min to official libnx.
** Fixed an issue with running game's BuildID not read when dmnt.gen2 is active.
* Core and Core32:
** Added support for reading ReverseNX-RT settings. Requires using ReverseNX-RT 2.1.0+ (ReverseNX-Tool will no longer be updated).
** ReverseNX-RT: now GetDefaultDisplayResolution will return 1920x1080 for forced docked mode only when user is in fact in handheld mode.
* Edit: 21.11.2024 19:45 GMT - shadow update, because I used wrong Core with previous zip.
'''1.0.6'''
* Fix a bug introduced in 1.0.0 release that blocked FPSLocker patches from working in games utilizing Vulkan.
* Fix a bug where if 32-bit game was using skyline plugin next to SaltyNX Core, Core was patching SVCs inside skyline plugin instead of nnSDK (this doesn't prevent crash in mods like CTGPDX, from this release it's purely skyline plugin's fault that must be fixed by their devs. More: [https://github.com/masagrator/SaltyNX/issues/60#issuecomment-2468668997 #60 (comment)])
'''1.0.4a2'''
*Fixed a bug with exceptions.txt not working properly introduced in 1.0.4 release.
'''1.0.4a'''
*Fix bug introduced in 1.0.4 release where cheats were not moved back to original folder after successful injection of bootstrap.
'''1.0.4'''
* Increase GetThreadList timeout to 30 seconds instead of initial 10 seconds.
* Small code refactor.
'''1.0.3'''
* Small code refactor to help me easier implement new stuff to Shared Memory.
* Sysmodule is now writing regularly to shared memory display refresh rate so tools such as Status Monitor Overlay can better update stuff that rely on it without constantly connecting to sysmodule.
* Fix a mistake where SaltyNX Core32 didn't have code for refresh rate/interval from 1.0.1 release.
'''1.0.2'''
*Fix (hopefully this time for good) random issue with 64-bit games crashing when logging is disabled.
'''1.0.1'''
*When FPSLocker patch tries to force 30 FPS lock, instead of using actual FPS lock it's now temporarily forcing interval to 2 and setting display refresh rate to 60 Hz to avoid stutterings.
'''1.0.0'''
* Add support for 32-bit games (this includes NX-FPS and ReverseNX, it excludes external plugins).
* Fix issue with asm patches memory overflowing.
* Fix bug in FPS lock not working properly in EGL and Vulkan games.
'''0.1.0'''
* Reduced sysmodule RAM usage by 28%.
** Part of it was done by moving bootstrap code to separate file, so from now on "saltysd_bootstrap.elf" is included in SaltySD folder and is obligatory to have.
* Fixed ReverseNX compatibility with Card-en-Ciel.
'''0.9.4'''
*Fix issue with cheats not loading at game's boot (applies only when SaltyNX injects Core).
'''0.9.3'''
*Disable ReverseNX-RT in The Legend of Zelda: Echoes of Wisdom, fixing game crashing when exiting.
'''0.9.2'''
*Fix resolution grabbing compability with Skyrim by changing accepted ratios from <1.3, 1.9) to <1.2, 1.9).
'''0.9.1'''
* Extended grabbed resolutions accepted ratios from <1.7, 1.9) to <1.3, 1.9). Fixes dynamic resolution detection issue with games using Id Tech engine like DOOM 2016, Doom Eternal, Wolfenstein 2.
'''0.9.0'''
* Add support for new iteration of Vulkan (fixes issues with Star Wars Bounty Hunter detection).
* Add support for dumping resolutions from games using NVN.
'''0.8.1'''
* Updated display refresh rate change function which now sets it perfectly instead of "very close" (thanks to Cooler3D for sharing how to fix it).
* Fix improperly implemented gatekeeping OLED model from using Display Sync via IPC
* '''REMEMBER TO REMOVE NX-FPS.elf and ReverseNX-RT.elf FROM SaltySD/plugins FOLDER, otherwise there will be dragons!'''
'''0.8.0'''
* Common:
** Moved from gnu++20 to gnu++23.
* Sysmodule:
** Added IPC allowing changing display refresh rate.
** Added support for Display Sync option in Display setting available from FPSLocker 2.0.0.
* Core / NX-FPS:
** Added support for new generation of FPSLocker patches that added additional entries for 40, 45, 50 + 55 Hz and allows forcing FPS lock.
** Now if any FPSLocker FPS target matches supported display refresh rate, NX-FPS FPS lock is automatically disabled to avoid stutterings (except if FPSLocker patch enforces FPS lock).
* Fixed FPS Lock not being applied after disabling Display Sync.
'''0.7.4'''
*Reapply custom NVN interval in case if game avoids using NVN API to set it (fixes an issue with Call of Juarez: Gunslinger reapplying 30 FPS lock).
'''0.7.3'''
*Fix shared memory not being cleaned up upon going into hbmenu in title override (this caused ReverseNX-RT overlay to show that ReverseNX was active while it was not).
'''0.7.2'''
* Fix compability issues with updated rtld's ModuleObject struct (fixes crash in Tomb Raider I-III Remastered).
* Add Donkey Kong Country: Tropical Freeze to exceptions (heap issues from second level).
* Eliminate some potential deadlocks in sysmodule.
* Updated in sysmodule retrieving BID from games with updated RTLD (such as Tomb Raider I-III Remastered).
* Removed some deadlocks from sysmodule.
* REMEMBER TO REMOVE NX-FPS.elf and ReverseNX-RT.elf FROM SaltySD/plugins FOLDER, otherwise there will be dragons!
'''0.7.1'''
* Apply hacky solution for not working replace imports in retail games using RELR.
* Reduce size of Core by half.
'''0.7.0'''
* Support replacing imports in NROs (f.e. EA SPORTS FC 24).
* Integrate NX-FPS and ReverseNX-RT plugins into Core source code, allows importing them to 64-bit games that have issues with plugins. In case of using plugins that replace imports for the same functions as those two are using, plugins have priority except for nn::ro::LoadModule.
*Note
** REMEMBER TO REMOVE NX-FPS.elf and ReverseNX-RT.elf FROM SaltySD/plugins FOLDER, otherwise there will be dragons!
** Also remember about updating FPSLocker and ReverseNX-RT overlays!
'''0.6.1'''
*Fix compability issues with Atmosphere 1.5.5 by adding 128kB to fake heap.
'''0.6.0'''
* Reduce size of sysmodule executable by 2/3 and memory footprint of sysmodule by ~45%.
* Add new flag for exceptions.txt - R. It will abort loading SaltyNX to game if game has romfs mod installed. This is to prevent collisions in case of Atmosphere taking memory from game when game has big number of romfs files and could prevent SaltyNX from injecting into game's memory. For now such a game doesn't exist, but Zelda Tears of The Kingdom is pretty close. This is futureproofing for possibility.
'''0.5.2'''
'''0.5.2'''
*Fix RTLD detection for getBID() in older games like LA Noire.
*Fix RTLD detection for getBID() in older games like LA Noire.
'''0.5.1'''
'''0.5.1'''
* Add function SaltySD_GetBID() to use with plugins to retrieve buildID of running game
* Add function SaltySD_GetBID() to use with plugins to retrieve buildID of running game.
* Fix bug that was causing SharedMemory to not clean up upon detection of game that is 32-bit or in exceptions.txt (fixes bug in homebrew reading SharedMemory, f.e. Status Monitor Overlay, FPSLocker and ReverseNX-RT). Thanks to ~cucholix for finding this bug and testing fix.
* Fix bug that was causing SharedMemory to not clean up upon detection of game that is 32-bit or in exceptions.txt (fixes bug in homebrew reading SharedMemory, f.e. Status Monitor Overlay, FPSLocker and ReverseNX-RT). Thanks to ~cucholix for finding this bug and testing fix.
'''0.5.0'''
'''0.5.0'''
Line 188: Line 155:
* SaltyNX is reserving 4096 byte block to use with any app. Default purpose is to allow exchanging data in real time between homebrew and plugins without using dmnt:cht/svcDebug
* SaltyNX is reserving 4096 byte block to use with any app. Default purpose is to allow exchanging data in real time between homebrew and plugins without using dmnt:cht/svcDebug
'''0.4.0a-hotfix'''
'''0.4.0a-hotfix'''
* Fixed sm compability issues with Atmosphere 0.19.0+
* Fixed sm compability issues with Atmosphere 0.19.0+.
* Thanks to [https://github.com/SciresM SciresM] for providing this fix - [https://github.com/masagrator/SaltyNX/commit/2e0bd1d4e23ae36574128eda24fe540c366d61e6 2e0bd1d]!
* Thanks to [https://github.com/SciresM SciresM] for providing this fix - [https://github.com/masagrator/SaltyNX/commit/2e0bd1d4e23ae36574128eda24fe540c366d61e6 2e0bd1d]!
'''0.4.0a'''
'''0.4.0a'''
* Resolves issue with nonconsistent heap reserving.
* Resolves issue with nonconsistent heap reserving.
* FIFA 18-21 and Darksiders 2 are now working properly.
* FIFA 18-21 and Darksiders 2 are now working properly.
* EDIT: It doesn't work correctly with M.16.2 (0.16.2 EXPERIMENTAL). Works on standard 0.16.2
* EDIT: It doesn't work correctly with M.16.2 (0.16.2 EXPERIMENTAL). Works on standard 0.16.2.
'''0.3.2a'''
'''0.3.2a'''
*Fix loading plugins from titleid folders ef8ff67
*Fix loading plugins from titleid folders ef8ff67.
It should now fix bug introduced from 0.3.0a with crashing plugins in Smash Bros and other games while using title specific plugins
**It should now fix bug introduced from 0.3.0a with crashing plugins in Smash Bros and other games while using title specific plugins.
*include another exception - abort loading plugins if:
*Include another exception - abort loading plugins if: <code>titleid & 0x1F00 != 0</code>
titleid & 0x1F00 != 0
'''0.3.1a'''
'''0.3.1a'''
* Fixed rare case of crashing game when trying to load hbloader in title replacement mode by disabling bootstrap in this case
* Fixed rare case of crashing game when trying to load hbloader in title replacement mode by disabling bootstrap in this case.
* 2MB fix reverted, as this was crashing Zelda BoTW
* 2MB fix reverted, as this was crashing Zelda BoTW.
'''0.3.0a'''
'''0.3.0a'''
*Add support for patches (more in readme)
*Add support for patches (more in readme).
** Thanks to this it's possible to omit crashes with code injection if it doesn't need heap to work.
** Thanks to this it's possible to omit crashes with code injection if it doesn't need heap to work.
'''0.2.1a'''
'''0.2.1a'''
*Reduced RAM usage by 320kB.
*Reduced RAM usage by 320kB.
'''0.2a'''
'''0.2a'''
* Ditched Spawner
* Ditched Spawner.
* Rewrited Proc to be independent and now it's booted directly from CFW as sysmodule
* Rewrited Proc to be independent and now it's booted directly from CFW as sysmodule.
** Thanks to this I could lower memory usage by 60 kB
** Thanks to this I could lower memory usage by 60 kB.
* Added option to disable log writing (writing is enabled by default)
* Added option to disable log writing (writing is enabled by default).
* Added toolbox.json to bring correct support for sysmodules managers
* Added toolbox.json to bring correct support for sysmodules managers.
* Because of ditching Spawner, KIP is not possible to use anymore. That's why we have now only one package using exefs.  
* Because of ditching Spawner, KIP is not possible to use anymore. That's why we have now only one package using exefs.  
* saltysd_proc.elf from SaltySD folder is not used anymore, you can delete it.
* saltysd_proc.elf from SaltySD folder is not used anymore, you can delete it.
'''0.2'''
'''0.2'''
* Update solving compability issues with FW 10.0.0 for people using NSP.zip
* Update solving compability issues with FW 10.0.0 for people using NSP.zip.
* Issue is not existing for KIP, so you don't need to update anything if you are using it (appstore is using NSP.zip)
* Issue is not existing for KIP, so you don't need to update anything if you are using it (appstore is using NSP.zip).
* Delete folder 0100000000534C56 from contents/titles before updating.
* Delete folder 0100000000534C56 from contents/titles before updating.
'''0.1a'''
'''0.1a'''
Line 226: Line 192:
'''0.1a'''
'''0.1a'''
* First Release.
* First Release.
==Credits==
Thanks to:
* Cooler3D.


== External links ==
== External links ==
* Gbatemp - https://gbatemp.net/threads/saltynx-discussion-thread.579051/
* GitHub - https://github.com/masagrator/SaltyNX
* Github - https://github.com/masagrator/SaltyNX
* GitHub - https://github.com/masagrator/SaltyNX-Tool
* GBAtemp - https://gbatemp.net/threads/saltynx-discussion-thread.579051/

Latest revision as of 04:09, 22 December 2024

SaltyNX
Saltynxswitch.png
General
Authormasagrator
TypePlugins
Version1.2
LicenseMixed
Last Updated2024/12/19
Links
Download
Website
Source
Support Author

SaltyNX is a process running in the background that allows for code injection and modification. It is utilized by various tools such as ReverseNX-Tool, ReverseNX-RT, and Status Monitor in conjunction with NX-FPS, UnityGraphics, and several Smash mods.

This is a based on shinyquagsire23's SaltyNX with includes many QoL improvements and beside plugins support also supports patches.

Since 0.7.0 version NX-FPS and ReverseNX-RT are an intergral part of SaltyNX Core. This allows us to run them in 64-bit games not compatible with plugins.

Since 1.0.0 32-bit games are supported (external plugins are not supported for them).

Installation

How to install:

  • Atmosphere >=0.10.1 - Put folders from archive to root of your sdcard.
  • Atmosphere <=0.9.4 and any other CFW - Rename contents folder to titles.
  • SX OS - Remember to rename atmosphere folder to sxos.
  • Remember to restart Switch.

Notes: If you have NX-FPS and an older version of ReverseNX-RT installed, make sure you delete NX-FPS.elf and ReverseNX-RT.elf ffrom SaltySD/plugins folder.

User guide

Patches pattern

  • Filename is symbol of function with filetype .asm64, .asm32 for 32-bit games,
  • Inside file write with hex editor instructions that you want to put into this function.
  • Put this file either to SaltySD/patches to make it work for every game, or to SaltySD/patches/*titleid* to make it work for specific game.

For additional functions you need SaltyNX-Tool.

Compatibility

It is required to have FW installed at least 10.0.0 version.

No technical support for: Atmosphere forks, SX OS, Kosmos, ReinX.

Known issues

  • Instability with some homebrews and sysmodules (like emuiibo).
  • You need to have at least Hekate 5.0.2 if you don't want issues related to Hekate.
  • Cheats using directly heap addresses may not work properly while using plugins.

Changelog

1.2.0

  • Add support for changing refresh rates in docked mode from 40 up to 60 Hz.
  • Sysmodule now supports newest libnx.
  • Core is now completely independent from new libnx versions.
  • Math formula for changing refresh rate in handheld mode was drastically improved.
  • In NX-FPS now various functions related to pushing frames to display share common function for counting FPS, which results in avoiding situations where different APIs could have different issues.
  • Refresh rate is written to NX-FPS -> displaySync pointer whenever game runs with display sync turned on.
  • Now SaltyNX disabled in SaltyNX-Tool won't cause anymore issues with dmnt.gen2 when attaching with monitor wait application.
  • Thanks to all people who were testing this for the last 3 weeks.

1.1.1

  • ReverseNX-RT
    • Fix issue with The Legend of Zelda: Echoes of Wisdom compatibility.
    • Fix issue with Unravel Two compatibility.

1.1.0

  • Sysmodule:
    • Migrated compilation from libnx_min to official libnx.
    • Fixed an issue with running game's BuildID not read when dmnt.gen2 is active.
  • Core and Core32:
    • Added support for reading ReverseNX-RT settings. Requires using ReverseNX-RT 2.1.0+ (ReverseNX-Tool will no longer be updated).
    • ReverseNX-RT: now GetDefaultDisplayResolution will return 1920x1080 for forced docked mode only when user is in fact in handheld mode.
  • Edit: 21.11.2024 19:45 GMT - shadow update, because I used wrong Core with previous zip.

1.0.6

  • Fix a bug introduced in 1.0.0 release that blocked FPSLocker patches from working in games utilizing Vulkan.
  • Fix a bug where if 32-bit game was using skyline plugin next to SaltyNX Core, Core was patching SVCs inside skyline plugin instead of nnSDK (this doesn't prevent crash in mods like CTGPDX, from this release it's purely skyline plugin's fault that must be fixed by their devs. More: #60 (comment))

1.0.4a2

  • Fixed a bug with exceptions.txt not working properly introduced in 1.0.4 release.

1.0.4a

  • Fix bug introduced in 1.0.4 release where cheats were not moved back to original folder after successful injection of bootstrap.

1.0.4

  • Increase GetThreadList timeout to 30 seconds instead of initial 10 seconds.
  • Small code refactor.

1.0.3

  • Small code refactor to help me easier implement new stuff to Shared Memory.
  • Sysmodule is now writing regularly to shared memory display refresh rate so tools such as Status Monitor Overlay can better update stuff that rely on it without constantly connecting to sysmodule.
  • Fix a mistake where SaltyNX Core32 didn't have code for refresh rate/interval from 1.0.1 release.

1.0.2

  • Fix (hopefully this time for good) random issue with 64-bit games crashing when logging is disabled.

1.0.1

  • When FPSLocker patch tries to force 30 FPS lock, instead of using actual FPS lock it's now temporarily forcing interval to 2 and setting display refresh rate to 60 Hz to avoid stutterings.

1.0.0

  • Add support for 32-bit games (this includes NX-FPS and ReverseNX, it excludes external plugins).
  • Fix issue with asm patches memory overflowing.
  • Fix bug in FPS lock not working properly in EGL and Vulkan games.

0.1.0

  • Reduced sysmodule RAM usage by 28%.
    • Part of it was done by moving bootstrap code to separate file, so from now on "saltysd_bootstrap.elf" is included in SaltySD folder and is obligatory to have.
  • Fixed ReverseNX compatibility with Card-en-Ciel.

0.9.4

  • Fix issue with cheats not loading at game's boot (applies only when SaltyNX injects Core).

0.9.3

  • Disable ReverseNX-RT in The Legend of Zelda: Echoes of Wisdom, fixing game crashing when exiting.

0.9.2

  • Fix resolution grabbing compability with Skyrim by changing accepted ratios from <1.3, 1.9) to <1.2, 1.9).

0.9.1

  • Extended grabbed resolutions accepted ratios from <1.7, 1.9) to <1.3, 1.9). Fixes dynamic resolution detection issue with games using Id Tech engine like DOOM 2016, Doom Eternal, Wolfenstein 2.

0.9.0

  • Add support for new iteration of Vulkan (fixes issues with Star Wars Bounty Hunter detection).
  • Add support for dumping resolutions from games using NVN.

0.8.1

  • Updated display refresh rate change function which now sets it perfectly instead of "very close" (thanks to Cooler3D for sharing how to fix it).
  • Fix improperly implemented gatekeeping OLED model from using Display Sync via IPC
  • REMEMBER TO REMOVE NX-FPS.elf and ReverseNX-RT.elf FROM SaltySD/plugins FOLDER, otherwise there will be dragons!

0.8.0

  • Common:
    • Moved from gnu++20 to gnu++23.
  • Sysmodule:
    • Added IPC allowing changing display refresh rate.
    • Added support for Display Sync option in Display setting available from FPSLocker 2.0.0.
  • Core / NX-FPS:
    • Added support for new generation of FPSLocker patches that added additional entries for 40, 45, 50 + 55 Hz and allows forcing FPS lock.
    • Now if any FPSLocker FPS target matches supported display refresh rate, NX-FPS FPS lock is automatically disabled to avoid stutterings (except if FPSLocker patch enforces FPS lock).
  • Fixed FPS Lock not being applied after disabling Display Sync.

0.7.4

  • Reapply custom NVN interval in case if game avoids using NVN API to set it (fixes an issue with Call of Juarez: Gunslinger reapplying 30 FPS lock).

0.7.3

  • Fix shared memory not being cleaned up upon going into hbmenu in title override (this caused ReverseNX-RT overlay to show that ReverseNX was active while it was not).

0.7.2

  • Fix compability issues with updated rtld's ModuleObject struct (fixes crash in Tomb Raider I-III Remastered).
  • Add Donkey Kong Country: Tropical Freeze to exceptions (heap issues from second level).
  • Eliminate some potential deadlocks in sysmodule.
  • Updated in sysmodule retrieving BID from games with updated RTLD (such as Tomb Raider I-III Remastered).
  • Removed some deadlocks from sysmodule.
  • REMEMBER TO REMOVE NX-FPS.elf and ReverseNX-RT.elf FROM SaltySD/plugins FOLDER, otherwise there will be dragons!

0.7.1

  • Apply hacky solution for not working replace imports in retail games using RELR.
  • Reduce size of Core by half.

0.7.0

  • Support replacing imports in NROs (f.e. EA SPORTS FC 24).
  • Integrate NX-FPS and ReverseNX-RT plugins into Core source code, allows importing them to 64-bit games that have issues with plugins. In case of using plugins that replace imports for the same functions as those two are using, plugins have priority except for nn::ro::LoadModule.
  • Note
    • REMEMBER TO REMOVE NX-FPS.elf and ReverseNX-RT.elf FROM SaltySD/plugins FOLDER, otherwise there will be dragons!
    • Also remember about updating FPSLocker and ReverseNX-RT overlays!

0.6.1

  • Fix compability issues with Atmosphere 1.5.5 by adding 128kB to fake heap.

0.6.0

  • Reduce size of sysmodule executable by 2/3 and memory footprint of sysmodule by ~45%.
  • Add new flag for exceptions.txt - R. It will abort loading SaltyNX to game if game has romfs mod installed. This is to prevent collisions in case of Atmosphere taking memory from game when game has big number of romfs files and could prevent SaltyNX from injecting into game's memory. For now such a game doesn't exist, but Zelda Tears of The Kingdom is pretty close. This is futureproofing for possibility.

0.5.2

  • Fix RTLD detection for getBID() in older games like LA Noire.

0.5.1

  • Add function SaltySD_GetBID() to use with plugins to retrieve buildID of running game.
  • Fix bug that was causing SharedMemory to not clean up upon detection of game that is 32-bit or in exceptions.txt (fixes bug in homebrew reading SharedMemory, f.e. Status Monitor Overlay, FPSLocker and ReverseNX-RT). Thanks to ~cucholix for finding this bug and testing fix.

0.5.0

  • Add SharedMemory 4096B block to use with plugins.
  • SaltyNX is reserving 4096 byte block to use with any app. Default purpose is to allow exchanging data in real time between homebrew and plugins without using dmnt:cht/svcDebug

0.4.0a-hotfix

  • Fixed sm compability issues with Atmosphere 0.19.0+.
  • Thanks to SciresM for providing this fix - 2e0bd1d!

0.4.0a

  • Resolves issue with nonconsistent heap reserving.
  • FIFA 18-21 and Darksiders 2 are now working properly.
  • EDIT: It doesn't work correctly with M.16.2 (0.16.2 EXPERIMENTAL). Works on standard 0.16.2.

0.3.2a

  • Fix loading plugins from titleid folders ef8ff67.
    • It should now fix bug introduced from 0.3.0a with crashing plugins in Smash Bros and other games while using title specific plugins.
  • Include another exception - abort loading plugins if: titleid & 0x1F00 != 0

0.3.1a

  • Fixed rare case of crashing game when trying to load hbloader in title replacement mode by disabling bootstrap in this case.
  • 2MB fix reverted, as this was crashing Zelda BoTW.

0.3.0a

  • Add support for patches (more in readme).
    • Thanks to this it's possible to omit crashes with code injection if it doesn't need heap to work.

0.2.1a

  • Reduced RAM usage by 320kB.

0.2a

  • Ditched Spawner.
  • Rewrited Proc to be independent and now it's booted directly from CFW as sysmodule.
    • Thanks to this I could lower memory usage by 60 kB.
  • Added option to disable log writing (writing is enabled by default).
  • Added toolbox.json to bring correct support for sysmodules managers.
  • Because of ditching Spawner, KIP is not possible to use anymore. That's why we have now only one package using exefs.
  • saltysd_proc.elf from SaltySD folder is not used anymore, you can delete it.

0.2

  • Update solving compability issues with FW 10.0.0 for people using NSP.zip.
  • Issue is not existing for KIP, so you don't need to update anything if you are using it (appstore is using NSP.zip).
  • Delete folder 0100000000534C56 from contents/titles before updating.

0.1a 0.1.2a

  • Implement hack to resolve issues with cheats in Atmosphere.

0.1.1a

  • Now aborting bootstrapping if titleid is higher than 0x01FFFFFFFFFFE000.

0.1a

  • First Release.

Credits

Thanks to:

  • Cooler3D.

External links

Advertising: