Savage Wind Recomp
[!IMPORTANT]
This project is made almost entirely with AI. Nearly all of the code, tooling, reverse engineering and
documentation here is written by an AI (Anthropic's Claude, through Claude Code), directed, tested and reviewed by
a human. It builds on LAS Recomp, which was made the same way. If you don't
trust code written by AI, you can simply ignore this project. As with anything on the internet, you run the code at
your own discretion.
Savage Wind Recomp is a work-in-progress static recompilation of The Legend of Zelda: Breath of the Wild
(Nintendo Switch, version 1.9.0) into a native application for Windows and Linux. The goal is a full PC
version of your own copy of the game: a launcher, PC-style graphics options, mods, any controller, keyboard and
mouse, and its text and voices in any of its languages.
[!WARNING]
Playable, but how far is unknown. Savage Wind plays the opening in the Shrine of Resurrection and the Great
Plateau around it at 60 fps, with sound, voices, the HUD, saving and loading. Nobody has played past the Great
Plateau on Savage Wind yet, so expect bugs or crashes further on. This is an alpha, a preview for testers. If you
find a bug, please report it on GitHub: every
report shows how far the game really works.
[!TIP]
Want to contribute? Look at the test branch first.
It has every change that is implemented and being tested, ahead of the latest release, so you don't start on
something that's already done or in progress. Base your work on test and open pull requests against it: main
only moves for a release. See CONTRIBUTING.md.
[!NOTE]
No game files are included. Savage Wind Recomp needs your own legally obtained copy of the game, updated to
version 1.9.0, dumped from your own Nintendo Switch. This project does not include, and will not
provide, game files, keys, firmware, dumping or decryption tools, or instructions on how to obtain any of them.
Savage Wind never decrypts anything: it only reads files you have already extracted yourself. The recompilation of
the game code happens locally, on your machine, from your files.
Before you report a bug
- Use the latest release and game version
1.9.0: 1.8.2 isn't supported, and many bugs of older releases are already fixed.
- Search the existing issues first.
- Attach
savagewind.log. On Windows it's next to savagewind.exe, in the Savage Wind folder; on Linux, in
~/.local/share/savagewind/. The game writes a new one each time it starts, so take it right after the bug.
- Reports missing any of these get a
needs-info label and are closed after 7 days without it.
Getting started (Alpha 3)
- Download from Releases:
- Windows:
SavageWind-0.3.1-alpha.3-windows.zip. Extract it to a folder you can write to (not Program
Files): your game files, saves and settings are kept in that folder. 0.3.1 is a hotfix for AMD and Intel
graphics on Windows (a black window in 0.3.0, #85); on
NVIDIA it runs exactly as 0.3.0.
- Linux (x86-64, Steam Deck too):
Savage_Wind-0.3.0-alpha.3-x86_64.AppImage. Make it executable
(chmod +x) and run it; your game files, saves and settings go to ~/.local/share/savagewind. See
docs/linux.md.
- Linux on ARM (aarch64):
Savage_Wind-0.3.0-alpha.3-aarch64.AppImage is highly experimental: it has
never run on real ARM hardware. Reports from real hardware are welcome (docs/linux.md,
"Testing on ARM").
- Run
savagewind.exe (or the AppImage). The first time it asks for your game files: pick the folder with your own
extracted game (exefs/ and romfs/, version 1.9.0, see below) and choose Set up game files. It checks the
version, copies the files, builds the data image and recompiles the game code on your machine - once (about 6
minutes for the game code with a 12-thread CPU, plus the copy and the optional shader precompilation). Your own
files aren't changed. When it's done the game starts.
- From then on Savage Wind goes straight into the game. The settings, including the text and voice languages,
are in the game's Options (pause menu > System > Options, or Options on the title screen).
- Savage Wind Configuration (
Savage Wind Configuration.exe on Windows, the AppImage's Savage Wind
Configuration desktop action or --config on Linux) opens the configuration screen: Play, Settings, your game
files (set them up again, rebuild the game code, delete them) and Quit. In game, Quit to Start Screen also comes
back to it.
Coming from Alpha 2: extract Alpha 3 to a new folder and set the game files up again with your 1.9.0 files (the game
code has to be built again); copy your save folder over to keep your progress. What's new is in
CHANGELOG.md.
The setup and configuration screens show Savage Wind's own art. To see a picture of your own there instead, put it
next to savagewind.exe (on Linux, in the data folder) as splash.jpg or splash.png; it's only read from your folder and never part of
Savage Wind.
Needs Windows 10 or later, a CPU with SSE4.2 (2008 or newer), a GPU with Vulkan 1.3 and about 35 GB of free disk
space. AVX2 isn't required: on a CPU without AVX2 / FMA the setup builds the game code in a compatible mode, which runs
slower.
What you need
- Your own Breath of the Wild (cartridge or digital) and its 1.9.0 update, the latest, extracted from your own
console:
- the ExeFS of that version (
main, main.npdm, rtld, sdk, subsdk0)
- the RomFS with that update applied (base game and update merged)
- DLC: not supported yet (planned, see the roadmap); the title screen's Downloadable Content entry is hidden until then.
- Windows 10 or later or Linux, on x86-64 (a CPU with SSE4.2; without AVX2 / FMA the game code runs in a slower
compatible mode), and a GPU with Vulkan 1.3.
The files go in extracted/ next to the program (git ignores this folder):
extracted/
exefs/ main, main.npdm, rtld, sdk, subsdk0
romfs/ the complete RomFS (base game + the 1.9.0 update merged)
The main module's build id tells the exact version; python tools/sw_probe.py (it reads extracted/exefs)
prints it and what the recompiler will find there.
Status
Estimates of where each part stands. "Tested in game" is how much of the game has been played through on Savage Wind so far.
| Part | Progress | What it means |
|---|
| ✅ | Recompiler | | The whole game (main, sdk and multimedia modules) recompiles to native code |
| ✅ | Game files setup | | Version check, copy, data image and code build, all from your own files |
| ✅ | Text and voice languages | | Any of the game's 15 text languages (16 with 1.9.0's Thai) with any of its 8 voice languages |
| ✅ | Voices in another language: crash fix | | Fixed (#2): the game now sets aside enough memory for voice banks bigger than its own, so any voice language works with any text language |
| ✅ | Menus in 12 languages | | Savage Wind's own screens follow the text language |
| ✅ | Sound and voices | | Mixed by the game SDK's own audio renderer, with room reverb |
| ✅ | Keyboard and mouse | | Every key and mouse button remappable, mouse camera |
| ✅ | Settings in the game's Options | | Video, audio, controls and language pages drawn by the game itself |
| ✅ | Direct start + Configuration | | savagewind.exe goes straight into the game; Savage Wind Configuration has the rest |
| ✅ | Window sizes and fullscreen | | The sizes your display can show; windowed, borderless or exclusive |
| ✅ | Ultrawide | | Video > Fill wide screens (on by default): a window or screen wider than 16:9 (21:9, 32:9) shows more of the world to the sides instead of bars. The HUD stays 16:9 in the middle; the pause menu, the map and the start screen are shown 16:9. Narrower shapes (16:10, 4:3) keep the 16:9 picture with bars |
| ✅ | Internal resolution and FSR 1 | | Native resolution up to 4K, or AMD FSR 1 quality modes |
|
✅ done · 🔧 in progress · 🗺️ roadmap
Controls
Any controller SDL knows works, by button position; one with a gyroscope (DualSense, DualShock 4, Switch controllers,
Steam Deck) also aims and tilts by motion. Keyboard and mouse defaults:
| Action | Key | Action | Key |
|---|
| Move | W A S D | Camera | Mouse (or I J K L) |
| Walk (hold) | C | Crouch | Left Ctrl |
| Jump (X) | Space | Sprint / back (B) | Left Shift |
| Interact / confirm (A) | E | Attack (Y) | Left click |
| Shield / lock on (ZL) | Right click | Bow (ZR) | F |
| Rune (L) | Q | Throw (R) | R |
| Look (right stick press) | Middle click | D-pad | Arrow keys |
| Inventory (Plus) | Tab | Map (Minus) | M |
| Tilt the controller (hold, motion puzzles) | T + mouse | | |
Every key and mouse button can be remapped in the game's Options (the Keyboard pages), next to the mouse sensitivity
and Y inversion, motion sensitivity and inversion and the tilt key (Controls). The game's button prompts show the
keys you bound, or your controller's own buttons (Controls > Button icons: Automatic follows the device you use).
Esc frees the cursor, a click in the window takes it back. F10 cycles the performance
overlay (off, FPS, full).
Building from source
Windows
More detail in docs/BUILD-windows.md.
- One-time setup, in PowerShell from the repository root:
powershell -ExecutionPolicy Bypass -File tools\setup_windows.ps1.
It installs MSYS2 (UCRT64: clang, make, SDL3, FFmpeg, Vulkan, shaderc) and Python for the tools, and switches
the clone to LF line endings.
- From an MSYS2 UCRT64 shell (or Git Bash with
export PATH="/c/msys64/ucrt64/bin:/c/msys64/usr/bin:$PATH"):
make -j builds the app, build/savagewind.exe.
- Put your files in
extracted/ (above), then make gen (recompiles the game code into generated/, about a
minute) and make -j again (builds it into build/swgame.dll; the first build takes 15-20 minutes).
build/savagewind.exe extracted --build-romfs packs your RomFS into the image the runtime reads
(extracted/romfs.bin, about 15 GB).
- Run:
build/savagewind.exe extracted --play, from a shell with C:\msys64\ucrt64\bin on PATH.
Linux
See docs/linux.md: the same steps with the distribution's clang, SDL 3, FFmpeg, shaderc and Vulkan
Memory Allocator (build/savagewind, build/swgame.so).
Developer notes (in Spanish) - what was changed from LAS Recomp, how the boot got this far, and the debugging
switches - are in docs/SAVAGE-WIND.md.
Respect copyright
- The Legend of Zelda: Breath of the Wild is © Nintendo. This is a fan project. It is not affiliated with,
endorsed by or sponsored by Nintendo. Nintendo Switch and The Legend of Zelda are trademarks of Nintendo.
- This repository contains no game files, no game code (also not the C code the recompiler generates from it), no
assets, no fonts, no keys - and release builds won't either.
- The game code you generate and the build made from it contain Nintendo's code. They are for your own use only:
don't share them, upload them or ship them.
- Issues, pull requests or discussions that contain game files, keys, generated code or links to pirated copies
will be removed. Piracy is not supported in any way.
- Follow the copyright laws of your country. Dumping a game you own for personal use is legal in some countries and
not in others; that is your responsibility.
Credits
- LAS Recomp by peiikai - the recompiler, the runtime and most of what
this project is built on (MIT).
- Ryujinx (MIT) - its shader decoder was the reference for instruction field
layouts.
- envytools - NVIDIA GPU documentation used for the shader translator.
- The Switch homebrew community's documentation (Switchbrew).
- Ghidra and the
Switch Loader - used for reverse engineering (not bundled).
- Libraries: SDL 3 (zlib), FFmpeg (LGPL),
Dear ImGui (MIT),
Vulkan Memory Allocator (MIT),
SMAA (MIT), AMD FidelityFX Super Resolution 1
(MIT), AMD FidelityFX CAS (MIT),
Fira Sans (SIL OFL 1.1), Noto Sans Thai
(SIL OFL 1.1), stb_image / stb_image_write
(public domain / MIT), shaderc
(Apache 2.0), (MIT), (BSD),
(GPL 2.0), (BSD).
License
Savage Wind Recomp's own code is open source under the MIT License, as is LAS Recomp's, on which it
builds. Third-party components in third_party/ keep their own licenses. The license covers this project's code
only: it grants nothing for Nintendo's game, which you must supply yourself.
The Windows release zip also bundles, unchanged unless noted, under their own licenses:
- FFmpeg 9.0.2 (libavcodec, libavformat, libavutil, libswscale), LGPL 2.1 or later: built from the official
source as LGPL only, without GPL or nonfree parts, by
tools/build_deps_windows.sh. They are separate DLLs: you can replace them with your
own build of the same version.
- From MSYS2 (UCRT64, sources there): SDL 3.4.18 (zlib), shaderc 2026.4 (Apache 2.0),
libiconv 1.19 (LGPL 2.1 or later), the GCC 16.2 runtime (libgcc, libstdc++: GPL 3 with the GCC Runtime Library
Exception) and winpthreads (MIT and BSD).
- Zig 0.17.0 (MIT; its bundled LLVM, Clang and LLD: Apache 2.0 with LLVM Exceptions; the MinGW-w64 headers and
runtime: their own permissive licenses), trimmed to what the game code build uses.
swgen/, this project's generator frozen with PyInstaller 6.22 (GPL 2.0 with the bootloader exception): Python
3.14 (PSF License), Capstone 5.0.9 (BSD), Unicorn 2.1.4
(GPL 2.0, source at that link) and python-lz4 4.4.5 (BSD).
- The Fira Sans font, Medium and SemiBold (SIL OFL 1.1,
FiraSans-OFL.txt), and the Noto Sans Thai font, Medium,
for the menus in Thai (SIL OFL 1.1, NotoSansThai-OFL.txt).