From 744df3264bda95926ff3bf58bc010037c4634534 Mon Sep 17 00:00:00 2001 From: Andrew Gutekanst Date: Mon, 16 Oct 2023 00:53:54 -0400 Subject: [PATCH] Add LegoVehicleBuildState --- CMakeLists.txt | 1 + LEGO1/legovehiclebuildstate.cpp | 25 ++++++++++++++ LEGO1/legovehiclebuildstate.h | 61 +++++++++++++++++++++++++++++++++ 3 files changed, 87 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..dc44cadc --- /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_unk2 = 0; + this->m_unk3 = 0; + this->m_unk4 = 0; + this->m_placedPartCount = 0; +} + +// OFFSET: LEGO1 10017c00 +LegoVehicleBuildState::UnkStruct::UnkStruct() +{ + m_unk1 = 0; + m_unk0 = 0; + m_unk2 = 0; + m_unk3 = 0; +} diff --git a/LEGO1/legovehiclebuildstate.h b/LEGO1/legovehiclebuildstate.h new file mode 100644 index 00000000..66c8388b --- /dev/null +++ b/LEGO1/legovehiclebuildstate.h @@ -0,0 +1,61 @@ +#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_unk0; + undefined2 m_unk1; + undefined2 m_unk2; + undefined2 m_unk3; + undefined2 _padding; + + UnkStruct(); + }; +private: + UnkStruct m_unk0[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_unk2; // 0x4c + undefined m_unk3; // 0x4d + undefined m_unk4; // 0x4e + MxU8 m_placedPartCount; // 0x4f +}; + +#endif // LEGOVEHICLEBUILDSTATE_H