mirror of
https://github.com/tangerineturtle1/NX2navi.git
synced 2026-11-15 19:19:58 -04:00
Ocarina steps its game by the clock (the same frame-numbered walk covers half the distance at 120 fps), so in a build without the fps60 and realtime patch sets the pacer holds frames to the frame limit alone: any rate from 30 to 1000, the monitor's rate, or unlimited (164 fps average in Kokiri Forest). The menu always shows the row, with 165, 240 and Unlimited added. NX2NAVI_PACE_HZ sets the pacer's rate for tests. A compute pipeline is compiled outside the pipeline lock, and one compile serves the replay and the boot prebuild alike; the prebuild uses half the CPUs. The guest waits at most NX2NAVI_PREWARM_WAIT_MS (3000) for the boot prewarm, which then goes on in the background (a cold start waited 9.8 s). NX2NAVI_TEST_PAD_AT attaches the test gamepad late and presses it, to test a controller switched on in play. README, docs/architecture.md, docs/controls.md and AGENTS.md describe the Ocarina build. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
NX2navi
Static recompilation of Ocarina of Time (Switch 2, ARM64, game version 1.1.1) into a native Windows x86-64 exe with a Vulkan renderer. Design: docs/architecture.md. Toolchain, build commands and tests: docs/building.md.
Game content boundary
This repository is public. Game data lives outside it and every derived file stays in ignored folders.
- The user's game and key paths are in
config.local.toml(ignored). Pass the keys file path to tools; the tools read it themselves. Key values stay out of your output, logs, commands and files. - Everything extracted or generated goes under
build/orgenerated/. - Every file the code generator emits carries the marker defined as
GENERATED_MARKERintools/check_content.py. - Run
python tools/check_content.py --stagedbefore proposing a commit. It is the same check CI runs.
Reusing code
refs/ holds the upstream checkouts (tools/fetch_refs.sh recreates it). Read-only.
- Copy only MIT, BSD, ISC, zlib or Apache-2.0 code, keep its header, and add a row to
THIRD_PARTY_NOTICES.md. - the hardware, suyu, OpenSmash-Ultimate and other GPL code: read for behaviour, write our own.
tools/vendor/stays byte-identical to upstream; Windows changes go intools/extract.py.
Code
- Build C with MSYS2 UCRT64 Clang (
C:\msys64\ucrt64\bin). Generated C uses GNU extensions, socl.exeis out. Call Ninja from that directory by full path or put it first on PATH. - Two Python environments:
.venv(3.12) for the lifter and the build,.venv-py314for the extraction and shader scripts, which needcompression.zstd. - Generated C is never edited by hand: change the generator (
recomp/). - Every lifter change passes the differential tests against Unicorn (docs/building.md, "Checks"). After changing
recomp/jumptables.py,tests\jumptables_check.pyreports 0 disagreements on 1.2.1 and 1.4.3. recomp/layout.pyalone decides module bases.- Graphics bugs: docs/maxwell.md lists the Maxwell behaviour the Vulkan path must match and the NX2navi bugs other ports fixed.
- Comments say what the code does and why, in words that stand on their own. Cite our code by file plus function (a line number may follow as a hint) and upstream code by project, file and function:
refs/moves, so its line numbers rot. Commit hashes belong to the attribution of copied code.
Writing
Code, comments, docs and commit messages are in English. Commit messages are plain sentences without type prefixes.