From 4db8b44ce027578e7df48800e8abb7d9cc85b4e9 Mon Sep 17 00:00:00 2001
From: MS <disinvite@users.noreply.github.com>
Date: Mon, 20 Jan 2025 21:43:24 -0500
Subject: [PATCH] Implement LegoCarBuildAnimPresenter::Serialize (#1366)

---
 .../src/build/legocarbuildpresenter.cpp       | 24 ++++++++++++++++---
 LEGO1/lego/sources/misc/legostorage.h         |  3 +++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp b/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp
index df971e85..31189d72 100644
--- a/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp
+++ b/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp
@@ -288,11 +288,29 @@ void LegoCarBuildAnimPresenter::EndAction()
 	}
 }
 
-// STUB: LEGO1 0x10078e30
-// STUB: BETA10 0x10071387
+// FUNCTION: LEGO1 0x10078e30
+// FUNCTION: BETA10 0x10071387
 MxResult LegoCarBuildAnimPresenter::Serialize(LegoStorage* p_storage)
 {
-	// TODO
+	if (p_storage->IsReadMode()) {
+		p_storage->ReadS16(m_placedPartCount);
+		p_storage->ReadFloat(m_unk0x130);
+		for (MxS16 i = 0; i < m_numberOfParts; i++) {
+			p_storage->ReadString(m_parts[i].m_name);
+			p_storage->ReadString(m_parts[i].m_wiredName);
+			p_storage->ReadS16(m_parts[i].m_objectId);
+		}
+	}
+	else if (p_storage->IsWriteMode()) {
+		p_storage->WriteS16(m_placedPartCount);
+		p_storage->WriteFloat(m_unk0x130);
+		for (MxS16 i = 0; i < m_numberOfParts; i++) {
+			p_storage->WriteString(m_parts[i].m_name);
+			p_storage->WriteString(m_parts[i].m_wiredName);
+			p_storage->WriteS16(m_parts[i].m_objectId);
+		}
+	}
+
 	return SUCCESS;
 }
 
diff --git a/LEGO1/lego/sources/misc/legostorage.h b/LEGO1/lego/sources/misc/legostorage.h
index cae0896c..60ee9015 100644
--- a/LEGO1/lego/sources/misc/legostorage.h
+++ b/LEGO1/lego/sources/misc/legostorage.h
@@ -79,6 +79,7 @@ public:
 		return this;
 	}
 
+	// FUNCTION: BETA10 0x10073610
 	LegoStorage* WriteFloat(LegoFloat p_data)
 	{
 		Write(&p_data, sizeof(p_data));
@@ -102,6 +103,7 @@ public:
 		return this;
 	}
 
+	// FUNCTION: BETA10 0x10073690
 	LegoStorage* ReadString(char* p_data)
 	{
 		LegoS16 length;
@@ -148,6 +150,7 @@ public:
 		return this;
 	}
 
+	// FUNCTION: BETA10 0x10073650
 	LegoStorage* ReadFloat(LegoFloat& p_data)
 	{
 		Read(&p_data, sizeof(p_data));