From 8b5ef9129c2106564f0cfbc7f6dd934b5b5884ae Mon Sep 17 00:00:00 2001 From: inspectredc Date: Wed, 2 Jul 2025 18:55:50 +0100 Subject: ma2d1 support --- src/utils/Decompressor.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/utils/Decompressor.cpp') diff --git a/src/utils/Decompressor.cpp b/src/utils/Decompressor.cpp index 1fee382..5139fcc 100644 --- a/src/utils/Decompressor.cpp +++ b/src/utils/Decompressor.cpp @@ -7,6 +7,7 @@ extern "C" { #include #include +#include #include } @@ -43,6 +44,17 @@ DataChunk* Decompressor::Decode(const std::vector& buffer, const uint32 gCachedChunks[offset] = new DataChunk{ decompressed, size }; return gCachedChunks[offset]; } + case CompressionType::YAY1: { + uint32_t size = 0; + uint8_t* decompressed = yay1_decode(in_buf, &size); + + if(!decompressed){ + throw std::runtime_error("Failed to decode YAY1"); + } + + gCachedChunks[offset] = new DataChunk{ decompressed, size }; + return gCachedChunks[offset]; + } default: throw std::runtime_error("Unknown compression type"); } @@ -106,6 +118,7 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector // Extract a compressed file which contains many assets. switch(type) { case CompressionType::YAY0: + case CompressionType::YAY1: case CompressionType::MIO0: { offset = ASSET_PTR(offset); @@ -181,6 +194,10 @@ CompressionType Decompressor::GetCompressionType(std::vector& buffer, c return CompressionType::YAY0; } + if (header == "Yay1") { + return CompressionType::YAY1; + } + if (header == "Yaz0") { return CompressionType::YAZ0; } -- cgit v1.2.3