summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2024-01-31 00:11:31 -0600
committerLywx <kiritodev01@gmail.com>2024-01-31 12:05:40 -0600
commit8f80b52b8daec619516c0f9b37d791a88937a549 (patch)
tree1d1f86dd3af06ea08e9ccefd0a093951cee57cf9 /src
parent8178d4d05d48d8faece6a16671cfdaf320d8008d (diff)
Fixed segment validation and added size fallback on decompressor
Diffstat (limited to 'src')
-rw-r--r--src/factories/BaseFactory.h2
-rw-r--r--src/factories/TextureFactory.cpp8
-rw-r--r--src/utils/Decompressor.cpp2
3 files changed, 6 insertions, 6 deletions
diff --git a/src/factories/BaseFactory.h b/src/factories/BaseFactory.h
index b5e5b65..cf00685 100644
--- a/src/factories/BaseFactory.h
+++ b/src/factories/BaseFactory.h
@@ -17,7 +17,7 @@
#define SEGMENT_OFFSET(a) ((uint32_t)(a) & 0x00FFFFFF)
#define SEGMENT_NUMBER(x) (((uint32_t)(x) >> 24) & 0xFF)
-#define IS_SEGMENTED(x) (((x) & 0x01000000 > 0) && (SEGMENT_NUMBER(x) < 0x20))
+#define IS_SEGMENTED(x) (((x) > 0x01000000) && (SEGMENT_NUMBER(x) < 0x20))
#define tab "\t"
#define fourSpaceTab " "
diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp
index c08c26c..cb1b520 100644
--- a/src/factories/TextureFactory.cpp
+++ b/src/factories/TextureFactory.cpp
@@ -111,7 +111,7 @@ std::optional<std::shared_ptr<IParsedData>> TextureFactory::parse(std::vector<ui
auto width = GetSafeNode<uint32_t>(node, "width");
auto height = GetSafeNode<uint32_t>(node, "height");
auto size = GetSafeNode<uint32_t>(node, "size");
- auto offset = GetSafeNode<uint32_t>(node, "offset");
+ auto offset = Decompressor::TranslateAddr(GetSafeNode<uint32_t>(node, "offset"));
if (format.empty()) {
SPDLOG_ERROR("Texture entry at {:X} in yaml missing format node\n\
@@ -130,14 +130,14 @@ std::optional<std::shared_ptr<IParsedData>> TextureFactory::parse(std::vector<ui
std::vector<uint8_t> result;
if(type == TextureType::GrayscaleAlpha1bpp){
- result = alloc_ia8_text_from_i1((uint16_t*) segment.data, 8, 16);
+ result = alloc_ia8_text_from_i1(reinterpret_cast<uint16_t*>(segment.data), 8, 16);
} else {
result = std::vector(segment.data, segment.data + segment.size);
}
SPDLOG_INFO("Texture: {} {}x{} {}", format, width, height, size);
- SPDLOG_INFO("Offset: {}", offset);
- SPDLOG_INFO("Has MIO0: {}", Decompressor::IsCompressed(node) ? "true" : "false");
+ SPDLOG_INFO("Offset: 0x{:X}", offset);
+ SPDLOG_INFO("Is Compressed: {}", Decompressor::IsCompressed(node) ? "true" : "false");
SPDLOG_INFO("Size: {}", result.size());
if(result.size() == 0){
diff --git a/src/utils/Decompressor.cpp b/src/utils/Decompressor.cpp
index 4e89cb7..7de4338 100644
--- a/src/utils/Decompressor.cpp
+++ b/src/utils/Decompressor.cpp
@@ -63,7 +63,7 @@ DecompressedData Decompressor::AutoDecode(YAML::Node& node, std::vector<uint8_t>
return {
.root = nullptr,
- .segment = { buffer.data() + offset, buffer.size() - offset }
+ .segment = { buffer.data() + offset, node["size"] ? node["size"].as<size_t>() : buffer.size() - offset }
};
}