10#include <unordered_map>
114 25, 24, 32, 57, 49, 59, 6, 2,
115 43, 44, 10, 17, 1, 18, 19, 14,
116 5, 20, 21, 4, 0, 29, 26, 62,
117 3, 12, 13, 7, 58, 33, 48, 63,
118 28, 9, 8, 53, 37, 38, 39, 30,
119 31, 56, 52, 51, 55, 16, 36, 45,
120 50, 60, 61, 46, 42, 41, 54, 15,
121 34, 47, 11, 22, 23, 27, 35, 40,
133 uint32_t uncompressedLength;
140 std::array<Lump, BSP_LUMP_COUNT> lumps;
142 uint32_t mapRevision;
146 explicit BSP(std::string path_,
bool loadPatchFiles =
true);
148 explicit operator bool()
const;
150 static BSP create(std::string
path, uint32_t version = 21, uint32_t mapRevision = 0);
160 [[nodiscard]]
bool isL4D2()
const;
174 [[nodiscard]] std::optional<std::vector<std::byte>>
getLumpData(
BSPLump lumpIndex,
bool noDecompression =
false)
const;
176 template<BSPLump Lump>
210 bool setLump(
BSPLump lumpIndex, uint32_t version, std::span<const std::byte> data, uint8_t compressLevel = 0);
212 bool setLump(uint32_t version, std::span<const BSPEntityKeyValues> data, uint8_t compressLevel = 0);
232 bool bake(std::string_view outputPath =
"");
237 [[nodiscard]] std::vector<BSPEntityKeyValues>
parseEntities()
const;
239 [[nodiscard]] std::vector<BSPPlane>
parsePlanes()
const;
245 [[nodiscard]] std::vector<BSPNode>
parseNodes()
const;
249 [[nodiscard]] std::vector<BSPFace>
parseFaces()
const;
251 [[nodiscard]] std::vector<BSPEdge>
parseEdges()
const;
259 [[nodiscard]] std::vector<BSPGameLump>
parseGameLumps(
bool decompress)
const;
265 std::unordered_map<uint32_t, std::pair<Lump, std::vector<std::byte>>>
stagedLumps;
uint32_t getVersion() const
bool hasLump(BSPLump lumpIndex) const
std::vector< BSPBrushModel > parseBrushModels() const
std::vector< BSPNode > parseNodes() const
std::vector< BSPTextureData > parseTextureData() const
std::vector< BSPGameLump > parseGameLumps(bool decompress) const
std::unordered_map< uint32_t, std::pair< Lump, std::vector< std::byte > > > stagedLumps
std::vector< BSPFace > parseOriginalFaces() const
void setL4D2(bool isL4D2)
static BSP create(std::string path, uint32_t version=21, uint32_t mapRevision=0)
bool isLumpCompressed(BSPLump lumpIndex) const
void reset()
Resets ALL in-memory modifications (version, all lumps including game lumps, map revision)
void setConsole(bool isConsole)
bool bake(std::string_view outputPath="")
void resetLump(BSPLump lumpIndex)
Reset changes made to a lump before they're written to disk.
uint32_t getMapRevision() const
std::vector< BSPGameLump > stagedGameLumps
bool setGameLump(BSPGameLump::Signature signature, uint16_t version, std::span< const std::byte > data, uint8_t compressLevel=0)
std::vector< BSPFace > parseFaces() const
uint32_t stagedMapRevision
void setVersion(uint32_t version)
std::vector< BSPSurfEdge > parseSurfEdges() const
std::optional< std::vector< std::byte > > getGameLumpData(BSPGameLump::Signature signature) const
uint16_t getGameLumpVersion(BSPGameLump::Signature signature)
std::vector< BSPEdge > parseEdges() const
std::vector< BSPVertex > parseVertices() const
void createLumpPatchFile(BSPLump lumpIndex) const
uint32_t getLumpVersion(BSPLump lumpIndex) const
bool isGameLumpCompressed(BSPGameLump::Signature signature) const
std::vector< BSPPlane > parsePlanes() const
bool setLumpFromPatchFile(const std::string &lumpFilePath)
bool setLump(BSPLump lumpIndex, uint32_t version, std::span< const std::byte > data, uint8_t compressLevel=0)
BSP::setGameLump should be used for writing game lumps as they need special handling.
std::vector< BSPTextureInfo > parseTextureInfo() const
std::vector< BSPEntityKeyValues > parseEntities() const
void setMapRevision(uint32_t mapRevision)
constexpr std::array< uint32_t, 64 > BSP_LUMP_ORDER
Pulled from Portal 2, map e1912.
constexpr auto BSP_SIGNATURE
constexpr int32_t BSP_LUMP_COUNT
@ LEAF_AMBIENT_LIGHTING_HDR
@ S2006_XBOX_LIGHTMAPPAGES
@ L4D_OVERLAY_SYSTEM_LEVELS
@ S2006_XBOX_LIGHTMAPPAGEINFOS
@ S2004_DISP_LIGHTMAP_ALPHAS
@ DISP_LIGHTMAP_SAMPLE_POSITIONS
@ S2004_PHYSCOLLIDESURFACE
@ FACE_MACRO_TEXTURE_INFO
constexpr auto BSP_CONSOLE_SIGNATURE
consteval uint32_t makeFourCC(const char fourCC[4])
Creates a FourCC identifier from a string of 4 characters.