Skip to content

Commit 8648b11

Browse files
committed
Some sm64 geo fixes
1 parent 73f7a4a commit 8648b11

File tree

3 files changed

+9
-17
lines changed

3 files changed

+9
-17
lines changed

src/factories/sm64/GeoLayoutFactory.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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);

src/factories/sm64/geo/GeoUtils.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,4 @@ int16_t* read_vec3s(Vec3s& dst, int16_t *src) {
1414
dst.y = next_s16_in_geo_script(&src);
1515
dst.z = next_s16_in_geo_script(&src);
1616
return src;
17-
}
18-
19-
int16_t* read_vec3s_angle(Vec3s& dst, int16_t *src) {
20-
dst.x = next_s16_in_geo_script(&src);
21-
dst.y = next_s16_in_geo_script(&src);
22-
dst.z = next_s16_in_geo_script(&src);
23-
return src;
2417
}

src/factories/sm64/geo/GeoUtils.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@
44
#include "GeoCommand.h"
55

66
int16_t* read_vec3s_to_vec3f(Vec3f& dst, int16_t *src);
7-
int16_t* read_vec3s(Vec3s& dst, int16_t *src);
8-
int16_t* read_vec3s_angle(Vec3s& dst, int16_t *src);
7+
int16_t* read_vec3s(Vec3s& dst, int16_t *src);

0 commit comments

Comments
 (0)