SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
GCF.h
Go to the documentation of this file.
1#pragma once
2
3#include "../PackFile.h"
4
5namespace vpkpp {
6
7constexpr std::string_view GCF_EXTENSION = ".gcf";
8
9class GCF : public PackFileReadOnly {
10protected:
11#pragma pack(push, 1)
12 struct Header {
13 uint32_t dummy1;
14 uint32_t dummy2;
15 uint32_t gcfversion;
16 uint32_t appid;
17 uint32_t appversion;
18 uint32_t dummy3;
19 uint32_t dummy4;
20 uint32_t filesize;
21 uint32_t blocksize;
22 uint32_t blockcount;
23 uint32_t dummy5;
24 };
25
26 // second header with info about blocks inside the file
27 // appears only ONCE not before every block!
28 struct BlockHeader {
29 uint32_t count;
30 uint32_t used;
31 uint32_t dummy1;
32 uint32_t dummy2;
33 uint32_t dummy3;
34 uint32_t dummy4;
35 uint32_t dummy5;
36 uint32_t checksum;
37 };
38
39 struct Block {
40 uint32_t entry_type;
46 uint32_t dir_index;
47 };
48
50 uint32_t dummy1;
51 uint32_t cacheid;
52 uint32_t gcfversion;
53 uint32_t itemcount;
54 uint32_t filecount;
55 uint32_t dummy2;
56 uint32_t dirsize;
57 uint32_t namesize;
58 uint32_t info1count;
59 uint32_t copycount;
60 uint32_t localcount;
61 uint32_t dummy3;
62 uint32_t dummy4;
63 uint32_t checksum;
64 };
65
67 uint32_t nameoffset;
68 uint32_t itemsize;
69 uint32_t fileid;
70 uint32_t dirtype;
71 uint32_t parentindex;
72 uint32_t nextindex;
73 uint32_t firstindex;
74 };
75
78 std::string filename;
79 };
80
82 uint32_t dummy1;
83 uint32_t dummy2;
84 };
85
88 };
89
91 uint32_t appversion;
92 uint32_t blockcount;
93 uint32_t blocksize;
95 uint32_t used;
96 uint32_t checksum;
97 };
98
100 uint32_t dummy1;
101 uint32_t dummy2;
102 uint32_t item_count;
104 };
105
107 uint32_t count;
108 uint32_t firstindex;
109 };
110#pragma pack(pop)
111
112public:
113 [[nodiscard]] static std::unique_ptr<PackFile> open(const std::string& path, const EntryCallback& callback = nullptr);
114
115 static constexpr inline std::string_view GUID = "0C088488F666451E9361297528F2446D";
116
117 [[nodiscard]] constexpr std::string_view getGUID() const override {
118 return GCF::GUID;
119 }
120
121 [[nodiscard]] constexpr bool hasEntryChecksums() const override {
122 return true;
123 }
124
125 [[nodiscard]] std::vector<std::string> verifyEntryChecksums() const override;
126
127 [[nodiscard]] constexpr bool isCaseSensitive() const override {
128 return true;
129 }
130
131 [[nodiscard]] std::optional<std::vector<std::byte>> readEntry(const std::string& path_) const override;
132
133 [[nodiscard]] Attribute getSupportedEntryAttributes() const override;
134
135 [[nodiscard]] explicit operator std::string() const override;
136
137protected:
139
142 std::vector<Block> blockdata{};
143 std::vector<uint32_t> fragmap{};
145 //std::vector<DirectoryEntry2> direntries{};
146 std::vector<DirectoryMapEntry> dirmap_entries{};
148 std::vector<ChecksumMapEntry> chksum_map{};
149 std::vector<uint32_t> checksums{};
150
151private:
153};
154
155} // namespace vpkpp
#define VPKPP_REGISTER_PACKFILE_OPEN(extension, function)
Definition: PackFile.h:242
Definition: GCF.h:9
Header header
Definition: GCF.h:140
std::vector< DirectoryMapEntry > dirmap_entries
Definition: GCF.h:146
std::vector< Block > blockdata
Definition: GCF.h:142
BlockHeader blockheader
Definition: GCF.h:141
std::vector< ChecksumMapEntry > chksum_map
Definition: GCF.h:148
std::vector< std::string > verifyEntryChecksums() const override
Verify the checksums of each file, if a file fails the check its path will be added to the vector If ...
Definition: GCF.cpp:189
constexpr std::string_view getGUID() const override
Get the GUID corresponding to the pack file type.
Definition: GCF.h:117
DataBlockHeader datablockheader
Definition: GCF.h:147
constexpr bool isCaseSensitive() const override
Does the format support case-sensitive file names?
Definition: GCF.h:127
constexpr bool hasEntryChecksums() const override
Returns true if the format has a checksum for each entry.
Definition: GCF.h:121
static constexpr std::string_view GUID
Definition: GCF.h:115
DirectoryHeader dirheader
Definition: GCF.h:144
Attribute getSupportedEntryAttributes() const override
Returns a list of supported entry attributes Mostly for GUI programs that show entries and their meta...
Definition: GCF.cpp:273
std::vector< uint32_t > checksums
Definition: GCF.h:149
std::optional< std::vector< std::byte > > readEntry(const std::string &path_) const override
Try to read the entry's data to a bytebuffer.
Definition: GCF.cpp:214
std::vector< uint32_t > fragmap
Definition: GCF.h:143
static std::unique_ptr< PackFile > open(const std::string &path, const EntryCallback &callback=nullptr)
Definition: GCF.cpp:13
PackFileReadOnly(const std::string &fullFilePath_)
Definition: PackFile.cpp:720
EntryCallbackBase< void > EntryCallback
Definition: PackFile.h:30
Definition: Attribute.h:5
Attribute
Definition: Attribute.h:7
constexpr std::string_view GCF_EXTENSION
Definition: GCF.h:7
uint32_t checksum
Definition: GCF.h:36
uint32_t dummy5
Definition: GCF.h:35
uint32_t dummy4
Definition: GCF.h:34
uint32_t used
Definition: GCF.h:30
uint32_t dummy2
Definition: GCF.h:32
uint32_t count
Definition: GCF.h:29
uint32_t dummy3
Definition: GCF.h:33
uint32_t dummy1
Definition: GCF.h:31
uint32_t file_data_offset
Definition: GCF.h:41
uint32_t file_data_size
Definition: GCF.h:42
uint32_t dir_index
Definition: GCF.h:46
uint32_t next_block_entry_index
Definition: GCF.h:44
uint32_t entry_type
Definition: GCF.h:40
uint32_t prev_block_entry_index
Definition: GCF.h:45
uint32_t first_data_block_index
Definition: GCF.h:43
uint32_t firstblockoffset
Definition: GCF.h:94
std::string filename
Definition: GCF.h:78
DirectoryEntry entry_real
Definition: GCF.h:77
uint32_t nameoffset
Definition: GCF.h:67
uint32_t nextindex
Definition: GCF.h:72
uint32_t firstindex
Definition: GCF.h:73
uint32_t parentindex
Definition: GCF.h:71
uint32_t firstblockindex
Definition: GCF.h:87
uint32_t dummy5
Definition: GCF.h:23
uint32_t filesize
Definition: GCF.h:20
uint32_t appversion
Definition: GCF.h:17
uint32_t blocksize
Definition: GCF.h:21
uint32_t appid
Definition: GCF.h:16
uint32_t dummy4
Definition: GCF.h:19
uint32_t blockcount
Definition: GCF.h:22
uint32_t dummy2
Definition: GCF.h:14
uint32_t dummy1
Definition: GCF.h:13
uint32_t gcfversion
Definition: GCF.h:15
uint32_t dummy3
Definition: GCF.h:18