Fix OOB for code output loop for non-color non-quad movtex objects. (#143)

Add tab formatting for Movtex and MovtexQuad.
This commit is contained in:
Malkierian
2024-07-09 08:04:00 -06:00
committed by GitHub
parent e342a34f9c
commit 84266f9049
2 changed files with 23 additions and 23 deletions
+21 -21
View File
@@ -29,26 +29,26 @@ ExportResult SM64::MovtexCodeExporter::Export(std::ostream &write, std::shared_p
if (movtex->mIsQuad) {
auto numLists = movtex->mMovtexData.at(0);
write << "MOV_TEX_INIT_LOAD(" << numLists << "),\n";
write << fourSpaceTab << "MOV_TEX_INIT_LOAD(" << numLists << "),\n";
additionalSize++; // MOV_TEX_INIT_LOAD has additional padding
for (uint32_t i = 0; i < numLists; ++i) {
write << "MOV_TEX_ROT_SPEED(" << movtex->mMovtexData.at(i * 14 + 1) << "),\n";
write << "MOV_TEX_ROT_SCALE(" << movtex->mMovtexData.at(i * 14 + 2) << "),\n";
write << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 3) << ", " << movtex->mMovtexData.at(i * 14 + 4) << "),\n";
write << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 5) << ", " << movtex->mMovtexData.at(i * 14 + 6) << "),\n";
write << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 7) << ", " << movtex->mMovtexData.at(i * 14 + 8) << "),\n";
write << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 9) << ", " << movtex->mMovtexData.at(i * 14 + 10) << "),\n";
write << "MOV_TEX_ROT(" << movtex->mMovtexData.at(i * 14 + 11) << "),\n";
write << "MOV_TEX_ALPHA(" << movtex->mMovtexData.at(i * 14 + 12) << "),\n";
write << "MOV_TEX_DEFINE(" << movtex->mMovtexData.at(i * 14 + 13) << "),\n";
write << "MOV_TEX_END(),\n";
write << fourSpaceTab << "MOV_TEX_ROT_SPEED(" << movtex->mMovtexData.at(i * 14 + 1) << "),\n";
write << fourSpaceTab << "MOV_TEX_ROT_SCALE(" << movtex->mMovtexData.at(i * 14 + 2) << "),\n";
write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 3) << ", " << movtex->mMovtexData.at(i * 14 + 4) << "),\n";
write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 5) << ", " << movtex->mMovtexData.at(i * 14 + 6) << "),\n";
write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 7) << ", " << movtex->mMovtexData.at(i * 14 + 8) << "),\n";
write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(i * 14 + 9) << ", " << movtex->mMovtexData.at(i * 14 + 10) << "),\n";
write << fourSpaceTab << "MOV_TEX_ROT(" << movtex->mMovtexData.at(i * 14 + 11) << "),\n";
write << fourSpaceTab << "MOV_TEX_ALPHA(" << movtex->mMovtexData.at(i * 14 + 12) << "),\n";
write << fourSpaceTab << "MOV_TEX_DEFINE(" << movtex->mMovtexData.at(i * 14 + 13) << "),\n";
write << fourSpaceTab << "MOV_TEX_END(),\n";
}
} else {
write << "MOV_TEX_SPEED(" << movtex->mMovtexData.at(0) << "),\n";
write << fourSpaceTab << "MOV_TEX_SPEED(" << movtex->mMovtexData.at(0) << "),\n";
if (movtex->mHasColor) {
for (uint32_t i = 0; i < movtex->mVertexCount; ++i) {
// There is also a MOV_TEX_LIGHT_TRIS macro, however this is identical in result to using MOV_TEX_ROT_TRIS and would require more params on the yaml
write << "MOV_TEX_ROT_TRIS(";
write << fourSpaceTab << "MOV_TEX_ROT_TRIS(";
write << movtex->mMovtexData.at(i * 8 + 0 + 1) << ", ";
write << movtex->mMovtexData.at(i * 8 + 1 + 1) << ", ";
write << movtex->mMovtexData.at(i * 8 + 2 + 1) << ", ";
@@ -60,18 +60,18 @@ ExportResult SM64::MovtexCodeExporter::Export(std::ostream &write, std::shared_p
}
} else {
for (uint32_t i = 0; i < movtex->mVertexCount; ++i) {
write << "MOV_TEX_TRIS(";
write << movtex->mMovtexData.at(i * 8 + 0 + 1) << ", ";
write << movtex->mMovtexData.at(i * 8 + 1 + 1) << ", ";
write << movtex->mMovtexData.at(i * 8 + 2 + 1) << ", ";
write << movtex->mMovtexData.at(i * 8 + 3 + 1) << ", ";
write << movtex->mMovtexData.at(i * 8 + 4 + 1) << "),\n";
write << fourSpaceTab << "MOV_TEX_TRIS(";
write << movtex->mMovtexData.at(i * 5 + 0 + 1) << ", ";
write << movtex->mMovtexData.at(i * 5 + 1 + 1) << ", ";
write << movtex->mMovtexData.at(i * 5 + 2 + 1) << ", ";
write << movtex->mMovtexData.at(i * 5 + 3 + 1) << ", ";
write << movtex->mMovtexData.at(i * 5 + 4 + 1) << "),\n";
}
}
write << "MOV_TEX_END(),\n";
write << fourSpaceTab << "MOV_TEX_END(),\n";
}
write << "\n};\n";
write << "};\n";
size_t size = (movtex->mMovtexData.size() + additionalSize) * sizeof(int16_t);
+2 -2
View File
@@ -27,7 +27,7 @@ ExportResult SM64::MovtexQuadCodeExporter::Export(std::ostream &write, std::shar
write << "const struct MovtexQuadCollection " << symbol << "[] = {\n";
for (auto &quad: quadData->mMovtexQuads) {
write << "{" << quad.first << ", ";
write << fourSpaceTab << "{" << quad.first << ", ";
if (quad.second == 0) {
write << "NULL";
} else {
@@ -44,7 +44,7 @@ ExportResult SM64::MovtexQuadCodeExporter::Export(std::ostream &write, std::shar
write << "},\n";
}
write << "\n};\n";
write << "};\n";
if (Companion::Instance->IsDebug()) {
write << "// MovtexQuad count: " << quadData->mMovtexQuads.size() << "\n";