#pragma once #include #include #include #include #include #include #include "BinaryReader.h" enum class CompressionType { None, MIO0, YAY0, YAZ0, }; struct DataChunk { uint8_t* data; size_t size; }; struct DecompressedData { DataChunk* root; DataChunk segment; LUS::BinaryReader GetReader() { return LUS::BinaryReader(reinterpret_cast(segment.data), segment.size); } }; class Decompressor { public: static DataChunk* Decode(const std::vector& buffer, uint32_t offset, CompressionType type); static DataChunk* DecodeTKMK00(const std::vector& buffer, const uint32_t offset, const uint32_t size, const uint32_t alpha); static DecompressedData AutoDecode(YAML::Node& node, std::vector& buffer, std::optional size = std::nullopt); static DecompressedData AutoDecode(uint32_t offset, std::optional size, std::vector& buffer); static uint32_t TranslateAddr(uint32_t addr, bool baseAddress = false); static bool IsSegmented(uint32_t addr); static void ClearCache(); };