Repository navigation
Building
-
Your own dump of Mario Strikers Charged (USA) (Rev 1),
R4QE01, as a disc image (ISO, RVZ, WBFS, WIA, CISO, GCZ, ...). An already-extracted folder works too. Only this version is supported; the build checksmain.dol's SHA-256 and rejects anything else. - A 64-bit Windows 10/11, Linux or macOS 14+ (Apple Silicon) machine with a GPU that supports Direct3D 12, Vulkan or Metal.
- About 10 GB of free disk space for the build.
- The .NET 8 SDK, CMake 3.25+, Ninja, and Clang. Per-platform setup is below.
Note
Nobody here will tell you where to get the game. Dumping your own disc is on you, and links to game files won't be provided or tolerated.
The runtime builds with LLVM-MinGW Clang, not MSVC.
-
Install the tools (from a terminal; or grab the installers from each project's site):
winget install Microsoft.DotNet.SDK.8 Kitware.CMake Ninja-build.Ninja Git.Git
-
Download the latest
llvm-mingw-<version>-ucrt-x86_64.zipfrom mstorsjo/llvm-mingw releases, extract it (for example toC:\llvm-mingw), and put itsbinfolder first on yourPATH, so thatclang --versionreports the targetx86_64-w64-windows-gnu.
sudo apt install git clang lld cmake ninja-build pkg-config dotnet-sdk-8.0 \
libasound2-dev libpulse-dev libpipewire-0.3-dev libx11-dev libxext-dev libxrandr-dev \
libxcursor-dev libxfixes-dev libxi-dev libxss-dev libxtst-dev libxkbcommon-dev libdrm-dev \
libgbm-dev libgl1-mesa-dev libegl1-mesa-dev libwayland-dev libdecor-0-dev libdbus-1-dev \
libudev-dev libusb-1.0-0-dev(dotnet-sdk-8.0 may need Microsoft's package feed
on older distributions. Other distributions need the equivalent packages.)
xcode-select --install
brew install cmake ninjaand the .NET 8 SDK installer (Arm64) from Microsoft.
Clone the repository and run the build script:
git clone https://github.com/BlackAndBlue95/Strikers-WiiCompiled.git
cd Strikers-WiiCompiled
./build.shOn Windows, double-click build.cmd in the repository folder (or run it from a terminal).
The script asks you to pick your disc image; that's the only input it needs. You can also pass
it directly: ./build.sh "/path/to/game.wbfs" or build.cmd "C:\path\to\game.wbfs". A folder
extracted with Dolphin works in place of an image.
The script:
- installs the game files into the app's data folder (see the table below), extracting a disc image with nodtool (downloaded once, pinned by version and checksum),
- checks and copies
sys/main.doltoAssets/main.dol, - builds the translator,
- statically translates the game code to C++ under
generated/, - compiles the runtime and translated code with CMake + Ninja + Clang into
build-windows/,build-linux/orbuild-macos/, - points the runtime's
Config.tomlat the installed game files.
Like a WiiCompiled install, you don't need the original disc image or folder afterwards: the game reads its files from the data folder. (Keep your dump backed up somewhere if you ever want to reinstall.)
The first build takes a while (translation is a few minutes, and compiling the translated code and fetching the graphics dependencies can take much longer on slower machines). Logs for every step are written to the build folder. Later runs are incremental.
Then run build-<platform>/Strikers-WiiCompiled (Strikers-WiiCompiled.exe on Windows). The game
files (Game/), config, saves and caches live in a MSCRecomp folder, separate from any Mario
Kart Wii WiiCompiled install:
| Platform | Location |
|---|---|
| Windows | %LOCALAPPDATA%\MSCRecomp |
| Linux |
$XDG_DATA_HOME/MSCRecomp (default ~/.local/share/MSCRecomp) |
| macOS | ~/Library/Application Support/MSCRecomp |
Important
The installed game files and everything the build produces (Assets/, generated/, build-*/)
contain or are derived from the game, and the build output is gitignored. Don't commit it, upload
it or share builds. Everyone builds from their own copy.
After changing only runtime code, ./build.sh --skip-translate (build.cmd -SkipTranslate) recompiles
without retranslating. Adding or removing a PPC_NATIVE_OVERRIDE or PPC_NATIVE_WRAP needs a full
run, because the translator scans runtime/src for them to decide which game functions to leave
untranslated, or to keep but route through a wrapper.