A reverse-engineered C reimplementation of The Legend of Zelda: A Link to the Past for SNES.
This is a ~70-80kLOC C reimplementation of the original SNES game, reverse-engineered with function and variable names from community disassembly efforts. The game is fully playable from start to finish.
Supported Platforms: Linux, macOS, Windows, Nintendo Switch, and Android
- Complete reimplementation - All game logic recreated in portable C
- Frame-perfect verification - Can run alongside original ROM for validation
- Enhanced features - Optional widescreen support, MSU audio, pixel shaders
- Cross-platform - Runs on desktop, mobile, and console platforms
- Snapshot system - Save/load/replay game state with input history
- Multiple renderers - SDL software, OpenGL/OpenGL ES, Vulkan support
- GTK3 launcher - Graphical settings editor (optional, desktop only)
Linux/macOS:
# Install dependencies
# Ubuntu/Debian: sudo apt install libsdl2-dev libopus-dev libyaml-dev cmake build-essential
# macOS: brew install sdl2 opus libyaml cmake
# Optional: Install GTK3 for graphical launcher
# Ubuntu/Debian: sudo apt install libgtk-3-dev
# macOS: brew install gtk+3
# Build
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . -j$(nproc)
Windows:
# Using vcpkg for dependencies:
vcpkg install sdl2:x64-windows opus:x64-windows libyaml:x64-windows
# Build with CMake
mkdir build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=C:/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build . --config Release
See detailed instructions: Installation Guide | Platform-Specific Guides
You need a US region ROM (SHA256: 66871d66be19ad2c34c927d6b14cd8eb6fc3181965b6e517cb361f7316009cfb):
# Extract and compile assets from ROM
./zelda3-restool --extract-from-rom /path/to/zelda3.sfc --compile
This creates zelda3_assets.dat containing all game resources.
./zelda3
Or on Windows: zelda3.exe
Optional: Use the graphical launcher to configure settings (if GTK3 is installed):
./zelda3-launcher
| Button | Default Key |
|---|---|
| D-Pad | Arrow Keys |
| A | X |
| B | Z |
| Start | Enter |
| Select | Right Shift |
Gamepad: Plug-and-play support with quick save (L2+R3) and quick load (L2+L3).
Customize controls in zelda3.ini after first run.
Useful shortcuts:
Alt+Enter- Toggle fullscreenF1-F10- Load snapshotShift+F1-F10- Save snapshotTab- Turbo mode
- Getting Started - First-time setup guide
- Installation - Detailed build instructions
- Usage Guide - Controls, features, and configuration
- Launcher Guide - GTK3 settings editor (optional)
- Architecture - Technical architecture overview
- Contributing - How to contribute
- Changelog - Recent updates
Optional enhancements not in the original game:
- Widescreen support (16:9, 16:10 aspect ratios)
- MSU audio (high-quality soundtrack tracks)
- Pixel shaders (custom visual effects)
- Higher quality world map
- Secondary item slot on button X
- L/R item switching
All features are disabled by default to preserve original behavior. Enable in zelda3.ini.
- Discord: https://discord.gg/AJJbJAzNNJ
- Report bugs: GitHub Issues
- Wiki: https://github.com/snesrev/zelda3/wiki
Contributions are welcome! See CONTRIBUTING.md for guidelines.
Quick links:
This project is licensed under the MIT License. See LICENSE.txt for details.
- Original game by Nintendo
- Base C reimplementation by snesrev/zelda3
- Community disassembly by spannerisms and contributors
- PPU/DSP implementation from LakeSnes
- Android port integration from Waterdish/zelda3-android
- Touchpad controls from Eden emulator project