@@ -196,7 +196,8 @@ ExportResult SM64::GeoBinaryExporter::Export(std::ostream&write, std::shared_ptr
196196
197197 for (auto & [opcode, arguments, skip] : layout->commands ) {
198198 if (skip){
199- continue ;
199+ opcode = GeoOpcode::End;
200+ arguments.clear ();
200201 }
201202 writer.Write (static_cast <uint8_t >(opcode));
202203
@@ -504,7 +505,7 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v
504505 switch ((params & 0x70 ) >> 4 ) {
505506 case 0 :
506507 cmd_pos = read_vec3s (translation, &cmd_pos[2 ]);
507- cmd_pos = read_vec3s_angle (rotation, cmd_pos);
508+ cmd_pos = read_vec3s (rotation, cmd_pos);
508509 arguments.emplace_back (translation);
509510 arguments.emplace_back (rotation);
510511 break ;
@@ -513,12 +514,12 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v
513514 arguments.emplace_back (translation);
514515 break ;
515516 case 2 :
516- cmd_pos = read_vec3s_angle (rotation, &cmd_pos[1 ]);
517+ cmd_pos = read_vec3s (rotation, &cmd_pos[1 ]);
517518 arguments.emplace_back (rotation);
518519 break ;
519520 case 3 :
520521 arguments.emplace_back (cmd_pos[1 ]);
521- cmd_pos += 0x04 << CMD_SIZE_SHIFT;
522+ cmd_pos += 0x02 << CMD_SIZE_SHIFT;
522523 break ;
523524 default : {
524525 break ;
@@ -534,15 +535,15 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v
534535 cmd = reinterpret_cast <uint8_t *>(cmd_pos);
535536 break ;
536537 }
537- case GeoOpcode::NodeTranslation:
538+ case GeoOpcode::NodeTranslation:
538539 case GeoOpcode::NodeRotation: {
539540 Vec3s vector = {};
540541 auto params = cur_geo_cmd_u8 (0x01 );
541542 auto cmd_pos = reinterpret_cast <int16_t *>(cmd);
542543
543544 arguments.emplace_back (params);
544545
545- cmd_pos = read_vec3s_angle (vector, &cmd_pos[1 ]);
546+ cmd_pos = read_vec3s (vector, &cmd_pos[1 ]);
546547
547548 arguments.emplace_back (vector);
548549
@@ -556,10 +557,9 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v
556557 break ;
557558 }
558559 case GeoOpcode::NodeAnimatedPart: {
559-
560560 Vec3s translation = {};
561561 auto layer = cur_geo_cmd_u8 (0x01 );
562- auto ptr = cur_geo_cmd_u32 (0x08 );
562+ auto ptr = cur_geo_cmd_u32 (0x08 );
563563 auto cmd_pos = reinterpret_cast <int16_t *>(cmd);
564564
565565 arguments.emplace_back (layer);
0 commit comments