destin

Extract and convert assets from a collection of PC and console video games.

View on GitHub

destin

Python versions PyPI - Version GitHub tag (with filter) License GitHub commits since latest release (by SemVer including pre-releases) CodeQL QA Tests Coverage Status Dependabot Documentation Status mypy uv numpy pytest Ruff Downloads Stargazers pre-commit.ci status Prettier

@Tatsh Buy Me A Coffee Libera.Chat Mastodon Follow Patreon

Destin is a single package that bundles a collection of asset extractors and converters for a set of PC and console video games. Each game is a sub-command of one destin command, so every tool is invoked the same way:

destin <game> <subcommand> [ARGS]

Run destin --help to list the games, and destin <game> --help to list a game’s subcommands.

Games

Sub-command Game(s) Publisher / developer
destin amplitude Amplitude (PS2) Harmonix
destin bit192 Tone Sphere bit192labs
destin bitrock BitRock / InstallBuilder installers BitRock / VMware
destin frequency FreQuency (PS2) Harmonix
destin i76 Interstate ‘76 and Interstate ‘82 Activision
destin incoming Incoming (PC and Dreamcast) Rage Software / Interplay
destin marmalade Any Marmalade SDK title (Derbh, IwResGroup) Marmalade / Ideaworks
destin monopoly08 Monopoly (2008, multi-platform) Electronic Arts
destin thps2pc Tony Hawk’s Pro Skater 2 (PC) Neversoft / Activision
destin xg2 Extreme-G and Extreme-G 2 (N64 and PC) Probe Entertainment / Acclaim

Installation

pip install destin

Incoming

destin incoming extract --output OUTPUT_DIR SOURCE

SOURCE may be a PC disc directory or ISO containing DATA1.CAB (or the DATA1.CAB itself), a Dreamcast .gdi file, or a directory of already extracted PC or GD-ROM content. Recognised assets are converted (PVR and PPM to PNG, IAN and *_M.BIN to OBJ and MTL, terrain, saves, and .ctl to JSON, CDDA .raw and .OSB to WAV, Shift-JIS or ISO-8859-15 .TXT to UTF-8) and every other file is copied verbatim. The source is never modified.

An installed copy works as the source too — point at the game’s directory, such as the Incoming 3DFX folder of the Zoom Platform Incoming Trilogy (…/Incoming Trilogy/Incoming 3DFX). The Incoming 3DFX, Incoming USA, and Incoming Subversion (an expansion pack) titles share the original engine and are supported; Incoming Forces is not supported.

Pass --gdiextract-path, --spvr2png-path, or --unshield-path to point at the native tools when they are not on PATH, -j/--jobs to set the number of concurrent conversion jobs (defaults to the CPU count), and --debug for verbose logging.

Two further subcommands convert a single asset without mirroring a whole source tree:

Native tools

Some Incoming conversions shell out to native helpers, which must be on PATH or supplied with the matching --*-path option:

Amplitude and FreQuency

destin amplitude unpack DISC -o OUT
destin frequency unpack DISC -o OUT

Amplitude and FreQuency (Harmonix) share one PS2 engine but are separate commands, one per game. Point either at its disc directory (DISC): every ARK is unpacked mirroring its location, disc streaming songs are converted to WAV, and assets are converted in place (bitmaps to PNG, DataArray to JSON, Milo scenes to object folders, meshes to OBJ, audio to WAV). The output directory defaults to the current directory; set it with -o/--output-dir.

Tone Sphere

destin bit192 extract "Tone Sphere.xapk" -o out/
destin bit192 decrypt-cz gamedata_sub.cz gamedata_sub.dz
destin bit192 save …

Tools for the bit192labs rhythm game Tone Sphere: .cz decryption, full asset extraction, and save.bin editing. This is the game-specific layer on top of the generic Marmalade support in destin marmalade.

Marmalade SDK

destin marmalade extract-dz ARCHIVE.dz OUTDIR
destin marmalade extract-group RESOURCES.group.bin OUTDIR

Unpack and decode assets built with the Marmalade SDK: Derbh (.dz) archives, IwResGroup (.group.bin) resources, and CIwTexture, CIwGxFont, CIwMaterial, and CIwModel resources to PNG, JSON, and Wavefront OBJ.

BitRock / InstallBuilder

destin bitrock extract INSTALLER OUTDIR
destin bitrock crack INSTALLER

Extract (and, for encrypted installers, brute-force the password of) BitRock / InstallBuilder installers. Optional cuda and opencl extras accelerate password cracking on a GPU.

Monopoly 2008

destin monopoly08 extract ROOT

Unpack and convert an extracted Monopoly (2008, Electronic Arts) disc for Xbox 360, PS3, PS2, or Wii. The platform is auto-detected and every output is written next to its source inside ROOT.

Extreme-G, Interstate ‘76, and Tony Hawk’s Pro Skater 2

destin xg2 --help
destin i76 --help
destin thps2pc --help

Asset extractors and converters for Extreme-G / Extreme-G 2 (N64 and PC), Interstate ‘76 and Interstate ‘82, and the PC version of Tony Hawk’s Pro Skater 2. Run each game’s --help for its subcommands.

Development

uv sync --all-groups --all-extras
yarn install

Run the formatters and checks:

yarn format
yarn qa