summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAltoXorg <atrl101@yahoo.com>2024-04-20 18:19:55 +0800
committerLywx <kiritodev01@gmail.com>2024-04-20 14:45:55 -0600
commit2503284a2d9339ce726775c17bdbfab90e231cc0 (patch)
tree31565b627a64ae3c3067d5b1eda9cf2c0844aedb /src
parenta72020cca7f1498f73d42c71e694fd114843fe73 (diff)
add index size override option
Diffstat (limited to 'src')
-rw-r--r--src/Companion.cpp3
-rw-r--r--src/Companion.h1
-rw-r--r--src/factories/LightsFactory.cpp4
-rw-r--r--src/factories/TextureFactory.cpp18
-rw-r--r--src/factories/VtxFactory.cpp5
-rw-r--r--src/factories/mk64/ItemCurve.cpp3
6 files changed, 22 insertions, 12 deletions
diff --git a/src/Companion.cpp b/src/Companion.cpp
index cff2492..61cd128 100644
--- a/src/Companion.cpp
+++ b/src/Companion.cpp
@@ -314,7 +314,8 @@ void Companion::ParseCurrentFileConfig(YAML::Node node) {
auto end = gCurrentSegmentNumber ? gCurrentSegmentNumber << 24 | range[1] : range[1];
auto mode = GetSafeNode<std::string>(table->second, "mode", "APPEND");
TableMode tMode = mode == "REFERENCE" ? TableMode::Reference : TableMode::Append;
- this->gTables.push_back({name, start, end, tMode});
+ auto index_size = GetSafeNode<int32_t>(table->second, "index_size", -1);
+ this->gTables.push_back({name, start, end, tMode, index_size});
}
}
diff --git a/src/Companion.h b/src/Companion.h
index 20c5822..ad48e33 100644
--- a/src/Companion.h
+++ b/src/Companion.h
@@ -45,6 +45,7 @@ struct Table {
uint32_t start;
uint32_t end;
TableMode mode;
+ int32_t index_size;
};
struct VRAMEntry {
diff --git a/src/factories/LightsFactory.cpp b/src/factories/LightsFactory.cpp
index 44b7195..811583b 100644
--- a/src/factories/LightsFactory.cpp
+++ b/src/factories/LightsFactory.cpp
@@ -16,7 +16,7 @@ ExportResult LightsHeaderExporter::Export(std::ostream &write, std::shared_ptr<I
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
if(start != offset){
return std::nullopt;
@@ -36,7 +36,7 @@ ExportResult LightsCodeExporter::Export(std::ostream &write, std::shared_ptr<IPa
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
if(start == offset){
diff --git a/src/factories/TextureFactory.cpp b/src/factories/TextureFactory.cpp
index 341302d..bf5da64 100644
--- a/src/factories/TextureFactory.cpp
+++ b/src/factories/TextureFactory.cpp
@@ -93,7 +93,8 @@ ExportResult TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr<
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
+ unsigned int isize = index_size > -1 ? index_size : data.size() / byteSize;
if(isOTR){
write << "static const ALIGN_ASSET(2) char " << symbol << "[] = \"__OTR__" << (*replacement) << "\";\n\n";
@@ -109,7 +110,7 @@ ExportResult TextureHeaderExporter::Export(std::ostream &write, std::shared_ptr<
tableEntries.clear();
}
} else {
- write << "extern " << GetSafeNode<std::string>(node, "ctype", "u8") << " " << name << "[][" << (data.size() / byteSize) << "];\n";
+ write << "extern " << GetSafeNode<std::string>(node, "ctype", "u8") << " " << name << "[][" << isize << "];\n";
}
} else {
if(isOTR){
@@ -140,6 +141,7 @@ ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr<IP
std::ostringstream imgstream;
size_t byteSize = std::max(1, (int) (texture->mFormat.depth / 8));
+ size_t isize = texture->mBuffer.size() / byteSize;
SPDLOG_INFO("Byte Size: {}", byteSize);
@@ -167,14 +169,18 @@ ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr<IP
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
if(mode != TableMode::Append){
throw std::runtime_error("Reference mode is not supported for now");
}
+ if (index_size > -1) {
+ isize = index_size;
+ }
+
if(start == offset){
- write << GetSafeNode<std::string>(node, "ctype", "u8") << " " << name << "[][" << (texture->mBuffer.size() / byteSize) << "] = {\n";
+ write << GetSafeNode<std::string>(node, "ctype", "u8") << " " << name << "[][" << isize << "] = {\n";
}
write << tab << "{\n";
@@ -188,7 +194,7 @@ ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr<IP
if(end == offset){
write << "};\n";
if (Companion::Instance->IsDebug()) {
- write << "// size: 0x" << std::hex << std::uppercase << ASSET_PTR((end - start) + data.size()) << "\n";
+ write << "// size: 0x" << std::hex << std::uppercase << ASSET_PTR((end - start) + isize * byteSize) << "\n";
}
}
} else {
@@ -208,7 +214,7 @@ ExportResult TextureCodeExporter::Export(std::ostream &write, std::shared_ptr<IP
write << "\n";
}
- return offset + data.size();
+ return offset + isize * byteSize;
}
ExportResult TextureBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement) {
diff --git a/src/factories/VtxFactory.cpp b/src/factories/VtxFactory.cpp
index e4f1dcf..35f9789 100644
--- a/src/factories/VtxFactory.cpp
+++ b/src/factories/VtxFactory.cpp
@@ -20,7 +20,8 @@ ExportResult VtxHeaderExporter::Export(std::ostream &write, std::shared_ptr<IPar
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
+ // We will ignore the overriden index_size for now...
if(start != offset){
return std::nullopt;
@@ -41,7 +42,7 @@ ExportResult VtxCodeExporter::Export(std::ostream &write, std::shared_ptr<IParse
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
if(start == offset){
diff --git a/src/factories/mk64/ItemCurve.cpp b/src/factories/mk64/ItemCurve.cpp
index 99ba99c..4fa8e96 100644
--- a/src/factories/mk64/ItemCurve.cpp
+++ b/src/factories/mk64/ItemCurve.cpp
@@ -28,7 +28,8 @@ ExportResult MK64::ItemCurveCodeExporter::Export(std::ostream &write, std::share
const auto searchTable = Companion::Instance->SearchTable(offset);
if(searchTable.has_value()){
- const auto [name, start, end, mode] = searchTable.value();
+ const auto [name, start, end, mode, index_size] = searchTable.value();
+ // We will ignore the overriden index_size for now...
if(start == offset){
write << GetSafeNode<std::string>(node, "ctype", "u8") << " " << name << "[][" << items.size() << "] = {\n";