If your goal is not modding but simply viewing/listening to assets, unpacked files are often in standard formats:
Download the latest quickbms.exe from the official source (Zenhax forums). Version 0.12.0 or newer is required.
4.1 Header Discovery
4.2 Example Reconstructed Header (hypothetical but realistic):
| Offset | Type | Description | |--------|----------|------------------------------| | 0x00 | uint32 | magic (e.g., 0x504B4700) | | 0x04 | uint32 | version | | 0x08 | uint32 | file count | | 0x0C | uint32 | TOC offset (from file start) | | 0x10 | uint32 | TOC size / encrypted flag | talesrunner pkg unpack
4.3 Table of Contents Entry (per file):
| Offset | Type | Description | |--------|----------|----------------------| | 0x00 | char[256]| filename (null‑term) | | 0x100 | uint32 | offset in archive | | 0x104 | uint32 | compressed size | | 0x108 | uint32 | original size | | 0x10C | uint32 | flags (compression type) | If your goal is not modding but simply
4.4 Compression
The steps can vary depending on your operating system and the specific .pkg file you're dealing with. Here are general steps for macOS and a hypothetical approach for Linux: Once you successfully run talesrunner pkg unpack ,
def xor_decrypt(data, key=0xAB):
return bytes([b ^ key for b in data])
Once you successfully run talesrunner pkg unpack, you will see a directory structure like this:
/extracted/
├─ character/
│ ├─ action/ (animation files .kf or .nif)
│ ├─ parts/ (shoes, tops, hats - each a .nif + .dds)
├─ map/
│ ├─ farm/ (classic obstacle course)
│ ├─ ice/ (slippery maps)
├─ ui/
│ ├─ font/ (.fnt files)
│ ├─ loading/ (.jpg loading screens)
├─ sound/
│ ├─ bgm/ (.ogg or .mp3)
│ ├─ sfx/ (.wav)