Legends: Z-A · experimental Android runtime
Getting started · Performance · Video settings · Known bugs · Build guide
A native ARM64 runtime for Android, with a Vulkan renderer and on-device shader translation. Built on MacNativeGames and adapted for the AYN Thor.
Important
The AYN Thor is the reference device. Performance figures, controls and compatibility observations describe this device. Other Android hardware is unverified. This is an experimental project with known bugs.
Note
Source only. No APKs, game files, keys, firmware, saves or game shader caches are distributed. Supply your own game input and build locally. This unofficial project is in no way affiliated with, endorsed by, or sponsored by Nintendo.
| Reference configuration | |
|---|---|
| Reference device | AYN Thor |
| SoC | Snapdragon 8 Gen 2 · ARM64 |
| GPU | Qualcomm Adreno 740 |
| Supported game input | Z-A 2.0.2 |
| Performance | 50–60 fps at 1080p |
| Graphics | Vulkan · Turnip 27 in local testing |
| Build host | macOS ARM64 |
| Project state | Experimental; animation, collision and missing-object issues remain |
The target is Android 10+ ARM64 with a compatible Vulkan GPU. The AYN Thor is the reference model, not a promise of equivalent results on other devices.
- Install the dependencies in the build guide.
- Supply your own base game, 2.0.2 update and keys to
tools/import_nsp.py, or prepare an existing verified dump withtools/prepare_za.py. - Build locally with
bash android/game_activity/build_apk.sh. - Supply your own shared system fonts and use
tools/install_za.pyto plan installation on your explicitly selected device; add--applyto install.
The build guide contains the full commands, firmware-font requirements and the private configuration for the reported 1080p / 60-FPS setup. No in-app game importer is supplied.
On AYN Thor, Z-A runs at 50–60 fps at 1080p (1920 × 1080) with Turnip 27.
| Item | Local observation |
|---|---|
| Reference hardware | AYN Thor · Snapdragon 8 Gen 2 · Adreno 740 |
| Driver | Turnip 27; no driver binary bundled |
| Resolution | 1080p (1920 × 1080) |
| Audio | Working |
| Shader translation | Native device-side translator; first-use translation may stall |
Performance varies by scene, driver and shader cache. First-use shader compilation can cause stutters.
Settings menu preview, rendered from the HTML settings interface. The values shown are examples.
Press L3 + R3 together on the AYN Thor to open the menu. Use the D-pad to choose a row and left/right to change it. Y applies; B goes back.
| Setting | What it changes | When it applies |
|---|---|---|
| Render resolution | Detail and GPU work for the game image | After restarting the game |
| Output resolution | Size of the final image sent to the screen | After restarting the game |
| Frame-rate limit | Target presentation cap; actual FPS remains scene-dependent | Immediately after applying |
| FPS counter | Shows or hides the on-screen counter | Immediately after applying |
See the video-settings guide for the distinction between rendering and output, controller controls and preview provenance.
| Area | Observed issue | Status |
|---|---|---|
| Player / character animation | Sliding feet, incorrect falling or lying poses, unnatural movement on stairs | Open |
| NPC placement | Characters may sit in mid-air where furniture is missing | Open |
| World objects | Missing scaffolding panels/floors, chairs, benches and other scene objects | Open |
| Collision | The player may sink into the ground or float; traversal is inconsistent | Open |
| Distant rendering | Texture and rendering problems in the distance | Open; full extent uncharacterized |
Similar animation and missing-object problems were observed on both 1.0.2 and 2.0.2. Their exact causes remain under investigation. These bugs are still present even when the frame rate is good.
Resolved issues and remaining test coverage
- Audio: the earlier missing-audio issue is fixed.
- Local shader translation: supported, but an empty-cache run still needs more testing.
- Other hardware/drivers: compatibility beyond the AYN Thor reference configuration is unverified.
- Full-game coverage: a complete playthrough has not been tested.
The Android app and native shader translator build from source. The local debug APK passes signature verification, and the filesystem, graphics-settings and renderer tests pass within the scope described in VALIDATION.md.
The RomFS tests cover 23 scenarios with AddressSanitizer and UndefinedBehaviorSanitizer. GitHub Actions runs the source check, RomFS tests and graphics-settings tests on each push.
Build and host tests don't replace gameplay testing. A complete playthrough, empty-cache behavior and other devices still need more coverage.
| Directory | Contents |
|---|---|
android/ |
Android loader, host services, Vulkan backend, project-authored UI and tests |
games/totk/ |
Inherited runtime, graphics implementation and preparation code |
vendor/ |
Shader-translator dependency source |
tools/ |
Import, build/preparation, install and publication helpers |
docs/ |
Reference-device and video-settings guides, UI preview and upstream technical notes |
This project is in no way affiliated with, endorsed by, or sponsored by Nintendo.
Thank you, Nintendo, for this magnificent game.
Preserve LICENSE, THIRD_PARTY_NOTICES.md and all dependency notices. The retained code is licensed source; no license to game or firmware content is granted. See SOURCE_ORIGIN.md for credits and source details.
The badges and menu preview are project-authored documentation assets. README.upstream.md describes the inherited Apple implementation and is retained for attribution and technical reference.
For bug reports, include your device, game version, driver, settings and reproduction steps. Always state whether you are using the AYN Thor reference configuration. See CONTRIBUTING.md. Never attach APKs, game data, keys, firmware, saves or shader caches to commits, issues or releases.
