top of page

INTRODUCTION

I created a VPK build system which builds VPK (Valve PAK) files from a workspace. VPK files contain textures, BSP level files, models, shaders, and a bunch more assets!​ The system supports LZHAM compression, the user could determine the compression level.

​

The system is workspace oriented, which means that we build VPK's with only the necessary files from a certain workspace directory (usually the 'PLATFORM' path of the engine).

​

Each VPK file has a control (manifest) file containing descriptors for each asset that should be packed into the resulting VPK file. The descriptor defines the texture flags (if it's a texture), the load flags, whether or not to use compression on the asset, whether or not to share bytes with other identical blocks within the VPK (storage optimization), and the preload size.

​

  • Build system supports a ignore file (.vpkignore) allowing user to redact developmentonly assets for ship (a designer/artist could leave their blockout/development maps/textures/models within the workspace and never worry about it getting accidentally packed and shipped, even if it's defined in the build manifest!).

  • Build system is integrated into the dedicated server, which is used as our main command line tool.

  • Build system supports fully automated batch operations (creating many shipping VPK for server and client, all maps and core VPK files can be rebuild with a single command).

  • The system features LZHAM as the compression library for assets, I modified this library to compute a CRC for each asset on the go and I did some light modifications within the failure detection logic as well.

​

Below an overview of the tool:

OVERVIEW

packedstore_overview.png
bottom of page