# AuroraStrikers A **native PC recompilation** of *Super Mario Strikers* (Nintendo GameCube, 2005), built from a 100%-matching decompilation of the retail game. > [!IMPORTANT] > **This repository contains no game data and produces nothing playable on its own.** > There is no ROM, no disc image, no `.dol`, and no texture, model, audio or save file here - only > source code and build tooling. You must supply your own lawfully obtained copy of the game as a > disc image; the game's data is read from that image, on your machine, at run time. > Please do not redistribute what you build: the executable contains the game's code. ## What this is The decompilation this is built on reconstructs the game's original C++ - all 8,605 functions - so faithfully that it recompiles into a `main.dol` byte-identical to the retail disc. This project takes that same C++ and compiles it **for x86-64 instead of PowerPC**, producing a Windows executable that *is* the game rather than one that emulates it. - **Not an emulator.** No PowerPC is interpreted, translated or JIT-compiled. The game's own code runs as native x64 machine code. - **Not a source port to a new engine either.** It is the original game code, with small, commented `#ifdef TARGET_PC` patches wherever a 32-bit pointer, a GameCube structure offset or a big-endian field stopped being true on a 64-bit little-endian machine. - The GameCube's hardware and SDK are replaced by [**Aurora**](https://github.com/encounter/aurora) - GX rendered through WebGPU/Dawn on Direct3D 12, plus PAD, VI, OS, DVD (it reads your disc image directly) and CARD - and by a small shim layer under `pc/` for the pieces Aurora does not cover. Audio is the game's own **MusyX** runtime. - Because it runs natively, it can do things the console could not: arbitrary render resolutions and aspect ratios, output display selection, borderless fullscreen, and Dolphin-format custom texture packs that you supply yourself. Where the port deliberately behaves *better* than the original rather than faithfully, it says so and keeps the console's behaviour selectable. Everything else aims to be exactly what the hardware did. ## Status Work in progress, and honest about it. [`docs/port/MILESTONES.md`](docs/port/MILESTONES.md) defines what "done" has to mean for this project, and it is a higher bar than "it boots": every mode, every stadium, every captain and sidekick, a cup played to its end, the memory card, and a long unattended session - each exercised with evidence, none of them crashing. Read that rather than trusting a feature list in a README. What is known not to work, and what is deliberately different from the console, is recorded in the documents under [`docs/port/`](docs/port) alongside the reasoning and the measurements. If you hit a defect, please open an issue with your GPU, your display setup, the log from `logs\` and the exact steps. ## Building Windows x64, a Direct3D 12 GPU, the Visual Studio Build Tools with the C++ workload, CMake, Ninja, and your own disc image. From a fresh clone that is the whole thing: ```powershell git clone --recursive https://github.com/Saffsanity/AuroraStrikers.git cd AuroraStrikers .\build.ps1 -FetchLlvm .\build-pc\bin\AuroraStrikers.exe --disc "D:\games\Super Mario Strikers (USA).rvz" ``` The build needs **clang-cl**, which the Build Tools do not install; `-FetchLlvm` downloads the exact LLVM release this project is built with, checks its SHA-256, unpacks it under `%LOCALAPPDATA%` and carries on - no administrator rights, nothing installed system-wide, and only needed the first time. `winget install LLVM.LLVM` or Visual Studio's *C++ Clang tools for Windows* work just as well. [**BUILDING.md**](BUILDING.md) has "Quick start on a fresh Windows machine" with the winget commands for everything else. The same repository still builds the original GameCube target and checks it against the retail SHA-1 - that check is what keeps the port honest. `BUILDING.md` covers it; the disc image is extracted for it by `tools/pc/extract_disc.py`, never committed. ## The decompilation underneath This is a fork of [yannicksuter/smstrikers-decomp](https://github.com/yannicksuter/smstrikers-decomp), whose work made all of this possible. The matching build, `configure.py`, the symbol and split configuration under `config/`, and the documentation under `docs/` (other than `docs/port/`) are theirs. Decompilation questions, matching work and pull requests against the reconstruction itself belong upstream. The three retail releases the decompilation targets: | Version | Region and title | Release date | `main.dol` SHA-1 | | --- | --- | --- | --- | | `G4QP01` | Europe - *Mario Smash Football* | November 18, 2005 | `6dc83dc91d0a5887f0056623498d4cbcd88bc463` | | `G4QE01` | North America - *Super Mario Strikers* | December 5, 2005 | `376d699c99b6b0949abe1b4ceccefdef7828d2b5` | | `G4QJ01` | Japan - *Super Mario Strikers* | January 19, 2006 | `d116f02b778a4f69725fd1c00656012d16ebf94a` | The PC port currently targets `G4QE01` (USA). See [`docs/version_differences.md`](docs/version_differences.md) for what differs between releases. ## Contributing [`CONTRIBUTING.md`](CONTRIBUTING.md) covers both halves: the port (this repository) and the decompilation (upstream). ## Legal status and licensing This is an independently produced reconstruction and port. It is **not affiliated with, authorized by, sponsored by, or endorsed by Nintendo or Next Level Games**. *Nintendo*, *GameCube*, *Super Mario Strikers*, *Mario Smash Football* and related names, characters and marks belong to their respective owners, and are used here only to say which game this project is about. The repository does not use a single license, and deliberately does not claim one over everything: - **The port's own work** - `pc/`, `tools/pc/`, `docs/port/`, the PC build system, and the `#ifdef TARGET_PC` patches - is original material written for this project, and is offered under CC0 1.0 ([`LICENSE-CC0.txt`](LICENSE-CC0.txt)) to the extent its authors own it. See section 8 of [`LICENSE`](LICENSE), which names those files. - **The reconstructed game code** under `src/` and `include/` is a reconstruction of code originally authored by the game's developer. Its status is unsettled, and this project does not assert a license over it. See section 4 of [`LICENSE`](LICENSE). - **Third-party components** (Open Dynamics Engine, MusyX, the reconstructed SDK and runtime, and Aurora - carried under `extern/`, as a submodule or vendored in place) keep their own notices and licenses. See [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md). Note that MusyX and the reconstructed SDK are themselves decompilations: the license each carries is its project's license over its own work, and says nothing about the original. See section 4 of [`LICENSE`](LICENSE). [`LICENSE`](LICENSE) is the authoritative summary. It is a description of the repository, not legal advice, and it grants no rights in anyone else's material. ## Acknowledgements This port is almost entirely other people's work. None of the projects below is affiliated with this one or endorses it - they are listed because their code is in here, or because their tools and their writing are what made the rest possible. Licences and notices are in [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md); this section is thanks, not a legal statement. **The reconstruction** - [**smstrikers-decomp**](https://github.com/yannicksuter/smstrikers-decomp) - yannicksuter and its contributors, for the 100%-matching decompilation this port compiles. Everything here begins there. - [**openstrikers**](https://github.com/GoldenPalazzo/openstrikers) - GoldenPalazzo's Aurora-based Linux x86-64 port of the same decompilation. Its patches were read hunk by hunk while working through the 64-bit pointer and big-endian structure sites, and are reviewed in [`docs/port/`](docs/port). **The compatibility layer** - what stands in for the original console's hardware and SDK - [**Aurora**](https://github.com/encounter/aurora) - encounter's GX, PAD, VI, OS, DVD, CARD and MTX implementation, MIT-licensed, carried under `extern/aurora`. It is the single largest reason this project is a few thousand lines of shims rather than a rewrite. Aurora brings with it: - [Dawn](https://dawn.googlesource.com/dawn/) (Google) - the WebGPU implementation GX renders through, on Direct3D 12 here. - [SDL3](https://github.com/libsdl-org/SDL) - window, keyboard and gamepads. - [nod](https://github.com/encounter/nod) - reads your disc image directly, in its own format. - [Dear ImGui](https://github.com/ocornut/imgui) and [FreeType](https://freetype.org/) - the debug overlays and their text. - [fmt](https://github.com/fmtlib/fmt), [Abseil](https://github.com/abseil/abseil-cpp), [xxHash](https://github.com/Cyan4973/xxHash), [libpng](https://github.com/pnggroup/libpng), [zlib-ng](https://github.com/zlib-ng/zlib-ng), [Zstandard](https://github.com/facebook/zstd), [SQLite](https://www.sqlite.org/) and [Tracy](https://github.com/wolfpld/tracy) - formatting, containers, hashing, the texture-pack PNG decoder, the pipeline cache and its compression, and the optional frame profiler. - **kabufuda** (AxioDL) - Aurora describes its CARD implementation as based on it. (Its repository appears to be gone; the attribution is Aurora's own, and the code is covered by Aurora's licence.) **The original runtime** - [**dolsdk2001**](https://github.com/doldecomp/dolsdk2001) - the doldecomp project's decompilation of the 2001 console SDK. Neither build here compiles it; it is the reference the shims under `pc/` have to behave like, and it answered a great many "what did the real function actually do?" questions. - [**MusyX**](https://github.com/AxioDL/musyx) - AxioDL's decompilation of the audio runtime the game itself ships, carried under `extern/musyx` and built for x64 here. - [**Open Dynamics Engine**](https://www.ode.org/) - the physics library the game was built with. **The decompilation toolchain** - [decomp-toolkit](https://github.com/encounter/decomp-toolkit) - splits and relinks the retail executable for the matching build, and extracts your own disc image for it. - [objdiff](https://github.com/encounter/objdiff) - the object diffing that matching work is checked against. - [dtk-template](https://github.com/encounter/dtk-template), [sjiswrap](https://github.com/encounter/sjiswrap), [gc-wii-binutils](https://github.com/encounter/gc-wii-binutils) and [wibo](https://github.com/decompals/wibo) - the scaffolding that makes a 1990s toolchain run on a modern machine. **Format compatibility, with thanks** - [**Dolphin**](https://github.com/dolphin-emu/dolphin) - this port loads Dolphin-format custom texture packs and Dolphin-format memory-card saves, implemented from Dolphin's documentation and source. **No Dolphin code is used or contained here**, and this project is not an emulator. **Built with** [LLVM/clang-cl](https://llvm.org/), [CMake](https://cmake.org/), [Ninja](https://ninja-build.org/) and [sccache](https://github.com/mozilla/sccache). And the wider GameCube decompilation community, [decomp.dev](https://decomp.dev/) and [decomp.me](https://decomp.me/), whose accumulated knowledge is why a project like this is possible at all.