add index size override option

This commit is contained in:
AltoXorg
2024-04-20 14:45:55 -06:00
committed by Lywx
parent a72020cca7
commit 2503284a2d
6 changed files with 22 additions and 12 deletions
+2 -1
View File
@@ -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});
}
}
+1
View File
@@ -45,6 +45,7 @@ struct Table {
uint32_t start;
uint32_t end;
TableMode mode;
int32_t index_size;
};
struct VRAMEntry {
+2 -2
View File
@@ -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){
+12 -6
View File
@@ -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) {
+3 -2
View File
@@ -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){
+2 -1
View File
@@ -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";