SourcePP
Several modern C++20 libraries for sanely parsing Valve's formats.
Loading...
Searching...
No Matches
LumpData.h
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4
6#include <sourcepp/Math.h>
7
8namespace bsppp {
9
10//region Lump 1 (Planes)
11
13 sourcepp::math::Vec3f normal;
14 float dist;
15 int32_t type;
16};
17
19
20//endregion
21
22//region Lump 2 (Texture Data)
23
25 sourcepp::math::Vec3f reflectivity;
27 int32_t width;
28 int32_t height;
29 int32_t viewWidth;
30 int32_t viewHeight;
31};
32
34
35//endregion
36
37//region Lump 3 (Vertices)
38
40 sourcepp::math::Vec3f position;
41};
42
44
45//endregion
46
47//region Lump 5 (Nodes)
48
49struct BSPNode_v0 {
50 uint32_t planeNum;
51 sourcepp::math::Vec2i children;
52 sourcepp::math::Vec3i16 mins;
53 sourcepp::math::Vec3i16 maxs;
54 uint16_t firstFace;
55 uint16_t numFaces;
56 int16_t area;
57 uint16_t _unused0;
58};
59
60struct BSPNode_v1 {
61 uint32_t planeNum;
62 sourcepp::math::Vec2i children;
63 sourcepp::math::Vec3f mins;
64 sourcepp::math::Vec3f maxs;
65 uint32_t firstFace;
66 uint32_t numFaces;
67 int16_t area;
68
69 [[nodiscard]] static BSPNode_v1 upgrade(const BSPNode_v0& old) {
70 return {
71 old.planeNum,
72 {
73 old.children[0],
74 old.children[1],
75 },
76 {
77 static_cast<float>(old.mins[0]),
78 static_cast<float>(old.mins[1]),
79 static_cast<float>(old.mins[2]),
80 },
81 {
82 static_cast<float>(old.maxs[0]),
83 static_cast<float>(old.maxs[1]),
84 static_cast<float>(old.maxs[2]),
85 },
86 old.firstFace,
87 old.numFaces,
88 old.area,
89 };
90 }
91};
92
94
95//endregion
96
97//region Lump 6 (Texture Info)
98
100 sourcepp::math::Vec4f textureVector1;
101 sourcepp::math::Vec4f textureVector2;
102 sourcepp::math::Vec4f lightmapVector1;
103 sourcepp::math::Vec4f lightmapVector2;
104 int32_t flags;
105 int32_t textureData;
106};
107
109
110//endregion
111
112//region Lump 7/27 (Faces/Original Faces)
113
115 uint16_t planeNum;
116 uint8_t side;
117 uint8_t onNode;
118 int32_t firstEdge;
119 int16_t numEdges;
120 int16_t texInfo;
121 int16_t dispInfo;
123 sourcepp::math::Vec4ui8 styles;
124 int32_t lightOffset;
125 float area;
126 sourcepp::math::Vec2i lightmapTextureMinsInLuxels;
127 sourcepp::math::Vec2i lightmapTextureSizeInLuxels;
129 uint16_t numPrims;
130 uint16_t firstPrimID;
132};
133
135 uint32_t planeNum;
136 uint8_t side;
137 uint8_t onNode;
138 int32_t firstEdge;
139 int32_t numEdges;
140 int32_t texInfo;
141 int32_t dispInfo;
143 sourcepp::math::Vec4ui8 styles;
144 int32_t lightOffset;
145 float area;
146 sourcepp::math::Vec2i lightmapTextureMinsInLuxels;
147 sourcepp::math::Vec2i lightmapTextureSizeInLuxels;
149 uint32_t enableShadows : 1;
150 uint32_t numPrims : 31;
151 uint32_t firstPrimID;
153
154 [[nodiscard]] static BSPFace_v2 upgrade(const BSPFace_v1& old) {
155 return {
156 old.planeNum,
157 old.side,
158 old.onNode,
159 old.firstEdge,
160 old.numEdges,
161 old.texInfo,
162 old.dispInfo,
164 {
165 old.styles[0],
166 old.styles[1],
167 old.styles[2],
168 old.styles[3],
169 },
170 old.lightOffset,
171 old.area,
172 {
175 },
176 {
179 },
180 old.originalFace,
181 1,
182 old.numPrims,
183 old.firstPrimID,
184 old.smoothingGroups,
185 };
186 }
187};
188
190
191//endregion
192
193//region Lump 12 (Edges)
194
196 uint16_t v0;
197 uint16_t v1;
198};
199
201 uint32_t v0;
202 uint32_t v1;
203
204 [[nodiscard]] static BSPEdge_v1 upgrade(const BSPEdge_v0& old) {
205 return {
206 old.v0,
207 old.v1,
208 };
209 }
210};
211
213
214//endregion
215
216//region Lump 13 (SurfEdges)
217
219 int32_t surfEdge;
220};
221
223
224//endregion
225
226//region Lump 14 (Brush Models)
227
229 sourcepp::math::Vec3f min;
230 sourcepp::math::Vec3f max;
231 sourcepp::math::Vec3f origin;
232 int32_t headNode;
233 int32_t firstFace;
234 int32_t numFaces;
235};
236
238
239//endregion
240
241//region Lump 35 (Game Lump)
242
244 enum Signature : uint32_t {
250 uint16_t isCompressed;
251 uint16_t version;
252 // Offset from beginning of file, not game lump (except Portal 2 on console but we'll ignore that for now)
253 uint32_t offset;
254 // Compressed size is determined by subtracting the next entry's offset with this one like VTF resources
256
257 std::vector<std::byte> data;
258};
259
260//endregion
261
262} // namespace bsppp
Definition: BSP.h:18
consteval uint32_t makeFourCC(const char fourCC[4])
Creates a FourCC identifier from a string of 4 characters.
Definition: Binary.h:18
sourcepp::math::Vec3f min
Definition: LumpData.h:229
sourcepp::math::Vec3f origin
Definition: LumpData.h:231
sourcepp::math::Vec3f max
Definition: LumpData.h:230
static BSPEdge_v1 upgrade(const BSPEdge_v0 &old)
Definition: LumpData.h:204
int32_t lightOffset
Definition: LumpData.h:124
sourcepp::math::Vec4ui8 styles
Definition: LumpData.h:123
int16_t surfaceFogVolumeID
Definition: LumpData.h:122
sourcepp::math::Vec2i lightmapTextureMinsInLuxels
Definition: LumpData.h:126
int16_t texInfo
Definition: LumpData.h:120
uint32_t smoothingGroups
Definition: LumpData.h:131
sourcepp::math::Vec2i lightmapTextureSizeInLuxels
Definition: LumpData.h:127
int16_t numEdges
Definition: LumpData.h:119
int32_t originalFace
Definition: LumpData.h:128
uint16_t planeNum
Definition: LumpData.h:115
int32_t firstEdge
Definition: LumpData.h:118
uint8_t onNode
Definition: LumpData.h:117
uint16_t firstPrimID
Definition: LumpData.h:130
uint16_t numPrims
Definition: LumpData.h:129
int16_t dispInfo
Definition: LumpData.h:121
uint32_t planeNum
Definition: LumpData.h:135
static BSPFace_v2 upgrade(const BSPFace_v1 &old)
Definition: LumpData.h:154
int32_t surfaceFogVolumeID
Definition: LumpData.h:142
int32_t numEdges
Definition: LumpData.h:139
uint32_t numPrims
Definition: LumpData.h:150
int32_t originalFace
Definition: LumpData.h:148
int32_t lightOffset
Definition: LumpData.h:144
uint32_t smoothingGroups
Definition: LumpData.h:152
sourcepp::math::Vec2i lightmapTextureMinsInLuxels
Definition: LumpData.h:146
uint32_t enableShadows
Definition: LumpData.h:149
sourcepp::math::Vec4ui8 styles
Definition: LumpData.h:143
uint32_t firstPrimID
Definition: LumpData.h:151
uint8_t onNode
Definition: LumpData.h:137
sourcepp::math::Vec2i lightmapTextureSizeInLuxels
Definition: LumpData.h:147
int32_t dispInfo
Definition: LumpData.h:141
int32_t texInfo
Definition: LumpData.h:140
int32_t firstEdge
Definition: LumpData.h:138
uint32_t uncompressedLength
Definition: LumpData.h:255
@ SIGNATURE_DETAIL_PROP_LIGHTING_LDR
Definition: LumpData.h:247
@ SIGNATURE_DETAIL_PROP_LIGHTING_HDR
Definition: LumpData.h:248
std::vector< std::byte > data
Definition: LumpData.h:257
uint32_t offset
Definition: LumpData.h:253
enum bsppp::BSPGameLump::Signature signature
uint16_t version
Definition: LumpData.h:251
uint16_t isCompressed
Definition: LumpData.h:250
uint16_t numFaces
Definition: LumpData.h:55
uint16_t _unused0
Definition: LumpData.h:57
int16_t area
Definition: LumpData.h:56
sourcepp::math::Vec2i children
Definition: LumpData.h:51
uint32_t planeNum
Definition: LumpData.h:50
sourcepp::math::Vec3i16 mins
Definition: LumpData.h:52
uint16_t firstFace
Definition: LumpData.h:54
sourcepp::math::Vec3i16 maxs
Definition: LumpData.h:53
static BSPNode_v1 upgrade(const BSPNode_v0 &old)
Definition: LumpData.h:69
uint32_t numFaces
Definition: LumpData.h:66
uint32_t planeNum
Definition: LumpData.h:61
sourcepp::math::Vec3f mins
Definition: LumpData.h:63
int16_t area
Definition: LumpData.h:67
sourcepp::math::Vec2i children
Definition: LumpData.h:62
sourcepp::math::Vec3f maxs
Definition: LumpData.h:64
uint32_t firstFace
Definition: LumpData.h:65
sourcepp::math::Vec3f normal
Definition: LumpData.h:13
sourcepp::math::Vec3f reflectivity
Definition: LumpData.h:25
sourcepp::math::Vec4f textureVector2
Definition: LumpData.h:101
sourcepp::math::Vec4f lightmapVector2
Definition: LumpData.h:103
sourcepp::math::Vec4f lightmapVector1
Definition: LumpData.h:102
sourcepp::math::Vec4f textureVector1
Definition: LumpData.h:100
sourcepp::math::Vec3f position
Definition: LumpData.h:40