More actions
SaltyNX | |
---|---|
General | |
Author | masagrator |
Type | Plugins |
Version | 0.7.1 |
License | Mixed |
Last Updated | 2023/11/12 |
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.
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 totitles
. - SX OS - Remember to rename
atmosphere
folder tosxos
. - Remember to restart Switch.
No technical support for:
- Atmosphere forks.
- SX OS.
- Kosmos.
- ReinX.
User guide
Patches pattern
- Filename is symbol of function with filetype
.asm64
. - Inside file write with hex editor instructions that you want to overwrite for this function.
- Put this file either to
SaltySD/patches
to make it work for every game, or toSaltySD/patches/*titleid*
to make it work for specific game.
For additional functions you need SaltyNX-Tool.
Plugin examples
Plugin source code examples:
- https://github.com/masagrator/NX-FPS/blob/master/source/main.cpp
- https://github.com/masagrator/ReverseNX-RT/blob/master/Plugin/source/main.cpp
- https://github.com/masagrator/UnityGraphics/tree/master/Plugin/source
List of titles not compatible with plugins/patches
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 |
Sherlock Holmes and The Hound of The Baskervilles | all | 32-bit game, not supported |
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. X
at the beginning of titleid means that this game will not load any patches and plugins.
32-bit games are ignored by default for patches and plugins.
Compatibility
Tests were done on FW 7.0.1-16.0.0 with Atmosphere up to 1.5.0.
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,
- 32 bit games are unsupported,
- Cheats using directly heap addresses may not work properly while using plugins,
Changelog
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.