1. IntroductionThis tutorial will be guiding you through from scratch on how to begin modding Super Smash Bros. Ultimate. Take note that as of now, the only public method of loading mods for this game is by injecting into its data.arc file. In the near future, it will be a simple drag and drop system.
1.1. A Note Before StartingThis guide will always contain the most up-to-date information on preparing to mod Ultimate. We are in the very early stages of tools, so our methods may seem tedious. Soon on we will have better, more simplified methods and tools. So be patient on that :)
A Note Before Making Mods
1.2. DISCLAIMERI take no responsibility of any damage to your Switch or the sudden occurrence of getting banned. You take the risk by running the unsigned software.
- An exploitable Switch with a method of entering RCM
- A 32 GB or greater micro SD card, formatted to exFAT
- A physical or digital copy of Super Smash Bros. Ultimate
- gcdumptool (Physical Copy of Game)
- Digital Game Dumping Guide (Digital Copy of Game)
- xdelta3 + xdelta Patches
- Python 2.7 or greater + Mod Injector Script
3. Preparing Your Micro SD CardFirst, please follow the tutorial created by members of Nintendo Homebrew that will guide you from stock to Atmosphère: https://nh-server.github.io/switch-guide/
After you have successfully followed that, download and extract gcdumptool and Lockpick, or just Lockpick if you have a digital copy and place the .nro files in your switch folder that should be located on the root of your micro SD card.
4. Dumping Your KeysWARNING: DO NOT share any of the console keys you have dumped with others!
Boot into Hekate and use the volume up and down buttons to navigate to "Console info..." Select it with the power button. Then, select "Print fuse info" and press the power button to dump it. Do the same with "Print TSEC keys."
After that's finished, launch into Atmosphère. From there, head to the Album to load the Homebrew Menu and launch Lockpick. It should instantly and automatically dump your keys with this screen as a result:
This dumps our prod.keys file. You'll need it later on. No need to dump any title keys for now, so go ahead and hit + to exit.
5. Dumping The Game
5.1. PhysicalAfter Lockpick, move over to gcdumptool and launch it. You should be greeted with this screen:
Press A while over "Full XCI Dump" and press A again to start the dump. Leave the default settings as is. This will take around an hour, so do something else in the meantime.
Once completed, you may exit the application and power off your Switch.
5.2. DigitalDumping a digital game will take up more room in this tutorial than necessary. So download the tutorial written by ih8ih8sn0w for dumping digital games in the requirements section.
6. Decrypting The GameMove your XCI/NSP dump to be with hactool.exe. Do the same with our prod.keys file we dumped on our micro SD card. You'll need at least 32 GB of free space on whatever drive you put it on. For simplicity's sake, rename the XCI/NSP to be named cross2.xci/cross2.nsp. Then, you're going to want to open Command Prompt by typing in cmd in the path bar of the window:
You're then going to run the following commands for your game type.
hactool --intype=xci -x "cross2.xci" --outdir="output_folder"
hactool -k "prod.keys" --intype=nca -x "output_folder/secure/33772dd69ad331de693d936465e2dfce.nca" --exefsdir="exefs" --romfsdir="romfs"
hactool --intype=pfs0 -x "cross2.nsp" --outdir="output_folder"For you digital users, if you didn't see, REPLACE_WITH_TITLEKEY is telling you to replace it with the title key you hopefully copied because the dumping guide told you to.
hactool -k "prod.keys" --intype=nca -x "output_folder/2a5fbb4f72e8e5f1b74a1fd29cdd8882.nca" --titlekey=REPLACE_WITH_TITLEKEY --exefsdir="exefs" --romfsdir="romfs"
If for some reason you see key errors, ignore them. If you encounter errors that affect the extracting process, please let me know!
Once both commands have finished, go into your romfs folder. If you see a large data.arc file, you have done everything right! You may want to delete output_folder to save space as you won't need it.
7. Updating The GameThis part is crucial if you want to use the mods on the latest game version. If you haven't already, download xdelta3 and the patch that matches your game version, hopefully the latest. Put the executable and the patch with the data.arc file. Rename the data.arc to "data_old.arc", the executable to "xdelta3.exe", and the patch to "data_new.xdelta3" all for ease. You're then going to run the following command in Command Prompt:
xdelta3.exe -d -s data_old.arc data_new.xdelta3 data.arcWhat we are doing here is manually patching our old data.arc with the xdelta file that calculates the difference and creates the new file. This same concept is used for ROM patching but with .ips files. This will take a while, so be patient. Once completed, you can delete anything relating to xdelta and the old data.arc. If you noticed, the file is slightly smaller, which is normal.
Put this new data.arc on your micro SD card under "atmosphere\titles\01006A800016E000\romfs" for LayeredFS to read and load. Make a backup of your data.arc in case installing mods goes really wrong.
8. Installing Mods
8.1. Finding The Correct OffsetsIn the near future, this step will not be required.
Between updates, file offsets may get moved around a bit, so you will need to relocate the offset in CrossArc. Put the contents of CrossArc's files with the data.arc and double-click on the executable to launch the program. At first glance, it's an extremely bare bones tool, but it's main purpose is to extract files and give information on offsets and (de)compressed file sizes. Any files or folders that have a name of, for example, 0x46FC767B mean they're hashed or unlabeled as Ultimate's file archive doesn't contain any filenames or extensions. Slowly we're working to figure out the entirety of them. This does not equal the file's offset.
If you downloaded someone's mod, you need to know what file it overwrites and where it belongs to get the new offset. Unfortunately I won't list where they belong so nag the mod makers about it. I'll use these two old file offsets as examples:
Extra Stages = 0x103291758.prc
Playable Giga Bowser = 0x10323AEC8.prc
Since the "Extra Stages" mod replaces ui/param/database/ui_stage_db.prc, I'll click on it and look to the right of CrossArc. There will be my new offset (0x10349CA28), so I'll rename the modded file to that when I'm ready to inject it.
How I knew that was because I knew where parameter databases were stored. I opened the modded file in a hex editor and took a look at the total length. Then I went through each parameter file in CrossMod until the compressed size matched the file length.
The same method would apply to the "Playable Giga Bowser" mod (replaces ui_chara_db.prc). Different offset and size, of course.
Mod makers, please update your mods or include the original filename and its directory, thank you :)
8.2. Injecting ModsPut modinstall.py with the data.arc that's on your micro SD card as well as the mod of choice you want to inject. Unfortunately if your mod consists of multiple files, you must inject them all separately. To inject them, open Command Prompt and run the following command:
python modinstall.py 0xOFFSET.filetype"OFFSET" is the offset where it's located in data.arc (mods come with this, so replace it with that name) and "filetype" would be replaced with .nutexb, .bntx, .prc, etc.
Under normal circumstances, you will get a confirmation letting you know it injected successfully. The script will automatically create a backup of the vanilla hashed file you injected into in case something went wrong. If it is an irreparable error, please restore the backup of your data.arc.