diff --git a/src/utils/Decompressor.cpp b/src/utils/Decompressor.cpp index 011fad48..95af7b1b 100644 --- a/src/utils/Decompressor.cpp +++ b/src/utils/Decompressor.cpp @@ -69,18 +69,23 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector auto fileOffset = TranslateAddr(offset, true); - // Extract compressed assets. - if (node["mio0"] || node["yay0"]) { - auto foffset = TranslateAddr(offset, true); - auto decoded = Decode(buffer, foffset, node["mio0"] ? CompressionType::MIO0 : CompressionType::YAY0); + // Check if an asset in a yaml file is mio0 compressed and extract. + if (node["mio0"]) { + auto assetPtr = ASSET_PTR(offset); + auto gameSize = Companion::Instance->GetRomData().size(); + + auto fileOffset = TranslateAddr(offset, true); + offset = ASSET_PTR(offset); + + auto decoded = Decode(buffer, fileOffset + offset, CompressionType::MIO0); auto size = node["size"] ? node["size"].as() : manualSize.value_or(decoded->size); return { - .root = decoded, - .segment = { decoded->data, size } + .root = decoded, + .segment = { decoded->data, size } }; } - // Extract compressed tkmk00 assets in mk64. + // Check if an asset in a yaml file is tkmk00 compressed and extract (mk64). if (node["tkmk00"]) { const auto alpha = GetSafeNode(node, "alpha"); const auto width = GetSafeNode(node, "width"); @@ -98,7 +103,7 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector }; } - // Extract compressed files that contain many assets. + // Extract a compressed file which contains many assets. switch(type) { case CompressionType::YAY0: case CompressionType::MIO0: {