Skip to content

nx2android v0.3.0

Latest

Choose a tag to compare

@shirai91 shirai91 released this 05 Nov 07:17
· 113 commits to main since this release

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

  1. Download the zip for your computer below: nx2android-v0.3.0-windows-x64.zip (Windows) or nx2android-v0.3.0-macos-arm64.zip (Mac with Apple silicon, M1 or later). Unzip it (a short path such as C:\nx2android is 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.
  2. 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.
  3. 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.keys dumped 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).