diff --git a/src/Components/Modules/AssetInterfaces/IPhysCollmap.cpp b/src/Components/Modules/AssetInterfaces/IPhysCollmap.cpp index ec3e7e5e..e91f8500 100644 --- a/src/Components/Modules/AssetInterfaces/IPhysCollmap.cpp +++ b/src/Components/Modules/AssetInterfaces/IPhysCollmap.cpp @@ -13,22 +13,22 @@ namespace Assets // Save_cbrushWrapper_t { - AssertSize(Game::cbrushWrapper_t, 36); + AssertSize(Game::cbrush_t, 36); - if (brush->brush.brushSide) + if (brush->brush.sides) { AssertSize(Game::cbrushside_t, 8); buffer->align(Utils::Stream::ALIGN_4); Game::cbrushside_t* destBrushSide = buffer->dest(); - buffer->saveArray(brush->brush.brushSide, brush->brush.count); + buffer->saveArray(brush->brush.sides, brush->brush.numsides); // Save_cbrushside_tArray - for (short i = 0; i < brush->brush.count; ++i) + for (unsigned short i = 0; i < brush->brush.numsides; ++i) { Game::cbrushside_t* destSide = &destBrushSide[i]; - Game::cbrushside_t* side = &brush->brush.brushSide[i]; + Game::cbrushside_t* side = &brush->brush.sides[i]; if (side->plane) { @@ -47,13 +47,13 @@ namespace Assets } } - Utils::Stream::ClearPointer(&destBrush->brush.brushSide); + Utils::Stream::ClearPointer(&destBrush->brush.sides); } - if (brush->brush.brushEdge) + if (brush->brush.baseAdjacentSide) { - buffer->save(brush->brush.brushEdge, brush->totalEdgeCount); - Utils::Stream::ClearPointer(&destBrush->brush.brushEdge); + buffer->save(brush->brush.baseAdjacentSide, brush->totalEdgeCount); + Utils::Stream::ClearPointer(&destBrush->brush.baseAdjacentSide); } } @@ -63,14 +63,19 @@ namespace Assets if (builder->hasPointer(brush->planes)) { + Components::Logger::Print("Loading cplane pointer before the array has been written. Not sure if this is correct!\n"); destBrush->planes = builder->getPointer(brush->planes); } else { buffer->align(Utils::Stream::ALIGN_4); - builder->storePointer(brush->planes); - buffer->save(brush->planes, sizeof(Game::cplane_t)); + for (unsigned short j = 0; j < brush->brush.numsides; ++j) + { + builder->storePointer(&brush->planes[j]); + buffer->save(&brush->planes[j]); + } + Utils::Stream::ClearPointer(&destBrush->planes); } } diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index 8c219da1..30cbc984 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -1350,8 +1350,8 @@ namespace Game struct Bounds { - vec3_t midPoint; - vec3_t halfSize; + vec3_t midPoint; // mins + vec3_t halfSize; // maxs }; struct TriggerModel @@ -1700,20 +1700,22 @@ namespace Game char edgeCount; }; - struct cbrushWrapper_t + struct cbrush_t { - short count; - cbrushside_t* brushSide; - char * brushEdge; - char pad[24]; + unsigned __int16 numsides; + unsigned __int16 glassPieceIndex; + cbrushside_t *sides; + char *baseAdjacentSide; + __int16 axialMaterialNum[2][3]; + char firstAdjacentSideOffsets[2][3]; + char edgeCount[2][3]; }; #pragma pack(push, 4) struct BrushWrapper { - float mins[3]; - float maxs[3]; - cbrushWrapper_t brush; + Bounds bounds; + cbrush_t brush; int totalEdgeCount; cplane_t *planes; }; @@ -2465,17 +2467,6 @@ namespace Game short children[2]; }; - struct cbrush_t - { - unsigned __int16 numsides; - unsigned __int16 glassPieceIndex; - cbrushside_t *sides; - char *baseAdjacentSide; - __int16 axialMaterialNum[2][3]; - char firstAdjacentSideOffsets[2][3]; - char edgeCount[2][3]; - }; - struct cLeaf_t { unsigned __int16 firstCollAabbIndex;