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.
- Download from Releases:
- Windows:
SavageWind-0.3.0-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. - 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.AppImageis highly experimental: it has never run on real ARM hardware. Reports from real hardware are welcome (docs/linux.md, "Testing on ARM").
- Windows:
- Run
savagewind.exe(or the AppImage). The first time it asks for your game files: pick the folder with your own extracted game (exefs/andromfs/, 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.exeon Windows, the AppImage's Savage Wind Configuration desktop action or--configon 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.
- 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)
- the ExeFS of that version (
- 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.
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 | |
| ✅ | Anisotropic filtering and sharpening | Ground and paths sharp at a distance (2x to 16x); AMD CAS sharpening of the 3D image, useful with FSR 1 | |
| ✅ | Higher-resolution shadows | Sun shadows at the console's 896x896, or sharper at 2048, 4096 or 8192 (Video > Shadow resolution) | |
| ✅ | Shader and pipeline cache | Places you've already seen don't stutter again | |
| ✅ | Full shader precompilation | Optional and on by default, at setup or later in Savage Wind Configuration: all of the game's ~14,000 shaders are translated and compiled ahead of time, so new places and effects don't stutter the first time | |
| ✅ | Faster game code build | The one-time setup takes about 15 minutes instead of about 40 (12 threads) from the next release: the game code builds in about 6 minutes instead of 30 (#43, by @adriadam10) | |
| ✅ | Frame rate | 60 fps by default, or 30, 90, 120 or no limit, with the game at the same speed; menus, cutscenes and conversations too, and videos at their own speed | |
| ✅ | Field of view | Video > Field of view: 70% to 150% of the game's own in play; cutscenes and conversations keep theirs | |
| ✅ | Steady 60 fps in the open world | Holds 60 fps in real play on the Great Plateau (RTX 3060, Ryzen 5 5600X); steady 120 fps (8 ms frames) is the next goal | |
| ✅ | Game version 1.9.0 | The latest version and the supported one (its Thai text isn't offered yet). 1.8.2 still sets up and runs, but isn't supported: a bug is only fixed if it also happens on 1.9.0 | |
| 🔧 | Horizon OS services | Threads, files, controllers, applets and time: all the opening and the Great Plateau use | |
| 🔧 | Maxwell shader translator | Every shader seen so far translates to Vulkan | |
| 🔧 | Graphics (NVN on Vulkan) | Shrine and Great Plateau look right, shadows included; far parts of the map can still be missing (#20) | |
| 🔧 | Controllers | Any controller SDL knows, by button position; automatic recognition is next, then camera speed set apart for each axis | |
| 🔧 | Motion controls (gyro) | The controller's gyroscope and accelerometer (DualSense, DualShock 4, Switch controllers, Steam Deck) for motion aiming and the tilt shrines; without one, hold T and move the mouse to tilt. Sensitivity and inversion in Options > Controls. Not yet tried with a real controller or in a shrine | |
| 🔧 | Button icons for your device | The game's button prompts show your bound keys and mouse buttons, or Xbox / PlayStation / Nintendo buttons, switching with the device you use | |
| 🔧 | Variable refresh rate (VRR) | Video > VSync: On lets G-SYNC and FreeSync displays show every frame as soon as it's ready, a little under the refresh rate; Fast (the default), Adaptive and Off too. Still to be tried on a VRR display | |
| 🔧 | Tested in game | The Shrine of Resurrection, the Great Plateau, and a walk through every region on a 100% save file. The main quests and the Divine Beasts aren't tested yet, so expect bugs there: report what breaks | |
| 🔧 | Linux | Builds and runs on x86-64 (from LAS Recomp); a steady 144 fps on an RTX 3070 Ti with a Ryzen 5 7600X, and no Linux-only issues so far | |
| 🗺️ | AMD FSR 3 + frame generation | Planned: motion vectors from depth and the camera, FidelityFX SDK | |
| 🗺️ | NVIDIA DLSS (RTX) | Planned, after FSR 3; under NVIDIA's own SDK license | |
| 🗺️ | Colour grading and HDR | Planned: exposure, contrast and saturation settings, colour presets, fog and bloom on or off, and real HDR output on HDR displays | |
| 🗺️ | Draw distance and detail | Planned: trees, grass and objects drawn farther away on strong PCs, or nearer for more fps, and a fixed level of detail (the most detailed models at any distance) | |
| 🗺️ | Free camera and photo mode | Planned: a free camera with the HUD hidden and its own speed and sensitivity, for screenshots, and camera paths through keyframes for videos | |
| 🗺️ | Effects on or off | Planned: a Video page that turns each of the game's own effects on or off, where BOTW has them: ambient occlusion, volumetric fog, grass (3 layers), character light (normal and custom), tone mapper, fragment and main lighting, bloom (3 layers), lens flare, cel shading, fog effects, water, torch fire, the sword sheath, depth of field (also when aiming the bow), screen-space reflections, global illumination and far lights | |
| 🗺️ | Graphics extras | Later: ambient occlusion, volumetric fog and depth of field | |
| 🗺️ | Built-in benchmark | Planned: fixed camera routes that measure fps and frame times and save the results, to compare settings | |
| 🗺️ | GPU readings on AMD and Intel (Windows) | Planned: the performance overlay's GPU use and VRAM for any GPU on Windows (#58); today only NVIDIA, and AMD on Linux | |
| 🗺️ | Mods | Planned | |
| 🗺️ | Accessibility and assists | Planned: text size, colour-blind filters and toggles in place of held buttons; enemy and Link health, damage dealt and taken, weapon durability and stamina use on screen; optional assists: infinite stamina, health or weapon durability, arrows and rupees, no damage at all, no fall damage, health that refills over time, nearby enemies defeated at once, and multipliers for weapon durability, stamina use, damage dealt and taken, and walking, running, climbing, swimming and gliding speed | |
| 🗺️ | Teleport with bookmarks | Planned: save places and travel back to them | |
| 🗺️ | DLC | Later | |
| 🗺️ | amiibo rewards without figures | Planned |
✅ done · 🔧 in progress · 🗺️ roadmap
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).
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 -jbuilds the app,build/savagewind.exe.- Put your files in
extracted/(above), thenmake gen(recompiles the game code intogenerated/, about a minute) andmake -jagain (builds it intobuild/swgame.dll; the first build takes 15-20 minutes). build/savagewind.exe extracted --build-romfspacks your RomFS into the image the runtime reads (extracted/romfs.bin, about 15 GB).
- Run:
build/savagewind.exe extracted --play, from a shell withC:\msys64\ucrt64\binon PATH.
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.
- 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.
- 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), Zig (MIT), Capstone (BSD), Unicorn (GPL 2.0), python-lz4 (BSD).
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).