From 40da02be28ea30cd4add7d3c2c6b4d438cbe0674 Mon Sep 17 00:00:00 2001 From: inspectredc <78732756+inspectredc@users.noreply.github.com> Date: Mon, 1 Jul 2024 18:41:32 +0100 Subject: [PATCH] fix movtex parsing (#141) --- src/factories/sm64/MovtexFactory.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/factories/sm64/MovtexFactory.cpp b/src/factories/sm64/MovtexFactory.cpp index 4fccddf..64f01f4 100644 --- a/src/factories/sm64/MovtexFactory.cpp +++ b/src/factories/sm64/MovtexFactory.cpp @@ -23,13 +23,15 @@ ExportResult SM64::MovtexCodeExporter::Export(std::ostream &write, std::shared_p const auto offset = GetSafeNode(node, "offset"); auto movtex = std::static_pointer_cast(raw); + uint32_t additionalSize = 1; write << "static Movtex " << symbol << "[] = {\n"; if (movtex->mIsQuad) { auto numLists = movtex->mMovtexData.at(0); write << "MOV_TEX_INIT_LOAD(" << numLists << "),\n"; - for (int16_t i = 0; i < numLists; ++i) { + 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"; @@ -71,7 +73,7 @@ ExportResult SM64::MovtexCodeExporter::Export(std::ostream &write, std::shared_p write << "\n};\n"; - size_t size = (movtex->mMovtexData.size() + 1) * sizeof(int16_t); + size_t size = (movtex->mMovtexData.size() + additionalSize) * sizeof(int16_t); return offset + size; } @@ -131,6 +133,7 @@ std::optional> SM64::MovtexFactory::parse(std::vect if (isQuad) { auto numLists = reader.ReadInt16(); + reader.ReadInt16(); // pad movtexData.emplace_back(numLists); // movtex quad data has 14 elements for (int16_t i = 0; i < numLists * 14; ++i) {