From 5503ea1655ad7297bab9e6d30bbbf270704d3e30 Mon Sep 17 00:00:00 2001 From: David Heidelberg Date: Tue, 26 Nov 2024 11:52:26 -0500 Subject: [PATCH] core: reasonably decode version Let's use at least partly readable format. Signed-off-by: David Heidelberg --- rwcore/loaders/LoaderDFF.cpp | 2 +- rwcore/loaders/RWBinaryStream.hpp | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/rwcore/loaders/LoaderDFF.cpp b/rwcore/loaders/LoaderDFF.cpp index c0bb48fd0..85473dc0f 100644 --- a/rwcore/loaders/LoaderDFF.cpp +++ b/rwcore/loaders/LoaderDFF.cpp @@ -176,7 +176,7 @@ GeometryPtr LoaderDFF::readGeometry(const RWBStream &stream) { std::vector verts; verts.resize(numVerts); - if (geomStream.getChunkVersion() < 0x1003FFFF) { + if (geomStream.getChunkVersion() < 0x34003) { headerPtr += sizeof(RW::BSGeometryColor); } diff --git a/rwcore/loaders/RWBinaryStream.hpp b/rwcore/loaders/RWBinaryStream.hpp index f3ca8c10a..6fd6c9c0f 100644 --- a/rwcore/loaders/RWBinaryStream.hpp +++ b/rwcore/loaders/RWBinaryStream.hpp @@ -24,7 +24,7 @@ class RWBStream { std::ptrdiff_t _size; char* _dataCur; char* _nextChunk; - std::uint32_t _chunkVersion; + std::uint32_t _chunkStamp; size_t _currChunkSz; public: @@ -50,7 +50,7 @@ class RWBStream { _currChunkSz = bit_cast(*_dataCur); _dataCur += sizeof(std::uint32_t); - _chunkVersion = bit_cast(*_dataCur); + _chunkStamp = bit_cast(*_dataCur); _dataCur += sizeof(std::uint32_t); _nextChunk = _dataCur + _currChunkSz; @@ -67,7 +67,10 @@ class RWBStream { } std::uint32_t getChunkVersion() const { - return _chunkVersion; + if (_chunkStamp & 0xFFFF0000) + return ((_chunkStamp >> 14 & 0x3FF00) + 0x30000) | + (_chunkStamp >> 16 & 0x3F); + return _chunkStamp << 8; } /**