github JackandBeans/Snap64Recomp v1.0.4
Snap64 Recomp 1.0.4

3 hours ago

The title screen

The Options screen, with Exit Game The Snap Station's printer, three stars

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.4 is the Steam Deck release: Gaming Mode fills the panel, the frame after the HAL logo is gone, the Options screen can close the game from a pad, and the thumbnails at Oak's check keep their pictures across a fullscreen switch.

Downloads

File For
Snap64Recomp-1.0.4-win64.zip Windows 10 or 11, 64-bit, with a GPU driver that provides Direct3D 12. Nothing else to install.
Snap64Recomp-1.0.4-linux-x86_64.tar.gz Linux, experimental: needs the system's SDL2, GTK 3 and a Vulkan 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

Steam Deck

  • Gaming Mode fills the screen. gamescope gives a non-Steam shortcut a screen of Steam's choosing unless its Game Resolution is set to Native: on the author's OLED Deck that was 3840x2160, so the port drew a 16:9 picture that gamescope scaled onto the 1280x800 panel with bars, and rendered it at eight times the game's resolution, which is where the stutter came from. The port now asks gamescope for the display's own size at every start, the request Steam's Native setting makes, and checks three seconds after fullscreen that the surface took it. The log says what was asked, what the screen then is, and every change of the surface's size.
  • The frame after the HAL logo. With anti-aliasing on, one frame of the intro's scenery re-posed showed on every Deck and on any 60 Hz monitor: the console never displayed that frame, the port holds the previous picture over it, and under anti-aliasing the held picture went into a target the present thread showed only for a tick of more than one display frame. Found by photographing the presented frames on Windows with the Deck's own settings; the hold is now delivered where the present thread shows it in every anti-aliased case.
  • Exit Game. The game's Options screen ends in a sixth row, under Return, in the screen's own font. A turns its help line into "Press A again to close the game, B to stay", the second A closes the program the way the window's close button does, B or moving off the row withdraws the question. A pad had no way to quit; Steam's menu still works too.
  • The log is written on every launch on Linux, snap64.log in the folder with the executable (or ~/.config/Snap64Recomp when that folder cannot be written), whatever stdout is, so a launch from Steam leaves a log to attach. The previous run's log is kept as snap64.prev.log. The files the port ships beside the executable, the pad mappings, the window icon, the title's Recomp badge, the shader list, are read from beside it on a read-only install too.

Photos

  • Thumbnails after a fullscreen switch (issue #12, Succulent-Puppet). After a switch between a window and fullscreen on the Gallery or the PKMN Report, the thumbnails showed the wrong pictures, and on an AMD card under Direct3D 12 the port crashed: the renderer destroys its high-resolution copies of the photos when the window changes size, the game does not render its photos again for that, and the thumbnails' tiles named copies that were gone. The copies now outlive the switch, a tile whose copy is missing draws a blank texel instead of the wrong texture, and a removed Direct3D device is named in the log instead of taking the port down. Played through five times on both backends.

For the next reports

  • The log reports a stall. When the game has not run a logic step for ten seconds while the window is up, [SNAP-HANG] says what the game had submitted, what the renderer took and presented, and the state of every game thread with the queue it waits on. It is there for the freeze aiming at Moltres on a Steam Deck (issue #11, leansteak096-blip), which has not reproduced on the author's Deck or on Windows: the next report's log will name the stuck side.
  • The gyro is no longer reported as silent when no readings arrived at all; the game's own flag queues, which drop by design, are marked expected in the log; the 2D Detail help says what Sharp costs; the texture decoder declares its Vulkan image format.

Every change, with its cause, is in CHANGELOG.md.

Note

Upgrading from 1.0.3, 1.0.2, 1.0.1 or 1.0.0: 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.4 as they are. If you keep the old folder, copy those two across.

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

  • Two reports from a Steam Deck are still under investigation: a flicker in the top-left corner during the Beach tutorial with the camera raised, and a few pixelated frames in the Cave. Both need a capture from a Deck; the log now carries what the next report 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.
  • Rebinding is the settings file until the in-game page arrives; the sticks themselves cannot be rebound.

Thanks

To Succulent-Puppet, whose report of the thumbnails after a fullscreen switch turned out to be a crash on AMD cards too, and to leansteak096-blip, whose Moltres freeze is why the log now reports a stall. And to everyone who has played it so far and written 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.4-win64.zip SHA256 on Windows, or sha256sum -c Snap64Recomp-1.0.4-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.

Don't miss a new Snap64Recomp release

NewReleases is sending notifications on new releases.