@@ -23,59 +23,63 @@ ExportResult SM64::MovtexCodeExporter::Export(std::ostream &write, std::shared_p
2323 const auto offset = GetSafeNode<uint32_t >(node, " offset" );
2424
2525 auto movtex = std::static_pointer_cast<SM64::MovtexData>(raw);
26- uint32_t additionalSize = 1 ;
26+ uint32_t additionalSize = 0 ;
2727
2828 write << " static Movtex " << symbol << " [] = {\n " ;
2929
3030 if (movtex->mIsQuad ) {
3131 auto numLists = movtex->mMovtexData .at (0 );
3232 write << fourSpaceTab << " MOV_TEX_INIT_LOAD(" << numLists << " ),\n " ;
33- additionalSize++ ; // MOV_TEX_INIT_LOAD has additional padding
33+ additionalSize += 2 ; // Count + Padding
3434 for (uint32_t i = 0 ; i < numLists; ++i) {
35- write << fourSpaceTab << " MOV_TEX_ROT_SPEED(" << movtex->mMovtexData .at (i * 14 + 1 ) << " ),\n " ;
36- write << fourSpaceTab << " MOV_TEX_ROT_SCALE(" << movtex->mMovtexData .at (i * 14 + 2 ) << " ),\n " ;
37- write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (i * 14 + 3 ) << " , " << movtex->mMovtexData .at (i * 14 + 4 ) << " ),\n " ;
38- write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (i * 14 + 5 ) << " , " << movtex->mMovtexData .at (i * 14 + 6 ) << " ),\n " ;
39- write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (i * 14 + 7 ) << " , " << movtex->mMovtexData .at (i * 14 + 8 ) << " ),\n " ;
40- write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (i * 14 + 9 ) << " , " << movtex->mMovtexData .at (i * 14 + 10 ) << " ),\n " ;
41- write << fourSpaceTab << " MOV_TEX_ROT(" << movtex->mMovtexData .at (i * 14 + 11 ) << " ),\n " ;
42- write << fourSpaceTab << " MOV_TEX_ALPHA(" << movtex->mMovtexData .at (i * 14 + 12 ) << " ),\n " ;
43- write << fourSpaceTab << " MOV_TEX_DEFINE(" << movtex->mMovtexData .at (i * 14 + 13 ) << " ),\n " ;
35+ uint32_t base = 1 + (i * 14 );
36+ write << fourSpaceTab << " MOV_TEX_ROT_SPEED(" << movtex->mMovtexData .at (base + 0 ) << " ),\n " ;
37+ write << fourSpaceTab << " MOV_TEX_ROT_SCALE(" << movtex->mMovtexData .at (base + 1 ) << " ),\n " ;
38+ write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (base + 2 ) << " , " << movtex->mMovtexData .at (base + 3 ) << " ),\n " ;
39+ write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (base + 4 ) << " , " << movtex->mMovtexData .at (base + 5 ) << " ),\n " ;
40+ write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (base + 6 ) << " , " << movtex->mMovtexData .at (base + 7 ) << " ),\n " ;
41+ write << fourSpaceTab << " MOV_TEX_4_BOX_TRIS(" << movtex->mMovtexData .at (base + 8 ) << " , " << movtex->mMovtexData .at (base + 9 ) << " ),\n " ;
42+ write << fourSpaceTab << " MOV_TEX_ROT(" << movtex->mMovtexData .at (base + 10 ) << " ),\n " ;
43+ write << fourSpaceTab << " MOV_TEX_ALPHA(" << movtex->mMovtexData .at (base + 11 ) << " ),\n " ;
44+ write << fourSpaceTab << " MOV_TEX_DEFINE(" << movtex->mMovtexData .at (base + 12 ) << " ),\n " ;
4445 write << fourSpaceTab << " MOV_TEX_END(),\n " ;
46+ additionalSize += 10 ;
4547 }
4648 } else {
4749 write << fourSpaceTab << " MOV_TEX_SPEED(" << movtex->mMovtexData .at (0 ) << " ),\n " ;
50+ additionalSize += 1 ;
4851 if (movtex->mHasColor ) {
4952 for (uint32_t i = 0 ; i < movtex->mVertexCount ; ++i) {
5053 // 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
5154 write << fourSpaceTab << " MOV_TEX_ROT_TRIS(" ;
52- write << movtex->mMovtexData .at (i * 8 + 0 + 1 ) << " , " ;
53- write << movtex->mMovtexData .at (i * 8 + 1 + 1 ) << " , " ;
54- write << movtex->mMovtexData .at (i * 8 + 2 + 1 ) << " , " ;
55- write << movtex->mMovtexData .at (i * 8 + 3 + 1 ) << " , " ;
56- write << movtex->mMovtexData .at (i * 8 + 4 + 1 ) << " , " ;
57- write << movtex->mMovtexData .at (i * 8 + 5 + 1 ) << " , " ;
58- write << movtex->mMovtexData .at (i * 8 + 6 + 1 ) << " , " ;
59- write << movtex->mMovtexData .at (i * 8 + 7 + 1 ) << " ),\n " ;
55+ write << movtex->mMovtexData .at (i * 8 + 1 ) << " , " ;
56+ write << movtex->mMovtexData .at (i * 8 + 2 ) << " , " ;
57+ write << movtex->mMovtexData .at (i * 8 + 3 ) << " , " ;
58+ write << movtex->mMovtexData .at (i * 8 + 4 ) << " , " ;
59+ write << movtex->mMovtexData .at (i * 8 + 5 ) << " , " ;
60+ write << movtex->mMovtexData .at (i * 8 + 6 ) << " , " ;
61+ write << movtex->mMovtexData .at (i * 8 + 7 ) << " , " ;
62+ write << movtex->mMovtexData .at (i * 8 + 8 ) << " ),\n " ;
63+ additionalSize += 8 ;
6064 }
6165 } else {
6266 for (uint32_t i = 0 ; i < movtex->mVertexCount ; ++i) {
6367 write << fourSpaceTab << " MOV_TEX_TRIS(" ;
64- write << movtex->mMovtexData .at (i * 5 + 0 + 1 ) << " , " ;
65- write << movtex->mMovtexData .at (i * 5 + 1 + 1 ) << " , " ;
66- write << movtex->mMovtexData .at (i * 5 + 2 + 1 ) << " , " ;
67- write << movtex->mMovtexData .at (i * 5 + 3 + 1 ) << " , " ;
68- write << movtex->mMovtexData .at (i * 5 + 4 + 1 ) << " ),\n " ;
68+ write << movtex->mMovtexData .at (i * 5 + 1 ) << " , " ;
69+ write << movtex->mMovtexData .at (i * 5 + 2 ) << " , " ;
70+ write << movtex->mMovtexData .at (i * 5 + 3 ) << " , " ;
71+ write << movtex->mMovtexData .at (i * 5 + 4 ) << " , " ;
72+ write << movtex->mMovtexData .at (i * 5 + 5 ) << " ),\n " ;
73+ additionalSize += 5 ;
6974 }
7075 }
7176 write << fourSpaceTab << " MOV_TEX_END(),\n " ;
77+ additionalSize += 1 ;
7278 }
7379
7480 write << " };\n " ;
7581
76- size_t size = (movtex->mMovtexData .size () + additionalSize) * sizeof (int16_t );
77-
78- return offset + size;
82+ return offset + (additionalSize * sizeof (int16_t ));
7983}
8084
8185ExportResult 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
9094 auto numLists = movtex->mMovtexData .at (0 );
9195
9296 buffer.push_back (numLists);
93- buffer.push_back (0 );
97+ buffer.push_back (0 ); // Alignment padding
9498
9599 for (uint32_t i = 0 ; i < numLists; ++i) {
96100 for (size_t j = 0 ; j < 14 ; j++){
97- buffer.push_back (movtex->mMovtexData .at (i * 14 + (j + 1 ) ));
101+ buffer.push_back (movtex->mMovtexData .at (1 + ( i * 14 ) + j ));
98102 }
99-
100- buffer.push_back (0 );
101103 }
102104 } else {
103105 buffer.push_back (movtex->mMovtexData .at (0 ));
104106
105- if (movtex->mHasColor ) {
106- for (uint32_t i = 0 ; i < movtex->mVertexCount ; ++i) {
107- for (size_t j = 0 ; j < 8 ; j++){
108- buffer.push_back (movtex->mMovtexData .at (i * 8 + (j + 1 )));
109- }
110- }
111- } else {
112- for (uint32_t i = 0 ; i < movtex->mVertexCount ; ++i) {
113- for (size_t j = 0 ; j < 5 ; j++){
114- buffer.push_back (movtex->mMovtexData .at (i * 5 + (j + 1 )));
115- }
116- }
107+ size_t triSize = movtex->mHasColor ? 8 : 5 ;
108+ for (uint32_t i = 0 ; i < movtex->mVertexCount * triSize; ++i) {
109+ buffer.push_back (movtex->mMovtexData .at (1 + i));
117110 }
118111
119- buffer.push_back (0 );
112+ buffer.push_back (0 ); // MOV_TEX_END
120113 }
121114
122115 writer.Write ((uint32_t ) buffer.size ());
0 commit comments