summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKiritoDv <kiritodev01@gmail.com>2025-12-31 22:59:16 -0600
committerLywx <kiritodev01@gmail.com>2026-01-14 19:25:57 -0600
commit8284ea58d1551437eab53325dd6a603ac3538e53 (patch)
tree4f7c0213acb834a679207c0d171094d839c8925f
parent73f7a4a1e97daba9f72b860c4b7e4fd5c20eae57 (diff)
Some sm64 geo fixes
-rw-r--r--src/factories/sm64/GeoLayoutFactory.cpp16
-rw-r--r--src/factories/sm64/geo/GeoUtils.cpp7
-rw-r--r--src/factories/sm64/geo/GeoUtils.h3
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