summaryrefslogtreecommitdiff
path: root/src/utils/Decompressor.cpp
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-03-28 22:19:27 -0600
committerKiritoDv <kiritodev01@gmail.com>2024-03-28 22:19:27 -0600
commit42d95d50fd6f8d41db71ff7f42d1260df84c1c1d (patch)
tree511fa7ace7500edafb8ea1ab87135faa2c8db376 /src/utils/Decompressor.cpp
parenta7d7acdc4219d474597960b55fea06b06e1911ad (diff)
WIP Collision factoryfeature/sm64-collision
Diffstat (limited to 'src/utils/Decompressor.cpp')
-rw-r--r--src/utils/Decompressor.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/utils/Decompressor.cpp b/src/utils/Decompressor.cpp
index c59d867..7c63c09 100644
--- a/src/utils/Decompressor.cpp
+++ b/src/utils/Decompressor.cpp
@@ -43,12 +43,9 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector<uint8_t>
auto offset = node["offset"].as<uint32_t>();
- CompressionType type = Companion::Instance->GetCurrCompressionType();
-
- switch(type) {
- case CompressionType::MIO0:
- {
- auto fileOffset = TranslateAddr(offset, true);
+ switch(Companion::Instance->GetCurrCompressionType()) {
+ case CompressionType::MIO0: {
+ const auto fileOffset = TranslateAddr(offset, true);
offset = ASSET_PTR(offset);
auto decoded = Decode(buffer, fileOffset, CompressionType::MIO0);
@@ -60,15 +57,12 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector<uint8_t>
}
case CompressionType::YAY0:
throw std::runtime_error("Found compressed yay0 segment.\nDecompression of yay0 has not been implemented yet.");
- break;
case CompressionType::YAZ0:
throw std::runtime_error("Found compressed yaz0 segment.\nDecompression of yaz0 has not been implemented yet.");
- break;
- case CompressionType::None:
- {
- auto fileOffset = TranslateAddr(offset);
+ case CompressionType::None: {
+ const auto fileOffset = TranslateAddr(offset);
- auto size = node["size"] ? node["size"].as<size_t>() : manualSize.value_or(buffer.size() - fileOffset);
+ const auto size = node["size"] ? node["size"].as<size_t>() : manualSize.value_or(buffer.size() - fileOffset);
return {
.root = nullptr,
@@ -80,6 +74,13 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector<uint8_t>
throw std::runtime_error("Auto decode could not find a compression type nor uncompressed segment.\nThis is one of those issues that should never really happen.");
}
+DecompressedData Decompressor::AutoDecodeByOffset(uint32_t offset, size_t size, std::vector<uint8_t>& buffer) {
+ YAML::Node node;
+ node["offset"] = offset;
+ node["size"] = size;
+ return AutoDecode(node, buffer);
+}
+
uint32_t Decompressor::TranslateAddr(uint32_t addr, bool baseAddress){
if(IS_SEGMENTED(addr)){
const auto segment = Companion::Instance->GetFileOffsetFromSegmentedAddr(SEGMENT_NUMBER(addr));