Several modern C++20 libraries for sanely parsing Valve formats, rolled into one big repository.
Wrappers for libraries considered complete exist for C, C#, and/or Python, depending on the library.
The Python wrappers can be found on PyPI in the sourcepp package.
Name | Supports | Read | Write | Wrappers |
---|---|---|---|---|
bsppp * |
BSP v17-27
• Console modifications • Left 4 Dead 2 modifications • Strata Source modifications |
✅ | ✅ | Python |
dmxpp * |
DMX Binary v1-5
• srctools modifications |
✅ | ❌ | |
fspp * |
Source 1 filesystem accessor | ✅ | ✅ | |
gamepp |
Get Source engine instance window title/position/size | ✅ | ❌ | C Python |
Run commands in a Source engine instance remotely | ❌ | ✅ | ||
kvpp |
KeyValues v1 Text† | ✅ | ✅ | |
KeyValues v1 Binary | ✅ | ✅ | ||
mdlpp * |
MDL v44-49 | ✅ | ❌ | |
VTX v7 | ✅ | ❌ | ||
VVD v4 | ✅ | ❌ | ||
sndpp * |
WAV | ✅ | ❌ | |
XWV v4 | ✅ | ❌ | ||
steampp |
Find Steam install folder | ✅ | - | C Python |
Find installed Steam games | ✅ | - | ||
Find Steam game library assets | ✅ | - | ||
toolpp |
FGD (Source 1)
• J.A.C.K. modifications • Hammer++ modifications • Strata Source modifications |
✅ | ✅ | Python |
WC (CmdSeq) v0.1-0.2
• Strata Source modifications |
✅ | ✅ | ||
vcryptpp |
VICE encrypted files | ✅ | ✅ | C C# Python |
VFONT encrypted fonts | ✅ | ✅ | ||
vpkpp |
007 v1.1, v1.3 (007 - Nightfire) | ✅ | ❌ | C C# Python |
FPX v10 (Tactical Intervention) | ✅ | ✅ | ||
GCF v6 | ✅ | ❌ | ||
GMA v1-3 (Garry's Mod) | ✅ | ✅ | ||
HOG (Descent) | ✅ | ❌ | ||
OL (Worldcraft Object Library) | ✅ | ❌ | ||
ORE (Narbacular Drop) | ✅ | ❌ | ||
PAK (Quake, WON Half-Life)
• SiN modifications • HROT modifications |
✅ | ✅ | ||
PCK v1-2 (Godot Engine) | ✅ | ✅ | ||
VPK pre-v1, v1-2, v54
• Counter-Strike: 2 modifications • Counter-Strike: Source ClientMod modifications |
✅ | ✅ | ||
VPK (Vampire: The Masquerade - Bloodlines) | ✅ | ✅ | ||
VPP v1-3 (Red Faction) | ✅ | ❌ | ||
WAD v3 | ✅ | ✅ | ||
XZP v6 (Half-Life 2 for XBOX) | ✅ | ❌ | ||
ZIP, and some of its aliases:
• BEE_PACK (BEE2.4 Package) • BMZ (Source 1 Bonus Maps) • FPK (Tactical Intervention) • PK3 (Quake III) • PK4 (Quake IV, Doom 3) • PKZ (Quake II RTX) |
✅ | ✅ | ||
vtfpp |
APNG | ✅ | ❌ | C Python |
BMP | ✅ | ✅ | ||
EXR v1 | ✅ | ✅ | ||
GIF | ✅ | ❌ | ||
HDR | ✅ | ✅ | ||
JPEG | ✅ | ✅ | ||
PIC | ✅ | ❌ | ||
PNG | ✅ | ✅ | ||
PNM (PGM, PPM) | ✅ | ❌ | ||
PPL v0 | ✅ | ✅ | ||
PSD | ✅ | ❌ | ||
QOI | ✅ | ✅ | ||
SHT v0-1 | ✅ | ✅ | ||
TGA | ✅ | ✅ | ||
TTX (TTH, TTZ) v1.0 | ✅ | ✅ | ||
VTF v7.0-7.6
• Strata Source modifications • XTF v5.0 (Xbox, Half-Life 2) • VTFX v8 (X360 & PS3, Orange Box) • VTF3 v8 (PS3, Portal 2 & CS:GO) |
✅ | ✅ | ||
WebP | ✅ | ✅ |
(*) These libraries are incomplete and still in development. Their interfaces are unstable and will likely change in the future. Libraries not starred should be considered stable, and their existing interfaces will not change much if at all. Note that wrappers only exist for stable libraries.
(†) Many text-based formats in Source are close to (if not identical to) KeyValues v1, such as VMT and VMF.
Anything using the sourcepp
parser set that I know of, directly or indirectly.
- gimp-vtf: A GIMP plugin to load and save VTF files.
- GodotSource: A work-in-progress set of bindings to connect the
sourcepp
libraries to Godot. Allows GDScript to work with the libraries, and allows Godot to directly load Source engine assets from a user project or from installed Source games. - MareTF: An open source MIT-licensed CLI/GUI tool that can create, extract from, preview the contents of and write to every variant of VTF file. Replicates the functionality of Valve's
vtex.exe
and VTFEdit. - Myst IV: Revolution: Performs various fixes for the game Myst IV: Revelation.
- PBR-2-Source: A Python-powered GUI for converting PBR materials into materials compatible with the Source engine.
- RectMaker: A freeware GUI tool that can create and modify
.rect
files used in Hammer++'s hotspotting algorithm. - Source Map Compiler Tools: An open source recreation of the Slammin' Source Map Tools.
- Verifier: A small program that can build an index of a game's files, and validate existing files based on that index. Similar to Steam's "Verify integrity of game files" option, but without overwriting any files.
- VPKEdit: An open source MIT-licensed CLI/GUI tool that can create, extract from, preview the contents of and write to several pack file formats. Replicates the functionality of Valve's
vpk.exe
and GCFScape.- bsp-linux-fix: Patches maps which have improperly cased packed assets by repacking the assets, fixing an issue on Linux.
- CS2-EomVotesFix: Fixes displaying workshop map names and thumbnails during end-of-match voting for LAN events.
- dham: Modifies Dota 2 hero aliases based on a configuration file and packages the changes.
- Linux BSP Case Folding Workaround: A bash script designed to resolve issues with improperly cased packed map assets in Source engine games on Linux. Extracting the assets allows the game to find them properly.
- props_scaling_recompiler: Allows converting
prop_scalable
into a static prop, effectively implementing static prop scaling outside CS:GO. - rock:sail: CS2 client-side tool to use skins for free (only visible to the user of the tool).
|
|
|
bsppp
partial library redesign, lump compression and game lump parsing/writing support contributed by @Tholp.dmxpp
's support for srctools formats was contributed by @TeamSpen210.steampp
is based on the SteamAppPathProvider library by @Trico Everfire and Momentum Mod contributors.vpkpp
's 007 parser is based on reverse-engineering work by Alhexx.vpkpp
's GCF parser was contributed by @bt and @ymgve.vpkpp
's HOG parser was contributed by @erysdren.vpkpp
's OL parser is based on reverse-engineering work by @erysdren.vpkpp
's ORE parser is based on reverse-engineering work by @erysdren.vpkpp
's VPP parser was contributed by @erysdren.vpkpp
's WAD3 parser/writer was contributed by @ozxybox.vtfpp
's NICE/Lanczos-3 resize filter support was contributed by @koerismo.vtfpp
's SHT parser/writer was contributed by @Trico Everfire.vtfpp
's VTF write support is loosely based on work by @Trico Everfire.vtfpp
's HDRI to cubemap conversion code is modified from the HdriToCubemap library by @ivarout.