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.0.6 is the release for your hands: every key, mouse button and pad button can be changed in the game, the pad's sticks can be swapped and their dead zone set, and the frame rate can be held at a number of your choosing, all from the game's own Options screen.
Downloads
| File | For |
|---|---|
Snap64Recomp-1.0.6-win64.zip
| Windows 10 or 11, 64-bit, with a GPU driver that provides Direct3D 12. Nothing else to install. |
Snap64Recomp-1.0.6-linux-x86_64.tar.gz
| Linux, experimental: needs the system's SDL2, GTK 3 and a Vulkan 1.2 driver. Played on a Steam Deck in Desktop Mode and in Gaming Mode. |
You need your own cartridge dump. No game data is included. Put your pokemonsnap.z64 (US, SHA-1 edc7c49cc568c045fe48be0d18011c30f393cbaf) next to the executable and start it. START HERE.txt in either archive says the rest, in one page.
What's new
Button Setup
- A page in the game for every binding. Options, Controls, Button Setup (named as the game names such screens). A row for each of the game's eighteen inputs, named by its button and what it does ("Z Button: Zoom", "C-Up: Look Back"), shows what presses it on the device picked at the top ("Set Up: Keyboard", Mouse or Controller), and its help line says more about what that input does in the ride. Press A on a row and the port listens: the next key, mouse button, wheel tick or pad button on that device becomes the row's binding. Z clears a row, unless nothing else would press that input. Esc or eight seconds of nothing leaves it as it was. A key the port uses itself (the function keys, P, the brackets, Home, End, Esc) and the pad's Back and Guide are refused, and the page says so.
- Restore Defaults, right under Device, puts the device shown back the way it came, after asking for a second A.
- The rows also name what no setting changes: the stick that aims and the one that works the C buttons, the mouse's motion while Mouse Aim is on, Esc beside Start.
- The settings file's
keystable is the same table and stays editable by hand; nothing you wrote there is lost.
Controls page
- Pad Sticks: Normal or Swapped, so the right stick can aim and the left work the C buttons.
- Dead Zone: how far the aiming stick moves before the game sees it, 0 to 40 percent in fives, 15 as shipped, for a pad whose stick drifts at rest. The port's dead zone had been fixed at 15 since 1.0.0.
Graphics page
- Frame Rate runs past Display to 60, 90, 120, 144, 165 and 240, each held at that rate by interpolation. Until now that mode was reachable only with F8 or the settings file.
Windows and Linux
- A saved fullscreen is restored after the window opens, as 1.0.5 said it was. That release kept the saved value aside for the restore, but the reader of the settings file had no line for the key, so on Windows and on Linux outside a Steam Deck the restore never ran. Found by this release's own screenshot run.
Under the hood
- Two latent faults fixed: the menu strings' directory held 127 entries and 1.0.5 wrote 129 (the last two landed in the pixels of a tile nothing draws), and two counters of the menu's strip pool shared their words with the Exit Game item's pointers, harmless only because a pointer outranks any count.
- The README says what the renderer needs of a GPU: Direct3D 12 at feature level 11_0 with shader model 6.0, or Vulkan 1.2, and which cards it is known to have run on.
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.0.6 as they are. If you keep the old folder, copy those two across. A keys table you edited by hand is kept as it is.
Warning
The Windows executable is not signed. SmartScreen may say "Windows protected your PC" on the first start, 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.
- The first start 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 README's Deck section has the shortcut and gyro settings, and the log tells which mode it saw.
Known limitations
- A freeze aiming at Moltres on a Steam Deck (issue #11) has not reproduced on the author's Deck or on Windows; the log reports a stall, and the reporter's log is what the fix needs.
- Widescreen is untested beyond the Beach.
- 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, so a big, close one, Snorlax on the Beach with the camera pitched up to the limit, vanishes with part of its body still in frame and returns as the camera comes down. 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.
- A Nintendo pad over Bluetooth is put by SDL's driver in the report mode that only speaks when a button moves, and declared gone after three seconds of silence; the port takes it back at the next touch, on its own thread, so the first press after a pause may arrive a moment late. Read from SDL's code, not seen on such a pad here.
- The Linux build has no crash reporter.
- The two sticks can be swapped but not bound to anything else, and the pad's Back button keeps its job of saving the photo on screen.
How this release was checked
The Button Setup page was proved against real input on the author's PC: Windows keyboard and mouse events sent to the game (a key bound, a key with a job refused, Esc cancelling, the right button, the wheel and a side button bound) and a controller driven through SDL's own joystick layer (a button, a trigger and a D-pad direction bound); every page was photographed from the game with nothing of one page on another; and the release suite passed on the shipped executable, the numbers in the README.
Thanks
To everyone who asked for a way to change the buttons without a text editor, in Discussions and on the Deck, and to everyone who plays it and writes back: this is a port of a game people love, kept as the cartridge had it, and your reports are how it gets there.
Reporting a problem
Open an issue here and attach snap64.log from the folder with the executable (and Snap64Recomp.map if the log has [SNAP-AV] lines), your snapsettings.json, and what you were doing.
Verify the download
Each archive's .sha256 holds its SHA-256: certutil -hashfile Snap64Recomp-1.0.6-win64.zip SHA256 on Windows, or sha256sum -c Snap64Recomp-1.0.6-linux-x86_64.tar.gz.sha256 on Linux, prints or checks yours.
Licensed under the GPLv3; third-party notices are in NOTICE.md and licenses/. This project is not affiliated with, endorsed by or connected to Nintendo, Creatures Inc., GAME FREAK inc., HAL Laboratory or The Pokémon Company. Pokémon and Pokémon Snap are their trademarks.



