NVN2 compute banks get the dispatch's group counts in bytes 0-0xb, for direct and indirect dispatches; the fog pass
after the integration divided by them. Indirect mesh draws read NVN's {count, first} record as {x, y, z}, so y = 0
drew nothing: each now draws from a ring entry holding {count, 1, 1}, copied on the GPU before the draw. An empty set 1
no longer leaves set 0 pushed with 0 bytes. Compute stages with subgroup operations whose width is a whole number of
subgroups require full subgroups.
The texture pool refresh fell from 3.1-3.7 ms to 1.0 ms a frame in Kokiri Forest: slots with the same descriptor,
address generation and entry generation share one lookup (about 14,500 of 15,000 refills a frame), and registering a
texture and view identical to what the slot holds keeps its resolution. Under 20 GiB of VRAM, ASTC textures are
encoded to BC3 by default (Kokiri: 15.9 to 8.2 GiB, same GPU time). The pool log counts refills by cause and what
invalidates them; frame dumps write BC textures as raw blocks and print a storage buffer's backing span; a profile with
NX2NAVI_PROFILE_FRAMES is written when its window ends; the alpha test logs once that it is not applied.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
NX2navi
NX2navi is a static recompilation of The Legend of Zelda: Ocarina of Time (Nintendo Switch, 2023) into a native x86-64 application for Windows and Linux (docs/architecture.md).
Important
No game files are included. You need your own legally obtained copy of Ocarina of Time, dumped from your own console: the base game and the 1.1.0, 1.2.1 or 1.4.3 update. Instructions for obtaining those files will not be provided.
The game is built from your files on your machine, so the result contains the game. It is for your own use. Do not share it.
Status
Early development. The game is playable on Windows and Linux; visual bugs and crashes are still expected.
Report problems as issues, following CONTRIBUTING.md.
Features
- Native code, not emulation
- Game updates 1.1.0, 1.2.1 and 1.4.3; 1.2.1 and 1.4.3 saves carry over between them
- Takes NSP and XCI game files, and compressed NSZ and XCZ as they are: the setup unpacks them itself
- 60 fps by default; up to 144 fps or the monitor's refresh rate (experimental)
- Custom resolutions (1080p, 2k...), supersampling and AMD FSR 1 upscaling
- NVIDIA DLSS / DLAA on RTX GPUs: the setup downloads
nvngx_dlss.dllfrom NVIDIA's DLSS SDK repository (github.com/NVIDIA/DLSS, NVIDIA RTX SDK license) when it finds an RTX GPU; untick it in the setup to skip it - HDR10 output with peak, game and HUD brightness settings
- 16:10 (Steam Deck, handhelds), 3:2 (Surface, Framework), 21:9 and 32:9 (ultrawide) game resolutions, with the camera and the interface in that shape
- Anisotropic texture filtering up to 16x, for sharp ground into the distance
- In-game settings menu (F1) and performance overlay (F10)
- Discord Rich Presence ("Playing NX2navi" with the play time), off by default, own application id supported
- Setup and in-game menu in English, Russian, Brazilian Portuguese and Simplified Chinese
- Keyboard, mouse and gamepad with remapping, rumble and gyro
- Stereo or 5.1 surround sound output
- Xbox button prompts: LB, RB, LT, RT, Menu and View, and A, B, X and Y as labelled on the button to press, with either button layout
- Shaders prepared at install instead of during play
- Mods made for emulators: unpack a mod into the
modsfolder next tonx2navi.exe; switch and order them in the menu. RomFS mods, a mod manager's merged output and ExeFS code patches (.ips,.pchtxt) work; the game rebuilds itself for code patches (docs/mods.md) - Atmosphère cheats: put a cheat file into a mod and switch its cheats in the menu (docs/cheats.md)
Planned
- VRR
Installing
Windows
Requirements: Windows 10 or later, an x86-64 CPU with SSE4.2 (AVX2/FMA machines get a faster build), a GPU with Vulkan 1.3 and VK_EXT_external_memory_host, about 36 GiB free during setup (20 GiB after).
- Download
NX2navi-Setup-<version>-windows.zipfrom Releases and unpack it. - Start
NX2navi-Setup.exe. If SmartScreen warns about an unsigned app, choose More info, then Run anyway. - Pick your game files, the language and an install folder, and press Start. The setup builds the game once. With an NVIDIA RTX GPU it also downloads NVIDIA DLSS, unless you untick Download NVIDIA DLSS; turn DLSS on in the menu (F1).
- Play
nx2navi.exefrom the install folder.
Linux
Requirements: as on Windows, plus Linux 6.7 or later and glibc 2.34 or later (Ubuntu 22.04, Debian 12, Fedora 35, SteamOS 3).
- Download
NX2navi-Setup-x86_64.AppImagefrom Releases, or build it (docs/installer.md, "Linux release"). - Make it executable (
chmod +x NX2navi-Setup-x86_64.AppImage) and start it. On a Steam Deck, do this in Desktop Mode. - Pick your game files, the language and an install folder, and press Start.
- Play
nx2navifrom the install folder.
To update, run a newer setup on the same folder; saves and settings are kept. Settings are in the in-game menu and in nx2navi.ini (nx2navi.ini.example lists every key). Controls: docs/controls.md.
Credits
NX2navi builds on the projects below. What was taken from each, with its license, is listed in THIRD_PARTY_NOTICES.md.
- LAS Recomp
- MacNativeGames
- d2r-mobile and nxnative
- SavageWindRecomp
- Ryujinx
- deko3d
- hactool
- SDL 3, Dear ImGui, AMD FSR 1, Vulkan Memory Allocator, libopus, libvpx, Zstandard
- Switchbrew and the Switch homebrew community
License
The project's own code is under the MIT License; third-party code keeps its own license (THIRD_PARTY_NOTICES.md). The license grants nothing for Nintendo's game.
NX2navi is an independent, non-commercial fan project, not affiliated with or endorsed by Nintendo. The Legend of Zelda, Ocarina of Time and Nintendo Switch are trademarks of Nintendo.
Building from source
docs/building.md lists the toolchain and the steps. Everything the build writes stays under build\ and generated\, which git ignores; run tools/check_content.py before a commit. Testers: docs/tester-guide.md.
Most of the code and documentation is written by AI coding agents (Claude Code) under the maintainer's direction; the maintainer plays every build and decides what is merged. AGENTS.md holds the rules they work under.