A cross-platform one-command script that takes the offline installer of a game you own on GOG.com, pulls out the game data a PS Vita port needs, and downloads the newest VPK of that port next to it.
  • TypeScript 96.2%
  • Makefile 2.6%
  • Shell 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-31 23:21:09 +01:00
.githooks be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
.github/workflows be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
docs be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
games-gog be: support Silent Hill 4 on the Vita through the port's own preparer (#2) 2026-10-31 21:19:58 +01:00
src devops: keep agent worktrees out of the format check, they blocked every push (#6) 2026-10-31 23:21:09 +01:00
.gitattributes be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
.gitignore devops: keep agent worktrees out of the format check, they blocked every push (#6) 2026-10-31 23:21:09 +01:00
.oxfmtrc.json be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
bun.lock be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
Makefile fe: lay the terminal output out as coloured steps, so the result and a warning stand out (#5) 2026-10-31 22:35:25 +01:00
mise.toml be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
package.json be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
README.md be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00
tsconfig.json be: rewrite the extractor in TypeScript on Bun (#4) 2026-10-31 21:57:52 +01:00

GOG to PS Vita extractor

A cross-platform one-command script that takes the offline installer of a game you own on GOG.com, pulls out the game data a PS Vita port needs, and downloads the newest VPK of that port next to it.

Important

This tool is for use with your own legally purchased copies of the games. It does not provide or distribute any game data.

Supported games

Game Vita port Data on the Vita Guide
Medal of Honor: Allied Assault OpenMoHAA ux0:data/openmohaa/main/ docs/mohaa.md
Diablo + Hellfire DevilutionX ux0:data/diasurgical/devilution/ docs/diablo.md
Silent Hill 4: The Room sh4vita ux0:data/sh4/ docs/silent-hill-4.md

Each game is one module in src/game/; adding a game means adding a module there that exports a Game and listing it in src/game/index.ts.

Supported Platforms

  • macOS
  • Linux
  • Windows

Requirements

mise installs the pinned tools from mise.toml, Bun and 7-Zip among them: run mise install. Without mise, install Bun yourself.

You also need at least one of the following extraction tools installed and available in your PATH:

Tool Recommended For Installation
innoextract Windows .exe installers (best) macOS: brew install innoextract • Linux: sudo apt install innoextract • Windows: choco install innoextract
7-Zip (7z) Fallback for multi-part installers macOS: brew install p7zip • Linux: sudo apt install p7zip-full • Windows: Download from 7-zip.org (add to PATH)
unzip Linux .sh installers Usually pre-installed on most systems

When an installer needs a tool you do not have, the script offers to install it with brew, apt or choco. Silent Hill 4 needs innoextract itself; 7-Zip is enough for the other games. make tools shows what is installed, and make deps installs the mise tools and innoextract in one go.

Usage

Put the GOG offline installer (the .exe and any -*.bin parts), or a folder with the game already installed, in the games-gog/ folder of this repository. Git ignores everything in games-gog/, so the game files are never committed.

macOS / Linux

make extract

It asks which game you want, then:

  • One installer for it in games-gog/: it is used.
  • Several: the script lists them and asks which one.
  • None: it asks whether you already own it on GOG, prints a clickable link to the store page or the download, and then waits for you to drag the .exe into the terminal.

To use an installer somewhere else, pass it directly: make extract INSTALLER="$HOME/Downloads/setup_diablo_1.09_hellfire_v4_(78466).exe" (quoted, because of the parentheses). Run make on its own to list the other targets.

Windows (Command Prompt/PowerShell)

bun install
bun src\extract_for_vita.ts
bun src\extract_for_vita.ts "games-gog\setup_diablo_1.09_hellfire_v4_(78466).exe"

The game is recognised by the installer's file name; if the name is not one the script knows, it asks which game it is. The output lands in games-vita/ in this repository, one folder per port — openmohaa/main/, diasurgical/devilution/ or sh4vita/sh4/ — laid out the way ux0:data/ expects it, and the game's guide says where it goes on the Vita.

Troubleshooting

  • Extraction fails: Try installing innoextract (recommended) or 7-Zip. The script will tell you which tools it tried and what to install.
  • Wrong installer: Make sure you're using the offline backup installer from GOG, not the Galaxy installer.
  • Game-specific problems are in each game's guide.

Development

bun install or any make target that needs it turns on the hooks in .githooks/: a commit formats its staged files, and a push is refused while anything is unformatted. make lint test runs the same checks as CI.

License

See LICENSE if included, or refer to the repository's license file.