diff options
| author | KiritoDv <kiritodev01@gmail.com> | 2025-12-31 22:59:16 -0600 |
|---|---|---|
| committer | Lywx <kiritodev01@gmail.com> | 2026-01-14 19:25:57 -0600 |
| commit | 8284ea58d1551437eab53325dd6a603ac3538e53 (patch) | |
| tree | 4f7c0213acb834a679207c0d171094d839c8925f /src | |
| parent | 73f7a4a1e97daba9f72b860c4b7e4fd5c20eae57 (diff) | |
Some sm64 geo fixes
Diffstat (limited to 'src')
| -rw-r--r-- | src/factories/sm64/GeoLayoutFactory.cpp | 16 | ||||
| -rw-r--r-- | src/factories/sm64/geo/GeoUtils.cpp | 7 | ||||
| -rw-r--r-- | src/factories/sm64/geo/GeoUtils.h | 3 |
3 files changed, 9 insertions, 17 deletions
diff --git a/src/factories/sm64/GeoLayoutFactory.cpp b/src/factories/sm64/GeoLayoutFactory.cpp index d853e00..37d0e74 100644 --- a/src/factories/sm64/GeoLayoutFactory.cpp +++ b/src/factories/sm64/GeoLayoutFactory.cpp @@ -196,7 +196,8 @@ ExportResult SM64::GeoBinaryExporter::Export(std::ostream&write, std::shared_ptr for(auto& [opcode, arguments, skip] : layout->commands) { if(skip){ - continue; + opcode = GeoOpcode::End; + arguments.clear(); } writer.Write(static_cast<uint8_t>(opcode)); @@ -504,7 +505,7 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v switch ((params & 0x70) >> 4) { case 0: cmd_pos = read_vec3s(translation, &cmd_pos[2]); - cmd_pos = read_vec3s_angle(rotation, cmd_pos); + cmd_pos = read_vec3s(rotation, cmd_pos); arguments.emplace_back(translation); arguments.emplace_back(rotation); break; @@ -513,12 +514,12 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v arguments.emplace_back(translation); break; case 2: - cmd_pos = read_vec3s_angle(rotation, &cmd_pos[1]); + cmd_pos = read_vec3s(rotation, &cmd_pos[1]); arguments.emplace_back(rotation); break; case 3: arguments.emplace_back(cmd_pos[1]); - cmd_pos += 0x04 << CMD_SIZE_SHIFT; + cmd_pos += 0x02 << CMD_SIZE_SHIFT; break; default: { break; @@ -534,7 +535,7 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v cmd = reinterpret_cast<uint8_t *>(cmd_pos); break; } - case GeoOpcode::NodeTranslation: + case GeoOpcode::NodeTranslation: case GeoOpcode::NodeRotation: { Vec3s vector = {}; auto params = cur_geo_cmd_u8(0x01); @@ -542,7 +543,7 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v arguments.emplace_back(params); - cmd_pos = read_vec3s_angle(vector, &cmd_pos[1]); + cmd_pos = read_vec3s(vector, &cmd_pos[1]); arguments.emplace_back(vector); @@ -556,10 +557,9 @@ std::optional<std::shared_ptr<IParsedData>> SM64::GeoLayoutFactory::parse(std::v break; } case GeoOpcode::NodeAnimatedPart: { - Vec3s translation = {}; auto layer = cur_geo_cmd_u8(0x01); - auto ptr = cur_geo_cmd_u32(0x08); + auto ptr = cur_geo_cmd_u32(0x08); auto cmd_pos = reinterpret_cast<int16_t*>(cmd); arguments.emplace_back(layer); diff --git a/src/factories/sm64/geo/GeoUtils.cpp b/src/factories/sm64/geo/GeoUtils.cpp index 540122f..c42386b 100644 --- a/src/factories/sm64/geo/GeoUtils.cpp +++ b/src/factories/sm64/geo/GeoUtils.cpp @@ -14,11 +14,4 @@ int16_t* read_vec3s(Vec3s& dst, int16_t *src) { dst.y = next_s16_in_geo_script(&src); dst.z = next_s16_in_geo_script(&src); return src; -} - -int16_t* read_vec3s_angle(Vec3s& dst, int16_t *src) { - dst.x = next_s16_in_geo_script(&src); - dst.y = next_s16_in_geo_script(&src); - dst.z = next_s16_in_geo_script(&src); - return src; }
\ No newline at end of file diff --git a/src/factories/sm64/geo/GeoUtils.h b/src/factories/sm64/geo/GeoUtils.h index a629962..860021d 100644 --- a/src/factories/sm64/geo/GeoUtils.h +++ b/src/factories/sm64/geo/GeoUtils.h @@ -4,5 +4,4 @@ #include "GeoCommand.h" int16_t* read_vec3s_to_vec3f(Vec3f& dst, int16_t *src); -int16_t* read_vec3s(Vec3s& dst, int16_t *src); -int16_t* read_vec3s_angle(Vec3s& dst, int16_t *src);
\ No newline at end of file +int16_t* read_vec3s(Vec3s& dst, int16_t *src);
\ No newline at end of file |
