summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2026-01-07 21:22:34 -0600
committerLywx <kiritodev01@gmail.com>2026-01-14 19:25:57 -0600
commitaaed953d180356f933bc0011d250f7de1366c42e (patch)
tree2e9ec6e7cb20f44143576d8c3d890fb356af2b51
parent4367716cdaf0c84ebe0b5cb63435eb5d1928f4a8 (diff)
Fixed Movtex among other fixes
-rw-r--r--src/factories/sm64/MacroFactory.cpp33
-rw-r--r--src/factories/sm64/MovtexFactory.cpp81
2 files changed, 44 insertions, 70 deletions
diff --git a/src/factories/sm64/MacroFactory.cpp b/src/factories/sm64/MacroFactory.cpp
index 1a480c3..950d276 100644
--- a/src/factories/sm64/MacroFactory.cpp
+++ b/src/factories/sm64/MacroFactory.cpp
@@ -89,39 +89,20 @@ std::optional<std::shared_ptr<IParsedData>> SM64::MacroFactory::parse(std::vecto
std::vector<int16_t> entries;
- while(true) {
+ while(reader.GetBaseAddress() < segment.size) {
int16_t raw = reader.ReadInt16();
if(raw == 0x1E){
break;
}
- entries.push_back(raw);
+ entries.push_back(raw); // (Preset/Beh)
+ entries.push_back(reader.ReadInt16()); // Yaw
+ entries.push_back(reader.ReadInt16()); // PosX
+ entries.push_back(reader.ReadInt16()); // PosY
+ entries.push_back(reader.ReadInt16()); // PosZ
}
entries.push_back(0x1E);
- /*
- std::vector<MacroObject> macroData;
- while (true) {
- int16_t presetID = reader.ReadInt16();
-
- if(presetID < 0) {
- break;
- }
-
- int16_t yRot = reader.ReadInt16();
- int16_t xObj = reader.ReadInt16();
- int16_t yObj = reader.ReadInt16();
- int16_t zObj = reader.ReadInt16();
- int16_t params = reader.ReadInt16();
-
- macroData.emplace_back(static_cast<MacroPresets>(presetID), yRot, xObj, yObj, zObj, params);
- }
-
- macroData.emplace_back(MacroPresets::macro_invalid, -1, -1, -1, -1, -1);
-
- return std::make_shared<SM64::MacroData>(macroData);
- */
-
return std::make_shared<SM64::MacroDataAlt>(entries);
-}
+} \ No newline at end of file
diff --git a/src/factories/sm64/MovtexFactory.cpp b/src/factories/sm64/MovtexFactory.cpp
index 2ac5900..28e0170 100644
--- a/src/factories/sm64/MovtexFactory.cpp
+++ b/src/factories/sm64/MovtexFactory.cpp
@@ -23,59 +23,63 @@ ExportResult SM64::MovtexCodeExporter::Export(std::ostream &write, std::shared_p
const auto offset = GetSafeNode<uint32_t>(node, "offset");
auto movtex = std::static_pointer_cast<SM64::MovtexData>(raw);
- uint32_t additionalSize = 1;
+ uint32_t additionalSize = 0;
write << "static Movtex " << symbol << "[] = {\n";
if (movtex->mIsQuad) {
auto numLists = movtex->mMovtexData.at(0);
write << fourSpaceTab << "MOV_TEX_INIT_LOAD(" << numLists << "),\n";
- additionalSize++; // MOV_TEX_INIT_LOAD has additional padding
+ additionalSize += 2; // Count + Padding
for (uint32_t i = 0; i < numLists; ++i) {
- 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";
+ uint32_t base = 1 + (i * 14);
+ write << fourSpaceTab << "MOV_TEX_ROT_SPEED(" << movtex->mMovtexData.at(base + 0) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_ROT_SCALE(" << movtex->mMovtexData.at(base + 1) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(base + 2) << ", " << movtex->mMovtexData.at(base + 3) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(base + 4) << ", " << movtex->mMovtexData.at(base + 5) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(base + 6) << ", " << movtex->mMovtexData.at(base + 7) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData.at(base + 8) << ", " << movtex->mMovtexData.at(base + 9) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_ROT(" << movtex->mMovtexData.at(base + 10) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_ALPHA(" << movtex->mMovtexData.at(base + 11) << "),\n";
+ write << fourSpaceTab << "MOV_TEX_DEFINE(" << movtex->mMovtexData.at(base + 12) << "),\n";
write << fourSpaceTab << "MOV_TEX_END(),\n";
+ additionalSize += 10;
}
} else {
write << fourSpaceTab << "MOV_TEX_SPEED(" << movtex->mMovtexData.at(0) << "),\n";
+ additionalSize += 1;
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 << 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) << ", ";
- write << movtex->mMovtexData.at(i * 8 + 3 + 1) << ", ";
- write << movtex->mMovtexData.at(i * 8 + 4 + 1) << ", ";
- write << movtex->mMovtexData.at(i * 8 + 5 + 1) << ", ";
- write << movtex->mMovtexData.at(i * 8 + 6 + 1) << ", ";
- write << movtex->mMovtexData.at(i * 8 + 7 + 1) << "),\n";
+ write << movtex->mMovtexData.at(i * 8 + 1) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 2) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 3) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 4) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 5) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 6) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 7) << ", ";
+ write << movtex->mMovtexData.at(i * 8 + 8) << "),\n";
+ additionalSize += 8;
}
} else {
for (uint32_t i = 0; i < movtex->mVertexCount; ++i) {
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 << movtex->mMovtexData.at(i * 5 + 1) << ", ";
+ write << movtex->mMovtexData.at(i * 5 + 2) << ", ";
+ write << movtex->mMovtexData.at(i * 5 + 3) << ", ";
+ write << movtex->mMovtexData.at(i * 5 + 4) << ", ";
+ write << movtex->mMovtexData.at(i * 5 + 5) << "),\n";
+ additionalSize += 5;
}
}
write << fourSpaceTab << "MOV_TEX_END(),\n";
+ additionalSize += 1;
}
write << "};\n";
- size_t size = (movtex->mMovtexData.size() + additionalSize) * sizeof(int16_t);
-
- return offset + size;
+ return offset + (additionalSize * sizeof(int16_t));
}
ExportResult SM64::MovtexBinaryExporter::Export(std::ostream &write, std::shared_ptr<IParsedData> raw, std::string& entryName, YAML::Node &node, std::string* replacement ) {
@@ -90,33 +94,22 @@ ExportResult SM64::MovtexBinaryExporter::Export(std::ostream &write, std::shared
auto numLists = movtex->mMovtexData.at(0);
buffer.push_back(numLists);
- buffer.push_back(0);
+ buffer.push_back(0); // Alignment padding
for (uint32_t i = 0; i < numLists; ++i) {
for(size_t j = 0; j < 14; j++){
- buffer.push_back(movtex->mMovtexData.at(i * 14 + (j + 1)));
+ buffer.push_back(movtex->mMovtexData.at(1 + (i * 14) + j));
}
-
- buffer.push_back(0);
}
} else {
buffer.push_back(movtex->mMovtexData.at(0));
- if (movtex->mHasColor) {
- for (uint32_t i = 0; i < movtex->mVertexCount; ++i) {
- for(size_t j = 0; j < 8; j++){
- buffer.push_back(movtex->mMovtexData.at(i * 8 + (j + 1)));
- }
- }
- } else {
- for (uint32_t i = 0; i < movtex->mVertexCount; ++i) {
- for(size_t j = 0; j < 5; j++){
- buffer.push_back(movtex->mMovtexData.at(i * 5 + (j + 1)));
- }
- }
+ size_t triSize = movtex->mHasColor ? 8 : 5;
+ for (uint32_t i = 0; i < movtex->mVertexCount * triSize; ++i) {
+ buffer.push_back(movtex->mMovtexData.at(1 + i));
}
- buffer.push_back(0);
+ buffer.push_back(0); // MOV_TEX_END
}
writer.Write((uint32_t) buffer.size());