diff --git a/src/Game/Structs.hpp b/src/Game/Structs.hpp index 11798051..65f134e0 100644 --- a/src/Game/Structs.hpp +++ b/src/Game/Structs.hpp @@ -2948,8 +2948,8 @@ namespace Game struct GfxPortalWritable { - bool isQueued; - bool isAncestor; + char isQueued; + char isAncestor; char recursionDepth; char hullPointCount; float(*hullPoints)[2]; @@ -2959,6 +2959,7 @@ namespace Game { float coeffs[4]; char side[3]; + char pad; }; struct GfxPortal diff --git a/src/Utils/Stream.cpp b/src/Utils/Stream.cpp index 596003cc..0c2a0435 100644 --- a/src/Utils/Stream.cpp +++ b/src/Utils/Stream.cpp @@ -59,6 +59,29 @@ namespace Utils } } + void* Stream::Reader::readPointer() + { + void* pointer = this->read(); + if (!this->hasPointer(pointer)) + { + this->pointerMap[pointer] = 0; + } + return pointer; + } + + void Stream::Reader::mapPointer(void* oldPointer, void* newPointer) + { + if (this->hasPointer(oldPointer)) + { + this->pointerMap[oldPointer] = newPointer; + } + } + + bool Stream::Reader::hasPointer(void* pointer) + { + return this->pointerMap.find(pointer) != this->pointerMap.end(); + } + Stream::Stream() : criticalSectionState(0) { memset(this->blockSize, 0, sizeof(this->blockSize)); diff --git a/src/Utils/Stream.hpp b/src/Utils/Stream.hpp index 4074ac99..599dbf41 100644 --- a/src/Utils/Stream.hpp +++ b/src/Utils/Stream.hpp @@ -49,9 +49,14 @@ namespace Utils bool end(); void seek(unsigned int position); + void* readPointer(); + void mapPointer(void* oldPointer, void* newPointer); + bool hasPointer(void* pointer); + private: unsigned int position; std::string buffer; + std::map pointerMap; Utils::Memory::Allocator* allocator; };