Repository navigation
Releases
Steam Deck build — 32.4 fps at 706 draws (background thread held, chunks of 500)
Measured on a Steam Deck OLED (Van Gogh / RADV) in Game Mode, through a headless harness, at a
matched scene of ~706 draws a frame, same settings on both sides, one binary apart.
Read the resolution with the number — the internal resolution is the single biggest factor here:
| internal resolution | frame | fps | GPU |
|---|---|---|---|
50 % (resolution=4) |
30.86 ms | 32.4 (32.4 / 32.5 / 32.4, three runs) | 11.5 ms |
75 % (resolution=2, what this release ships) |
35.6 ms | 25–28 (28.1 and 24.7 on two runs) | 16.5 ms |
The build before this work measured 22.1 fps at the same 50 % setting, so like-for-like that is a
+47 % frame rate; at 75 % the GPU, not the CPU, is what limits it.
Read the draw count with every number. The frame is per-draw bound, and this game's areas differ
by 3x in draw calls. Two scenes, both at 75 % internal resolution:
| scene | draws a frame | frame | fps |
|---|---|---|---|
| the heavy fight/town areas | ~2,300 | 53.6 ms | 18.7 |
| a light corridor | ~706 | 35.6 ms | 25–28 |
At the heavy scene the same build before this work was 14.5 fps (69.0 ms a frame), so the work is
+29 % where it is actually played. The larger percentages elsewhere in these notes are from the light
scene, which is where the change is easiest to see but least representative.
What is in it
- the game's background model thread is held to 25 % of a processor (it was taking 66 % of one,
ahead of the renderer). Swept 10 / 25 / 50 %: a real peak at 25 — at 10 % its work backs up onto the
guest side, at 50 % it takes CPU from the frame. - the game's eleven idle job workers sleep on a timer instead of spinning 7,600 times a second each.
- the SVC release spin stays at 20 µs: at 1 µs the frame was 45.25 → 44.74 ms, at 20 µs 45.25 → 36.23.
- culling is off only in the one RDNA 2 task shader that resets the GPU, not across every draw.
- the recording is cut every 500 draws, not 120.
- duplicate push constants skipped, narrower copy barriers, uniform updates in one arena.
- frame generation off (at 2× it cost 8.5 ms of GPU a frame and doubled shadows); checkpoint markers
off (a GPU marker write before every draw and dispatch, ~2,300 a frame).
The texture budget matters less than the resolution: VRAM 2800 / 256 MB textures against 1500 / 128
was 24.8 against 24.7 at 75 %, but at 50 % the tighter budget is what keeps the GPU at 11.5 ms. The
release ships the tighter one.
The update check is opt-in — HOOKSHOT_CHECK_UPSTREAM=1. It used to run by default against a
repository that no longer exists and whose name anyone can register; every URL now points at this one.
The AppImage carries this build's sources and renderer and builds the game from your own copy. Its
sysroot is the previous release's (glibc 2.35). Verified before upload: extracts under its own runtime,
contains AppRun, the emsdk clang, Python 3.12 and the renderer above, and the bundled compiler builds
and runs a C program against that sysroot. Inherited limits: no C++ headers in the sysroot (a DLSS build
needs the sources from this repository), and the pipeline-state lists are not redistributed, so a new
install's first field load draws white for a few seconds.
No game code or game data is in this release, and none is in the repository.
Latest development build
⬇ Download for Windows
⬇ Download for Linux / Steam Deck
The latest development build of main, made by CI after every push to main. Each file is named by the commit it was built from (Hookshot-<version>-x86_64.AppImage, Hookshot-<version>-Windows-x64.zip; the version is git describe's, ending in -g<commit>). The Windows and Linux builds finish at different times, so while changes are being merged one can be a commit or two behind the other; the nightly tag is at the newest of them.
It is untested and may break your saves or settings. For playing, use the latest release.
Which file do I download?
| On | Download |
|---|---|
| Windows | HookshotBuilder.exe, the setup |
| Linux, Steam Deck | the .AppImage |
You need your own copy of the game. hookshot-setup.txt, hookshot-linux.txt and the .zsync are for the updaters, and the -Windows-x64.zip (the setup and its recomplauncher.json) for RecompLauncher: on Windows, download HookshotBuilder.exe instead. To check a download: sha256sum -c --ignore-missing SHA256SUMS, or gh attestation verify <file> -R RufflezAU/GreenBoy.
Linux builder parts
Parts Hookshot's Linux builder downloads. A file's name is its checksum; a part that did not change is not uploaded again. This release is not a version of the game.
builder-parts
The parts HookshotBuilder-Setup.exe downloads, named by each release's hookshot-setup.txt.