diff --git a/README.md b/README.md index 2ada516..56414fd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ## libragephoto -Open Source RAGE Photo Parser for GTA V +Open Source RAGE Photo Parser for GTA V and RDR 2 - Read RAGE Photos error free and correct - Support for metadata stored in RAGE Photos diff --git a/src/RagePhoto.cpp b/src/RagePhoto.cpp index 2b81ddd..36cf2f8 100644 --- a/src/RagePhoto.cpp +++ b/src/RagePhoto.cpp @@ -81,7 +81,7 @@ bool RagePhoto::load(const char *data, size_t length) #else uint32_t format = charToUInt32LE(uInt32Buffer); #endif - if (format == static_cast(PhotoFormat::GTA5)) { + if (format == static_cast(PhotoFormat::GTA5) || format == static_cast(PhotoFormat::RDR2)) { char photoHeader[256]; size = readBuffer(data, photoHeader, &pos, 256, length); if (size != 256) { @@ -123,6 +123,9 @@ bool RagePhoto::load(const char *data, size_t length) p_headerSum = charToUInt32LE(uInt32Buffer); #endif + if (format == static_cast(PhotoFormat::RDR2)) + pos = pos + 8; + size = readBuffer(data, uInt32Buffer, &pos, 4, length); if (size != 4) { p_error = Error::IncompleteEOF; // 7 @@ -213,7 +216,10 @@ bool RagePhoto::load(const char *data, size_t length) } p_photoLoaded = true; - pos = p_jsonOffset + 264; + if (format == static_cast(PhotoFormat::RDR2)) + pos = p_jsonOffset + 272; + else + pos = p_jsonOffset + 264; size = readBuffer(data, markerBuffer, &pos, 4, length); if (size != 4) { p_error = Error::IncompleteJsonMarker; // 17 @@ -249,7 +255,10 @@ bool RagePhoto::load(const char *data, size_t length) p_jsonString = std::string(t_jsonData); free(t_jsonData); - pos = p_titlOffset + 264; + if (format == static_cast(PhotoFormat::RDR2)) + pos = p_titlOffset + 272; + else + pos = p_titlOffset + 264; size = readBuffer(data, markerBuffer, &pos, 4, length); if (size != 4) { p_error = Error::IncompleteTitleMarker; // 22 @@ -285,7 +294,10 @@ bool RagePhoto::load(const char *data, size_t length) p_titleString = std::string(t_titlData); free(t_titlData); - pos = p_descOffset + 264; + if (format == static_cast(PhotoFormat::RDR2)) + pos = p_descOffset + 272; + else + pos = p_descOffset + 264; size = readBuffer(data, markerBuffer, &pos, 4, length); if (size != 4) { p_error = Error::IncompleteDescMarker; // 27 @@ -321,7 +333,10 @@ bool RagePhoto::load(const char *data, size_t length) p_descriptionString = std::string(t_descData); free(t_descData); - pos = p_endOfFile + 260; + if (format == static_cast(PhotoFormat::RDR2)) + pos = p_endOfFile + 268; + else + pos = p_endOfFile + 260; size = readBuffer(data, markerBuffer, &pos, 4, length); if (size != 4) { p_error = Error::IncompleteJendMarker; // 32