Working With ExLaunch
Repository
To make working with exlaunch easier, I have created a template geared specifically for Breath of the Wild.
This repository is very much a work in progress, so the documentation may lag a bit behind it’s functionality.
Click to view the repository on GitHub.What is Exlaunch?
Exlaunch is a framework for injecting C and C++ code into Nintendo Switch games and applications. For our usecase, we can use Exlaunch to hook our own code into the Breath of the Wild exefs (executable).
The original repository for Exlaunch can be found here. However we will be using a fork I created based off of this version.
Requirements
You will want to begin by installing the necessary requirements to build Exlaunch. I personally work from Windows 11 with the Winch WSL so the information following will be based off of this.
WSL (Windows Subsystem for Linux)
As previously stated I use Winch. While I would recommend using an Arch Linux based distribution, you can use debian or OSX.
devkitPro
devkitPro is a toolchain to help us target various Nintendo consoles, for this usecase you will only need the Nintendo Switch specific tools.
Windows & OSX Systems
devkitPro installation instructions for Windows & OSX
Arch WSL or Arch Linux
-
Install devkitPro pacman
-
Install Nintendo Switch tools by running:
sudo (dkp-)pacman -Sy
sudo (dkp-)pacman -S switch-dev
sudo (dkp-)pacman -S switch-portlibs
CMake
CMake is how we will build the Exlaunch project.
Non-Arch
If you are not using Arch, you can find the instructions to install CMake here.
Arch Linux
To install on Arch, run:
pacman -Syu cmake
Exlaunch Base
Now that you have installed all of the dependencies. You can clone my Breath of the Wild template for Exlaunch.
git clone https://github.com/JakeButf/botw-exlaunch-base
cd botw-exlaunch-base
git submodule init
git submodule update
To make sure everything is working, you can build the project by running:
make clean-build
This will create a new file called build in the root directory that will contain our built files: main.npdm and subsdk9.