The symbol files a mod build for Snap64 Recomp
needs, in the form N64Recomp's mod tool reads. They are generated from the
decompilation's ELF (ethteck/pokemonsnap
at commit 3a236dc, the same one the port is built against) by the port's
tools/gen_reference_syms.py, and they carry names, addresses and sizes
only: no code and no data of the game.
pokemonsnap.us.syms.toml-- every function, by section: 4,268 across the 32 sections that hold code. The port's own patch build uses this same file (patches/pokemonsnap.syms.tomlin the port's repository).pokemonsnap.us.datasyms.toml-- the game's variables and segment marks by section: 12,754 symbols across 156 sections, the code sections included, because this game keeps most of its globals beside its code.
A mod's mod.toml names them under [inputs]:
func_reference_syms_file = "Snap64RecompSyms/pokemonsnap.us.syms.toml"
data_reference_syms_files = [ "Snap64RecompSyms/pokemonsnap.us.datasyms.toml" ]
The mod template
checks this repository out as a submodule. When the decompilation gains a
name, the port regenerates both files from its ELF and this repository moves
with it. A mod already built keeps working, because the .nrm records
addresses, not names; its source needs the new name the next time it is
built.
Checked on 2026-09-20: both files regenerate byte for byte from the decompilation at that commit, and a mod built against them loads in the released 1.0.9.
To regenerate, from the port's root with the decompilation built:
python tools/gen_reference_syms.py <decomp>/build/pokemonsnap.elf pokemonsnap.us.syms.toml game_syms.ld pokemonsnap.us.datasyms.toml