Ähnlich wie WAD ist PAK ein Containerformat welches zur Speicherung der Half-Life Assets wie beispielsweise Modellen, Maps oder Audiodateien dient. Wie jedes andere Format der GoldSrc Engine wird es in der Little-Endian Byte-Reihenfolge gespeichert.
Das PAK Format sieht drei Teile innerhalb einer Datei vor:
Der Header beinhaltet grundlegende Informationen zur PAK Datei, welche zur weiteren Nutzung der Datei benötigt werde. Seine Länge beträgt immer 12 Byte.
| Byte offset | Typ | Inhalt | Beschreibung |
|---|---|---|---|
| 0x00 - 0x03 | BYTE[4] | „PACK“ | Identifikation als PAK Datei |
| 0x04 - 0x07 | DWORD | Asset Directory Offset | Das absolute Offset zum Asset Directory in Bytes |
| 0x08 - 0x0C | DWORD | Asset Directory Size | Die Größe des Asset Directories in Bytes |
Das Asset Directory ist eine Auflistung von einem oder mehr Einträgen, welche auf die einzelnen Assets verweisen. Das Asset Directory reicht hierbei vom im Header beschriebenen Asset Directory Offset bis zum Ende der Datei. Ein Eintrag im Asset Directory beschreibt ein Asset innerhalb des “Asset Image“-Bereiches und eine feste Größe von 64 Byte und ist wie folgt aufgebaut:
| Byte offset | Typ | Inhalt | Beschreibung |
|---|---|---|---|
| 0x00 - 0x38 | BYTE[56] | Asset Name | Der Name des Assets. |
| 0x39 - 0x3b | DWORD | Asset Offset | Der absolute Offset zum Asset in Bytes |
| 0x3c - 0x3f | DWORD | Asset Length | Die Länge des Assets in Bytes |
Asset Name muss nicht zwingend aus einem reinen Dateinamen bestehen. Es ist auch möglich virtuelle Ordner zu erstellen, indem man den Namen entsprechend mit / trennt. falls man Pfade speichert dürfen diese keinen führenden Slash beinhalten oder relative Pfade im Asset Name genutzt werden. Der Asset Name wird mit NULL terminiert.
Die Asset Images sind die einfache Bytepräsentation der einzelnen Assets. Für jedes Asset Image existiert ein Eintrag im Asset Directory. Die Asset Images sind weder komprimiert, noch speziell ausgerichtet.