diff --git a/LEGO1/towtrackmissionstate.cpp b/LEGO1/towtrackmissionstate.cpp
index cdef8a88..8d3d56b9 100644
--- a/LEGO1/towtrackmissionstate.cpp
+++ b/LEGO1/towtrackmissionstate.cpp
@@ -2,8 +2,55 @@
 
 DECOMP_SIZE_ASSERT(TowTrackMissionState, 0x28)
 
-// STUB: LEGO1 0x1004dd30
+// FUNCTION: LEGO1 0x1004dd30
 TowTrackMissionState::TowTrackMissionState()
 {
-	// TODO
+	m_unk0x12 = 0;
+	m_unk0x14 = 0;
+	m_unk0x16 = 0;
+	m_unk0x08 = 0;
+	m_unk0x18 = 0;
+	m_unk0x0c = 0;
+	m_unk0x1a = 0;
+	m_unk0x10 = 0;
+	m_unk0x1c = 0;
+	m_color1 = 0;
+	m_color2 = 0;
+	m_color3 = 0;
+	m_color4 = 0;
+}
+
+// FUNCTION: LEGO1 0x1004dde0
+MxResult TowTrackMissionState::VTable0x1c(LegoFileStream* p_legoFileStream)
+{
+	if (p_legoFileStream->IsWriteMode()) {
+		p_legoFileStream->FUN_10006030(this->ClassName());
+	}
+
+	if (p_legoFileStream->IsReadMode()) {
+		p_legoFileStream->Write(&m_unk0x12, sizeof(MxU16));
+		p_legoFileStream->Write(&m_unk0x14, sizeof(MxU16));
+		p_legoFileStream->Write(&m_unk0x16, sizeof(MxU16));
+		p_legoFileStream->Write(&m_unk0x18, sizeof(MxU16));
+		p_legoFileStream->Write(&m_unk0x1a, sizeof(MxU16));
+		p_legoFileStream->Write(&m_unk0x1c, sizeof(MxU16));
+		p_legoFileStream->Write(&m_color1, sizeof(MxU16));
+		p_legoFileStream->Write(&m_color2, sizeof(MxU16));
+		p_legoFileStream->Write(&m_color3, sizeof(MxU16));
+		p_legoFileStream->Write(&m_color4, sizeof(MxU16));
+	}
+	else if (p_legoFileStream->IsWriteMode()) {
+		p_legoFileStream->Read(&m_unk0x12, sizeof(MxU16));
+		p_legoFileStream->Read(&m_unk0x14, sizeof(MxU16));
+		p_legoFileStream->Read(&m_unk0x16, sizeof(MxU16));
+		p_legoFileStream->Read(&m_unk0x18, sizeof(MxU16));
+		p_legoFileStream->Read(&m_unk0x1a, sizeof(MxU16));
+		p_legoFileStream->Read(&m_unk0x1c, sizeof(MxU16));
+		p_legoFileStream->Read(&m_color1, sizeof(MxU16));
+		p_legoFileStream->Read(&m_color2, sizeof(MxU16));
+		p_legoFileStream->Read(&m_color3, sizeof(MxU16));
+		p_legoFileStream->Read(&m_color4, sizeof(MxU16));
+	}
+
+	return SUCCESS;
 }
diff --git a/LEGO1/towtrackmissionstate.h b/LEGO1/towtrackmissionstate.h
index 9dc7c587..c0ad3145 100644
--- a/LEGO1/towtrackmissionstate.h
+++ b/LEGO1/towtrackmissionstate.h
@@ -21,6 +21,7 @@ public:
 	{
 		return !strcmp(p_name, TowTrackMissionState::ClassName()) || LegoState::IsA(p_name);
 	}
+	virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1C
 
 	inline MxU16 GetColor(MxU8 p_id)
 	{
@@ -41,12 +42,20 @@ public:
 	}
 
 protected:
-	undefined m_unk0x8[0x14];
-	MxU16 m_color1;
-	MxU16 m_color2;
-	MxU16 m_color3;
-	MxU16 m_color4;
-	MxU16 m_color5;
+	undefined4 m_unk0x08; // 0x08
+	undefined4 m_unk0x0c; // 0x0c
+	MxU8 m_unk0x10;       // 0x10
+	MxU16 m_unk0x12;      // 0x12
+	MxU16 m_unk0x14;      // 0x14
+	MxU16 m_unk0x16;      // 0x16
+	MxU16 m_unk0x18;      // 0x18
+	MxU16 m_unk0x1a;      // 0x1a
+	MxU16 m_unk0x1c;      // 0x1c
+	MxU16 m_color1;       // 0x1e
+	MxU16 m_color2;       // 0x20
+	MxU16 m_color3;       // 0x22
+	MxU16 m_color4;       // 0x24
+	MxU16 m_color5;       // 0x26
 };
 
 #endif // TOWTRACKMISSIONSTATE_H