Repository navigation
Adds two games: The Legend of Zelda: Tears of the Kingdom (work in progress) and Pokémon Legends: Z-A. Custom Vulkan drivers (such as Mesa's Turnip) can go into the APK, a multithreaded replay option takes work off the game's render thread, and game data pushes to the device in tar archives, much faster for games with many small files. Many rendering fixes, most of them from contributors (thank you!).
Get started
- Download the zip for your computer below:
nx2android-v0.3.0-windows-x64.zip(Windows) ornx2android-v0.3.0-macos-arm64.zip(Mac with Apple silicon, M1 or later). Unzip it (a short path such asC:\nx2androidis best on Windows) and start nx2android. Windows may warn about an unknown app: More info → Run anyway. On a Mac, INSTALL.md says how to open an app that Apple has not signed. - Setup tab: click Download missing tools. It fetches the Android NDK, the .NET SDK and platform-tools (about 1 GB) from Google and Microsoft. Then set your prod.keys.
- Port tab: choose the folder with the game's NSP, XCI, NSZ or XCZ files (base game, update, DLC) and click Port.
The full guide is INSTALL.md, which is also in the zip. Already on v0.2.0? Unzip this one in its place; your settings, keys and tools stay. Port your games again to get this release's fixes.
Games
| Game | Version | Plays on the Lenovo Legion Y700 | Tested on |
|---|---|---|---|
| 13 Sentinels: Aegis Rim | 1.10 | playable, 60 fps | v0.1.3 |
| Advance Wars 1+2: Re-Boot Camp | 1.0.0 | playable, 60 fps (30 in battle on Switch) | v0.1.3 |
| Blasphemous 2 | 1.0.8 | playable, 60 fps | v0.1.3 |
| Captain Toad: Treasure Tracker | 1.4.2 | playable, 60 fps | v0.1.3 |
| Castlevania: Belmont's Curse | 1.1.0 | playable, 60 fps | v0.2.0 |
| Celeste | 1.4.1.1 | playable, 60 fps | v0.1.3 |
| Donkey Kong Country Returns HD | 1.1.0 | playable, 60 fps | v0.1.3 |
| Graveyard Keeper 2 | 1.0.4 + DLC | playable, 60 fps (30 on Switch) | v0.1.2 |
| Hades II | 1.0 | playable, 60 fps | v0.1.2 |
| Hollow Knight: Silksong | 1.0.30000 | playable, 60 fps | v0.1.3 |
| Mario vs. Donkey Kong | 1.0.1 | playable, 60 fps | v0.1.3 |
| Metroid Dread | 2.1.0 | playable, 60 fps; dark rooms and Samus lit again (#80) | v0.3.0 |
| NEO: The World Ends with You | 1.03 + 2 DLC | playable | v0.1.2 |
| Paper Mario: The Origami King | 1.0.1 | playable, 60 fps (30 on Switch) | v0.2.0 |
| Paper Mario: The Thousand-Year Door | 1.0.1 | work in progress: playable at 60 fps (30 on Switch), but the lighting flickers (walls go black for single frames after a fall) | v0.2.0 |
| Pokémon Legends: Arceus | 1.1.1 | playable, 60 fps (30 on Switch) | v0.2.0 |
| Pokémon Legends: Z-A (new) | 2.0.2 | 30 fps (as on Switch); tested to Lumiose station, the city and battles not checked yet | v0.3.0 |
| Super Mario Bros. Wonder | 1.2.1 | playable, 60 fps with dips to 40 | v0.1.3 |
| Super Mario Odyssey | 1.4.1 | playable, 60 fps; shake the device to throw Cappy | v0.2.0 |
| Tales of Eternia Remastered | 2.0.0 | playable, 60 fps | v0.1.2 |
| The Legend of Zelda: Tears of the Kingdom (new) | 1.4.3 | work in progress: 30 fps, 60 in caves and shrines; smoothest with a Turnip Vulkan driver | v0.3.0 |
| UNDER NIGHT IN-BIRTH Exe:Late[cl-r] | 1.0.3 | playable, 60 fps | v0.2.0 |
| UNDER NIGHT IN-BIRTH II Sys:Celes | 1.42 | playable, 60 fps | v0.2.0 |
| Unicorn Overlord | 1.05 | boots, 60 fps; saving and a full battle not tested yet | v0.1.3 |
| Unpacking | 2.01 | playable by touch, 60 fps | v0.1.2 |
| Viractal: Will You Trust Your Party? | 1.4.5 | playable | v0.1.0 |
| Xenoblade Chronicles 3 | 2.2.0 + 4 DLC | work in progress: some effects and models do not draw yet | v0.1.0 |
Tested on is the newest nx2android version each game was checked with. A release checks only the games it adds or fixes; a game that breaks in a newer version is fixed in a later patch release. Please open an issue if one does.
Before you start
- Your own files only. You need the game's files and
prod.keysdumped from your own Switch. The tool never ships or downloads either, and ported APKs must not be shared: they contain the game. - GPU: Adreno (Snapdragon) or Xclipse (Exynos 2200 and later). Mali and PowerVR cannot run these games.
- A few antivirus engines may flag
nx2android.exe. It is a false positive from the PyInstaller launcher; the release's launcher is compiled from source to avoid it (INSTALL.md explains).
New in this release
- Two new games (table above). Pokémon Legends: Z-A's shaders, packed with Oodle, are decoded by the game's own decoder on the device, as Arceus's files are.
- Custom Vulkan drivers: the Port tab's Vulkan driver field (
porter port --vulkan-driver) puts a driver such as Mesa's Turnip into the APK (loaded with libadrenotools). A driver that does not load leaves the system's. Tears of the Kingdom runs best with Turnip. - Multithreaded replay: the Port tab's box (
porter port --mt-replay) records Vulkan commands on a thread of their own. - Faster installs: small files go to the device in tar archives (Tears of the Kingdom's 17 GB in 23 minutes over Wi-Fi).
- Fewer stalls: pipelines a game uses for the first time are built in the background.
- On-screen gamepad editor: snap controls to an optional grid (thanks @KnlnKS, #51).
- Metroid Dread: dark rooms and Samus are lit again; textures that a game fills before their pool is made are now uploaded (#80).
- Super Mario Odyssey: the moon glow flash, fog and first-use stalls are fixed (#42).
- Rendering fixes from contributors: compute dispatches get their own group counts (thanks @GabZoFar, #31); compute pipelines are made ahead only for games with few compute shaders, a GPU-written packaged texture is kept, and
layout(early_fragment_tests)is honoured (thanks @kieusonlam, #53, #55, #54); NVN RGB565 channel order and texture view swizzles (thanks @kianborg, #87, #89); every attachment layer renders (thanks @n2ray, #77); BC textures are drawn through uncompressed views, which fixes a Mario Kart 8 Deluxe device lost (thanks @mleo2003, #68); a pool lends the length the game asks for (thanks @sid350, #60); the rewriter copies more CAS windows (thanks @C1oudust, #69). - The app no longer ends the game when dark mode or another setting changes during play (thanks @GabZoFar, #32).
- Shader fixes: atomics, exact depth writes and Adreno gather bias are kept, and an atomic with one use runs once.
- Crash dumps name the crashing thread and the pipeline under build, read the stack safely, and log when another library replaces the signal handlers (#48, #64).
- The window frame rate goes lower only after the lower rate holds.
- A port that needs the device says so when adb is missing (#109).