From 000c019a0e39c55fbf4d34b1ca5d4d2095fd48a9 Mon Sep 17 00:00:00 2001 From: Andrew Gutekanst Date: Mon, 16 Oct 2023 09:22:21 -0400 Subject: [PATCH] Add LegoVehicleBuildState (#213) * Add LegoVehicleBuildState * Update LegoVehicleBuildState member-var names to include offsets --- CMakeLists.txt | 1 + LEGO1/legovehiclebuildstate.cpp | 25 ++++++++++++++ LEGO1/legovehiclebuildstate.h | 60 +++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 LEGO1/legovehiclebuildstate.cpp create mode 100644 LEGO1/legovehiclebuildstate.h diff --git a/CMakeLists.txt b/CMakeLists.txt index da3e31a6..6b663cb0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -92,6 +92,7 @@ add_library(lego1 SHARED LEGO1/legotexturepresenter.cpp LEGO1/legoutil.cpp LEGO1/legounksavedatawriter.cpp + LEGO1/legovehiclebuildstate.cpp LEGO1/legovideomanager.cpp LEGO1/legoworld.cpp LEGO1/legoworldpresenter.cpp diff --git a/LEGO1/legovehiclebuildstate.cpp b/LEGO1/legovehiclebuildstate.cpp new file mode 100644 index 00000000..12e862a1 --- /dev/null +++ b/LEGO1/legovehiclebuildstate.cpp @@ -0,0 +1,25 @@ +#include "legovehiclebuildstate.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(LegoVehicleBuildState, 0x50); // 1000acd7 +DECOMP_SIZE_ASSERT(LegoVehicleBuildState::UnkStruct, 0xc); + +// OFFSET: LEGO1 0x10025f30 +LegoVehicleBuildState::LegoVehicleBuildState(char* p_classType) +{ + this->m_className = p_classType; + this->m_unk4c = 0; + this->m_unk4d = 0; + this->m_unk4e = 0; + this->m_placedPartCount = 0; +} + +// OFFSET: LEGO1 10017c00 +LegoVehicleBuildState::UnkStruct::UnkStruct() +{ + m_unk04 = 0; + m_unk00 = 0; + m_unk06 = 0; + m_unk08 = 0; +} diff --git a/LEGO1/legovehiclebuildstate.h b/LEGO1/legovehiclebuildstate.h new file mode 100644 index 00000000..c3c2aae2 --- /dev/null +++ b/LEGO1/legovehiclebuildstate.h @@ -0,0 +1,60 @@ +#ifndef LEGOVEHICLEBUILDSTATE_H +#define LEGOVEHICLEBUILDSTATE_H + +#include "legostate.h" +#include "mxstring.h" +#include "decomp.h" + +#include "decomp.h" + +// VTABLE 0x100d66e0 +// SIZE 0x50 (from 1000acd7) +class LegoVehicleBuildState : public LegoState +{ +public: + LegoVehicleBuildState(char* p_classType); + + // OFFSET: LEGO1 0x10025ff0 + inline virtual const char *ClassName() const override // vtable+0x0c + { + return this->m_className.GetData(); + } + + // OFFSET: LEGO1 0x10026000 + inline virtual MxBool IsA(const char *p_name) const override // vtable+0x10 + { + return !strcmp(p_name, this->m_className.GetData()) || LegoState::IsA(p_name); + } + +public: + struct UnkStruct + { + undefined4 m_unk00; + undefined2 m_unk04; + undefined2 m_unk06; + undefined2 m_unk08; + + UnkStruct(); + }; +private: + UnkStruct m_unk08[4]; // 0x08 + + // This can be one of the following: + // * LegoRaceCarBuildState + // * LegoCopterBuildState + // * LegoDuneCarBuildState + // * LegoJetskiBuildState + MxString m_className; // 0x38 + + // Known States: + // * 1 == enter(ing) build screen + // * 3 == cutscene/dialogue + // * 6 == exit(ing) build screen + MxU32 m_animationState; // 0x48 + undefined m_unk4c; // 0x4c + undefined m_unk4d; // 0x4d + undefined m_unk4e; // 0x4e + MxU8 m_placedPartCount; // 0x4f +}; + +#endif // LEGOVEHICLEBUILDSTATE_H