Snap64 Recomp is a native port of Pokémon Snap (Nintendo 64, US release) made by static recompilation: the game's own code runs on your PC, the port only hosts it, and everything about how it looks is off unless you turn it on. 1.1.0 is the modding release: mods install from the game's own Mods page or from a file dropped on the window, every mod has its own details and options pages, the mod kit makes them, and two mods of mine show how. It is also the first release with a Mac build.
Downloads
| File | For |
|---|---|
Snap64Recomp-1.1.0-win64.zip
| Windows 10 or 11, 64-bit, with a GPU driver that provides Direct3D 12. Nothing else to install. |
Snap64Recomp-1.1.0-linux-x86_64.tar.gz
| Linux, experimental: needs the system's SDL2, GTK 3 and a Vulkan 1.2 driver. Earlier releases were played on a Steam Deck in Desktop Mode and in Gaming Mode; this one has not been yet. |
Snap64Recomp-1.1.0-macos-universal.zip
| macOS 14 or newer, Apple Silicon and Intel in one app. Built and run on GitHub's virtual Mac, not yet on a physical one: the first report from a real Mac decides what it is. |
You need your own cartridge dump. No game data is included. Start the program and choose your pokemonsnap.z64 when it asks (US, SHA-1 edc7c49cc568c045fe48be0d18011c30f393cbaf), or put the file next to the executable yourself. START HERE.txt in each archive says the rest, in one page.
What's new
Mods
- The Mods page installs mods. Its Install Mods... row opens a file picker for
.nrmfiles, texture packs and the zips they come in, several at once, and a file dropped on the game's window installs the same way; a zip is unpacked, so a Thunderstore download works as it is. Open Mods Folder shows the folder, Restart Game restarts with the mods as set, and a mod that will not load says why on its row. - Every mod has a details page: its name, version and author, its picture when its file carries one, whether it is on, its whole description, and what it needs or is needed by. Left and Right turn it on or off from there. A mod installed during play is listed at once, marked NEW in the title's rainbow until its details are opened, and loads at the next start.
- A mod's options page, on the same panel: one row per option the mod declares, changed with Left and Right, an enum, a yes-or-no, a number, or a text typed with the keyboard, each written to the mod's own settings file at once, with a Restore Defaults row. An option another option hides or disables behaves as the mod's manifest says.
- The mouse works on every menu: the title's list, the lab, the course list, the pause menu, every Options page, the album, the PKMN Report, Oak's photo check, the Gallery and the name card. Moving the pointer selects, a click chooses, the right button goes back, the wheel scrolls, and a mod can be dragged up or down the load order.
- Help lines name the buttons in your hand. Every line of the port's that names a button says A on a controller, the key it is bound to on a keyboard ("Press X again to close the game, Z to stay"), or the click with a mouse, and changes the moment another device is pressed. Delete clears a Button Setup row, so a mouse can too.
- The mod kit's hooks are fixed for functions the port itself patches and for functions that wait, and the template and symbol files are checked against this release.
macOS
- A Mac build, for the first time. One app for Apple Silicon and Intel, macOS 14 or newer, drawn with Metal, with mods loading as on the other platforms. It grew from appleforever11's pull request #2, the first Apple Silicon build of the port, which started, drew with Metal and reached a course on an M3 Pro; its guard against a null video mode has been in the port since 1.0.5. Thank you. It is made and run by GitHub's own Mac, a virtual one: there the game boots to the intro, plays the Beach with its photos scored, loads a mod and quits cleanly, natively and through Rosetta 2. No physical Mac has run it. The first start is a right-click and Open, or on macOS 15 System Settings > Privacy & Security > Open Anyway; the port keeps its files in
~/Library/Application Support/Snap64 Recomp/. - Getting it there found faults a Mac would have hit and fixed them: the window's Metal layer resized behind the renderer, a missing copy the Snap Station needs, thread stacks a sixteenth of what the game runs on, mods refused by macOS's code protection, a crash at every quit, and a virtual Mac's timers that ran the game at a fifth of its pace.
BUILDING.md, step 15, is the whole account.
Also
- The music holds with the screen while the port's pages are open over any screen, and starts again where it stood.
- Three fixes found by DramaticShape in the port's own code: an audio read the recompiler had aimed at nothing, a race at quit, and the order of two renderer calls at a resize. Credited in the changelog.
- The Options pages are one family with the game's own: the Graphics page is the standard for every list, a mod's pages share one panel, and every capital in the port's text stands at one height.
- The small icon is the film canister with its paint.
Every change, with its cause, is in CHANGELOG.md.
Note
Upgrading from any 1.0.x: unpack the new archive over the old folder or beside it. Your save is in saves/ and your settings in snapsettings.json, both untouched by the upgrade and both read by 1.1.0 as they are. If you keep the old folder, copy those two across, and pokemonsnap.z64 with them, or let the new one ask you for it.
Warning
The Windows executable is not signed, and the Mac app is signed by nobody. SmartScreen may say "Windows protected your PC" on the first start, macOS refuses a plain double-click, and an antivirus may flag a program it has never seen; the builds on this page are what the source produces, and the .sha256 beside each archive lets you check what you downloaded.
First start
- On Windows, past SmartScreen: choose More info, then Run anyway, once.
- On a Mac: right-click the app and choose Open, or on macOS 15 double-click, dismiss the message, and click Open Anyway in System Settings > Privacy & Security, once.
- The box asks for your ROM; choose the file and the game starts. The first start also compiles the shipped shader list during the boot logos and takes longer.
- The Snap Station's Print restarts the program twice, on purpose.
- On a Deck, add the executable as a non-Steam game and run it in either mode; the Deck page under
docs/has the shortcut and gyro settings, and the log tells which mode it saw.
Known limitations
- The Mac build has not run on a physical Mac. Its sounds, its pads and its speed are unheard and unmeasured; the virtual Mac it ran on has no real GPU.
- A mod installed during play loads at the next start; the page says so. A mod's text option is typed with a keyboard only.
- The Linux build has no crash reporter, and this release has not been played on a Deck yet.
- On an N64-shaped pad, which has no right shoulder button, fast forward has only its key until the file names another button.
- A Pokémon pops out of the picture before it has fully left it: the cartridge draws a Pokémon only while its collision point projects within 1.5 times the half-screen of the centre. The console does the same; the port keeps the rule as the cartridge has it.
- Gyro has been confirmed on a Steam Deck and no other pad yet.
- The two sticks can be swapped but not bound to anything else, and Select and the right stick's press keep their jobs: the pages, and saving the photo on screen.
How this release was checked
The Mods pages were built against screenshots and measured captures, row by row, and the mouse, the keyboard and the controller were each scripted through them. The release suite, now 29 checks, passed on the shipped Windows executable: 29 of 29 checks in 1149 seconds (SHA-256 beginning 3006d9b4), and the Snap Station's 5 of 5 in 487. The Mac app passed the workflow's checks on GitHub's Mac: 15 of 15 natively and 10 of 10 through Rosetta 2. The numbers, and every release's before it, are in docs/VERIFICATION.md.
Reporting a problem
Open an issue here and attach snap64.log from the folder with the executable (on a Mac, from ~/Library/Application Support/Snap64 Recomp/; and Snap64Recomp.map if the log has [SNAP-AV] lines), your snapsettings.json, and what you were doing.



