DarkPlaces
Game engine based on the Quake 1 engine by id Software, developed by LadyHavoc
 
vpk.h
Go to the documentation of this file.
1/*
2Copyright (C) 2020-2021 David Knapp (Cloudwalk)
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19*/
20
21#ifndef VPK_H
22#define VPK_H
23
24#include <stdint.h>
25
26/*
27 * The VPK format is Valve's package format for Source engine games,
28 * used to store game content.
29 *
30 * Game content is spread across multiple VPK files. A single, special
31 * VPK file, ending in _dir.vpk, contains a centralized directory
32 * tree for all of the other files, and has its own header.
33 * Although content can be stored in the directory file.
34 *
35 * This is useful for navigating game content without having
36 * to guess which VPK some file belongs to, while also
37 * making game updates more efficient by spreading content
38 * across multiple files, where opening and closing thousands
39 * of loose files to update them is less efficient.
40 */
41
42const uint32_t VPK_SIGNATURE = 0x55aa1234;
43
44typedef struct dvpk_header_v1_s
45{
46 const uint32_t signature; // Should always be VPK_SIGNATURE
47 const uint32_t version; // Should always be 1
48
49 // Size of directory tree
50 uint32_t tree_size;
52
53typedef struct dvpk_header_v2_s
54{
55 const uint32_t signature; // Should always be VPK_SIGNATURE
56 const uint32_t version; // Should always be 2
57
58 // Size of directory tree
59 uint32_t tree_size;
60
61 // Section sizes
62 uint32_t filedata_size;
64 uint32_t othermd5_size;
67
68typedef struct dvpk_dir_entry_s
69{
70 uint32_t crc32;
71 uint16_t preloadbytes;
72
73 uint16_t archiveindex;
74 uint32_t entryoffset;
75 uint32_t entrylength;
76 const uint16_t terminator; // Should always be 0xFFFF
78
79typedef struct dvpk_archive_md5_entry_s
80{
81 uint32_t archiveindex;
83 uint32_t count;
84 int8_t md5sum[16];
86
87typedef struct dvpk_other_md5_entry_s
88{
89 int8_t treesum[16];
90 int8_t archivemd5sum[16];
91 int8_t unknown[16]; // ??
93
94typedef struct dvpk_signature_entry_s
95{
96 uint32_t pubkeysize; // Always 160
97 int8_t pubkey[160];
98 uint32_t signaturesize; // Always 128
99 int8_t signature[128];
101
102#endif
Definition vpk.h:80
uint32_t count
Definition vpk.h:83
uint32_t startingoffset
Definition vpk.h:82
uint32_t archiveindex
Definition vpk.h:81
Definition vpk.h:69
const uint16_t terminator
Definition vpk.h:76
uint16_t preloadbytes
Definition vpk.h:71
uint32_t entryoffset
Definition vpk.h:74
uint32_t entrylength
Definition vpk.h:75
uint32_t crc32
Definition vpk.h:70
uint16_t archiveindex
Definition vpk.h:73
const uint32_t version
Definition vpk.h:47
uint32_t tree_size
Definition vpk.h:50
const uint32_t signature
Definition vpk.h:46
const uint32_t signature
Definition vpk.h:55
uint32_t othermd5_size
Definition vpk.h:64
uint32_t archivemd5_size
Definition vpk.h:63
const uint32_t version
Definition vpk.h:56
uint32_t tree_size
Definition vpk.h:59
uint32_t filedata_size
Definition vpk.h:62
uint32_t signature_size
Definition vpk.h:65
Definition vpk.h:88
Definition vpk.h:95
uint32_t signaturesize
Definition vpk.h:98
uint32_t pubkeysize
Definition vpk.h:96
const uint32_t VPK_SIGNATURE
Definition vpk.h:42