docs(oot): a map of the game's lifted functions in docs/oot/ #188
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!188
Loading…
Reference in a new issue
No description provided.
Delete branch "dyst:docs/oot-function-map"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The game ships without symbols, so every lifted function is just
f_<address>, and each person or agent who needs to know what one does has to work it out again from the lifted code. This adds a shared map of what we have already worked out, so the next person can search an address and find it.What changed
docs/oot/is new, with 32 pages, one per part of the game: jobs and the frame's critical path, actors, AI, animation, navigation, physics, drawing and the NVN calls, rendering, shaders, textures, culling, effects, input, audio, environment, resources, maps, events, the camera, the player, menus, layout, save data and the save list, game data and Master Quest, the frame time, and the hot path. They hold 1,176 function rows, 236 data rows and the structures behind them. Each row says what the function does in our own words and how sure we are: tested (seen in the game), read (worked out from the code) or guess (from names and neighbours).docs/oot/README.mdhas the conventions and the index.nx2/oot_*.py,host/) has a row, 120 of 120, and each hook a page names (patch_…) is onenx2/oot_patches.pydefines.docs/oot/for an address before reading lifted code, and add a row when you learn what a function does.Flags and settings
None.
Measurements
The game doesn't run this change (documentation only), so it is measured by the game-free checks, as AGENTS.md says for docs.
main:
000f19fb(2026-11-13)this PR: docs/oot-function-map @
6f350944Hardware: NVIDIA GeForce RTX 3080, Windows 11 Pro N 22631
Scene: none (no game run)
Method:
python -I -B tests/run_all.pytwice on each, interleaved, in two worktrees at the same base on the same PC (round 1: both at once; round 2: this PR, then main, alone); plus the pages' own check (below)How to reproduce:
python -I -B tests/run_all.pyon each commit000f19fb6f350944tests/run_all.py, round 1tests/run_all.py, round 2The same 27 checks failed in all four runs, on main as on this PR: they fail on this PC without the change (nx2/test_mesh_first_types, nx2/test_texture_init_barrier, test_audio_output_errors, test_audio_wave_buffer_release, test_bake_portability, test_bug_report, test_capture_dimensions, test_check_third_party, test_control, test_cpp_preflight, test_display_pointer, test_game_font, test_hd_rumble, test_log_batch, test_pcache_header_read, test_pipeline_cache_file, test_pipeline_cache_save, test_pipeline_play_cache, test_portable_setup_transaction, test_prepare_stall, test_prof_clock, test_recorder_sync, test_release, test_rumble_mapping, test_rumble_refresh, test_scene_tonemap_pass, test_spawn_emit). The rest came and went with the load, on both sides: test_gpu_hang_watch and test_seed_reader failed on this PR in round 1 (both suites at once) and pass alone; test_prepare_at_build and test_setup_tar_diagnostics failed on main only; test_audio_voice_biquad, test_display_startup_failure and test_invalidate_vcore failed in round 1 on both and in round 2 on this PR, and pass on main when the machine is quiet (timeouts). Nothing this PR changes is read by a check.
Testing
Tested:
tests/run_all.pyon main and on this PR (above). The pages' own check, a script kept local and not in this PR: one home per function, every row's table and Sure value, eachpatch_…a page names exists innx2/oot_*.py, every relative link resolves, and the README's index lists every page. A scan of every page for game code: no disassembly listings, no lifted C, no decompiled code. Only addresses, names, offsets, constants and descriptions in our own words.Not tested: nothing in the game: no code changes.
Needs other testers: None
Screenshots
Nothing on screen.
Risk and rollback
Documentation only. A row can be wrong, and the Sure column says how far to trust each one. Reverting the commit removes it all.
Reviewer notes
docs/oot/README.md(conventions and the index), then any page.jobs.md,physics.mdandnavigation.mdhold the frame-rate findings: what the frame waits on, and which jobs run beside it.Issues
None.
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.🤖 Generated with Claude Code
WIP: docs(oot): a map of the game's lifted functions in docs/oot/to docs(oot): a map of the game's lifted functions in docs/oot/We want to be extra careful with this one, so here's what to change before it can merge. The pages themselves are good work: they're factual prose (addresses, what each function does, how sure we are), with no lifted code, no runs of assembly or hex bytes, no assets, no keys and no game text. The problems are the parts that copy or catalogue things from the game file, which brushes against our own rule in CONTRIBUTING.md: "No game files, keys, or anything made from them leave your PC."
Please remove or change:
shaders.md..sarcpath..ainbfiles are loose or in which pack. They don't help anyone port anything, and they describe the game's files in detail.nvn-calls.md(about 400 rows) down to the calls Longshot's ownhost/nvn_native.calready implements, describing what Longshot does with each. Drop the full census of every NVN entry point the game asks for, and the call-site counts.physics.mdandnavigation.mdonly where needed to explain a Longshot change.Also:
docs/oot/README.md. State that these pages describe behaviour for interoperability only. They must never quote the game's code, data, text, strings or file listings, and anything copied from the game file belongs inwork/, which never leaves the PC. Point agents at that rule from AGENTS.md too, since AGENTS.md now sends them here.If trimming this much takes most of the value out, it could live in a private repo or wiki instead, with AGENTS.md linking to it for team members. I'm happy either way; the line we want is that nothing in the public repo is copied or listed from the game file.
We are still unsure if this will be accepted btw, due to the nature of the change. Feel free to discuss on Discord
Pull request closed