diff --git a/CMakeLists.txt b/CMakeLists.txt index 00b4fdda..06c10670 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -284,14 +284,12 @@ target_link_libraries(omni PRIVATE dsound winmm Smacker::Smacker) add_library(lego1 SHARED LEGO1/define.cpp - LEGO1/lego/legoomni/src/act1/act1state.cpp - LEGO1/lego/legoomni/src/act2/legoact2state.cpp - LEGO1/lego/legoomni/src/act3/act3shark.cpp - LEGO1/lego/legoomni/src/act3/act3state.cpp LEGO1/lego/legoomni/src/actors/act2actor.cpp LEGO1/lego/legoomni/src/actors/act3actor.cpp + LEGO1/lego/legoomni/src/actors/act3shark.cpp LEGO1/lego/legoomni/src/actors/ambulance.cpp LEGO1/lego/legoomni/src/actors/bike.cpp + LEGO1/lego/legoomni/src/actors/buildings.cpp LEGO1/lego/legoomni/src/actors/bumpbouy.cpp LEGO1/lego/legoomni/src/actors/doors.cpp LEGO1/lego/legoomni/src/actors/dunebuggy.cpp @@ -315,11 +313,9 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp LEGO1/lego/legoomni/src/audio/mxbackgroundaudiomanager.cpp LEGO1/lego/legoomni/src/build/buildingentity.cpp - LEGO1/lego/legoomni/src/build/helicopterstate.cpp LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp LEGO1/lego/legoomni/src/build/legocarbuild.cpp - LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp - LEGO1/lego/legoomni/src/common/animstate.cpp + LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp LEGO1/lego/legoomni/src/common/legoactioncontrolpresenter.cpp LEGO1/lego/legoomni/src/common/legoactors.cpp LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -356,18 +352,7 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp LEGO1/lego/legoomni/src/entity/legoworld.cpp LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp - LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp - LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp - LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp - LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp - LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp - LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp - LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp - LEGO1/lego/legoomni/src/infocenter/scorestate.cpp LEGO1/lego/legoomni/src/input/legoinputmanager.cpp - LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp - LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp - LEGO1/lego/legoomni/src/isle/radiostate.cpp LEGO1/lego/legoomni/src/main/legomain.cpp LEGO1/lego/legoomni/src/main/scripts.cpp LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp @@ -378,22 +363,14 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp LEGO1/lego/legoomni/src/paths/legopathstruct.cpp - LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp - LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp - LEGO1/lego/legoomni/src/police/policeentity.cpp - LEGO1/lego/legoomni/src/police/policestate.cpp LEGO1/lego/legoomni/src/race/carrace.cpp LEGO1/lego/legoomni/src/race/jetskirace.cpp LEGO1/lego/legoomni/src/race/legorace.cpp LEGO1/lego/legoomni/src/race/legoraceactor.cpp LEGO1/lego/legoomni/src/race/legoracecar.cpp LEGO1/lego/legoomni/src/race/legoracemap.cpp - LEGO1/lego/legoomni/src/race/racestandsentity.cpp LEGO1/lego/legoomni/src/race/raceskel.cpp - LEGO1/lego/legoomni/src/race/racestate.cpp - LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp - LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp diff --git a/LEGO1/lego/legoomni/include/act1state.h b/LEGO1/lego/legoomni/include/act1state.h deleted file mode 100644 index 2d428e69..00000000 --- a/LEGO1/lego/legoomni/include/act1state.h +++ /dev/null @@ -1,134 +0,0 @@ -#ifndef ACT1STATE_H -#define ACT1STATE_H - -#include "legostate.h" - -class LegoNamedTexture; - -// VTABLE: LEGO1 0x100d7028 -// SIZE 0x26c -class Act1State : public LegoState { -public: - enum ElevatorFloor { - c_floor1 = 1, - c_floor2, - c_floor3 - }; - - enum { - e_unk953 = 953, - e_unk954 = 954, - e_unk955 = 955, - }; - - // SIZE 0x4c - class NamedPlane { - public: - // FUNCTION: LEGO1 0x10033800 - NamedPlane() {} - - inline void SetName(const char* p_name) { m_name = p_name; } - inline const MxString* GetName() const { return &m_name; } - - // FUNCTION: LEGO1 0x100344d0 - MxResult Serialize(LegoFile* p_file) - { - if (p_file->IsWriteMode()) { - p_file->WriteString(m_name); - p_file->WriteVector3(m_point1); - p_file->WriteVector3(m_point2); - p_file->WriteVector3(m_point3); - } - else if (p_file->IsReadMode()) { - p_file->ReadString(m_name); - p_file->ReadVector3(m_point1); - p_file->ReadVector3(m_point2); - p_file->ReadVector3(m_point3); - } - - return SUCCESS; - } - - private: - MxString m_name; // 0x00 - Mx3DPointFloat m_point1; // 0x10 - Mx3DPointFloat m_point2; // 0x24 - Mx3DPointFloat m_point3; // 0x38 - }; - - Act1State(); - - // FUNCTION: LEGO1 0x100338a0 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0154 - return "Act1State"; - } - - // FUNCTION: LEGO1 0x100338b0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name); - } - - MxBool SetFlag() override; // vtable+0x18 - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - void FUN_10034660(); - void FUN_100346a0(); - void FUN_10034b60(); - void FUN_10034d00(); - - // TODO: Most likely getters/setters are not used according to BETA. - - inline MxU32 GetUnknown18() { return m_unk0x018; } - inline ElevatorFloor GetElevatorFloor() { return (ElevatorFloor) m_elevFloor; } - inline MxU8 GetUnknown21() { return m_unk0x021; } - - inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x018 = p_unk0x18; } - inline void SetElevatorFloor(ElevatorFloor p_elevFloor) { m_elevFloor = p_elevFloor; } - inline void SetUnknown21(MxU8 p_unk0x21) { m_unk0x021 = p_unk0x21; } - - // SYNTHETIC: LEGO1 0x10033960 - // Act1State::`scalar deleting destructor' - - MxS32* m_unk0x008; // 0x008 FIXME: count for m_unk0x008 - MxS16 m_unk0x00c; // 0x00c - undefined2 m_unk0x00e; // 0x00e - undefined2 m_unk0x010; // 0x010 - undefined m_unk0x012; // 0x012 - MxS32 m_unk0x014; // 0x014 - MxU32 m_unk0x018; // 0x018 - MxS16 m_elevFloor; // 0x01c - MxBool m_unk0x01e; // 0x01e - MxBool m_unk0x01f; // 0x01f - MxBool m_planeActive; // 0x020 - undefined m_unk0x021; // 0x021 - MxBool m_unk0x022; // 0x022 - undefined m_unk0x023; // 0x023 - NamedPlane m_unk0x024; // 0x024 - NamedPlane m_unk0x070; // 0x070 - NamedPlane m_unk0x0bc; // 0x0bc - NamedPlane m_unk0x108; // 0x108 - LegoNamedTexture* m_unk0x154; // 0x154 - LegoNamedTexture* m_unk0x158; // 0x158 - LegoNamedTexture* m_unk0x15c; // 0x15c - MxCore* m_unk0x160; // 0x160 - NamedPlane m_unk0x164; // 0x164 - LegoNamedTexture* m_unk0x1b0; // 0x1b0 - LegoNamedTexture* m_unk0x1b4; // 0x1b4 - MxCore* m_unk0x1b8; // 0x1b8 - NamedPlane m_unk0x1bc; // 0x1bc - LegoNamedTexture* m_unk0x208; // 0x208 - MxCore* m_unk0x20c; // 0x20c - NamedPlane m_unk0x210; // 0x210 - LegoNamedTexture* m_unk0x25c; // 0x25c - LegoNamedTexture* m_unk0x260; // 0x260 - LegoNamedTexture* m_unk0x264; // 0x264 - MxCore* m_unk0x268; // 0x268 -}; - -// FUNCTION: LEGO1 0x10033a70 -// Act1State::NamedPlane::~NamedPlane - -#endif // ACT1STATE_H diff --git a/LEGO1/lego/legoomni/include/act3.h b/LEGO1/lego/legoomni/include/act3.h index b476dcc0..ddaccb13 100644 --- a/LEGO1/lego/legoomni/include/act3.h +++ b/LEGO1/lego/legoomni/include/act3.h @@ -1,8 +1,41 @@ #ifndef ACT3_H #define ACT3_H +#include "legostate.h" #include "legoworld.h" +// VTABLE: LEGO1 0x100d4fc8 +// SIZE 0x0c +class Act3State : public LegoState { +public: + inline Act3State() { m_unk0x08 = 0; } + + // FUNCTION: LEGO1 0x1000e300 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f03f0 + return "Act3State"; + } + + // FUNCTION: LEGO1 0x1000e310 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, Act3State::ClassName()) || LegoState::IsA(p_name); + } + + // FUNCTION: LEGO1 0x1000e2f0 + MxBool IsSerializable() override { return FALSE; } + + // SYNTHETIC: LEGO1 0x1000e3c0 + // Act3State::`scalar deleting destructor' + + inline undefined4 GetUnknown0x08() { return m_unk0x08; } + + // TODO: Most likely getters/setters are not used according to BETA. + + undefined4 m_unk0x08; // 0x08 +}; + // VTABLE: LEGO1 0x100d9628 // SIZE 0x4274 class Act3 : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/act3state.h b/LEGO1/lego/legoomni/include/act3state.h deleted file mode 100644 index 3df4e4f3..00000000 --- a/LEGO1/lego/legoomni/include/act3state.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef ACT3STATE_H -#define ACT3STATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d4fc8 -// SIZE 0x0c -class Act3State : public LegoState { -public: - inline Act3State() { m_unk0x08 = 0; } - - // FUNCTION: LEGO1 0x1000e300 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f03f0 - return "Act3State"; - } - - // FUNCTION: LEGO1 0x1000e310 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, Act3State::ClassName()) || LegoState::IsA(p_name); - } - - MxBool IsSerializable() override; - - // SYNTHETIC: LEGO1 0x1000e3c0 - // Act3State::`scalar deleting destructor' - - inline undefined4 GetUnknown0x08() { return m_unk0x08; } - -private: - undefined4 m_unk0x08; // 0x08 -}; - -#endif // ACT3STATE_H diff --git a/LEGO1/lego/legoomni/include/ambulance.h b/LEGO1/lego/legoomni/include/ambulance.h index 0edd9cae..1a92eb78 100644 --- a/LEGO1/lego/legoomni/include/ambulance.h +++ b/LEGO1/lego/legoomni/include/ambulance.h @@ -2,8 +2,63 @@ #define AMBULANCE_H #include "islepathactor.h" +#include "legostate.h" -class AmbulanceMissionState; +// VTABLE: LEGO1 0x100d72a0 +// SIZE 0x24 +class AmbulanceMissionState : public LegoState { +public: + AmbulanceMissionState(); + + // FUNCTION: LEGO1 0x10037600 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f00e8 + return "AmbulanceMissionState"; + } + + // FUNCTION: LEGO1 0x10037610 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, AmbulanceMissionState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + inline MxU16 GetScore(MxU8 p_id) + { + switch (p_id) { + case 1: + return m_score1; + case 2: + return m_score2; + case 3: + return m_score3; + case 4: + return m_score4; + case 5: + return m_score5; + default: + return 0; + } + } + + // SYNTHETIC: LEGO1 0x100376c0 + // AmbulanceMissionState::`scalar deleting destructor' + + undefined4 m_unk0x08; // 0x08 + undefined4 m_unk0x0c; // 0x0c + MxU16 m_unk0x10; // 0x10 + MxU16 m_unk0x12; // 0x12 + MxU16 m_unk0x14; // 0x14 + MxU16 m_unk0x16; // 0x16 + MxU16 m_unk0x18; // 0x18 + MxU16 m_score1; // 0x1a + MxU16 m_score2; // 0x1c + MxU16 m_score3; // 0x1e + MxU16 m_score4; // 0x20 + MxU16 m_score5; // 0x22 +}; // VTABLE: LEGO1 0x100d71a8 // SIZE 0x184 diff --git a/LEGO1/lego/legoomni/include/ambulancemissionstate.h b/LEGO1/lego/legoomni/include/ambulancemissionstate.h deleted file mode 100644 index 002d2803..00000000 --- a/LEGO1/lego/legoomni/include/ambulancemissionstate.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef AMBULANCEMISSIONSTATE_H -#define AMBULANCEMISSIONSTATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d72a0 -// SIZE 0x24 -class AmbulanceMissionState : public LegoState { -public: - AmbulanceMissionState(); - - // FUNCTION: LEGO1 0x10037600 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f00e8 - return "AmbulanceMissionState"; - } - - // FUNCTION: LEGO1 0x10037610 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, AmbulanceMissionState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - inline MxU16 GetScore(MxU8 p_id) - { - switch (p_id) { - case 1: - return m_score1; - case 2: - return m_score2; - case 3: - return m_score3; - case 4: - return m_score4; - case 5: - return m_score5; - default: - return 0; - } - } - - // SYNTHETIC: LEGO1 0x100376c0 - // AmbulanceMissionState::`scalar deleting destructor' - - undefined4 m_unk0x08; // 0x08 - undefined4 m_unk0x0c; // 0x0c - MxU16 m_unk0x10; // 0x10 - MxU16 m_unk0x12; // 0x12 - MxU16 m_unk0x14; // 0x14 - MxU16 m_unk0x16; // 0x16 - MxU16 m_unk0x18; // 0x18 - MxU16 m_score1; // 0x1a - MxU16 m_score2; // 0x1c - MxU16 m_score3; // 0x1e - MxU16 m_score4; // 0x20 - MxU16 m_score5; // 0x22 -}; - -#endif // AMBULANCEMISSIONSTATE_H diff --git a/LEGO1/lego/legoomni/include/animstate.h b/LEGO1/lego/legoomni/include/animstate.h deleted file mode 100644 index 8f3eda25..00000000 --- a/LEGO1/lego/legoomni/include/animstate.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef ANIMSTATE_H -#define ANIMSTATE_H - -#include "legostate.h" - -// SIZE 0x30 -struct ModelInfo { - char* m_name; // 0x00 - MxU8 m_unk0x04; // 0x04 - float m_location[3]; // 0x08 - float m_direction[3]; // 0x14 - float m_up[3]; // 0x20 - MxU8 m_unk0x2c; // 0x2c -}; - -// SIZE 0x30 -struct AnimInfo { - char* m_name; // 0x00 - MxU32 m_objectId; // 0x04 - MxS16 m_location; // 0x08 - MxBool m_unk0x0a; // 0x0a - MxU8 m_unk0x0b; // 0x0b - MxU8 m_unk0x0c; // 0x0c - MxU8 m_unk0x0d; // 0x0d - float m_unk0x10[4]; // 0x10 - MxU8 m_modelCount; // 0x20 - MxU16 m_unk0x22; // 0x22 - ModelInfo* m_models; // 0x24 - MxS8 m_unk0x28; // 0x28 - MxBool m_unk0x29; // 0x29 - MxS8 m_unk0x2a[3]; // 0x2a -}; - -// VTABLE: LEGO1 0x100d8d80 -// SIZE 0x1c -class AnimState : public LegoState { -public: - AnimState(); - ~AnimState() override; // vtable+0x00 - - // FUNCTION: LEGO1 0x10065070 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0460 - return "AnimState"; - } - - // FUNCTION: LEGO1 0x10065080 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, AnimState::ClassName()) || LegoState::IsA(p_name); - } - - MxBool SetFlag() override; // vtable+0x18 - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - void FUN_100651d0(MxU32, AnimInfo*, MxU32&); - void FUN_10065240(MxU32, AnimInfo*, MxU32); - - // SYNTHETIC: LEGO1 0x10065130 - // AnimState::`scalar deleting destructor' - -private: - undefined4 m_unk0x08; // 0x08 - undefined4 m_unk0x0c; // 0x0c - void* m_unk0x10; // 0x10 - undefined4 m_unk0x14; // 0x14 - void* m_unk0x18; // 0x18 -}; - -#endif // ANIMSTATE_H diff --git a/LEGO1/lego/legoomni/include/beachhouseentity.h b/LEGO1/lego/legoomni/include/beachhouseentity.h deleted file mode 100644 index 34e9db47..00000000 --- a/LEGO1/lego/legoomni/include/beachhouseentity.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef BEACHHOUSEENTITY_H -#define BEACHHOUSEENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d4a18 -// SIZE 0x68 -class BeachHouseEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ee80 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0314 - return "BeachHouseEntity"; - } - - // FUNCTION: LEGO1 0x1000ee90 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong VTable0x50(MxParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000f970 - // BeachHouseEntity::`scalar deleting destructor' -}; - -#endif // BEACHHOUSEENTITY_H diff --git a/LEGO1/lego/legoomni/include/buildings.h b/LEGO1/lego/legoomni/include/buildings.h new file mode 100644 index 00000000..39394628 --- /dev/null +++ b/LEGO1/lego/legoomni/include/buildings.h @@ -0,0 +1,166 @@ +#ifndef BUILDINGS_H +#define BUILDINGS_H + +#include "buildingentity.h" + +// VTABLE: LEGO1 0x100d48a8 +// SIZE 0x68 +class RaceStandsEntity : public BuildingEntity { + // FUNCTION: LEGO1 0x1000efa0 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0300 + return "RaceStandsEntity"; + } + + // FUNCTION: LEGO1 0x1000efb0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong VTable0x50(MxParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000f9e0 + // RaceStandsEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d4a18 +// SIZE 0x68 +class BeachHouseEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ee80 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0314 + return "BeachHouseEntity"; + } + + // FUNCTION: LEGO1 0x1000ee90 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong VTable0x50(MxParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000f970 + // BeachHouseEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d4ab0 +// SIZE 0x68 +class PoliceEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ed60 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0328 + return "PoliceEntity"; + } + + // FUNCTION: LEGO1 0x1000ed70 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, PoliceEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong VTable0x50(MxParam& p_param) override; // vtable+0x50 + + // SYNTHETIC: LEGO1 0x1000f900 + // PoliceEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d4b90 +// SIZE 0x68 +class InfoCenterEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ea00 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f035c + return "InfoCenterEntity"; + } + + // FUNCTION: LEGO1 0x1000ea10 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong VTable0x50(MxParam& p_param) override; // vtable+0x50 + + // SYNTHETIC: LEGO1 0x1000f7b0 + // InfoCenterEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d5068 +// SIZE 0x68 +class HospitalEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ec40 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0338 + return "HospitalEntity"; + } + + // FUNCTION: LEGO1 0x1000ec50 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong VTable0x50(MxParam& p_param) override; // vtable+0x50 + + // SYNTHETIC: LEGO1 0x1000f820 + // HospitalEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d5200 +// SIZE 0x68 +class JailEntity : public BuildingEntity { + // FUNCTION: LEGO1 0x1000f0c0 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0300 + return "RaceStandsEntity"; + } + + // FUNCTION: LEGO1 0x1000f0d0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, JailEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + // STUB: LEGO1 0x100154f0 + MxLong VTable0x50(MxParam& p_param) override { return 0; } + + // SYNTHETIC: LEGO1 0x1000fac0 + // JailEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d5258 +// SIZE 0x68 +class GasStationEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000eb20 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0348 + return "GasStationEntity"; + } + + // FUNCTION: LEGO1 0x1000eb30 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, GasStationEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong VTable0x50(MxParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000f890 + // GasStationEntity::`scalar deleting destructor' +}; + +#endif // BUILDINGS_H diff --git a/LEGO1/lego/legoomni/include/carrace.h b/LEGO1/lego/legoomni/include/carrace.h index bb9d6324..67332197 100644 --- a/LEGO1/lego/legoomni/include/carrace.h +++ b/LEGO1/lego/legoomni/include/carrace.h @@ -4,6 +4,27 @@ #include "decomp.h" #include "legorace.h" +// VTABLE: LEGO1 0x100d4b70 +// SIZE 0x2c +class CarRaceState : public RaceState { +public: + // FUNCTION: LEGO1 0x1000dd30 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f009c + return "CarRaceState"; + } + + // FUNCTION: LEGO1 0x1000dd40 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, CarRaceState::ClassName()) || RaceState::IsA(p_name); + } + + // SYNTHETIC: LEGO1 0x1000f740 + // CarRaceState::`scalar deleting destructor' +}; + // VTABLE: LEGO1 0x100d5e50 // SIZE 0x154 class CarRace : public LegoRace { diff --git a/LEGO1/lego/legoomni/include/carracestate.h b/LEGO1/lego/legoomni/include/carracestate.h deleted file mode 100644 index c7a1e376..00000000 --- a/LEGO1/lego/legoomni/include/carracestate.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef CARRACESTATE_H -#define CARRACESTATE_H - -#include "racestate.h" - -// VTABLE: LEGO1 0x100d4b70 -// SIZE 0x2c -class CarRaceState : public RaceState { -public: - // FUNCTION: LEGO1 0x1000dd30 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f009c - return "CarRaceState"; - } - - // FUNCTION: LEGO1 0x1000dd40 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, CarRaceState::ClassName()) || RaceState::IsA(p_name); - } - - // SYNTHETIC: LEGO1 0x1000f740 - // CarRaceState::`scalar deleting destructor' -}; - -#endif // CARRACESTATE_H diff --git a/LEGO1/lego/legoomni/include/caveentity.h b/LEGO1/lego/legoomni/include/caveentity.h index 24b9759f..308f35bc 100644 --- a/LEGO1/lego/legoomni/include/caveentity.h +++ b/LEGO1/lego/legoomni/include/caveentity.h @@ -1,7 +1,7 @@ #ifndef CAVEENTITY_H #define CAVEENTITY_H -#include "racestandsentity.h" +#include "buildings.h" // No overrides, uses vtable from RaceStandsEntity // SIZE 0x68 diff --git a/LEGO1/lego/legoomni/include/gasstation.h b/LEGO1/lego/legoomni/include/gasstation.h index 0709f0ad..6a37db84 100644 --- a/LEGO1/lego/legoomni/include/gasstation.h +++ b/LEGO1/lego/legoomni/include/gasstation.h @@ -3,12 +3,55 @@ #include "decomp.h" #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" #include "radio.h" -class GasStationState; class MxStillPresenter; +// VTABLE: LEGO1 0x100d46e0 +// SIZE 0x24 +class GasStationState : public LegoState { +public: + // SIZE 0x04 + struct Unknown0x14 { + undefined4 m_unk0x00; // 0x00 + }; + + GasStationState(); + + // FUNCTION: LEGO1 0x100061d0 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0174 + return "GasStationState"; + } + + // FUNCTION: LEGO1 0x100061e0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + // SYNTHETIC: LEGO1 0x10006290 + // GasStationState::`scalar deleting destructor' + + void FUN_10006430(undefined4); + void FUN_10006490(); + + // TODO: Most likely getters/setters are not used according to BETA. + + undefined4 m_unk0x08[3]; // 0x08 + Unknown0x14 m_unk0x14; // 0x14 + MxS16 m_unk0x18; // 0x18 + MxS16 m_unk0x1a; // 0x1a + MxS16 m_unk0x1c; // 0x1c + MxS16 m_unk0x1e; // 0x1e + MxS16 m_unk0x20; // 0x20 +}; + // VTABLE: LEGO1 0x100d4650 // SIZE 0x128 class GasStation : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/gasstationentity.h b/LEGO1/lego/legoomni/include/gasstationentity.h deleted file mode 100644 index 1b25cfd2..00000000 --- a/LEGO1/lego/legoomni/include/gasstationentity.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef GASSTATIONENTITY_H -#define GASSTATIONENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d5258 -// SIZE 0x68 -class GasStationEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000eb20 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0348 - return "GasStationEntity"; - } - - // FUNCTION: LEGO1 0x1000eb30 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, GasStationEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong VTable0x50(MxParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000f890 - // GasStationEntity::`scalar deleting destructor' -}; - -#endif // GASSTATIONENTITY_H diff --git a/LEGO1/lego/legoomni/include/gasstationstate.h b/LEGO1/lego/legoomni/include/gasstationstate.h deleted file mode 100644 index bf0327da..00000000 --- a/LEGO1/lego/legoomni/include/gasstationstate.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef GASSTATIONSTATE_H -#define GASSTATIONSTATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d46e0 -// SIZE 0x24 -class GasStationState : public LegoState { -public: - // SIZE 0x04 - struct Unknown0x14 { - undefined4 m_unk0x00; // 0x00 - }; - - GasStationState(); - - // FUNCTION: LEGO1 0x100061d0 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0174 - return "GasStationState"; - } - - // FUNCTION: LEGO1 0x100061e0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - // SYNTHETIC: LEGO1 0x10006290 - // GasStationState::`scalar deleting destructor' - - void FUN_10006430(undefined4); - void FUN_10006490(); - - friend class GasStation; - -private: - undefined4 m_unk0x08[3]; // 0x08 - Unknown0x14 m_unk0x14; // 0x14 - MxS16 m_unk0x18; // 0x18 - MxS16 m_unk0x1a; // 0x1a - MxS16 m_unk0x1c; // 0x1c - MxS16 m_unk0x1e; // 0x1e - MxS16 m_unk0x20; // 0x20 -}; - -#endif // GASSTATIONSTATE_H diff --git a/LEGO1/lego/legoomni/include/helicopter.h b/LEGO1/lego/legoomni/include/helicopter.h index 638f9287..dd9451c0 100644 --- a/LEGO1/lego/legoomni/include/helicopter.h +++ b/LEGO1/lego/legoomni/include/helicopter.h @@ -2,9 +2,46 @@ #define HELICOPTER_H #include "islepathactor.h" +#include "legostate.h" #include "realtime/matrix.h" -class HelicopterState; +// VTABLE: LEGO1 0x100d5418 +// SIZE 0x0c +class HelicopterState : public LegoState { +public: + // FUNCTION: LEGO1 0x1000e0d0 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0144 + return "HelicopterState"; + } + + // FUNCTION: LEGO1 0x1000e0e0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name); + } + + // FUNCTION: LEGO1 0x1000e0b0 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + // FUNCTION: LEGO1 0x1000e0c0 + MxBool SetFlag() override + { + m_unk0x08 = 0; + return TRUE; + } // vtable+0x18 + + inline void SetUnknown8(MxU32 p_unk0x08) { m_unk0x08 = p_unk0x08; } + inline MxU32 GetUnkown8() { return m_unk0x08; } + + // SYNTHETIC: LEGO1 0x1000e190 + // HelicopterState::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + MxU32 m_unk0x08; // 0x08 +}; // VTABLE: LEGO1 0x100d40f8 // SIZE 0x230 diff --git a/LEGO1/lego/legoomni/include/helicopterstate.h b/LEGO1/lego/legoomni/include/helicopterstate.h deleted file mode 100644 index 7bda248f..00000000 --- a/LEGO1/lego/legoomni/include/helicopterstate.h +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef HELICOPTERSTATE_H -#define HELICOPTERSTATE_H - -#include "decomp.h" -#include "legostate.h" - -// VTABLE: LEGO1 0x100d5418 -// SIZE 0x0c -class HelicopterState : public LegoState { -public: - // FUNCTION: LEGO1 0x1000e0d0 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0144 - return "HelicopterState"; - } - - // FUNCTION: LEGO1 0x1000e0e0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name); - } - - // FUNCTION: LEGO1 0x1000e0b0 - MxBool IsSerializable() override { return FALSE; } // vtable+0x14 - - // FUNCTION: LEGO1 0x1000e0c0 - MxBool SetFlag() override - { - m_unk0x08 = 0; - return TRUE; - } // vtable+0x18 - - inline void SetUnknown8(MxU32 p_unk0x08) { m_unk0x08 = p_unk0x08; } - inline MxU32 GetUnkown8() { return m_unk0x08; } - - // SYNTHETIC: LEGO1 0x1000e190 - // HelicopterState::`scalar deleting destructor' - -protected: - MxU32 m_unk0x08; // 0x08 -}; - -#endif // HELICOPTERSTATE_H diff --git a/LEGO1/lego/legoomni/include/hospital.h b/LEGO1/lego/legoomni/include/hospital.h index 014e872d..32377fe3 100644 --- a/LEGO1/lego/legoomni/include/hospital.h +++ b/LEGO1/lego/legoomni/include/hospital.h @@ -4,13 +4,54 @@ #include "actionsfwd.h" #include "decomp.h" #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" -class HospitalState; class LegoControlManagerEvent; class MxEndActionNotificationParam; class MxStillPresenter; +// VTABLE: LEGO1 0x100d97a0 +// SIZE 0x18 +class HospitalState : public LegoState { +public: + // SIZE 0x04 + struct Unknown0x08 { + undefined4 m_unk0x00; // 0x00 + }; + + HospitalState(); + ~HospitalState() override {} + + // FUNCTION: LEGO1 0x10076400 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0480 + return "HospitalState"; + } + + // FUNCTION: LEGO1 0x10076410 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, HospitalState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + // SYNTHETIC: LEGO1 0x100764c0 + // HospitalState::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + Unknown0x08 m_unk0x08; // 0x08 + MxS16 m_unk0x0c; // 0x0c + MxS16 m_unk0x0e; // 0x0e + MxS16 m_unk0x10; // 0x10 + MxS16 m_unk0x12; // 0x12 + MxS16 m_unk0x14; // 0x14 + MxS16 m_unk0x16; // 0x16 +}; + // VTABLE: LEGO1 0x100d9730 // SIZE 0x12c class Hospital : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/hospitalentity.h b/LEGO1/lego/legoomni/include/hospitalentity.h deleted file mode 100644 index 3dbe7d54..00000000 --- a/LEGO1/lego/legoomni/include/hospitalentity.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef HOSPITALENTITY_H -#define HOSPITALENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d5068 -// SIZE 0x68 -class HospitalEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ec40 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0338 - return "HospitalEntity"; - } - - // FUNCTION: LEGO1 0x1000ec50 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong VTable0x50(MxParam& p_param) override; // vtable+0x50 - - // SYNTHETIC: LEGO1 0x1000f820 - // HospitalEntity::`scalar deleting destructor' -}; - -#endif // HOSPITALENTITY_H diff --git a/LEGO1/lego/legoomni/include/hospitalstate.h b/LEGO1/lego/legoomni/include/hospitalstate.h deleted file mode 100644 index 16d80cb6..00000000 --- a/LEGO1/lego/legoomni/include/hospitalstate.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef HOSPITALSTATE_H -#define HOSPITALSTATE_H - -#include "decomp.h" -#include "legostate.h" - -// VTABLE: LEGO1 0x100d97a0 -// SIZE 0x18 -class HospitalState : public LegoState { -public: - // SIZE 0x04 - struct Unknown0x08 { - undefined4 m_unk0x00; // 0x00 - }; - - HospitalState(); - ~HospitalState() override {} - - // FUNCTION: LEGO1 0x10076400 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0480 - return "HospitalState"; - } - - // FUNCTION: LEGO1 0x10076410 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, HospitalState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - // SYNTHETIC: LEGO1 0x100764c0 - // HospitalState::`scalar deleting destructor' - - friend class Hospital; - -private: - Unknown0x08 m_unk0x08; // 0x08 - MxS16 m_unk0x0c; // 0x0c - MxS16 m_unk0x0e; // 0x0e - MxS16 m_unk0x10; // 0x10 - MxS16 m_unk0x12; // 0x12 - MxS16 m_unk0x14; // 0x14 - MxS16 m_unk0x16; // 0x16 -}; - -#endif // HOSPITALSTATE_H diff --git a/LEGO1/lego/legoomni/include/infocenter.h b/LEGO1/lego/legoomni/include/infocenter.h index 08bb9a2c..7d805246 100644 --- a/LEGO1/lego/legoomni/include/infocenter.h +++ b/LEGO1/lego/legoomni/include/infocenter.h @@ -3,15 +3,65 @@ #include "actionsfwd.h" #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" #include "mxrect32.h" #include "radio.h" -class InfocenterState; class MxNotificationParam; class MxStillPresenter; class LegoControlManagerEvent; +// VTABLE: LEGO1 0x100d93a8 +// SIZE 0x94 +class InfocenterState : public LegoState { +public: + InfocenterState(); + ~InfocenterState() override; + + // FUNCTION: LEGO1 0x10071840 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f04dc + return "InfocenterState"; + } + + // FUNCTION: LEGO1 0x10071850 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, InfocenterState::ClassName()) || LegoState::IsA(p_name); + } + + // FUNCTION: LEGO1 0x10071830 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + inline MxS16 GetMaxNameLength() { return sizeOfArray(m_letters); } + inline MxStillPresenter* GetNameLetter(MxS32 p_index) { return m_letters[p_index]; } + inline void SetNameLetter(MxS32 p_index, MxStillPresenter* p_letter) { m_letters[p_index] = p_letter; } + inline MxBool HasRegistered() { return m_letters[0] != NULL; } + inline Playlist& GetExitDialogueAct1() { return m_exitDialogueAct1; } + inline Playlist& GetExitDialogueAct23() { return m_exitDialogueAct23; } + inline Playlist& GetReturnDialogue(LegoGameState::Act p_act) { return m_returnDialogue[p_act]; } + inline Playlist& GetLeaveDialogue(LegoGameState::Act p_act) { return m_leaveDialogue[p_act]; } + inline Playlist& GetBricksterDialogue() { return m_bricksterDialogue; } + inline MxU32 GetUnknown0x74() { return m_unk0x74; } + + inline void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; } + + // SYNTHETIC: LEGO1 0x10071900 + // InfocenterState::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + Playlist m_exitDialogueAct1; // 0x08 + Playlist m_exitDialogueAct23; // 0x14 + Playlist m_returnDialogue[3]; // 0x20 + Playlist m_leaveDialogue[3]; // 0x44 + Playlist m_bricksterDialogue; // 0x68 + MxU32 m_unk0x74; // 0x74 + MxStillPresenter* m_letters[7]; // 0x78 +}; + // SIZE 0x18 struct InfocenterMapEntry { // FUNCTION: LEGO1 0x1006ec80 diff --git a/LEGO1/lego/legoomni/include/infocenterentity.h b/LEGO1/lego/legoomni/include/infocenterentity.h deleted file mode 100644 index 82fa3d30..00000000 --- a/LEGO1/lego/legoomni/include/infocenterentity.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef INFOCENTERENTITY_H -#define INFOCENTERENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d4b90 -// SIZE 0x68 -class InfoCenterEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ea00 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f035c - return "InfoCenterEntity"; - } - - // FUNCTION: LEGO1 0x1000ea10 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, InfoCenterEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong VTable0x50(MxParam& p_param) override; // vtable+0x50 - - // SYNTHETIC: LEGO1 0x1000f7b0 - // InfoCenterEntity::`scalar deleting destructor' -}; - -#endif // INFOCENTERENTITY_H diff --git a/LEGO1/lego/legoomni/include/infocenterstate.h b/LEGO1/lego/legoomni/include/infocenterstate.h deleted file mode 100644 index b1c418f1..00000000 --- a/LEGO1/lego/legoomni/include/infocenterstate.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef INFOCENTERSTATE_H -#define INFOCENTERSTATE_H - -#include "decomp.h" -#include "legogamestate.h" -#include "legostate.h" - -class MxStillPresenter; - -// VTABLE: LEGO1 0x100d93a8 -// SIZE 0x94 -class InfocenterState : public LegoState { -public: - InfocenterState(); - ~InfocenterState() override; - - // FUNCTION: LEGO1 0x10071840 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f04dc - return "InfocenterState"; - } - - // FUNCTION: LEGO1 0x10071850 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, InfocenterState::ClassName()) || LegoState::IsA(p_name); - } - - // FUNCTION: LEGO1 0x10071830 - MxBool IsSerializable() override { return FALSE; } // vtable+0x14 - - inline MxS16 GetMaxNameLength() { return sizeOfArray(m_letters); } - inline MxStillPresenter* GetNameLetter(MxS32 p_index) { return m_letters[p_index]; } - inline void SetNameLetter(MxS32 p_index, MxStillPresenter* p_letter) { m_letters[p_index] = p_letter; } - inline MxBool HasRegistered() { return m_letters[0] != NULL; } - inline Playlist& GetExitDialogueAct1() { return m_exitDialogueAct1; } - inline Playlist& GetExitDialogueAct23() { return m_exitDialogueAct23; } - inline Playlist& GetReturnDialogue(LegoGameState::Act p_act) { return m_returnDialogue[p_act]; } - inline Playlist& GetLeaveDialogue(LegoGameState::Act p_act) { return m_leaveDialogue[p_act]; } - inline Playlist& GetBricksterDialogue() { return m_bricksterDialogue; } - inline MxU32 GetUnknown0x74() { return m_unk0x74; } - - inline void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; } - - // SYNTHETIC: LEGO1 0x10071900 - // InfocenterState::`scalar deleting destructor' - -private: - Playlist m_exitDialogueAct1; // 0x08 - Playlist m_exitDialogueAct23; // 0x14 - Playlist m_returnDialogue[3]; // 0x20 - Playlist m_leaveDialogue[3]; // 0x44 - Playlist m_bricksterDialogue; // 0x68 - MxU32 m_unk0x74; // 0x74 - MxStillPresenter* m_letters[7]; // 0x78 -}; - -#endif // INFOCENTERSTATE_H diff --git a/LEGO1/lego/legoomni/include/isle.h b/LEGO1/lego/legoomni/include/isle.h index e9d4da42..8af16007 100644 --- a/LEGO1/lego/legoomni/include/isle.h +++ b/LEGO1/lego/legoomni/include/isle.h @@ -3,16 +3,17 @@ #include "actionsfwd.h" #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" #include "radio.h" -class Act1State; class Ambulance; class Bike; class DuneBuggy; class Helicopter; class Jetski; class JukeBoxEntity; +class LegoNamedTexture; class Motocycle; class MxType19NotificationParam; class Pizza; @@ -21,6 +22,132 @@ class RaceCar; class SkateBoard; class TowTrack; +// VTABLE: LEGO1 0x100d7028 +// SIZE 0x26c +class Act1State : public LegoState { +public: + enum ElevatorFloor { + c_floor1 = 1, + c_floor2, + c_floor3 + }; + + enum { + e_unk953 = 953, + e_unk954 = 954, + e_unk955 = 955, + }; + + // SIZE 0x4c + class NamedPlane { + public: + // FUNCTION: LEGO1 0x10033800 + NamedPlane() {} + + inline void SetName(const char* p_name) { m_name = p_name; } + inline const MxString* GetName() const { return &m_name; } + + // FUNCTION: LEGO1 0x100344d0 + MxResult Serialize(LegoFile* p_file) + { + if (p_file->IsWriteMode()) { + p_file->WriteString(m_name); + p_file->WriteVector3(m_point1); + p_file->WriteVector3(m_point2); + p_file->WriteVector3(m_point3); + } + else if (p_file->IsReadMode()) { + p_file->ReadString(m_name); + p_file->ReadVector3(m_point1); + p_file->ReadVector3(m_point2); + p_file->ReadVector3(m_point3); + } + + return SUCCESS; + } + + private: + MxString m_name; // 0x00 + Mx3DPointFloat m_point1; // 0x10 + Mx3DPointFloat m_point2; // 0x24 + Mx3DPointFloat m_point3; // 0x38 + }; + + Act1State(); + + // FUNCTION: LEGO1 0x100338a0 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0154 + return "Act1State"; + } + + // FUNCTION: LEGO1 0x100338b0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name); + } + + MxBool SetFlag() override; // vtable+0x18 + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + void FUN_10034660(); + void FUN_100346a0(); + void FUN_10034b60(); + void FUN_10034d00(); + + inline MxU32 GetUnknown18() { return m_unk0x018; } + inline ElevatorFloor GetElevatorFloor() { return (ElevatorFloor) m_elevFloor; } + inline MxU8 GetUnknown21() { return m_unk0x021; } + + inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x018 = p_unk0x18; } + inline void SetElevatorFloor(ElevatorFloor p_elevFloor) { m_elevFloor = p_elevFloor; } + inline void SetUnknown21(MxU8 p_unk0x21) { m_unk0x021 = p_unk0x21; } + + // SYNTHETIC: LEGO1 0x10033960 + // Act1State::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + MxS32* m_unk0x008; // 0x008 FIXME: count for m_unk0x008 + MxS16 m_unk0x00c; // 0x00c + undefined2 m_unk0x00e; // 0x00e + undefined2 m_unk0x010; // 0x010 + undefined m_unk0x012; // 0x012 + MxS32 m_unk0x014; // 0x014 + MxU32 m_unk0x018; // 0x018 + MxS16 m_elevFloor; // 0x01c + MxBool m_unk0x01e; // 0x01e + MxBool m_unk0x01f; // 0x01f + MxBool m_planeActive; // 0x020 + undefined m_unk0x021; // 0x021 + MxBool m_unk0x022; // 0x022 + undefined m_unk0x023; // 0x023 + NamedPlane m_unk0x024; // 0x024 + NamedPlane m_unk0x070; // 0x070 + NamedPlane m_unk0x0bc; // 0x0bc + NamedPlane m_unk0x108; // 0x108 + LegoNamedTexture* m_unk0x154; // 0x154 + LegoNamedTexture* m_unk0x158; // 0x158 + LegoNamedTexture* m_unk0x15c; // 0x15c + MxCore* m_unk0x160; // 0x160 + NamedPlane m_unk0x164; // 0x164 + LegoNamedTexture* m_unk0x1b0; // 0x1b0 + LegoNamedTexture* m_unk0x1b4; // 0x1b4 + MxCore* m_unk0x1b8; // 0x1b8 + NamedPlane m_unk0x1bc; // 0x1bc + LegoNamedTexture* m_unk0x208; // 0x208 + MxCore* m_unk0x20c; // 0x20c + NamedPlane m_unk0x210; // 0x210 + LegoNamedTexture* m_unk0x25c; // 0x25c + LegoNamedTexture* m_unk0x260; // 0x260 + LegoNamedTexture* m_unk0x264; // 0x264 + MxCore* m_unk0x268; // 0x268 +}; + +// FUNCTION: LEGO1 0x10033a70 +// Act1State::NamedPlane::~NamedPlane + // VTABLE: LEGO1 0x100d6fb8 // SIZE 0x140 class Isle : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/jailentity.h b/LEGO1/lego/legoomni/include/jailentity.h deleted file mode 100644 index adf7089a..00000000 --- a/LEGO1/lego/legoomni/include/jailentity.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef JAILENTITY_H -#define JAILENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d5200 -// SIZE 0x68 -class JailEntity : public BuildingEntity { - // FUNCTION: LEGO1 0x1000f0c0 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0300 - return "RaceStandsEntity"; - } - - // FUNCTION: LEGO1 0x1000f0d0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, JailEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - // STUB: LEGO1 0x100154f0 - MxLong VTable0x50(MxParam& p_param) override { return 0; } - - // SYNTHETIC: LEGO1 0x1000fac0 - // JailEntity::`scalar deleting destructor' -}; - -#endif // JAILENTITY_H diff --git a/LEGO1/lego/legoomni/include/jetskirace.h b/LEGO1/lego/legoomni/include/jetskirace.h index 7f17a1fc..b51496c4 100644 --- a/LEGO1/lego/legoomni/include/jetskirace.h +++ b/LEGO1/lego/legoomni/include/jetskirace.h @@ -3,6 +3,27 @@ #include "legorace.h" +// VTABLE: LEGO1 0x100d4fa8 +// SIZE 0x2c +class JetskiRaceState : public RaceState { +public: + // FUNCTION: LEGO1 0x1000dc40 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f00ac + return "JetskiRaceState"; + } + + // FUNCTION: LEGO1 0x1000dc50 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name); + } + + // SYNTHETIC: LEGO1 0x1000f680 + // JetskiRaceState::`scalar deleting destructor' +}; + // VTABLE: LEGO1 0x100d4fe8 // SIZE 0x144 class JetskiRace : public LegoRace { diff --git a/LEGO1/lego/legoomni/include/jetskiracestate.h b/LEGO1/lego/legoomni/include/jetskiracestate.h deleted file mode 100644 index 812a0a0f..00000000 --- a/LEGO1/lego/legoomni/include/jetskiracestate.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef JETSKIRACESTATE_H -#define JETSKIRACESTATE_H - -#include "racestate.h" - -// VTABLE: LEGO1 0x100d4fa8 -// SIZE 0x2c -class JetskiRaceState : public RaceState { -public: - // FUNCTION: LEGO1 0x1000dc40 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f00ac - return "JetskiRaceState"; - } - - // FUNCTION: LEGO1 0x1000dc50 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name); - } - - // SYNTHETIC: LEGO1 0x1000f680 - // JetskiRaceState::`scalar deleting destructor' -}; - -#endif // JETSKIRACESTATE_H diff --git a/LEGO1/lego/legoomni/include/jukebox.h b/LEGO1/lego/legoomni/include/jukebox.h index 2ee17f37..8b624191 100644 --- a/LEGO1/lego/legoomni/include/jukebox.h +++ b/LEGO1/lego/legoomni/include/jukebox.h @@ -3,10 +3,46 @@ #include "decomp.h" #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" class LegoControlManagerEvent; -class JukeBoxState; + +// VTABLE: LEGO1 0x100d4a90 +// SIZE 0x10 +class JukeBoxState : public LegoState { +public: + enum Music { + e_pasquell = 0, + e_right, + e_decal, + e_wallis, + e_nelson, + e_torpedos + }; + + // FUNCTION: LEGO1 0x1000f310 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f02bc + return "JukeBoxState"; + } + + // FUNCTION: LEGO1 0x1000f320 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, JukeBoxState::ClassName()) || LegoState::IsA(p_name); + } + + // FUNCTION: LEGO1 0x1000f300 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + // SYNTHETIC: LEGO1 0x1000f3d0 + // JukeBoxState::`scalar deleting destructor' + + Music m_music; // 0x08 + MxU32 m_active; // 0x0c +}; // VTABLE: LEGO1 0x100d8958 // SIZE 0x104 diff --git a/LEGO1/lego/legoomni/include/jukeboxstate.h b/LEGO1/lego/legoomni/include/jukeboxstate.h deleted file mode 100644 index d9da3b84..00000000 --- a/LEGO1/lego/legoomni/include/jukeboxstate.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef JUKEBOXSTATE_H -#define JUKEBOXSTATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d4a90 -// SIZE 0x10 -class JukeBoxState : public LegoState { -public: - enum Music { - e_pasquell = 0, - e_right, - e_decal, - e_wallis, - e_nelson, - e_torpedos - }; - - // FUNCTION: LEGO1 0x1000f310 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f02bc - return "JukeBoxState"; - } - - // FUNCTION: LEGO1 0x1000f320 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, JukeBoxState::ClassName()) || LegoState::IsA(p_name); - } - - MxBool IsSerializable() override; // vtable+0x14 - - // SYNTHETIC: LEGO1 0x1000f3d0 - // JukeBoxState::`scalar deleting destructor' - - Music m_music; // 0x08 - MxU32 m_active; // 0x0c -}; - -#endif // JUKEBOXSTATE_H diff --git a/LEGO1/lego/legoomni/include/legoact2.h b/LEGO1/lego/legoomni/include/legoact2.h index b84fada3..735e31c2 100644 --- a/LEGO1/lego/legoomni/include/legoact2.h +++ b/LEGO1/lego/legoomni/include/legoact2.h @@ -2,8 +2,43 @@ #define LEGOACT2_H #include "act2brick.h" +#include "legostate.h" #include "legoworld.h" +// VTABLE: LEGO1 0x100d4a70 +// SIZE 0x10 +class LegoAct2State : public LegoState { +public: + ~LegoAct2State() override {} + + // FUNCTION: LEGO1 0x1000df80 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0428 + return "LegoAct2State"; + } + + // FUNCTION: LEGO1 0x1000df90 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, LegoAct2State::ClassName()) || LegoState::IsA(p_name); + } + + // FUNCTION: LEGO1 0x1000df70 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + // SYNTHETIC: LEGO1 0x1000e040 + // LegoAct2State::`scalar deleting destructor' + + inline undefined4 GetUnknown0x08() { return m_unk0x08; } + inline void SetUnknown0x0c(undefined p_unk0x0c) { m_unk0x0c = p_unk0x0c; } + + // TODO: Most likely getters/setters are not used according to BETA. + + undefined4 m_unk0x08; // 0x08 + undefined m_unk0x0c; // 0x0c +}; + // VTABLE: LEGO1 0x100d82e0 // SIZE 0x1154 class LegoAct2 : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/legoact2state.h b/LEGO1/lego/legoomni/include/legoact2state.h deleted file mode 100644 index 5f046e74..00000000 --- a/LEGO1/lego/legoomni/include/legoact2state.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef LEGOACT2STATE_H -#define LEGOACT2STATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d4a70 -// SIZE 0x10 -class LegoAct2State : public LegoState { -public: - ~LegoAct2State() override {} - - // FUNCTION: LEGO1 0x1000df80 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0428 - return "LegoAct2State"; - } - - // FUNCTION: LEGO1 0x1000df90 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, LegoAct2State::ClassName()) || LegoState::IsA(p_name); - } - - MxBool IsSerializable() override; // vtable+0x14 - - // SYNTHETIC: LEGO1 0x1000e040 - // LegoAct2State::`scalar deleting destructor' - - inline undefined4 GetUnknown0x08() { return m_unk0x08; } - inline void SetUnknown0x0c(undefined p_unk0x0c) { m_unk0x0c = p_unk0x0c; } - -private: - undefined4 m_unk0x08; // 0x08 - undefined m_unk0x0c; // 0x0c -}; - -#endif // LEGOACT2STATE_H diff --git a/LEGO1/lego/legoomni/include/legoanimationmanager.h b/LEGO1/lego/legoomni/include/legoanimationmanager.h index e118cbf5..8e473077 100644 --- a/LEGO1/lego/legoomni/include/legoanimationmanager.h +++ b/LEGO1/lego/legoomni/include/legoanimationmanager.h @@ -4,11 +4,11 @@ #include "actionsfwd.h" #include "decomp.h" #include "legolocations.h" +#include "legostate.h" #include "legotraninfolist.h" #include "mxcore.h" #include "mxgeometry/mxgeometry3d.h" -class AnimState; class LegoAnimPresenter; class LegoEntity; class LegoExtraActor; @@ -18,9 +18,73 @@ class LegoPathBoundary; class LegoROIList; struct LegoUnknown100db7f4; class LegoWorld; -struct ModelInfo; class MxDSAction; +// SIZE 0x30 +struct ModelInfo { + char* m_name; // 0x00 + MxU8 m_unk0x04; // 0x04 + float m_location[3]; // 0x08 + float m_direction[3]; // 0x14 + float m_up[3]; // 0x20 + MxU8 m_unk0x2c; // 0x2c +}; + +// SIZE 0x30 +struct AnimInfo { + char* m_name; // 0x00 + MxU32 m_objectId; // 0x04 + MxS16 m_location; // 0x08 + MxBool m_unk0x0a; // 0x0a + MxU8 m_unk0x0b; // 0x0b + MxU8 m_unk0x0c; // 0x0c + MxU8 m_unk0x0d; // 0x0d + float m_unk0x10[4]; // 0x10 + MxU8 m_modelCount; // 0x20 + MxU16 m_unk0x22; // 0x22 + ModelInfo* m_models; // 0x24 + MxS8 m_unk0x28; // 0x28 + MxBool m_unk0x29; // 0x29 + MxS8 m_unk0x2a[3]; // 0x2a +}; + +// VTABLE: LEGO1 0x100d8d80 +// SIZE 0x1c +class AnimState : public LegoState { +public: + AnimState(); + ~AnimState() override; // vtable+0x00 + + // FUNCTION: LEGO1 0x10065070 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0460 + return "AnimState"; + } + + // FUNCTION: LEGO1 0x10065080 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, AnimState::ClassName()) || LegoState::IsA(p_name); + } + + MxBool SetFlag() override; // vtable+0x18 + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + void FUN_100651d0(MxU32, AnimInfo*, MxU32&); + void FUN_10065240(MxU32, AnimInfo*, MxU32); + + // SYNTHETIC: LEGO1 0x10065130 + // AnimState::`scalar deleting destructor' + +private: + undefined4 m_unk0x08; // 0x08 + undefined4 m_unk0x0c; // 0x0c + void* m_unk0x10; // 0x10 + undefined4 m_unk0x14; // 0x14 + void* m_unk0x18; // 0x18 +}; + // VTABLE: LEGO1 0x100d8c18 // SIZE 0x500 class LegoAnimationManager : public MxCore { diff --git a/LEGO1/lego/legoomni/include/legocarbuild.h b/LEGO1/lego/legoomni/include/legocarbuild.h index bd86964e..ed486c9f 100644 --- a/LEGO1/lego/legoomni/include/legocarbuild.h +++ b/LEGO1/lego/legoomni/include/legocarbuild.h @@ -1,8 +1,54 @@ #ifndef LEGOCARBUILD_H #define LEGOCARBUILD_H +#include "legostate.h" #include "legoworld.h" +// VTABLE: LEGO1 0x100d66e0 +// SIZE 0x50 +class LegoVehicleBuildState : public LegoState { +public: + LegoVehicleBuildState(char* p_classType); + + // FUNCTION: LEGO1 0x10025ff0 + inline const char* ClassName() const override // vtable+0x0c + { + return this->m_className.GetData(); + } + + // FUNCTION: LEGO1 0x10026000 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, this->m_className.GetData()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + // SYNTHETIC: LEGO1 0x100260a0 + // LegoVehicleBuildState::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + Playlist m_unk0x08[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_unk0x4c; // 0x4c + MxBool m_unk0x4d; // 0x4d + MxBool m_unk0x4e; // 0x4e + MxU8 m_placedPartCount; // 0x4f +}; + // VTABLE: LEGO1 0x100d6658 // SIZE 0x34c class LegoCarBuild : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h b/LEGO1/lego/legoomni/include/legocarbuildpresenter.h similarity index 93% rename from LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h rename to LEGO1/lego/legoomni/include/legocarbuildpresenter.h index d4c12d76..69afdebf 100644 --- a/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legocarbuildpresenter.h @@ -1,5 +1,5 @@ -#ifndef LEGOCARBUILDANIMPRESENTER_H -#define LEGOCARBUILDANIMPRESENTER_H +#ifndef LEGOCARBUILDPRESENTER_H +#define LEGOCARBUILDPRESENTER_H #include "anim/legoanim.h" #include "legoanimpresenter.h" @@ -59,4 +59,4 @@ private: undefined4 m_unk0x14c; // 0x14c }; -#endif // LEGOCARBUILDANIMPRESENTER_H +#endif // LEGOCARBUILDPRESENTER_H diff --git a/LEGO1/lego/legoomni/include/legorace.h b/LEGO1/lego/legoomni/include/legorace.h index f99f7e28..76282d0b 100644 --- a/LEGO1/lego/legoomni/include/legorace.h +++ b/LEGO1/lego/legoomni/include/legorace.h @@ -2,10 +2,60 @@ #define LEGORACE_H #include "decomp.h" +#include "legostate.h" #include "legoworld.h" #include "mxrect32.h" #include "mxtypes.h" +// VTABLE: LEGO1 0x100d5e30 +// SIZE 0x2c +class RaceState : public LegoState { +public: + // SIZE 0x06 + struct Entry { + public: + inline MxS16 GetUnknown0x02() { return m_unk0x02; } + inline MxU16 GetScore() { return m_score; } + + // TODO: Possibly private + MxU8 m_id; // 0x00 + MxS16 m_unk0x02; // 0x02 + MxU16 m_score; // 0x04 + }; + + RaceState(); + + // FUNCTION: LEGO1 0x10016010 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f07d0 + return "RaceState"; + } + + // FUNCTION: LEGO1 0x10016020 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, RaceState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + Entry* GetState(MxU8 p_id); + + inline undefined4 GetUnknown0x28() { return m_unk0x28; } + + // SYNTHETIC: LEGO1 0x1000f6f0 + // RaceState::~RaceState + + // SYNTHETIC: LEGO1 0x100160d0 + // RaceState::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + Entry m_state[5]; // 0x08 + undefined4 m_unk0x28; // 0x28 +}; + // VTABLE: LEGO1 0x100d5db0 // SIZE 0x144 class LegoRace : public LegoWorld { diff --git a/LEGO1/lego/legoomni/include/legovehiclebuildstate.h b/LEGO1/lego/legoomni/include/legovehiclebuildstate.h deleted file mode 100644 index 7a70a873..00000000 --- a/LEGO1/lego/legoomni/include/legovehiclebuildstate.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef LEGOVEHICLEBUILDSTATE_H -#define LEGOVEHICLEBUILDSTATE_H - -#include "decomp.h" -#include "legostate.h" -#include "mxstring.h" - -// VTABLE: LEGO1 0x100d66e0 -// SIZE 0x50 -class LegoVehicleBuildState : public LegoState { -public: - LegoVehicleBuildState(char* p_classType); - - // FUNCTION: LEGO1 0x10025ff0 - inline const char* ClassName() const override // vtable+0x0c - { - return this->m_className.GetData(); - } - - // FUNCTION: LEGO1 0x10026000 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, this->m_className.GetData()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - // SYNTHETIC: LEGO1 0x100260a0 - // LegoVehicleBuildState::`scalar deleting destructor' - - // private: - Playlist m_unk0x08[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_unk0x4c; // 0x4c - MxBool m_unk0x4d; // 0x4d - MxBool m_unk0x4e; // 0x4e - MxU8 m_placedPartCount; // 0x4f -}; - -#endif // LEGOVEHICLEBUILDSTATE_H diff --git a/LEGO1/lego/legoomni/include/pizza.h b/LEGO1/lego/legoomni/include/pizza.h index 01e99d7f..7f1356be 100644 --- a/LEGO1/lego/legoomni/include/pizza.h +++ b/LEGO1/lego/legoomni/include/pizza.h @@ -3,11 +3,52 @@ #include "decomp.h" #include "isleactor.h" +#include "legostate.h" class Act1State; -class PizzaMissionState; class SkateBoard; +// VTABLE: LEGO1 0x100d7408 +// SIZE 0xb0 +class PizzaMissionState : public LegoState { +public: + // SIZE 0x20 + struct Entry { + public: + undefined2 m_unk0x00; // 0x00 + MxU8 m_id; // 0x02 + undefined m_unk0x03[0x15]; // 0x03 + MxU16 m_score; // 0x18 + undefined m_unk0x18[6]; // 0x1a + }; + + // FUNCTION: LEGO1 0x10039290 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f00d4 + return "PizzaMissionState"; + } + + // FUNCTION: LEGO1 0x100392a0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, PizzaMissionState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + inline MxU16 GetScore(MxU8 p_id) { return GetState(p_id)->m_score; } + + // SYNTHETIC: LEGO1 0x10039350 + // PizzaMissionState::`scalar deleting destructor' + + Entry* GetState(MxU8 p_id); + + undefined4 m_unk0x08; // 0x08 + undefined4 m_unk0x0c; // 0x0c + Entry m_state[5]; // 0x10 +}; + // VTABLE: LEGO1 0x100d7380 // SIZE 0x9c class Pizza : public IsleActor { diff --git a/LEGO1/lego/legoomni/include/pizzamissionstate.h b/LEGO1/lego/legoomni/include/pizzamissionstate.h deleted file mode 100644 index c74ea4b1..00000000 --- a/LEGO1/lego/legoomni/include/pizzamissionstate.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef PIZZAMISSIONSTATE_H -#define PIZZAMISSIONSTATE_H - -#include "legostate.h" - -// SIZE 0x20 -struct PizzaMissionStateEntry { -public: - undefined2 m_unk0x00; // 0x00 - MxU8 m_id; // 0x02 - undefined m_unk0x03[0x15]; // 0x03 - MxU16 m_score; // 0x18 - undefined m_unk0x18[6]; // 0x1a -}; - -// VTABLE: LEGO1 0x100d7408 -// SIZE 0xb0 -class PizzaMissionState : public LegoState { -public: - // FUNCTION: LEGO1 0x10039290 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f00d4 - return "PizzaMissionState"; - } - - // FUNCTION: LEGO1 0x100392a0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, PizzaMissionState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - inline MxU16 GetScore(MxU8 p_id) { return GetState(p_id)->m_score; } - - // SYNTHETIC: LEGO1 0x10039350 - // PizzaMissionState::`scalar deleting destructor' - - PizzaMissionStateEntry* GetState(MxU8 p_id); - - undefined4 m_unk0x08; // 0x08 - undefined4 m_unk0x0c; // 0x0c - PizzaMissionStateEntry m_state[5]; // 0x10 -}; - -#endif // PIZZAMISSIONSTATE_H diff --git a/LEGO1/lego/legoomni/include/pizzeria.h b/LEGO1/lego/legoomni/include/pizzeria.h index 91f76f46..46150249 100644 --- a/LEGO1/lego/legoomni/include/pizzeria.h +++ b/LEGO1/lego/legoomni/include/pizzeria.h @@ -3,10 +3,51 @@ #include "decomp.h" #include "isleactor.h" +#include "legostate.h" -class PizzeriaState; class PizzaMissionState; +// VTABLE: LEGO1 0x100d5ee8 +// SIZE 0x58 +class PizzeriaState : public LegoState { +public: + // SIZE 0x14 + struct StateStruct { + undefined4 m_unk0x00; // 0x00 + undefined4 m_unk0x04; // 0x04 + undefined4 m_unk0x08; // 0x08 + undefined4 m_unk0x0c; // 0x0c + undefined4 m_unk0x10; // 0x10 + }; + + PizzeriaState(); + + // FUNCTION: LEGO1 0x10017c20 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0370 + return "PizzeriaState"; + } + + // FUNCTION: LEGO1 0x10017c30 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, PizzeriaState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + // SYNTHETIC: LEGO1 0x10017ce0 + // PizzeriaState::`scalar deleting destructor' + + MxU32 FUN_10017d70(); + + // TODO: Most likely getters/setters are not used according to BETA. + + Playlist m_unk0x08[5]; // 0x08 + StateStruct m_unk0x44; // 0x44 +}; + // VTABLE: LEGO1 0x100d5520 // SIZE 0x84 class Pizzeria : public IsleActor { diff --git a/LEGO1/lego/legoomni/include/pizzeriastate.h b/LEGO1/lego/legoomni/include/pizzeriastate.h deleted file mode 100644 index 6bed2aad..00000000 --- a/LEGO1/lego/legoomni/include/pizzeriastate.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef PIZZERIASTATE_H -#define PIZZERIASTATE_H - -#include "legostate.h" - -// SIZE 0x14 -struct PizzeriaStateStruct { - undefined4 m_unk0x00; // 0x00 - undefined4 m_unk0x04; // 0x04 - undefined4 m_unk0x08; // 0x08 - undefined4 m_unk0x0c; // 0x0c - undefined4 m_unk0x10; // 0x10 -}; - -// VTABLE: LEGO1 0x100d5ee8 -// SIZE 0x58 -class PizzeriaState : public LegoState { -public: - PizzeriaState(); - - // FUNCTION: LEGO1 0x10017c20 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0370 - return "PizzeriaState"; - } - - // FUNCTION: LEGO1 0x10017c30 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, PizzeriaState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - // SYNTHETIC: LEGO1 0x10017ce0 - // PizzeriaState::`scalar deleting destructor' - - MxU32 FUN_10017d70(); - -private: - Playlist m_unk0x08[5]; // 0x08 - PizzeriaStateStruct m_unk0x44; // 0x44 -}; - -#endif // PIZZERIASTATE_H diff --git a/LEGO1/lego/legoomni/include/police.h b/LEGO1/lego/legoomni/include/police.h index 67c3586a..4c8c34eb 100644 --- a/LEGO1/lego/legoomni/include/police.h +++ b/LEGO1/lego/legoomni/include/police.h @@ -3,13 +3,49 @@ #include "decomp.h" #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" #include "radio.h" class LegoControlManagerEvent; class LegoEventNotificationParam; class MxDSAction; -class PoliceState; + +// VTABLE: LEGO1 0x100d8af0 +// SIZE 0x10 +class PoliceState : public LegoState { +public: + PoliceState(); + ~PoliceState() override {} + + // FUNCTION: LEGO1 0x1005e860 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0444 + return "PoliceState"; + } + + // FUNCTION: LEGO1 0x1005e870 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, PoliceState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + // SYNTHETIC: LEGO1 0x1005e920 + // PoliceState::`scalar deleting destructor' + + inline undefined4 GetUnknown0x0c() { return m_unk0x0c; } + inline void SetUnknown0x0c(undefined4 p_unk0x0c) { m_unk0x0c = p_unk0x0c; } + + void FUN_1005ea40(); + + // TODO: Most likely getters/setters are not used according to BETA. + + PoliceScript::Script m_policeScript; // 0x08 + undefined4 m_unk0x0c; // 0x0c +}; // VTABLE: LEGO1 0x100d8a80 // SIZE 0x110 diff --git a/LEGO1/lego/legoomni/include/policeentity.h b/LEGO1/lego/legoomni/include/policeentity.h deleted file mode 100644 index 48156150..00000000 --- a/LEGO1/lego/legoomni/include/policeentity.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef POLICEENTITY_H -#define POLICEENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d4ab0 -// SIZE 0x68 -class PoliceEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ed60 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0328 - return "PoliceEntity"; - } - - // FUNCTION: LEGO1 0x1000ed70 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, PoliceEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong VTable0x50(MxParam& p_param) override; // vtable+0x50 - - // SYNTHETIC: LEGO1 0x1000f900 - // PoliceEntity::`scalar deleting destructor' -}; - -#endif // POLICEENTITY_H diff --git a/LEGO1/lego/legoomni/include/policestate.h b/LEGO1/lego/legoomni/include/policestate.h deleted file mode 100644 index 75970729..00000000 --- a/LEGO1/lego/legoomni/include/policestate.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef POLICESTATE_H -#define POLICESTATE_H - -#include "actionsfwd.h" -#include "decomp.h" -#include "legostate.h" - -// VTABLE: LEGO1 0x100d8af0 -// SIZE 0x10 -class PoliceState : public LegoState { -public: - PoliceState(); - ~PoliceState() override {} - - // FUNCTION: LEGO1 0x1005e860 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0444 - return "PoliceState"; - } - - // FUNCTION: LEGO1 0x1005e870 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, PoliceState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - // SYNTHETIC: LEGO1 0x1005e920 - // PoliceState::`scalar deleting destructor' - - inline undefined4 GetUnknown0x0c() { return m_unk0x0c; } - inline void SetUnknown0x0c(undefined4 p_unk0x0c) { m_unk0x0c = p_unk0x0c; } - - void FUN_1005ea40(); - -private: - PoliceScript::Script m_policeScript; // 0x08 - undefined4 m_unk0x0c; // 0x0c -}; - -#endif // POLICESTATE_H diff --git a/LEGO1/lego/legoomni/include/racestandsentity.h b/LEGO1/lego/legoomni/include/racestandsentity.h deleted file mode 100644 index 22bc4dd2..00000000 --- a/LEGO1/lego/legoomni/include/racestandsentity.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef RACESTANDSENTITY_H -#define RACESTANDSENTITY_H - -#include "buildingentity.h" - -// VTABLE: LEGO1 0x100d48a8 -// SIZE 0x68 -class RaceStandsEntity : public BuildingEntity { - // FUNCTION: LEGO1 0x1000efa0 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0300 - return "RaceStandsEntity"; - } - - // FUNCTION: LEGO1 0x1000efb0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong VTable0x50(MxParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000f9e0 - // RaceStandsEntity::`scalar deleting destructor' -}; - -#endif // RACESTANDSENTITY_H diff --git a/LEGO1/lego/legoomni/include/racestate.h b/LEGO1/lego/legoomni/include/racestate.h deleted file mode 100644 index e2321be1..00000000 --- a/LEGO1/lego/legoomni/include/racestate.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef RACESTATE_H -#define RACESTATE_H - -#include "legostate.h" - -// SIZE 0x06 -struct RaceStateEntry { -public: - inline MxS16 GetUnknown0x02() { return m_unk0x02; } - inline MxU16 GetScore() { return m_score; } - - // TODO: Possibly private - MxU8 m_id; // 0x00 - MxS16 m_unk0x02; // 0x02 - MxU16 m_score; // 0x04 -}; - -// VTABLE: LEGO1 0x100d5e30 -// SIZE 0x2c -class RaceState : public LegoState { -public: - RaceState(); - - // FUNCTION: LEGO1 0x10016010 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f07d0 - return "RaceState"; - } - - // FUNCTION: LEGO1 0x10016020 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, RaceState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - RaceStateEntry* GetState(MxU8 p_id); - - inline undefined4 GetUnknown0x28() { return m_unk0x28; } - - // SYNTHETIC: LEGO1 0x1000f6f0 - // RaceState::~RaceState - - // SYNTHETIC: LEGO1 0x100160d0 - // RaceState::`scalar deleting destructor' - -protected: - RaceStateEntry m_state[5]; // 0x08 - undefined4 m_unk0x28; // 0x28 -}; - -#endif // RACESTATE_H diff --git a/LEGO1/lego/legoomni/include/radio.h b/LEGO1/lego/legoomni/include/radio.h index 997c6579..cd411036 100644 --- a/LEGO1/lego/legoomni/include/radio.h +++ b/LEGO1/lego/legoomni/include/radio.h @@ -1,11 +1,50 @@ #ifndef RADIO_H #define RADIO_H +#include "legostate.h" #include "mxcore.h" class LegoControlManagerEvent; +class MxAtomId; class MxEndActionNotificationParam; -class RadioState; + +// VTABLE: LEGO1 0x100d6d28 +// SIZE 0x30 +class RadioState : public LegoState { +public: + RadioState(); + + // FUNCTION: LEGO1 0x1002cf60 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f04f8 + return "RadioState"; + } + + // FUNCTION: LEGO1 0x1002cf70 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, RadioState::ClassName()) || LegoState::IsA(p_name); + } + + MxBool IsSerializable() override; // vtable+0x14 + + // SYNTHETIC: LEGO1 0x1002d020 + // RadioState::`scalar deleting destructor' + + inline MxBool IsActive() { return m_active; } + + inline void SetActive(MxBool p_active) { m_active = p_active; } + + undefined4 FUN_1002d090(); + MxBool FUN_1002d0c0(const MxAtomId& p_atom, MxU32 p_objectId); + + // TODO: Most likely getters/setters are not used according to BETA. + + Playlist m_unk0x08[3]; // 0x08 + MxS16 m_unk0x2c; // 0x2c + MxBool m_active; // 0x2e +}; // VTABLE: LEGO1 0x100d6d10 // SIZE 0x10 diff --git a/LEGO1/lego/legoomni/include/radiostate.h b/LEGO1/lego/legoomni/include/radiostate.h deleted file mode 100644 index e0c0066c..00000000 --- a/LEGO1/lego/legoomni/include/radiostate.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef RADIOSTATE_H -#define RADIOSTATE_H - -#include "legostate.h" - -class MxAtomId; - -// VTABLE: LEGO1 0x100d6d28 -// SIZE 0x30 -class RadioState : public LegoState { -public: - RadioState(); - - // FUNCTION: LEGO1 0x1002cf60 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f04f8 - return "RadioState"; - } - - // FUNCTION: LEGO1 0x1002cf70 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, RadioState::ClassName()) || LegoState::IsA(p_name); - } - - MxBool IsSerializable() override; // vtable+0x14 - - // SYNTHETIC: LEGO1 0x1002d020 - // RadioState::`scalar deleting destructor' - - inline MxBool IsActive() { return m_active; } - - inline void SetActive(MxBool p_active) { m_active = p_active; } - - undefined4 FUN_1002d090(); - MxBool FUN_1002d0c0(const MxAtomId& p_atom, MxU32 p_objectId); - -private: - Playlist m_unk0x08[3]; // 0x08 - MxS16 m_unk0x2c; // 0x2c - MxBool m_active; // 0x2e -}; - -#endif // RADIOSTATE_H diff --git a/LEGO1/lego/legoomni/include/score.h b/LEGO1/lego/legoomni/include/score.h index 979fa33d..76a4ac8e 100644 --- a/LEGO1/lego/legoomni/include/score.h +++ b/LEGO1/lego/legoomni/include/score.h @@ -2,11 +2,49 @@ #define SCORE_H #include "legogamestate.h" +#include "legostate.h" #include "legoworld.h" class LegoControlManagerEvent; class MxEndActionNotificationParam; -class ScoreState; + +// VTABLE: LEGO1 0x100d53f8 +// SIZE 0x0c +class ScoreState : public LegoState { +public: + // FUNCTION: LEGO1 0x1000de40 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0084 + return "ScoreState"; + } + + // FUNCTION: LEGO1 0x1000de50 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, ScoreState::ClassName()) || LegoState::IsA(p_name); + } + + // FUNCTION: LEGO1 0x1000de20 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + // FUNCTION: LEGO1 0x1000de30 + MxBool SetFlag() override + { + m_playCubeTutorial = TRUE; + return TRUE; + } // vtable+0x18 + + inline MxBool GetTutorialFlag() { return m_playCubeTutorial; } + inline void SetTutorialFlag(MxBool p_playCubeTutorial) { m_playCubeTutorial = p_playCubeTutorial; } + + // SYNTHETIC: LEGO1 0x1000df00 + // ScoreState::`scalar deleting destructor' + + // TODO: Most likely getters/setters are not used according to BETA. + + MxBool m_playCubeTutorial; // 0x08 +}; // VTABLE: LEGO1 0x100d4018 // SIZE 0x104 diff --git a/LEGO1/lego/legoomni/include/scorestate.h b/LEGO1/lego/legoomni/include/scorestate.h deleted file mode 100644 index ac651a19..00000000 --- a/LEGO1/lego/legoomni/include/scorestate.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef SCORESTATE_H -#define SCORESTATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d53f8 -// SIZE 0x0c -class ScoreState : public LegoState { -public: - // FUNCTION: LEGO1 0x1000de40 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0084 - return "ScoreState"; - } - - // FUNCTION: LEGO1 0x1000de50 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, ScoreState::ClassName()) || LegoState::IsA(p_name); - } - - MxBool IsSerializable() override; // vtable+0x14 - MxBool SetFlag() override; // vtable+0x18 - - inline MxBool GetTutorialFlag() { return m_playCubeTutorial; } - inline void SetTutorialFlag(MxBool p_playCubeTutorial) { m_playCubeTutorial = p_playCubeTutorial; } - - // SYNTHETIC: LEGO1 0x1000df00 - // ScoreState::`scalar deleting destructor' - -private: - MxBool m_playCubeTutorial; // 0x08 -}; - -#endif // SCORESTATE_H diff --git a/LEGO1/lego/legoomni/include/towtrack.h b/LEGO1/lego/legoomni/include/towtrack.h index 4f4f1bb5..a8738cbf 100644 --- a/LEGO1/lego/legoomni/include/towtrack.h +++ b/LEGO1/lego/legoomni/include/towtrack.h @@ -3,8 +3,64 @@ #include "decomp.h" #include "islepathactor.h" +#include "legostate.h" -class TowTrackMissionState; +// VTABLE: LEGO1 0x100d7fd8 +// SIZE 0x28 +class TowTrackMissionState : public LegoState { +public: + TowTrackMissionState(); + + // FUNCTION: LEGO1 0x1004dfa0 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f00bc + return "TowTrackMissionState"; + } + + // FUNCTION: LEGO1 0x1004dfb0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, TowTrackMissionState::ClassName()) || LegoState::IsA(p_name); + } + + MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c + + inline MxU16 GetScore(MxU8 p_id) + { + switch (p_id) { + case 1: + return m_score1; + case 2: + return m_score2; + case 3: + return m_score3; + case 4: + return m_score4; + case 5: + return m_score5; + default: + return 0; + } + } + + // SYNTHETIC: LEGO1 0x1004e060 + // TowTrackMissionState::`scalar deleting destructor' + + 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_score1; // 0x1c + MxU16 m_score2; // 0x1e + MxU16 m_score3; // 0x20 + MxU16 m_score4; // 0x22 + MxU16 m_score5; // 0x24 +}; // VTABLE: LEGO1 0x100d7ee0 // SIZE 0x180 diff --git a/LEGO1/lego/legoomni/include/towtrackmissionstate.h b/LEGO1/lego/legoomni/include/towtrackmissionstate.h deleted file mode 100644 index 5a684011..00000000 --- a/LEGO1/lego/legoomni/include/towtrackmissionstate.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef TOWTRACKMISSIONSTATE_H -#define TOWTRACKMISSIONSTATE_H - -#include "legostate.h" - -// VTABLE: LEGO1 0x100d7fd8 -// SIZE 0x28 -class TowTrackMissionState : public LegoState { -public: - TowTrackMissionState(); - - // FUNCTION: LEGO1 0x1004dfa0 - inline const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f00bc - return "TowTrackMissionState"; - } - - // FUNCTION: LEGO1 0x1004dfb0 - inline MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, TowTrackMissionState::ClassName()) || LegoState::IsA(p_name); - } - - MxResult Serialize(LegoFile* p_legoFile) override; // vtable+0x1c - - inline MxU16 GetScore(MxU8 p_id) - { - switch (p_id) { - case 1: - return m_score1; - case 2: - return m_score2; - case 3: - return m_score3; - case 4: - return m_score4; - case 5: - return m_score5; - default: - return 0; - } - } - - // SYNTHETIC: LEGO1 0x1004e060 - // TowTrackMissionState::`scalar deleting destructor' - - 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_score1; // 0x1c - MxU16 m_score2; // 0x1e - MxU16 m_score3; // 0x20 - MxU16 m_score4; // 0x22 - MxU16 m_score5; // 0x24 -}; - -#endif // TOWTRACKMISSIONSTATE_H diff --git a/LEGO1/lego/legoomni/src/act1/act1state.cpp b/LEGO1/lego/legoomni/src/act1/act1state.cpp deleted file mode 100644 index 013347d3..00000000 --- a/LEGO1/lego/legoomni/src/act1/act1state.cpp +++ /dev/null @@ -1,296 +0,0 @@ -#include "act1state.h" - -#include "legonamedtexture.h" -#include "legoutils.h" - -DECOMP_SIZE_ASSERT(Act1State, 0x26c) -DECOMP_SIZE_ASSERT(Act1State::NamedPlane, 0x4c) - -// GLOBAL: ISLE 0x100f37f0 -MxS32 g_unk0x100f37f0[] = { - Act1State::e_unk953, - Act1State::e_unk954, - Act1State::e_unk955, -}; - -extern MxAtomId* g_isleScript; - -// STUB: LEGO1 0x100334b0 -Act1State::Act1State() : m_unk0x00c(0), m_unk0x00e(0), m_unk0x008(NULL), m_unk0x010(0) -{ - m_unk0x01e = FALSE; - m_unk0x018 = 1; - m_unk0x010 = 0; - m_planeActive = FALSE; - m_unk0x00e = 0; - m_unk0x01f = FALSE; - m_unk0x008 = g_unk0x100f37f0; - m_unk0x014 = -1; - m_unk0x022 = FALSE; - m_unk0x154 = NULL; - m_unk0x158 = NULL; - m_unk0x15c = NULL; - m_unk0x160 = NULL; - m_unk0x1b0 = NULL; - m_unk0x021 = 1; - m_elevFloor = Act1State::c_floor1; - m_unk0x00c = sizeOfArray(g_unk0x100f37f0); - m_unk0x1b4 = NULL; - m_unk0x1b8 = NULL; - m_unk0x208 = NULL; - m_unk0x20c = NULL; - m_unk0x25c = NULL; - m_unk0x260 = NULL; - m_unk0x264 = NULL; - m_unk0x268 = NULL; - SetFlag(); -} - -// FUNCTION: LEGO1 0x10033ac0 -MxResult Act1State::Serialize(LegoFile* p_legoFile) -{ - LegoState::Serialize(p_legoFile); - - m_unk0x024.Serialize(p_legoFile); - m_unk0x070.Serialize(p_legoFile); - m_unk0x0bc.Serialize(p_legoFile); - m_unk0x108.Serialize(p_legoFile); - m_unk0x164.Serialize(p_legoFile); - m_unk0x1bc.Serialize(p_legoFile); - m_unk0x210.Serialize(p_legoFile); - - if (p_legoFile->IsWriteMode()) { - if (m_unk0x108.GetName()->Compare("") != 0) { - if (m_unk0x154) { - WriteNamedTexture(p_legoFile, m_unk0x154); - } - else { - FUN_1003f540(p_legoFile, "chwind.gif"); - } - if (m_unk0x158) { - WriteNamedTexture(p_legoFile, m_unk0x158); - } - else { - FUN_1003f540(p_legoFile, "chjetl.gif"); - } - if (m_unk0x15c) { - WriteNamedTexture(p_legoFile, m_unk0x15c); - } - else { - FUN_1003f540(p_legoFile, "chjetr.gif"); - } - } - if (m_unk0x164.GetName()->Compare("") != 0) { - if (m_unk0x1b0) { - WriteNamedTexture(p_legoFile, m_unk0x1b0); - } - else { - FUN_1003f540(p_legoFile, "jsfrnt.gif"); - } - if (m_unk0x1b4) { - WriteNamedTexture(p_legoFile, m_unk0x1b4); - } - else { - FUN_1003f540(p_legoFile, "jswnsh.gif"); - } - } - if (m_unk0x1bc.GetName()->Compare("") != 0) { - if (m_unk0x208) { - WriteNamedTexture(p_legoFile, m_unk0x208); - } - else { - FUN_1003f540(p_legoFile, "dbfrfn.gif"); - } - } - if (m_unk0x210.GetName()->Compare("") != 0) { - if (m_unk0x25c) { - WriteNamedTexture(p_legoFile, m_unk0x25c); - } - else { - FUN_1003f540(p_legoFile, "rcfrnt.gif"); - } - if (m_unk0x260) { - WriteNamedTexture(p_legoFile, m_unk0x260); - } - else { - FUN_1003f540(p_legoFile, "rcback.gif"); - } - if (m_unk0x264) { - WriteNamedTexture(p_legoFile, m_unk0x264); - } - else { - FUN_1003f540(p_legoFile, "rctail.gif"); - } - } - - p_legoFile->Write(&m_unk0x010, sizeof(m_unk0x010)); - p_legoFile->Write(&m_unk0x022, sizeof(m_unk0x022)); - } - else if (p_legoFile->IsReadMode()) { - if (m_unk0x108.GetName()->Compare("") != 0) { - m_unk0x154 = ReadNamedTexture(p_legoFile); - if (m_unk0x154 == NULL) { - return FAILURE; - } - - m_unk0x158 = ReadNamedTexture(p_legoFile); - if (m_unk0x158 == NULL) { - return FAILURE; - } - - m_unk0x15c = ReadNamedTexture(p_legoFile); - if (m_unk0x15c == NULL) { - return FAILURE; - } - } - if (m_unk0x164.GetName()->Compare("") != 0) { - m_unk0x1b0 = ReadNamedTexture(p_legoFile); - if (m_unk0x1b0 == NULL) { - return FAILURE; - } - - m_unk0x1b4 = ReadNamedTexture(p_legoFile); - if (m_unk0x1b4 == NULL) { - return FAILURE; - } - } - if (m_unk0x1bc.GetName()->Compare("") != 0) { - m_unk0x208 = ReadNamedTexture(p_legoFile); - if (m_unk0x208 == NULL) { - return FAILURE; - } - } - if (m_unk0x210.GetName()->Compare("") != 0) { - m_unk0x25c = ReadNamedTexture(p_legoFile); - if (m_unk0x25c == NULL) { - return FAILURE; - } - - m_unk0x260 = ReadNamedTexture(p_legoFile); - if (m_unk0x260 == NULL) { - return FAILURE; - } - - m_unk0x264 = ReadNamedTexture(p_legoFile); - if (m_unk0x264 == NULL) { - return FAILURE; - } - } - - p_legoFile->Read(&m_unk0x010, sizeof(m_unk0x010)); - p_legoFile->Read(&m_unk0x022, sizeof(m_unk0x022)); - } - - // TODO - return SUCCESS; -} - -// STUB: LEGO1 0x10034660 -void Act1State::FUN_10034660() -{ - // TODO -} - -// FUNCTION: LEGO1 0x100346a0 -void Act1State::FUN_100346a0() -{ - if (m_unk0x014 != -1) { - InvokeAction(Extra::e_stop, *g_isleScript, m_unk0x014, NULL); - m_unk0x014 = -1; - } -} - -// FUNCTION: LEGO1 0x100346d0 -MxBool Act1State::SetFlag() -{ - m_unk0x024.SetName(""); - m_unk0x070.SetName(""); - m_unk0x0bc.SetName(""); - m_unk0x022 = FALSE; - m_unk0x108.SetName(""); - - if (m_unk0x154) { - delete m_unk0x154; - m_unk0x154 = NULL; - } - - if (m_unk0x158) { - delete m_unk0x158; - m_unk0x158 = NULL; - } - - if (m_unk0x15c) { - delete m_unk0x15c; - m_unk0x15c = NULL; - } - - if (m_unk0x160) { - delete m_unk0x160; - m_unk0x160 = NULL; - } - - m_unk0x164.SetName(""); - - if (m_unk0x1b0) { - delete m_unk0x1b0; - m_unk0x1b0 = NULL; - } - - if (m_unk0x1b4) { - delete m_unk0x1b4; - m_unk0x1b4 = NULL; - } - - if (m_unk0x1b8) { - delete m_unk0x1b8; - m_unk0x1b8 = NULL; - } - - m_unk0x1bc.SetName(""); - - if (m_unk0x208) { - delete m_unk0x208; - m_unk0x208 = NULL; - } - - if (m_unk0x20c) { - delete m_unk0x20c; - m_unk0x20c = NULL; - } - - m_unk0x210.SetName(""); - - if (m_unk0x25c) { - delete m_unk0x25c; - m_unk0x25c = NULL; - } - - if (m_unk0x260) { - delete m_unk0x260; - m_unk0x260 = NULL; - } - - if (m_unk0x264) { - delete m_unk0x264; - m_unk0x264 = NULL; - } - - if (m_unk0x268) { - delete m_unk0x268; - m_unk0x268 = NULL; - } - - return TRUE; -} - -// STUB: LEGO1 0x10034b60 -void Act1State::FUN_10034b60() -{ - // TODO -} - -// STUB: LEGO1 0x10034d00 -void Act1State::FUN_10034d00() -{ - // TODO -} diff --git a/LEGO1/lego/legoomni/src/act2/legoact2state.cpp b/LEGO1/lego/legoomni/src/act2/legoact2state.cpp deleted file mode 100644 index 955de04e..00000000 --- a/LEGO1/lego/legoomni/src/act2/legoact2state.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "legoact2state.h" - -DECOMP_SIZE_ASSERT(LegoAct2State, 0x10) - -// FUNCTION: LEGO1 0x1000df70 -MxBool LegoAct2State::IsSerializable() -{ - return FALSE; -} diff --git a/LEGO1/lego/legoomni/src/act3/act3state.cpp b/LEGO1/lego/legoomni/src/act3/act3state.cpp deleted file mode 100644 index de1bac5f..00000000 --- a/LEGO1/lego/legoomni/src/act3/act3state.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "act3state.h" - -DECOMP_SIZE_ASSERT(Act3State, 0x0c) - -// FUNCTION: LEGO1 0x1000e2f0 -MxBool Act3State::IsSerializable() -{ - return FALSE; -} diff --git a/LEGO1/lego/legoomni/src/act3/act3shark.cpp b/LEGO1/lego/legoomni/src/actors/act3shark.cpp similarity index 100% rename from LEGO1/lego/legoomni/src/act3/act3shark.cpp rename to LEGO1/lego/legoomni/src/actors/act3shark.cpp diff --git a/LEGO1/lego/legoomni/src/actors/ambulance.cpp b/LEGO1/lego/legoomni/src/actors/ambulance.cpp index 2d293972..1a15d7c8 100644 --- a/LEGO1/lego/legoomni/src/actors/ambulance.cpp +++ b/LEGO1/lego/legoomni/src/actors/ambulance.cpp @@ -1,6 +1,5 @@ #include "ambulance.h" -#include "ambulancemissionstate.h" #include "decomp.h" #include "legocontrolmanager.h" #include "legogamestate.h" @@ -14,6 +13,7 @@ #include "scripts.h" DECOMP_SIZE_ASSERT(Ambulance, 0x184) +DECOMP_SIZE_ASSERT(AmbulanceMissionState, 0x24) // FUNCTION: LEGO1 0x10035ee0 Ambulance::Ambulance() @@ -152,3 +152,27 @@ void Ambulance::FUN_10037250() { // TODO } + +// FUNCTION: LEGO1 0x100373a0 +AmbulanceMissionState::AmbulanceMissionState() +{ + m_unk0x10 = 0; + m_unk0x12 = 0; + m_unk0x14 = 0; + m_unk0x08 = 0; + m_unk0x16 = 0; + m_unk0x0c = 0; + m_unk0x18 = 0; + m_score1 = 0; + m_score2 = 0; + m_score3 = 0; + m_score4 = 0; + m_score5 = 0; +} + +// STUB: LEGO1 0x10037440 +MxResult AmbulanceMissionState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} diff --git a/LEGO1/lego/legoomni/src/actors/buildings.cpp b/LEGO1/lego/legoomni/src/actors/buildings.cpp new file mode 100644 index 00000000..9c3c174b --- /dev/null +++ b/LEGO1/lego/legoomni/src/actors/buildings.cpp @@ -0,0 +1,176 @@ +#include "buildings.h" + +#include "act2main_actions.h" +#include "act3.h" +#include "act3_actions.h" +#include "isle.h" +#include "isle_actions.h" +#include "islepathactor.h" +#include "legoact2.h" +#include "legoanimationmanager.h" +#include "legogamestate.h" +#include "legoutils.h" +#include "legoworld.h" +#include "misc.h" +#include "mxtransitionmanager.h" +#include "scripts.h" + +DECOMP_SIZE_ASSERT(BeachHouseEntity, 0x68) +DECOMP_SIZE_ASSERT(GasStationEntity, 0x68) +DECOMP_SIZE_ASSERT(HospitalEntity, 0x68) +DECOMP_SIZE_ASSERT(InfoCenterEntity, 0x68) +DECOMP_SIZE_ASSERT(JailEntity, 0x68) +DECOMP_SIZE_ASSERT(PoliceEntity, 0x68) +DECOMP_SIZE_ASSERT(RaceStandsEntity, 0x68) + +// FUNCTION: LEGO1 0x100150c0 +MxLong InfoCenterEntity::VTable0x50(MxParam& p_param) +{ + switch (GameState()->GetCurrentAct()) { + case LegoGameState::Act::e_act1: { + if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { + ((IslePathActor*) CurrentActor())->VTable0xe4(); + } + + Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); + isle->FUN_10033350(); + isle->SetDestLocation(LegoGameState::Area::e_infomain); + + Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); + act1state->SetUnknown18(0); + break; + } + case LegoGameState::Act::e_act2: { + LegoAct2* act2 = (LegoAct2*) FindWorld(*g_act2mainScript, Act2mainScript::c__Act2Main); + act2->SetUnknown0x1150(2); + + LegoAct2State* act2state = (LegoAct2State*) GameState()->GetState("LegoAct2State"); + if (act2state) { + act2state->SetUnknown0x0c(0); + } + break; + } + case LegoGameState::Act::e_act3: + Act3* act3 = (Act3*) FindWorld(*g_act3Script, Act3Script::c__Act3); + act3->SetUnknown4270(2); + break; + } + + AnimationManager()->FUN_10061010(FALSE); + TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); + return 1; +} + +// FUNCTION: LEGO1 0x100151d0 +MxLong GasStationEntity::VTable0x50(MxParam& p_param) +{ + if (FUN_1003ef60()) { + Act1State* state = (Act1State*) GameState()->GetState("Act1State"); + + if (state->GetUnknown18() != 8) { + state->SetUnknown18(0); + + if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { + ((IslePathActor*) CurrentActor())->VTable0xe4(); + } + + Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); + isle->SetDestLocation(LegoGameState::Area::e_garage); + + AnimationManager()->FUN_10061010(FALSE); + TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); + } + } + + return 1; +} + +// FUNCTION: LEGO1 0x10015270 +MxLong HospitalEntity::VTable0x50(MxParam& p_param) +{ + if (FUN_1003ef60()) { + Act1State* act1State = (Act1State*) GameState()->GetState("Act1State"); + + if (act1State->GetUnknown18() != 10) { + act1State->SetUnknown18(0); + + if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { + ((IslePathActor*) CurrentActor())->VTable0xe4(); + } + + Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); + isle->SetDestLocation(LegoGameState::Area::e_hospital); + + AnimationManager()->FUN_10061010(FALSE); + TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); + } + } + + return 1; +} + +// FUNCTION: LEGO1 0x10015310 +MxLong PoliceEntity::VTable0x50(MxParam& p_param) +{ + if (FUN_1003ef60()) { + Act1State* state = (Act1State*) GameState()->GetState("Act1State"); + + if (state->GetUnknown18() != 10) { + state->SetUnknown18(0); + + if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { + ((IslePathActor*) CurrentActor())->VTable0xe4(); + } + + Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); + isle->SetDestLocation(LegoGameState::Area::e_police); + + AnimationManager()->FUN_10061010(FALSE); + TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); + } + } + + return 1; +} + +// FUNCTION: LEGO1 0x100153b0 +MxLong BeachHouseEntity::VTable0x50(MxParam& p_param) +{ + if (FUN_1003ef60()) { + Act1State* state = (Act1State*) GameState()->GetState("Act1State"); + state->SetUnknown18(0); + + if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { + ((IslePathActor*) CurrentActor())->VTable0xe4(); + } + + Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); + isle->SetDestLocation(LegoGameState::Area::e_jetskibuild); + + AnimationManager()->FUN_10061010(FALSE); + TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); + } + + return 1; +} + +// FUNCTION: LEGO1 0x10015450 +MxLong RaceStandsEntity::VTable0x50(MxParam& p_param) +{ + if (FUN_1003ef60()) { + Act1State* state = (Act1State*) GameState()->GetState("Act1State"); + state->SetUnknown18(0); + + if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { + ((IslePathActor*) CurrentActor())->VTable0xe4(); + } + + Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); + isle->SetDestLocation(LegoGameState::Area::e_racecarbuild); + + AnimationManager()->FUN_10061010(FALSE); + TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); + } + + return 1; +} diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index dee0a47b..1b765b2b 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -1,9 +1,7 @@ #include "helicopter.h" -#include "act1state.h" #include "act3.h" #include "act3_actions.h" -#include "helicopterstate.h" #include "isle.h" #include "isle_actions.h" #include "jukebox.h" @@ -19,6 +17,7 @@ #include "scripts.h" DECOMP_SIZE_ASSERT(Helicopter, 0x230) +DECOMP_SIZE_ASSERT(HelicopterState, 0x0c) DECOMP_SIZE_ASSERT(Mx3DPointFloat, 0x14) DECOMP_SIZE_ASSERT(Mx4DPointFloat, 0x18) DECOMP_SIZE_ASSERT(MxMatrix, 0x48) diff --git a/LEGO1/lego/legoomni/src/actors/islepathactor.cpp b/LEGO1/lego/legoomni/src/actors/islepathactor.cpp index e526384e..0f8da9e7 100644 --- a/LEGO1/lego/legoomni/src/actors/islepathactor.cpp +++ b/LEGO1/lego/legoomni/src/actors/islepathactor.cpp @@ -4,10 +4,10 @@ #include "isle_actions.h" #include "jukebox_actions.h" #include "legoanimationmanager.h" +#include "legocarbuild.h" #include "legonavcontroller.h" #include "legopathboundary.h" #include "legoutils.h" -#include "legovehiclebuildstate.h" #include "legovideomanager.h" #include "legoworld.h" #include "misc.h" diff --git a/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp b/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp index f4e2af0a..340ea64d 100644 --- a/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp +++ b/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp @@ -3,8 +3,8 @@ #include "isle.h" #include "isle_actions.h" #include "islepathactor.h" +#include "jukebox.h" #include "jukebox_actions.h" -#include "jukeboxstate.h" #include "legogamestate.h" #include "legoutils.h" #include "misc.h" diff --git a/LEGO1/lego/legoomni/src/actors/pizza.cpp b/LEGO1/lego/legoomni/src/actors/pizza.cpp index 9185de23..43ef2ddb 100644 --- a/LEGO1/lego/legoomni/src/actors/pizza.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizza.cpp @@ -1,15 +1,15 @@ #include "pizza.h" -#include "act1state.h" #include "isle_actions.h" #include "legogamestate.h" #include "legoworld.h" #include "misc.h" #include "mxmisc.h" #include "mxticklemanager.h" -#include "pizzamissionstate.h" DECOMP_SIZE_ASSERT(Pizza, 0x9c) +DECOMP_SIZE_ASSERT(PizzaMissionState, 0xb0) +DECOMP_SIZE_ASSERT(PizzaMissionState::Entry, 0x20) // FUNCTION: LEGO1 0x10037ef0 Pizza::Pizza() @@ -98,3 +98,22 @@ undefined4 Pizza::HandleEndAction(MxEndActionNotificationParam&) // TODO return 0; } + +// STUB: LEGO1 0x100393c0 +MxResult PizzaMissionState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} + +// FUNCTION: LEGO1 0x10039510 +PizzaMissionState::Entry* PizzaMissionState::GetState(MxU8 p_id) +{ + for (MxS16 i = 0; i < 5; i++) { + if (m_state[i].m_id == p_id) { + return m_state + i; + } + } + + return NULL; +} diff --git a/LEGO1/lego/legoomni/src/actors/pizzeria.cpp b/LEGO1/lego/legoomni/src/actors/pizzeria.cpp index 46139dd7..1ae45305 100644 --- a/LEGO1/lego/legoomni/src/actors/pizzeria.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizzeria.cpp @@ -9,11 +9,11 @@ #include "legoworld.h" #include "misc.h" #include "pizza.h" -#include "pizzamissionstate.h" -#include "pizzeriastate.h" #include "scripts.h" DECOMP_SIZE_ASSERT(Pizzeria, 0x84) +DECOMP_SIZE_ASSERT(PizzeriaState, 0x58) +DECOMP_SIZE_ASSERT(PizzeriaState::StateStruct, 0x14) // FUNCTION: LEGO1 0x100179c0 MxResult Pizzeria::Create(MxDSAction& p_dsAction) @@ -63,3 +63,22 @@ undefined4 Pizzeria::HandleClick() return 1; } + +// STUB: LEGO1 0x10017af0 +PizzeriaState::PizzeriaState() +{ + // TODO +} + +// STUB: LEGO1 0x10017d70 +MxU32 PizzeriaState::FUN_10017d70() +{ + return 0; +} + +// STUB: LEGO1 0x10017da0 +MxResult PizzeriaState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} diff --git a/LEGO1/lego/legoomni/src/actors/radio.cpp b/LEGO1/lego/legoomni/src/actors/radio.cpp index e78e7ba8..89d39357 100644 --- a/LEGO1/lego/legoomni/src/actors/radio.cpp +++ b/LEGO1/lego/legoomni/src/actors/radio.cpp @@ -1,6 +1,7 @@ #include "radio.h" #include "isle_actions.h" +#include "jukebox_actions.h" #include "legocontrolmanager.h" #include "legogamestate.h" #include "legoworld.h" @@ -10,10 +11,52 @@ #include "mxcontrolpresenter.h" #include "mxmisc.h" #include "mxnotificationmanager.h" -#include "radiostate.h" +#include "mxtimer.h" #include "scripts.h" DECOMP_SIZE_ASSERT(Radio, 0x10) +DECOMP_SIZE_ASSERT(RadioState, 0x30) + +// GLOBAL: LEGO1 0x100f3218 +JukeboxScript::Script g_unk0x100f3218[6] = { + JukeboxScript::c_sns002ra_Audio, + JukeboxScript::c_sns001ja_Audio, + JukeboxScript::c_snsc01js_Audio, + JukeboxScript::c_snsb01js_Audio, + JukeboxScript::c_snsa01js_Audio, + JukeboxScript::c_sns009ra_Audio +}; + +// GLOBAL: LEGO1 0x100f3230 +JukeboxScript::Script g_unk0x100f3230[14] = { + JukeboxScript::c_ham035ra_Audio, + JukeboxScript::c_ham039ra_Audio, + JukeboxScript::c_sns005ra_Audio, + JukeboxScript::c_sns078pa_Audio, + JukeboxScript::c_ham036ra_Audio, + JukeboxScript::c_sns006ra_Audio, + JukeboxScript::c_sns013ra_Audio, + JukeboxScript::c_sns004ra_Audio, + JukeboxScript::c_sns079pa_Audio, + JukeboxScript::c_sns007ra_Audio, + JukeboxScript::c_sns008ra_Audio, + JukeboxScript::c_hpz037ma_Audio, + JukeboxScript::c_sns003ra_Audio, + JukeboxScript::c_sns010ra_Audio, +}; + +// GLOBAL: LEGO1 0x100f3268 +JukeboxScript::Script g_unk0x100f3268[9] = { + JukeboxScript::c_CentralRoads_Music, + JukeboxScript::c_BeachBlvd_Music, + JukeboxScript::c_ResidentalArea_Music, + JukeboxScript::c_Radio1_Music, + JukeboxScript::c_Radio2_Music, + JukeboxScript::c_Radio3_Music, + JukeboxScript::c_Radio4_Music, + JukeboxScript::c_Radio5_Music, + JukeboxScript::c_Radio6_Music, +}; // FUNCTION: LEGO1 0x1002c850 Radio::Radio() @@ -162,3 +205,56 @@ void Radio::CreateState() m_state = state; } + +// FUNCTION: LEGO1 0x1002ce10 +RadioState::RadioState() +{ + srand(Timer()->GetTime()); + + MxS32 random = rand(); + m_unk0x2c = random % 3; + + m_unk0x08[0] = LegoState::Playlist((MxU32*) g_unk0x100f3218, sizeof(g_unk0x100f3218) / sizeof(g_unk0x100f3218[0])); + m_unk0x08[0].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3218) / sizeof(g_unk0x100f3218[0]))); + + m_unk0x08[1] = LegoState::Playlist((MxU32*) g_unk0x100f3230, sizeof(g_unk0x100f3230) / sizeof(g_unk0x100f3230[0])); + m_unk0x08[1].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3230) / sizeof(g_unk0x100f3230[0]))); + + m_unk0x08[2] = LegoState::Playlist((MxU32*) g_unk0x100f3268, sizeof(g_unk0x100f3268) / sizeof(g_unk0x100f3268[0])); + m_unk0x08[2].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3268) / sizeof(g_unk0x100f3268[0]))); + + m_active = FALSE; +} + +// FUNCTION: LEGO1 0x1002cf50 +MxBool RadioState::IsSerializable() +{ + return FALSE; +} + +// FUNCTION: LEGO1 0x1002d090 +MxU32 RadioState::FUN_1002d090() +{ + if (m_unk0x2c == 2) { + m_unk0x2c = 0; + } + else { + m_unk0x2c++; + } + + return m_unk0x08[m_unk0x2c].Next(); +} + +// FUNCTION: LEGO1 0x1002d0c0 +MxBool RadioState::FUN_1002d0c0(const MxAtomId& p_atom, MxU32 p_objectId) +{ + if (*g_jukeboxScript == p_atom) { + for (MxS16 i = 0; i < 3; i++) { + if (m_unk0x08[i].Contains(p_objectId)) { + return TRUE; + } + } + } + + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/actors/skateboard.cpp b/LEGO1/lego/legoomni/src/actors/skateboard.cpp index ab37d3f1..814e1332 100644 --- a/LEGO1/lego/legoomni/src/actors/skateboard.cpp +++ b/LEGO1/lego/legoomni/src/actors/skateboard.cpp @@ -1,6 +1,5 @@ #include "skateboard.h" -#include "act1state.h" #include "decomp.h" #include "isle.h" #include "isle_actions.h" diff --git a/LEGO1/lego/legoomni/src/actors/towtrack.cpp b/LEGO1/lego/legoomni/src/actors/towtrack.cpp index cf155775..4f259903 100644 --- a/LEGO1/lego/legoomni/src/actors/towtrack.cpp +++ b/LEGO1/lego/legoomni/src/actors/towtrack.cpp @@ -7,9 +7,9 @@ #include "mxmisc.h" #include "mxtimer.h" #include "mxvariabletable.h" -#include "towtrackmissionstate.h" DECOMP_SIZE_ASSERT(TowTrack, 0x180) +DECOMP_SIZE_ASSERT(TowTrackMissionState, 0x28) // FUNCTION: LEGO1 0x1004c720 TowTrack::TowTrack() @@ -131,3 +131,73 @@ void TowTrack::FUN_1004dbe0() { // TODO } + +// FUNCTION: LEGO1 0x1004dd30 +TowTrackMissionState::TowTrackMissionState() +{ + 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_score1 = 0; + m_score2 = 0; + m_score3 = 0; + m_score4 = 0; + m_score5 = 0; +} + +// FUNCTION: LEGO1 0x1004dde0 +MxResult TowTrackMissionState::Serialize(LegoFile* p_legoFile) +{ + LegoState::Serialize(p_legoFile); + + if (p_legoFile->IsReadMode()) { + p_legoFile->Read(&m_unk0x12, sizeof(m_unk0x12)); + p_legoFile->Read(&m_unk0x14, sizeof(m_unk0x14)); + p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16)); + p_legoFile->Read(&m_unk0x18, sizeof(m_unk0x18)); + p_legoFile->Read(&m_unk0x1a, sizeof(m_unk0x1a)); + p_legoFile->Read(&m_score1, sizeof(m_score1)); + p_legoFile->Read(&m_score2, sizeof(m_score2)); + p_legoFile->Read(&m_score3, sizeof(m_score3)); + p_legoFile->Read(&m_score4, sizeof(m_score4)); + p_legoFile->Read(&m_score5, sizeof(m_score5)); + } + else if (p_legoFile->IsWriteMode()) { + MxU16 write = m_unk0x12; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_unk0x14; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_unk0x16; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_unk0x18; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_unk0x1a; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_score1; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_score2; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_score3; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_score4; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + + write = m_score5; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + } + + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp deleted file mode 100644 index 1a9ca3fa..00000000 --- a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "helicopterstate.h" - -DECOMP_SIZE_ASSERT(HelicopterState, 0x0c) diff --git a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp index f844aa08..ed32a3f2 100644 --- a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp +++ b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp @@ -1,6 +1,7 @@ #include "legocarbuild.h" DECOMP_SIZE_ASSERT(LegoCarBuild, 0x34c) +DECOMP_SIZE_ASSERT(LegoVehicleBuildState, 0x50) // STUB: LEGO1 0x100226d0 LegoCarBuild::LegoCarBuild() @@ -61,3 +62,20 @@ MxBool LegoCarBuild::Escape() // TODO return FALSE; } + +// FUNCTION: LEGO1 0x10025f30 +LegoVehicleBuildState::LegoVehicleBuildState(char* p_classType) +{ + m_className = p_classType; + m_unk0x4c = 0; + m_unk0x4d = FALSE; + m_unk0x4e = FALSE; + m_placedPartCount = 0; +} + +// STUB: LEGO1 0x10026120 +MxResult LegoVehicleBuildState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} diff --git a/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp b/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp similarity index 94% rename from LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp rename to LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp index d759364b..fddac82e 100644 --- a/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/build/legocarbuildpresenter.cpp @@ -1,4 +1,4 @@ -#include "legocarbuildanimpresenter.h" +#include "legocarbuildpresenter.h" DECOMP_SIZE_ASSERT(LegoCarBuildAnimPresenter, 0x150) diff --git a/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp b/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp deleted file mode 100644 index 2e5df9ef..00000000 --- a/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "legovehiclebuildstate.h" - -#include "decomp.h" - -DECOMP_SIZE_ASSERT(LegoVehicleBuildState, 0x50) - -// FUNCTION: LEGO1 0x10025f30 -LegoVehicleBuildState::LegoVehicleBuildState(char* p_classType) -{ - this->m_className = p_classType; - this->m_unk0x4c = 0; - this->m_unk0x4d = FALSE; - this->m_unk0x4e = FALSE; - this->m_placedPartCount = 0; -} - -// STUB: LEGO1 0x10026120 -MxResult LegoVehicleBuildState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} diff --git a/LEGO1/lego/legoomni/src/common/animstate.cpp b/LEGO1/lego/legoomni/src/common/animstate.cpp deleted file mode 100644 index 24a0bf12..00000000 --- a/LEGO1/lego/legoomni/src/common/animstate.cpp +++ /dev/null @@ -1,46 +0,0 @@ -#include "animstate.h" - -DECOMP_SIZE_ASSERT(AnimState, 0x1c) -DECOMP_SIZE_ASSERT(ModelInfo, 0x30) -DECOMP_SIZE_ASSERT(AnimInfo, 0x30) - -// FUNCTION: LEGO1 0x10064ff0 -AnimState::AnimState() -{ - m_unk0x0c = 0; - m_unk0x10 = NULL; - m_unk0x14 = 0; - m_unk0x18 = NULL; -} - -// STUB: LEGO1 0x10065150 -AnimState::~AnimState() -{ - // TODO -} - -// STUB: LEGO1 0x100651d0 -void AnimState::FUN_100651d0(MxU32, AnimInfo*, MxU32&) -{ - // TODO -} - -// STUB: LEGO1 0x10065240 -void AnimState::FUN_10065240(MxU32, AnimInfo*, MxU32) -{ - // TODO -} - -// STUB: LEGO1 0x100652d0 -MxResult AnimState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} - -// STUB: LEGO1 0x100654f0 -MxBool AnimState::SetFlag() -{ - // TODO - return FALSE; -} diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index fde5a979..f1915ef9 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -2,7 +2,6 @@ #include "3dmanager/lego3dmanager.h" #include "anim/legoanim.h" -#include "animstate.h" #include "define.h" #include "islepathactor.h" #include "legoanimmmpresenter.h" @@ -37,6 +36,9 @@ DECOMP_SIZE_ASSERT(LegoAnimationManager::Character, 0x18) DECOMP_SIZE_ASSERT(LegoAnimationManager::Vehicle, 0x08) DECOMP_SIZE_ASSERT(LegoAnimationManager::Extra, 0x18) DECOMP_SIZE_ASSERT(LegoTranInfo, 0x78) +DECOMP_SIZE_ASSERT(AnimState, 0x1c) +DECOMP_SIZE_ASSERT(AnimInfo, 0x30) +DECOMP_SIZE_ASSERT(ModelInfo, 0x30) // GLOBAL: LEGO1 0x100d8b28 MxU8 g_unk0x100d8b28[] = {0, 1, 2, 4, 8, 16}; @@ -2820,3 +2822,44 @@ void LegoAnimationManager::FUN_10064b50(MxLong p_time) ); } } + +// FUNCTION: LEGO1 0x10064ff0 +AnimState::AnimState() +{ + m_unk0x0c = 0; + m_unk0x10 = NULL; + m_unk0x14 = 0; + m_unk0x18 = NULL; +} + +// STUB: LEGO1 0x10065150 +AnimState::~AnimState() +{ + // TODO +} + +// STUB: LEGO1 0x100651d0 +void AnimState::FUN_100651d0(MxU32, AnimInfo*, MxU32&) +{ + // TODO +} + +// STUB: LEGO1 0x10065240 +void AnimState::FUN_10065240(MxU32, AnimInfo*, MxU32) +{ + // TODO +} + +// STUB: LEGO1 0x100652d0 +MxResult AnimState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} + +// STUB: LEGO1 0x100654f0 +MxBool AnimState::SetFlag() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/common/legogamestate.cpp b/LEGO1/lego/legoomni/src/common/legogamestate.cpp index 0f339590..b7882a3c 100644 --- a/LEGO1/lego/legoomni/src/common/legogamestate.cpp +++ b/LEGO1/lego/legoomni/src/common/legogamestate.cpp @@ -1,7 +1,6 @@ #include "legogamestate.h" #include "3dmanager/lego3dmanager.h" -#include "act1state.h" #include "act2main_actions.h" #include "act3_actions.h" #include "carrace_actions.h" @@ -15,7 +14,7 @@ #include "helicopter.h" #include "histbook_actions.h" #include "hospital_actions.h" -#include "infocenterstate.h" +#include "infocenter.h" #include "infodoor_actions.h" #include "infomain_actions.h" #include "infoscor_actions.h" diff --git a/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp b/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp index 46926705..23b0227e 100644 --- a/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp +++ b/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp @@ -7,27 +7,22 @@ #include "dunebuggy.h" #include "elevatorbottom.h" #include "gasstation.h" -#include "gasstationstate.h" #include "helicopter.h" -#include "helicopterstate.h" #include "historybook.h" #include "hospital.h" -#include "hospitalstate.h" #include "infocenter.h" #include "infocenterdoor.h" -#include "infocenterstate.h" #include "isle.h" #include "jetskirace.h" #include "lego3dwavepresenter.h" #include "legoact2.h" -#include "legoact2state.h" #include "legoactioncontrolpresenter.h" #include "legoactor.h" #include "legoactorpresenter.h" #include "legoanimactor.h" #include "legoanimpresenter.h" #include "legocarbuild.h" -#include "legocarbuildanimpresenter.h" +#include "legocarbuildpresenter.h" #include "legocarraceactor.h" #include "legoentity.h" #include "legoentitypresenter.h" @@ -51,52 +46,34 @@ #include "mxcontrolpresenter.h" #include "mxvideopresenter.h" #include "pizza.h" -#include "pizzamissionstate.h" #include "police.h" -#include "policestate.h" #include "registrationbook.h" #include "score.h" -#include "scorestate.h" #include "skateboard.h" // #include "act2genactor.h" #include "act2policestation.h" #include "act3.h" -#include "act3state.h" #include "ambulance.h" -#include "ambulancemissionstate.h" #include "bike.h" #include "doors.h" #include "jetski.h" +#include "legoanimationmanager.h" #include "legoanimmmpresenter.h" #include "motocycle.h" #include "racecar.h" #include "towtrack.h" -#include "towtrackmissionstate.h" // #include "act3cop.h" // #include "act3brickster.h" -#include "act1state.h" #include "act3actor.h" #include "act3shark.h" -#include "animstate.h" -#include "beachhouseentity.h" +#include "buildings.h" #include "bumpbouy.h" -#include "carracestate.h" #include "caveentity.h" -#include "gasstationentity.h" -#include "hospitalentity.h" -#include "infocenterentity.h" -#include "jailentity.h" -#include "jetskiracestate.h" #include "jukebox.h" #include "jukeboxentity.h" -#include "jukeboxstate.h" #include "mxcompositemediapresenter.h" #include "pizzeria.h" -#include "pizzeriastate.h" -#include "policeentity.h" #include "raceskel.h" -#include "racestandsentity.h" -#include "radiostate.h" // TODO: Before HospitalState, add all of the different LegoVehicleBuildState's diff --git a/LEGO1/lego/legoomni/src/common/legoutils.cpp b/LEGO1/lego/legoomni/src/common/legoutils.cpp index d769404e..8f9d9b12 100644 --- a/LEGO1/lego/legoomni/src/common/legoutils.cpp +++ b/LEGO1/lego/legoomni/src/common/legoutils.cpp @@ -1,8 +1,8 @@ #include "legoutils.h" #include "3dmanager/lego3dmanager.h" -#include "act1state.h" #include "anim/legoanim.h" +#include "isle.h" #include "islepathactor.h" #include "legoanimationmanager.h" #include "legoanimpresenter.h" diff --git a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp index 87274d00..70c2bb88 100644 --- a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp @@ -1,7 +1,7 @@ #include "legonavcontroller.h" #include "3dmanager/lego3dmanager.h" -#include "infocenterstate.h" +#include "infocenter.h" #include "legoanimationmanager.h" #include "legocameracontroller.h" #include "legogamestate.h" diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp deleted file mode 100644 index aa14a197..00000000 --- a/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "gasstationentity.h" - -#include "act1state.h" -#include "isle.h" -#include "isle_actions.h" -#include "islepathactor.h" -#include "legoanimationmanager.h" -#include "legogamestate.h" -#include "legoutils.h" -#include "legoworld.h" -#include "misc.h" -#include "mxtransitionmanager.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(GasStationEntity, 0x68) - -// FUNCTION: LEGO1 0x100151d0 -MxLong GasStationEntity::VTable0x50(MxParam& p_param) -{ - if (FUN_1003ef60()) { - Act1State* state = (Act1State*) GameState()->GetState("Act1State"); - - if (state->GetUnknown18() != 8) { - state->SetUnknown18(0); - - if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { - ((IslePathActor*) CurrentActor())->VTable0xe4(); - } - - Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); - isle->SetDestLocation(LegoGameState::Area::e_garage); - - AnimationManager()->FUN_10061010(FALSE); - TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); - } - } - - return 1; -} diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp deleted file mode 100644 index 613a74eb..00000000 --- a/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "gasstationstate.h" - -DECOMP_SIZE_ASSERT(GasStationState, 0x24) - -// FUNCTION: LEGO1 0x10005eb0 -GasStationState::GasStationState() -{ - m_unk0x18 = 0; - m_unk0x1a = 0; - m_unk0x1c = 0; - m_unk0x1e = 0; - m_unk0x20 = 0; - - undefined4* unk0x08 = m_unk0x08; - unk0x08[0] = -1; - unk0x08[1] = -1; - unk0x08[2] = -1; -} - -// STUB: LEGO1 0x10006300 -MxResult GasStationState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} - -// STUB: LEGO1 0x10006430 -void GasStationState::FUN_10006430(undefined4) -{ - // TODO -} - -// STUB: LEGO1 0x10006490 -void GasStationState::FUN_10006490() -{ - // TODO -} diff --git a/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp b/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp deleted file mode 100644 index 860bd0f0..00000000 --- a/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "ambulancemissionstate.h" - -DECOMP_SIZE_ASSERT(AmbulanceMissionState, 0x24) - -// FUNCTION: LEGO1 0x100373a0 -AmbulanceMissionState::AmbulanceMissionState() -{ - m_unk0x10 = 0; - m_unk0x12 = 0; - m_unk0x14 = 0; - m_unk0x08 = 0; - m_unk0x16 = 0; - m_unk0x0c = 0; - m_unk0x18 = 0; - m_score1 = 0; - m_score2 = 0; - m_score3 = 0; - m_score4 = 0; - m_score5 = 0; -} - -// STUB: LEGO1 0x10037440 -MxResult AmbulanceMissionState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} diff --git a/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp b/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp deleted file mode 100644 index b6c995d9..00000000 --- a/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "hospitalentity.h" - -#include "act1state.h" -#include "isle.h" -#include "isle_actions.h" -#include "islepathactor.h" -#include "legoanimationmanager.h" -#include "legogamestate.h" -#include "legoutils.h" -#include "legoworld.h" -#include "misc.h" -#include "mxtransitionmanager.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(HospitalEntity, 0x68) - -// FUNCTION: LEGO1 0x10015270 -MxLong HospitalEntity::VTable0x50(MxParam& p_param) -{ - if (FUN_1003ef60()) { - Act1State* act1State = (Act1State*) GameState()->GetState("Act1State"); - - if (act1State->GetUnknown18() != 10) { - act1State->SetUnknown18(0); - - if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { - ((IslePathActor*) CurrentActor())->VTable0xe4(); - } - - Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); - isle->SetDestLocation(LegoGameState::Area::e_hospital); - - AnimationManager()->FUN_10061010(FALSE); - TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); - } - } - - return 1; -} diff --git a/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp b/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp deleted file mode 100644 index da61f0fb..00000000 --- a/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "hospitalstate.h" - -DECOMP_SIZE_ASSERT(HospitalState, 0x18) - -// FUNCTION: LEGO1 0x10076370 -HospitalState::HospitalState() -{ - m_unk0x0c = 0; - m_unk0x0e = 0; - m_unk0x10 = 0; - m_unk0x12 = 0; - m_unk0x14 = 0; - m_unk0x16 = 0; -} - -// FUNCTION: LEGO1 0x10076530 -MxResult HospitalState::Serialize(LegoFile* p_legoFile) -{ - LegoState::Serialize(p_legoFile); - - if (p_legoFile->IsWriteMode()) { - // A write variable needs to be used here, otherwise - // the compiler aggresively optimizes the function - MxS16 write; - - write = m_unk0x0c; - p_legoFile->Write(&write, sizeof(m_unk0x0c)); - write = m_unk0x0e; - p_legoFile->Write(&write, sizeof(m_unk0x0e)); - write = m_unk0x10; - p_legoFile->Write(&write, sizeof(m_unk0x10)); - write = m_unk0x12; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - write = m_unk0x14; - p_legoFile->Write(&write, sizeof(m_unk0x14)); - write = m_unk0x16; - p_legoFile->Write(&write, sizeof(m_unk0x16)); - } - else if (p_legoFile->IsReadMode()) { - p_legoFile->Read(&m_unk0x0c, sizeof(m_unk0x0c)); - p_legoFile->Read(&m_unk0x0e, sizeof(m_unk0x0e)); - p_legoFile->Read(&m_unk0x10, sizeof(m_unk0x10)); - p_legoFile->Read(&m_unk0x12, sizeof(m_unk0x12)); - p_legoFile->Read(&m_unk0x14, sizeof(m_unk0x14)); - p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16)); - } - - return SUCCESS; -} diff --git a/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp b/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp deleted file mode 100644 index 1928f1c7..00000000 --- a/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp +++ /dev/null @@ -1,60 +0,0 @@ -#include "infocenterentity.h" - -#include "act1state.h" -#include "act2main_actions.h" -#include "act3.h" -#include "act3_actions.h" -#include "act3state.h" -#include "isle.h" -#include "isle_actions.h" -#include "islepathactor.h" -#include "legoact2.h" -#include "legoact2state.h" -#include "legoanimationmanager.h" -#include "legogamestate.h" -#include "legoutils.h" -#include "legoworld.h" -#include "misc.h" -#include "mxtransitionmanager.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(InfoCenterEntity, 0x68) - -// FUNCTION: LEGO1 0x100150c0 -MxLong InfoCenterEntity::VTable0x50(MxParam& p_param) -{ - switch (GameState()->GetCurrentAct()) { - case LegoGameState::Act::e_act1: { - if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { - ((IslePathActor*) CurrentActor())->VTable0xe4(); - } - - Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); - isle->FUN_10033350(); - isle->SetDestLocation(LegoGameState::Area::e_infomain); - - Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); - act1state->SetUnknown18(0); - break; - } - case LegoGameState::Act::e_act2: { - LegoAct2* act2 = (LegoAct2*) FindWorld(*g_act2mainScript, Act2mainScript::c__Act2Main); - act2->SetUnknown0x1150(2); - - LegoAct2State* act2state = (LegoAct2State*) GameState()->GetState("LegoAct2State"); - if (act2state) { - act2state->SetUnknown0x0c(0); - } - break; - } - case LegoGameState::Act::e_act3: - Act3* act3 = (Act3*) FindWorld(*g_act3Script, Act3Script::c__Act3); - act3->SetUnknown4270(2); - break; - } - - AnimationManager()->FUN_10061010(FALSE); - TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); - - return 1; -} diff --git a/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp b/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp deleted file mode 100644 index 0fd99839..00000000 --- a/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "infocenterstate.h" - -#include "infocenter.h" -#include "infomain_actions.h" -#include "mxstillpresenter.h" - -DECOMP_SIZE_ASSERT(InfocenterState, 0x94) - -// GLOBAL: LEGO1 0x100f76a8 -InfomainScript::Script g_exitDialogueAct1[14] = { - InfomainScript::c_iic019in_RunAnim, - InfomainScript::c_iic020in_RunAnim, - InfomainScript::c_iic021in_RunAnim, - InfomainScript::c_iic022in_RunAnim, - InfomainScript::c_iic023in_RunAnim, - InfomainScript::c_iic024in_RunAnim, - InfomainScript::c_iic025in_RunAnim, - InfomainScript::c_iic026in_RunAnim, - InfomainScript::c_iic027in_RunAnim, - InfomainScript::c_iica28in_RunAnim, - InfomainScript::c_iicb28in_RunAnim, - InfomainScript::c_iicc28in_RunAnim, - InfomainScript::c_iic029in_RunAnim, - InfomainScript::c_iic032in_RunAnim -}; - -// GLOBAL: LEGO1 0x100f76e0 -InfomainScript::Script g_exitDialogueAct23[6] = { - InfomainScript::c_iic027in_RunAnim, - InfomainScript::c_iic029in_RunAnim, - InfomainScript::c_iic048in_RunAnim, - InfomainScript::c_iic056in_RunAnim, - InfomainScript::c_iicx23in_RunAnim - // Zero-terminated -}; - -// GLOBAL: LEGO1 0x100f76f8 -InfomainScript::Script g_returnDialogueAct1[6] = { - InfomainScript::c_iicx26in_RunAnim, - InfomainScript::c_iic033in_RunAnim, - InfomainScript::c_iic034in_RunAnim, - InfomainScript::c_iic035in_RunAnim, - InfomainScript::c_iic036in_RunAnim - // Zero-terminated -}; - -// GLOBAL: LEGO1 0x100f7710 -InfomainScript::Script g_returnDialogueAct2[4] = { - InfomainScript::c_iic048in_RunAnim, - InfomainScript::c_iic049in_RunAnim, - InfomainScript::c_iic050in_RunAnim, - // Zero-terminated -}; - -// GLOBAL: LEGO1 0x100f7720 -InfomainScript::Script g_returnDialogueAct3[4] = { - InfomainScript::c_iic055in_RunAnim, - InfomainScript::c_iic056in_RunAnim, - InfomainScript::c_iic057in_RunAnim, - InfomainScript::c_iic058in_RunAnim -}; - -// GLOBAL: LEGO1 0x100f7730 -InfomainScript::Script g_leaveDialogueAct1[4] = { - InfomainScript::c_iic039in_PlayWav, - InfomainScript::c_iic040in_PlayWav, - InfomainScript::c_iic041in_PlayWav, - InfomainScript::c_iic042in_PlayWav -}; - -// GLOBAL: LEGO1 0x100f7740 -InfomainScript::Script g_leaveDialogueAct2[4] = { - InfomainScript::c_iic051in_PlayWav, - InfomainScript::c_iic052in_PlayWav, - InfomainScript::c_iic053in_PlayWav, - InfomainScript::c_iic054in_PlayWav -}; - -// GLOBAL: LEGO1 0x100f7750 -InfomainScript::Script g_leaveDialogueAct3[4] = { - InfomainScript::c_iic059in_PlayWav, - InfomainScript::c_iic060in_PlayWav, - InfomainScript::c_iic061in_PlayWav, - // Zero-terminated -}; - -// GLOBAL: LEGO1 0x100f7760 -InfomainScript::Script g_bricksterDialogue[2] = { - InfomainScript::c_sbleh2br_PlayWav, - InfomainScript::c_snshahbr_PlayWav -}; - -// FUNCTION: LEGO1 0x10071600 -InfocenterState::InfocenterState() -{ - m_exitDialogueAct1 = LegoState::Playlist((MxU32*) g_exitDialogueAct1, sizeOfArray(g_exitDialogueAct1)); - m_exitDialogueAct23 = LegoState::Playlist((MxU32*) g_exitDialogueAct23, sizeOfArray(g_exitDialogueAct23) - 1); - - m_returnDialogue[LegoGameState::e_act1] = - LegoState::Playlist((MxU32*) g_returnDialogueAct1, sizeOfArray(g_returnDialogueAct1) - 1); - - m_returnDialogue[LegoGameState::e_act2] = - LegoState::Playlist((MxU32*) g_returnDialogueAct2, sizeOfArray(g_returnDialogueAct2) - 1); - - m_returnDialogue[LegoGameState::e_act3] = - LegoState::Playlist((MxU32*) g_returnDialogueAct3, sizeOfArray(g_returnDialogueAct3)); - - m_leaveDialogue[LegoGameState::e_act1] = - LegoState::Playlist((MxU32*) g_leaveDialogueAct1, sizeOfArray(g_leaveDialogueAct1)); - - m_leaveDialogue[LegoGameState::e_act2] = - LegoState::Playlist((MxU32*) g_leaveDialogueAct2, sizeOfArray(g_leaveDialogueAct2)); - - m_leaveDialogue[LegoGameState::e_act3] = - LegoState::Playlist((MxU32*) g_leaveDialogueAct3, sizeOfArray(g_leaveDialogueAct3) - 1); - - m_bricksterDialogue = LegoState::Playlist((MxU32*) g_bricksterDialogue, sizeOfArray(g_bricksterDialogue)); - - memset(m_letters, 0, sizeof(m_letters)); -} - -// FUNCTION: LEGO1 0x10071920 -InfocenterState::~InfocenterState() -{ - MxS16 i = 0; - do { - if (GetNameLetter(i) != NULL) { - delete GetNameLetter(i)->GetAction(); - delete GetNameLetter(i); - } - i++; - } while (i < GetMaxNameLength()); -} diff --git a/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp b/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp deleted file mode 100644 index e1b3522c..00000000 --- a/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "scorestate.h" - -DECOMP_SIZE_ASSERT(ScoreState, 0x0c) - -// FUNCTION: LEGO1 0x1000de20 -MxBool ScoreState::IsSerializable() -{ - return FALSE; -} - -// FUNCTION: LEGO1 0x1000de30 -MxBool ScoreState::SetFlag() -{ - m_playCubeTutorial = TRUE; - return TRUE; -} diff --git a/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp b/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp deleted file mode 100644 index 1e7167dd..00000000 --- a/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "beachhouseentity.h" - -#include "act1state.h" -#include "isle.h" -#include "isle_actions.h" -#include "islepathactor.h" -#include "legoanimationmanager.h" -#include "legogamestate.h" -#include "legoutils.h" -#include "legoworld.h" -#include "misc.h" -#include "mxtransitionmanager.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(BeachHouseEntity, 0x68) - -// FUNCTION: LEGO1 0x100153b0 -MxLong BeachHouseEntity::VTable0x50(MxParam& p_param) -{ - if (FUN_1003ef60()) { - Act1State* state = (Act1State*) GameState()->GetState("Act1State"); - state->SetUnknown18(0); - - if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { - ((IslePathActor*) CurrentActor())->VTable0xe4(); - } - - Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); - isle->SetDestLocation(LegoGameState::Area::e_jetskibuild); - - AnimationManager()->FUN_10061010(FALSE); - TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); - } - - return 1; -} diff --git a/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp b/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp deleted file mode 100644 index 7efc9695..00000000 --- a/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "jukeboxstate.h" - -DECOMP_SIZE_ASSERT(JukeBoxState, 0x10) - -// FUNCTION: LEGO1 0x1000f300 -MxBool JukeBoxState::IsSerializable() -{ - return FALSE; -} diff --git a/LEGO1/lego/legoomni/src/isle/radiostate.cpp b/LEGO1/lego/legoomni/src/isle/radiostate.cpp deleted file mode 100644 index 5927a94b..00000000 --- a/LEGO1/lego/legoomni/src/isle/radiostate.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "radiostate.h" - -#include "jukebox.h" -#include "jukebox_actions.h" -#include "mxmisc.h" -#include "mxtimer.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(RadioState, 0x30) - -// GLOBAL: LEGO1 0x100f3218 -JukeboxScript::Script g_unk0x100f3218[6] = { - JukeboxScript::c_sns002ra_Audio, - JukeboxScript::c_sns001ja_Audio, - JukeboxScript::c_snsc01js_Audio, - JukeboxScript::c_snsb01js_Audio, - JukeboxScript::c_snsa01js_Audio, - JukeboxScript::c_sns009ra_Audio -}; - -// GLOBAL: LEGO1 0x100f3230 -JukeboxScript::Script g_unk0x100f3230[14] = { - JukeboxScript::c_ham035ra_Audio, - JukeboxScript::c_ham039ra_Audio, - JukeboxScript::c_sns005ra_Audio, - JukeboxScript::c_sns078pa_Audio, - JukeboxScript::c_ham036ra_Audio, - JukeboxScript::c_sns006ra_Audio, - JukeboxScript::c_sns013ra_Audio, - JukeboxScript::c_sns004ra_Audio, - JukeboxScript::c_sns079pa_Audio, - JukeboxScript::c_sns007ra_Audio, - JukeboxScript::c_sns008ra_Audio, - JukeboxScript::c_hpz037ma_Audio, - JukeboxScript::c_sns003ra_Audio, - JukeboxScript::c_sns010ra_Audio, -}; - -// GLOBAL: LEGO1 0x100f3268 -JukeboxScript::Script g_unk0x100f3268[9] = { - JukeboxScript::c_CentralRoads_Music, - JukeboxScript::c_BeachBlvd_Music, - JukeboxScript::c_ResidentalArea_Music, - JukeboxScript::c_Radio1_Music, - JukeboxScript::c_Radio2_Music, - JukeboxScript::c_Radio3_Music, - JukeboxScript::c_Radio4_Music, - JukeboxScript::c_Radio5_Music, - JukeboxScript::c_Radio6_Music, -}; - -// FUNCTION: LEGO1 0x1002ce10 -RadioState::RadioState() -{ - srand(Timer()->GetTime()); - - MxS32 random = rand(); - m_unk0x2c = random % 3; - - m_unk0x08[0] = LegoState::Playlist((MxU32*) g_unk0x100f3218, sizeof(g_unk0x100f3218) / sizeof(g_unk0x100f3218[0])); - m_unk0x08[0].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3218) / sizeof(g_unk0x100f3218[0]))); - - m_unk0x08[1] = LegoState::Playlist((MxU32*) g_unk0x100f3230, sizeof(g_unk0x100f3230) / sizeof(g_unk0x100f3230[0])); - m_unk0x08[1].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3230) / sizeof(g_unk0x100f3230[0]))); - - m_unk0x08[2] = LegoState::Playlist((MxU32*) g_unk0x100f3268, sizeof(g_unk0x100f3268) / sizeof(g_unk0x100f3268[0])); - m_unk0x08[2].SetUnknown0x08(rand() % (sizeof(g_unk0x100f3268) / sizeof(g_unk0x100f3268[0]))); - - m_active = FALSE; -} - -// FUNCTION: LEGO1 0x1002cf50 -MxBool RadioState::IsSerializable() -{ - return FALSE; -} - -// FUNCTION: LEGO1 0x1002d090 -MxU32 RadioState::FUN_1002d090() -{ - if (m_unk0x2c == 2) { - m_unk0x2c = 0; - } - else { - m_unk0x2c++; - } - - return m_unk0x08[m_unk0x2c].Next(); -} - -// FUNCTION: LEGO1 0x1002d0c0 -MxBool RadioState::FUN_1002d0c0(const MxAtomId& p_atom, MxU32 p_objectId) -{ - if (*g_jukeboxScript == p_atom) { - for (MxS16 i = 0; i < 3; i++) { - if (m_unk0x08[i].Contains(p_objectId)) { - return TRUE; - } - } - } - - return FALSE; -} diff --git a/LEGO1/lego/legoomni/src/paths/legopathstruct.cpp b/LEGO1/lego/legoomni/src/paths/legopathstruct.cpp index db2cc767..d15d083b 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathstruct.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathstruct.cpp @@ -1,8 +1,8 @@ #include "legopathstruct.h" #include "isle.h" +#include "jukebox.h" #include "jukebox_actions.h" -#include "jukeboxstate.h" #include "legohideanimpresenter.h" #include "legopathactor.h" #include "legoutils.h" diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp deleted file mode 100644 index 543a5152..00000000 --- a/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "pizzamissionstate.h" - -DECOMP_SIZE_ASSERT(PizzaMissionStateEntry, 0x20) -DECOMP_SIZE_ASSERT(PizzaMissionState, 0xb0) - -// STUB: LEGO1 0x100393c0 -MxResult PizzaMissionState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} - -// FUNCTION: LEGO1 0x10039510 -PizzaMissionStateEntry* PizzaMissionState::GetState(MxU8 p_id) -{ - for (MxS16 i = 0; i < 5; i++) { - if (m_state[i].m_id == p_id) { - return m_state + i; - } - } - - return NULL; -} diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp deleted file mode 100644 index 3271c3d6..00000000 --- a/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "pizzeriastate.h" - -DECOMP_SIZE_ASSERT(PizzeriaState, 0x58) - -// STUB: LEGO1 0x10017af0 -PizzeriaState::PizzeriaState() -{ - // TODO -} - -// STUB: LEGO1 0x10017d70 -MxU32 PizzeriaState::FUN_10017d70() -{ - return 0; -} - -// STUB: LEGO1 0x10017da0 -MxResult PizzeriaState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} diff --git a/LEGO1/lego/legoomni/src/police/policeentity.cpp b/LEGO1/lego/legoomni/src/police/policeentity.cpp deleted file mode 100644 index a9090b61..00000000 --- a/LEGO1/lego/legoomni/src/police/policeentity.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "policeentity.h" - -#include "act1state.h" -#include "isle.h" -#include "isle_actions.h" -#include "islepathactor.h" -#include "legoanimationmanager.h" -#include "legogamestate.h" -#include "legoutils.h" -#include "legoworld.h" -#include "misc.h" -#include "mxtransitionmanager.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(PoliceEntity, 0x68) - -// FUNCTION: LEGO1 0x10015310 -MxLong PoliceEntity::VTable0x50(MxParam& p_param) -{ - if (FUN_1003ef60()) { - Act1State* state = (Act1State*) GameState()->GetState("Act1State"); - - if (state->GetUnknown18() != 10) { - state->SetUnknown18(0); - - if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { - ((IslePathActor*) CurrentActor())->VTable0xe4(); - } - - Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); - isle->SetDestLocation(LegoGameState::Area::e_police); - - AnimationManager()->FUN_10061010(FALSE); - TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); - } - } - - return 1; -} diff --git a/LEGO1/lego/legoomni/src/police/policestate.cpp b/LEGO1/lego/legoomni/src/police/policestate.cpp deleted file mode 100644 index c0a6e716..00000000 --- a/LEGO1/lego/legoomni/src/police/policestate.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "policestate.h" - -#include "islepathactor.h" -#include "misc.h" -#include "mxdsaction.h" -#include "mxmisc.h" -#include "police.h" -#include "police_actions.h" -#include "scripts.h" - -#include <stdlib.h> - -DECOMP_SIZE_ASSERT(PoliceState, 0x10) - -// FUNCTION: LEGO1 0x1005e7c0 -PoliceState::PoliceState() -{ - m_unk0x0c = 0; - m_policeScript = (rand() % 2 == 0) ? PoliceScript::c_nps002la_RunAnim : PoliceScript::c_nps001ni_RunAnim; -} - -// FUNCTION: LEGO1 0x1005e990 -MxResult PoliceState::Serialize(LegoFile* p_legoFile) -{ - LegoState::Serialize(p_legoFile); - - if (p_legoFile->IsReadMode()) { - p_legoFile->Read(&m_policeScript, sizeof(m_policeScript)); - } - else { - PoliceScript::Script policeScript = m_policeScript; - p_legoFile->Write(&policeScript, sizeof(m_policeScript)); - } - - return SUCCESS; -} - -// FUNCTION: LEGO1 0x1005ea40 -void PoliceState::FUN_1005ea40() -{ - PoliceScript::Script policeScript; - - if (m_unk0x0c == 1) { - return; - } - - switch (CurrentActor()->GetActorId()) { - case 4: - policeScript = PoliceScript::c_nps002la_RunAnim; - m_policeScript = policeScript; - break; - case 5: - policeScript = PoliceScript::c_nps001ni_RunAnim; - m_policeScript = policeScript; - break; - default: - policeScript = m_policeScript; - m_policeScript = policeScript == PoliceScript::c_nps002la_RunAnim ? PoliceScript::c_nps001ni_RunAnim - : PoliceScript::c_nps002la_RunAnim; - } - - { - MxDSAction action; - action.SetObjectId(policeScript); - action.SetAtomId(*g_policeScript); - Start(&action); - } - - m_unk0x0c = 1; -} diff --git a/LEGO1/lego/legoomni/src/race/legorace.cpp b/LEGO1/lego/legoomni/src/race/legorace.cpp index c7959fc7..a2204345 100644 --- a/LEGO1/lego/legoomni/src/race/legorace.cpp +++ b/LEGO1/lego/legoomni/src/race/legorace.cpp @@ -4,6 +4,9 @@ #include "mxnotificationmanager.h" DECOMP_SIZE_ASSERT(LegoRace, 0x144) +DECOMP_SIZE_ASSERT(RaceState::Entry, 0x06) +// TODO: Must be 0x2c but current structure is incorrect +// DECOMP_SIZE_ASSERT(RaceState, 0x2c) // FUNCTION: LEGO1 0x1000dab0 undefined4 LegoRace::VTable0x78(undefined4) @@ -87,3 +90,30 @@ void LegoRace::Enable(MxBool p_enable) { // TODO } + +// STUB: LEGO1 0x10015f30 +RaceState::RaceState() +{ + // TODO +} + +// STUB: LEGO1 0x10016140 +MxResult RaceState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} + +// FUNCTION: LEGO1 0x10016280 +RaceState::Entry* RaceState::GetState(MxU8 p_id) +{ + for (MxS16 i = 0;; i++) { + if (i >= 5) { + return NULL; + } + + if (m_state[i].m_id == p_id) { + return m_state + i; + } + } +} diff --git a/LEGO1/lego/legoomni/src/race/racestandsentity.cpp b/LEGO1/lego/legoomni/src/race/racestandsentity.cpp deleted file mode 100644 index 8cceb324..00000000 --- a/LEGO1/lego/legoomni/src/race/racestandsentity.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "racestandsentity.h" - -#include "act1state.h" -#include "isle.h" -#include "isle_actions.h" -#include "islepathactor.h" -#include "legoanimationmanager.h" -#include "legogamestate.h" -#include "legoutils.h" -#include "legoworld.h" -#include "misc.h" -#include "mxtransitionmanager.h" -#include "scripts.h" - -DECOMP_SIZE_ASSERT(RaceStandsEntity, 0x68) - -// FUNCTION: LEGO1 0x10015450 -MxLong RaceStandsEntity::VTable0x50(MxParam& p_param) -{ - if (FUN_1003ef60()) { - Act1State* state = (Act1State*) GameState()->GetState("Act1State"); - state->SetUnknown18(0); - - if (CurrentActor()->GetActorId() != GameState()->GetActorId()) { - ((IslePathActor*) CurrentActor())->VTable0xe4(); - } - - Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); - isle->SetDestLocation(LegoGameState::Area::e_racecarbuild); - - AnimationManager()->FUN_10061010(FALSE); - TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); - } - - return 1; -} diff --git a/LEGO1/lego/legoomni/src/race/racestate.cpp b/LEGO1/lego/legoomni/src/race/racestate.cpp deleted file mode 100644 index 897190f7..00000000 --- a/LEGO1/lego/legoomni/src/race/racestate.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "racestate.h" - -DECOMP_SIZE_ASSERT(RaceStateEntry, 0x06) - -// TODO: Must be 0x2c but current structure is incorrect -// DECOMP_SIZE_ASSERT(RaceState, 0x2c) - -// STUB: LEGO1 0x10015f30 -RaceState::RaceState() -{ - // TODO -} - -// STUB: LEGO1 0x10016140 -MxResult RaceState::Serialize(LegoFile* p_legoFile) -{ - // TODO - return LegoState::Serialize(p_legoFile); -} - -// FUNCTION: LEGO1 0x10016280 -RaceStateEntry* RaceState::GetState(MxU8 p_id) -{ - for (MxS16 i = 0;; i++) { - if (i >= 5) { - return NULL; - } - - if (m_state[i].m_id == p_id) { - return m_state + i; - } - } -} diff --git a/LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp b/LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp deleted file mode 100644 index bbf080ff..00000000 --- a/LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp +++ /dev/null @@ -1,73 +0,0 @@ -#include "towtrackmissionstate.h" - -DECOMP_SIZE_ASSERT(TowTrackMissionState, 0x28) - -// FUNCTION: LEGO1 0x1004dd30 -TowTrackMissionState::TowTrackMissionState() -{ - 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_score1 = 0; - m_score2 = 0; - m_score3 = 0; - m_score4 = 0; - m_score5 = 0; -} - -// FUNCTION: LEGO1 0x1004dde0 -MxResult TowTrackMissionState::Serialize(LegoFile* p_legoFile) -{ - LegoState::Serialize(p_legoFile); - - if (p_legoFile->IsReadMode()) { - p_legoFile->Read(&m_unk0x12, sizeof(m_unk0x12)); - p_legoFile->Read(&m_unk0x14, sizeof(m_unk0x14)); - p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16)); - p_legoFile->Read(&m_unk0x18, sizeof(m_unk0x18)); - p_legoFile->Read(&m_unk0x1a, sizeof(m_unk0x1a)); - p_legoFile->Read(&m_score1, sizeof(m_score1)); - p_legoFile->Read(&m_score2, sizeof(m_score2)); - p_legoFile->Read(&m_score3, sizeof(m_score3)); - p_legoFile->Read(&m_score4, sizeof(m_score4)); - p_legoFile->Read(&m_score5, sizeof(m_score5)); - } - else if (p_legoFile->IsWriteMode()) { - MxU16 write = m_unk0x12; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x14; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x16; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x18; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x1a; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_score1; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_score2; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_score3; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_score4; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - - write = m_score5; - p_legoFile->Write(&write, sizeof(m_unk0x12)); - } - - return SUCCESS; -} diff --git a/LEGO1/lego/legoomni/src/worlds/act3.cpp b/LEGO1/lego/legoomni/src/worlds/act3.cpp index 98f789da..c8ec77c3 100644 --- a/LEGO1/lego/legoomni/src/worlds/act3.cpp +++ b/LEGO1/lego/legoomni/src/worlds/act3.cpp @@ -1,6 +1,7 @@ #include "act3.h" DECOMP_SIZE_ASSERT(Act3, 0x4274) +DECOMP_SIZE_ASSERT(Act3State, 0x0c) // STUB: LEGO1 0x10072270 Act3::Act3() diff --git a/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp b/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp index 219fcf79..3b8381da 100644 --- a/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp +++ b/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp @@ -1,7 +1,7 @@ #include "elevatorbottom.h" -#include "act1state.h" #include "elevbott_actions.h" +#include "isle.h" #include "jukebox.h" #include "jukebox_actions.h" #include "legocontrolmanager.h" diff --git a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp index 5f48e5f0..82ef467b 100644 --- a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp +++ b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp @@ -1,7 +1,6 @@ #include "gasstation.h" #include "garage_actions.h" -#include "gasstationstate.h" #include "islepathactor.h" #include "jukebox.h" #include "jukebox_actions.h" @@ -21,6 +20,7 @@ #include "scripts.h" DECOMP_SIZE_ASSERT(GasStation, 0x128) +DECOMP_SIZE_ASSERT(GasStationState, 0x24) // GLOBAL: LEGO1 0x100f0160 undefined4 g_unk0x100f0160 = 3; @@ -419,3 +419,37 @@ MxBool GasStation::Escape() m_destLocation = LegoGameState::Area::e_infomain; return TRUE; } + +// FUNCTION: LEGO1 0x10005eb0 +GasStationState::GasStationState() +{ + m_unk0x18 = 0; + m_unk0x1a = 0; + m_unk0x1c = 0; + m_unk0x1e = 0; + m_unk0x20 = 0; + + undefined4* unk0x08 = m_unk0x08; + unk0x08[0] = -1; + unk0x08[1] = -1; + unk0x08[2] = -1; +} + +// STUB: LEGO1 0x10006300 +MxResult GasStationState::Serialize(LegoFile* p_legoFile) +{ + // TODO + return LegoState::Serialize(p_legoFile); +} + +// STUB: LEGO1 0x10006430 +void GasStationState::FUN_10006430(undefined4) +{ + // TODO +} + +// STUB: LEGO1 0x10006490 +void GasStationState::FUN_10006490() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/worlds/hospital.cpp b/LEGO1/lego/legoomni/src/worlds/hospital.cpp index d62baa21..c715bcf6 100644 --- a/LEGO1/lego/legoomni/src/worlds/hospital.cpp +++ b/LEGO1/lego/legoomni/src/worlds/hospital.cpp @@ -1,8 +1,7 @@ #include "hospital.h" -#include "act1state.h" #include "hospital_actions.h" -#include "hospitalstate.h" +#include "isle.h" #include "islepathactor.h" #include "jukebox.h" #include "jukebox_actions.h" @@ -22,6 +21,7 @@ #include "scripts.h" DECOMP_SIZE_ASSERT(Hospital, 0x12c) +DECOMP_SIZE_ASSERT(HospitalState, 0x18) // GLOBAL: LEGO1 0x100f7918 undefined4 g_unk0x100f7918 = 3; @@ -671,3 +671,49 @@ MxBool Hospital::Escape() return TRUE; } + +// FUNCTION: LEGO1 0x10076370 +HospitalState::HospitalState() +{ + m_unk0x0c = 0; + m_unk0x0e = 0; + m_unk0x10 = 0; + m_unk0x12 = 0; + m_unk0x14 = 0; + m_unk0x16 = 0; +} + +// FUNCTION: LEGO1 0x10076530 +MxResult HospitalState::Serialize(LegoFile* p_legoFile) +{ + LegoState::Serialize(p_legoFile); + + if (p_legoFile->IsWriteMode()) { + // A write variable needs to be used here, otherwise + // the compiler aggresively optimizes the function + MxS16 write; + + write = m_unk0x0c; + p_legoFile->Write(&write, sizeof(m_unk0x0c)); + write = m_unk0x0e; + p_legoFile->Write(&write, sizeof(m_unk0x0e)); + write = m_unk0x10; + p_legoFile->Write(&write, sizeof(m_unk0x10)); + write = m_unk0x12; + p_legoFile->Write(&write, sizeof(m_unk0x12)); + write = m_unk0x14; + p_legoFile->Write(&write, sizeof(m_unk0x14)); + write = m_unk0x16; + p_legoFile->Write(&write, sizeof(m_unk0x16)); + } + else if (p_legoFile->IsReadMode()) { + p_legoFile->Read(&m_unk0x0c, sizeof(m_unk0x0c)); + p_legoFile->Read(&m_unk0x0e, sizeof(m_unk0x0e)); + p_legoFile->Read(&m_unk0x10, sizeof(m_unk0x10)); + p_legoFile->Read(&m_unk0x12, sizeof(m_unk0x12)); + p_legoFile->Read(&m_unk0x14, sizeof(m_unk0x14)); + p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16)); + } + + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/worlds/infocenter.cpp b/LEGO1/lego/legoomni/src/worlds/infocenter.cpp index af05132d..f8a1426d 100644 --- a/LEGO1/lego/legoomni/src/worlds/infocenter.cpp +++ b/LEGO1/lego/legoomni/src/worlds/infocenter.cpp @@ -1,13 +1,12 @@ #include "infocenter.h" -#include "act3state.h" +#include "act3.h" #include "credits_actions.h" -#include "helicopterstate.h" -#include "infocenterstate.h" +#include "helicopter.h" #include "infomain_actions.h" #include "jukebox.h" #include "jukebox_actions.h" -#include "legoact2state.h" +#include "legoact2.h" #include "legoanimationmanager.h" #include "legobuildingmanager.h" #include "legocharactermanager.h" @@ -29,13 +28,13 @@ #include "mxticklemanager.h" #include "mxtransitionmanager.h" #include "mxutilities.h" -#include "radiostate.h" #include "scripts.h" #include "sndanim_actions.h" #include "viewmanager/viewmanager.h" DECOMP_SIZE_ASSERT(Infocenter, 0x1d8) DECOMP_SIZE_ASSERT(InfocenterMapEntry, 0x18) +DECOMP_SIZE_ASSERT(InfocenterState, 0x94) // GLOBAL: LEGO1 0x100f76a0 const char* g_object2x4red = "2x4red"; @@ -43,6 +42,90 @@ const char* g_object2x4red = "2x4red"; // GLOBAL: LEGO1 0x100f76a4 const char* g_object2x4grn = "2x4grn"; +// GLOBAL: LEGO1 0x100f76a8 +InfomainScript::Script g_exitDialogueAct1[14] = { + InfomainScript::c_iic019in_RunAnim, + InfomainScript::c_iic020in_RunAnim, + InfomainScript::c_iic021in_RunAnim, + InfomainScript::c_iic022in_RunAnim, + InfomainScript::c_iic023in_RunAnim, + InfomainScript::c_iic024in_RunAnim, + InfomainScript::c_iic025in_RunAnim, + InfomainScript::c_iic026in_RunAnim, + InfomainScript::c_iic027in_RunAnim, + InfomainScript::c_iica28in_RunAnim, + InfomainScript::c_iicb28in_RunAnim, + InfomainScript::c_iicc28in_RunAnim, + InfomainScript::c_iic029in_RunAnim, + InfomainScript::c_iic032in_RunAnim +}; + +// GLOBAL: LEGO1 0x100f76e0 +InfomainScript::Script g_exitDialogueAct23[6] = { + InfomainScript::c_iic027in_RunAnim, + InfomainScript::c_iic029in_RunAnim, + InfomainScript::c_iic048in_RunAnim, + InfomainScript::c_iic056in_RunAnim, + InfomainScript::c_iicx23in_RunAnim + // Zero-terminated +}; + +// GLOBAL: LEGO1 0x100f76f8 +InfomainScript::Script g_returnDialogueAct1[6] = { + InfomainScript::c_iicx26in_RunAnim, + InfomainScript::c_iic033in_RunAnim, + InfomainScript::c_iic034in_RunAnim, + InfomainScript::c_iic035in_RunAnim, + InfomainScript::c_iic036in_RunAnim + // Zero-terminated +}; + +// GLOBAL: LEGO1 0x100f7710 +InfomainScript::Script g_returnDialogueAct2[4] = { + InfomainScript::c_iic048in_RunAnim, + InfomainScript::c_iic049in_RunAnim, + InfomainScript::c_iic050in_RunAnim, + // Zero-terminated +}; + +// GLOBAL: LEGO1 0x100f7720 +InfomainScript::Script g_returnDialogueAct3[4] = { + InfomainScript::c_iic055in_RunAnim, + InfomainScript::c_iic056in_RunAnim, + InfomainScript::c_iic057in_RunAnim, + InfomainScript::c_iic058in_RunAnim +}; + +// GLOBAL: LEGO1 0x100f7730 +InfomainScript::Script g_leaveDialogueAct1[4] = { + InfomainScript::c_iic039in_PlayWav, + InfomainScript::c_iic040in_PlayWav, + InfomainScript::c_iic041in_PlayWav, + InfomainScript::c_iic042in_PlayWav +}; + +// GLOBAL: LEGO1 0x100f7740 +InfomainScript::Script g_leaveDialogueAct2[4] = { + InfomainScript::c_iic051in_PlayWav, + InfomainScript::c_iic052in_PlayWav, + InfomainScript::c_iic053in_PlayWav, + InfomainScript::c_iic054in_PlayWav +}; + +// GLOBAL: LEGO1 0x100f7750 +InfomainScript::Script g_leaveDialogueAct3[4] = { + InfomainScript::c_iic059in_PlayWav, + InfomainScript::c_iic060in_PlayWav, + InfomainScript::c_iic061in_PlayWav, + // Zero-terminated +}; + +// GLOBAL: LEGO1 0x100f7760 +InfomainScript::Script g_bricksterDialogue[2] = { + InfomainScript::c_sbleh2br_PlayWav, + InfomainScript::c_snshahbr_PlayWav +}; + // FUNCTION: LEGO1 0x1006ea20 Infocenter::Infocenter() { @@ -1462,3 +1545,45 @@ void Infocenter::StopBookAnimation() action.SetUnknown24(-2); DeleteObject(action); } + +// FUNCTION: LEGO1 0x10071600 +InfocenterState::InfocenterState() +{ + m_exitDialogueAct1 = LegoState::Playlist((MxU32*) g_exitDialogueAct1, sizeOfArray(g_exitDialogueAct1)); + m_exitDialogueAct23 = LegoState::Playlist((MxU32*) g_exitDialogueAct23, sizeOfArray(g_exitDialogueAct23) - 1); + + m_returnDialogue[LegoGameState::e_act1] = + LegoState::Playlist((MxU32*) g_returnDialogueAct1, sizeOfArray(g_returnDialogueAct1) - 1); + + m_returnDialogue[LegoGameState::e_act2] = + LegoState::Playlist((MxU32*) g_returnDialogueAct2, sizeOfArray(g_returnDialogueAct2) - 1); + + m_returnDialogue[LegoGameState::e_act3] = + LegoState::Playlist((MxU32*) g_returnDialogueAct3, sizeOfArray(g_returnDialogueAct3)); + + m_leaveDialogue[LegoGameState::e_act1] = + LegoState::Playlist((MxU32*) g_leaveDialogueAct1, sizeOfArray(g_leaveDialogueAct1)); + + m_leaveDialogue[LegoGameState::e_act2] = + LegoState::Playlist((MxU32*) g_leaveDialogueAct2, sizeOfArray(g_leaveDialogueAct2)); + + m_leaveDialogue[LegoGameState::e_act3] = + LegoState::Playlist((MxU32*) g_leaveDialogueAct3, sizeOfArray(g_leaveDialogueAct3) - 1); + + m_bricksterDialogue = LegoState::Playlist((MxU32*) g_bricksterDialogue, sizeOfArray(g_bricksterDialogue)); + + memset(m_letters, 0, sizeof(m_letters)); +} + +// FUNCTION: LEGO1 0x10071920 +InfocenterState::~InfocenterState() +{ + MxS16 i = 0; + do { + if (GetNameLetter(i) != NULL) { + delete GetNameLetter(i)->GetAction(); + delete GetNameLetter(i); + } + i++; + } while (i < GetMaxNameLength()); +} diff --git a/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp b/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp index d433c337..a4afe604 100644 --- a/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp +++ b/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp @@ -1,6 +1,6 @@ #include "infocenterdoor.h" -#include "infocenterstate.h" +#include "infocenter.h" #include "infodoor_actions.h" #include "jukebox.h" #include "jukebox_actions.h" diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index 2d5fee23..f643cc94 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -1,16 +1,15 @@ #include "isle.h" #include "3dmanager/lego3dmanager.h" -#include "act1state.h" #include "ambulance.h" #include "bike.h" -#include "carracestate.h" +#include "carrace.h" #include "dunebuggy.h" #include "helicopter.h" #include "isle_actions.h" #include "islepathactor.h" #include "jetski.h" -#include "jetskiracestate.h" +#include "jetskirace.h" #include "jukebox_actions.h" #include "jukeboxentity.h" #include "legoanimationmanager.h" @@ -18,6 +17,7 @@ #include "legocontrolmanager.h" #include "legoinputmanager.h" #include "legomain.h" +#include "legonamedtexture.h" #include "legoutils.h" #include "legovariables.h" #include "legovideomanager.h" @@ -37,11 +37,20 @@ #include "skateboard.h" #include "towtrack.h" +DECOMP_SIZE_ASSERT(Act1State, 0x26c) +DECOMP_SIZE_ASSERT(Act1State::NamedPlane, 0x4c) DECOMP_SIZE_ASSERT(Isle, 0x140) // GLOBAL: LEGO1 0x100f1198 MxU32 g_isleFlags = 0x7f; +// GLOBAL: ISLE 0x100f37f0 +MxS32 g_unk0x100f37f0[] = { + Act1State::e_unk953, + Act1State::e_unk954, + Act1State::e_unk955, +}; + // FUNCTION: LEGO1 0x10030820 Isle::Isle() { @@ -1271,3 +1280,283 @@ void Isle::FUN_10033350() m_destLocation = LegoGameState::e_infomain; } + +// STUB: LEGO1 0x100334b0 +Act1State::Act1State() : m_unk0x00c(0), m_unk0x00e(0), m_unk0x008(NULL), m_unk0x010(0) +{ + m_unk0x01e = FALSE; + m_unk0x018 = 1; + m_unk0x010 = 0; + m_planeActive = FALSE; + m_unk0x00e = 0; + m_unk0x01f = FALSE; + m_unk0x008 = g_unk0x100f37f0; + m_unk0x014 = -1; + m_unk0x022 = FALSE; + m_unk0x154 = NULL; + m_unk0x158 = NULL; + m_unk0x15c = NULL; + m_unk0x160 = NULL; + m_unk0x1b0 = NULL; + m_unk0x021 = 1; + m_elevFloor = Act1State::c_floor1; + m_unk0x00c = sizeOfArray(g_unk0x100f37f0); + m_unk0x1b4 = NULL; + m_unk0x1b8 = NULL; + m_unk0x208 = NULL; + m_unk0x20c = NULL; + m_unk0x25c = NULL; + m_unk0x260 = NULL; + m_unk0x264 = NULL; + m_unk0x268 = NULL; + SetFlag(); +} + +// FUNCTION: LEGO1 0x10033ac0 +MxResult Act1State::Serialize(LegoFile* p_legoFile) +{ + LegoState::Serialize(p_legoFile); + + m_unk0x024.Serialize(p_legoFile); + m_unk0x070.Serialize(p_legoFile); + m_unk0x0bc.Serialize(p_legoFile); + m_unk0x108.Serialize(p_legoFile); + m_unk0x164.Serialize(p_legoFile); + m_unk0x1bc.Serialize(p_legoFile); + m_unk0x210.Serialize(p_legoFile); + + if (p_legoFile->IsWriteMode()) { + if (m_unk0x108.GetName()->Compare("") != 0) { + if (m_unk0x154) { + WriteNamedTexture(p_legoFile, m_unk0x154); + } + else { + FUN_1003f540(p_legoFile, "chwind.gif"); + } + if (m_unk0x158) { + WriteNamedTexture(p_legoFile, m_unk0x158); + } + else { + FUN_1003f540(p_legoFile, "chjetl.gif"); + } + if (m_unk0x15c) { + WriteNamedTexture(p_legoFile, m_unk0x15c); + } + else { + FUN_1003f540(p_legoFile, "chjetr.gif"); + } + } + if (m_unk0x164.GetName()->Compare("") != 0) { + if (m_unk0x1b0) { + WriteNamedTexture(p_legoFile, m_unk0x1b0); + } + else { + FUN_1003f540(p_legoFile, "jsfrnt.gif"); + } + if (m_unk0x1b4) { + WriteNamedTexture(p_legoFile, m_unk0x1b4); + } + else { + FUN_1003f540(p_legoFile, "jswnsh.gif"); + } + } + if (m_unk0x1bc.GetName()->Compare("") != 0) { + if (m_unk0x208) { + WriteNamedTexture(p_legoFile, m_unk0x208); + } + else { + FUN_1003f540(p_legoFile, "dbfrfn.gif"); + } + } + if (m_unk0x210.GetName()->Compare("") != 0) { + if (m_unk0x25c) { + WriteNamedTexture(p_legoFile, m_unk0x25c); + } + else { + FUN_1003f540(p_legoFile, "rcfrnt.gif"); + } + if (m_unk0x260) { + WriteNamedTexture(p_legoFile, m_unk0x260); + } + else { + FUN_1003f540(p_legoFile, "rcback.gif"); + } + if (m_unk0x264) { + WriteNamedTexture(p_legoFile, m_unk0x264); + } + else { + FUN_1003f540(p_legoFile, "rctail.gif"); + } + } + + p_legoFile->Write(&m_unk0x010, sizeof(m_unk0x010)); + p_legoFile->Write(&m_unk0x022, sizeof(m_unk0x022)); + } + else if (p_legoFile->IsReadMode()) { + if (m_unk0x108.GetName()->Compare("") != 0) { + m_unk0x154 = ReadNamedTexture(p_legoFile); + if (m_unk0x154 == NULL) { + return FAILURE; + } + + m_unk0x158 = ReadNamedTexture(p_legoFile); + if (m_unk0x158 == NULL) { + return FAILURE; + } + + m_unk0x15c = ReadNamedTexture(p_legoFile); + if (m_unk0x15c == NULL) { + return FAILURE; + } + } + if (m_unk0x164.GetName()->Compare("") != 0) { + m_unk0x1b0 = ReadNamedTexture(p_legoFile); + if (m_unk0x1b0 == NULL) { + return FAILURE; + } + + m_unk0x1b4 = ReadNamedTexture(p_legoFile); + if (m_unk0x1b4 == NULL) { + return FAILURE; + } + } + if (m_unk0x1bc.GetName()->Compare("") != 0) { + m_unk0x208 = ReadNamedTexture(p_legoFile); + if (m_unk0x208 == NULL) { + return FAILURE; + } + } + if (m_unk0x210.GetName()->Compare("") != 0) { + m_unk0x25c = ReadNamedTexture(p_legoFile); + if (m_unk0x25c == NULL) { + return FAILURE; + } + + m_unk0x260 = ReadNamedTexture(p_legoFile); + if (m_unk0x260 == NULL) { + return FAILURE; + } + + m_unk0x264 = ReadNamedTexture(p_legoFile); + if (m_unk0x264 == NULL) { + return FAILURE; + } + } + + p_legoFile->Read(&m_unk0x010, sizeof(m_unk0x010)); + p_legoFile->Read(&m_unk0x022, sizeof(m_unk0x022)); + } + + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10034660 +void Act1State::FUN_10034660() +{ + // TODO +} + +// FUNCTION: LEGO1 0x100346a0 +void Act1State::FUN_100346a0() +{ + if (m_unk0x014 != -1) { + InvokeAction(Extra::e_stop, *g_isleScript, m_unk0x014, NULL); + m_unk0x014 = -1; + } +} + +// FUNCTION: LEGO1 0x100346d0 +MxBool Act1State::SetFlag() +{ + m_unk0x024.SetName(""); + m_unk0x070.SetName(""); + m_unk0x0bc.SetName(""); + m_unk0x022 = FALSE; + m_unk0x108.SetName(""); + + if (m_unk0x154) { + delete m_unk0x154; + m_unk0x154 = NULL; + } + + if (m_unk0x158) { + delete m_unk0x158; + m_unk0x158 = NULL; + } + + if (m_unk0x15c) { + delete m_unk0x15c; + m_unk0x15c = NULL; + } + + if (m_unk0x160) { + delete m_unk0x160; + m_unk0x160 = NULL; + } + + m_unk0x164.SetName(""); + + if (m_unk0x1b0) { + delete m_unk0x1b0; + m_unk0x1b0 = NULL; + } + + if (m_unk0x1b4) { + delete m_unk0x1b4; + m_unk0x1b4 = NULL; + } + + if (m_unk0x1b8) { + delete m_unk0x1b8; + m_unk0x1b8 = NULL; + } + + m_unk0x1bc.SetName(""); + + if (m_unk0x208) { + delete m_unk0x208; + m_unk0x208 = NULL; + } + + if (m_unk0x20c) { + delete m_unk0x20c; + m_unk0x20c = NULL; + } + + m_unk0x210.SetName(""); + + if (m_unk0x25c) { + delete m_unk0x25c; + m_unk0x25c = NULL; + } + + if (m_unk0x260) { + delete m_unk0x260; + m_unk0x260 = NULL; + } + + if (m_unk0x264) { + delete m_unk0x264; + m_unk0x264 = NULL; + } + + if (m_unk0x268) { + delete m_unk0x268; + m_unk0x268 = NULL; + } + + return TRUE; +} + +// STUB: LEGO1 0x10034b60 +void Act1State::FUN_10034b60() +{ + // TODO +} + +// STUB: LEGO1 0x10034d00 +void Act1State::FUN_10034d00() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/worlds/jukebox.cpp b/LEGO1/lego/legoomni/src/worlds/jukebox.cpp index 5cb59794..57c30be3 100644 --- a/LEGO1/lego/legoomni/src/worlds/jukebox.cpp +++ b/LEGO1/lego/legoomni/src/worlds/jukebox.cpp @@ -1,8 +1,7 @@ #include "jukebox.h" -#include "act1state.h" +#include "isle.h" #include "jukebox_actions.h" -#include "jukeboxstate.h" #include "jukeboxw_actions.h" #include "legocontrolmanager.h" #include "legogamestate.h" @@ -17,6 +16,7 @@ #include "mxvideopresenter.h" DECOMP_SIZE_ASSERT(JukeBox, 0x104) +DECOMP_SIZE_ASSERT(JukeBoxState, 0x10) // FUNCTION: LEGO1 0x1005d660 JukeBox::JukeBox() diff --git a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp index cc108d10..eb44f2b0 100644 --- a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp +++ b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp @@ -1,6 +1,7 @@ #include "legoact2.h" DECOMP_SIZE_ASSERT(LegoAct2, 0x1154) +DECOMP_SIZE_ASSERT(LegoAct2State, 0x10) // FUNCTION: LEGO1 0x1004fe10 MxBool LegoAct2::VTable0x5c() diff --git a/LEGO1/lego/legoomni/src/worlds/police.cpp b/LEGO1/lego/legoomni/src/worlds/police.cpp index 897fa52c..a20f5163 100644 --- a/LEGO1/lego/legoomni/src/worlds/police.cpp +++ b/LEGO1/lego/legoomni/src/worlds/police.cpp @@ -13,9 +13,10 @@ #include "mxnotificationmanager.h" #include "mxtransitionmanager.h" #include "police_actions.h" -#include "policestate.h" +#include "scripts.h" DECOMP_SIZE_ASSERT(Police, 0x110) +DECOMP_SIZE_ASSERT(PoliceState, 0x10) // FUNCTION: LEGO1 0x1005e130 Police::Police() @@ -196,3 +197,60 @@ MxBool Police::Escape() m_destLocation = LegoGameState::e_infomain; return TRUE; } + +// FUNCTION: LEGO1 0x1005e7c0 +PoliceState::PoliceState() +{ + m_unk0x0c = 0; + m_policeScript = (rand() % 2 == 0) ? PoliceScript::c_nps002la_RunAnim : PoliceScript::c_nps001ni_RunAnim; +} + +// FUNCTION: LEGO1 0x1005e990 +MxResult PoliceState::Serialize(LegoFile* p_legoFile) +{ + LegoState::Serialize(p_legoFile); + + if (p_legoFile->IsReadMode()) { + p_legoFile->Read(&m_policeScript, sizeof(m_policeScript)); + } + else { + PoliceScript::Script policeScript = m_policeScript; + p_legoFile->Write(&policeScript, sizeof(m_policeScript)); + } + + return SUCCESS; +} + +// FUNCTION: LEGO1 0x1005ea40 +void PoliceState::FUN_1005ea40() +{ + PoliceScript::Script policeScript; + + if (m_unk0x0c == 1) { + return; + } + + switch (CurrentActor()->GetActorId()) { + case 4: + policeScript = PoliceScript::c_nps002la_RunAnim; + m_policeScript = policeScript; + break; + case 5: + policeScript = PoliceScript::c_nps001ni_RunAnim; + m_policeScript = policeScript; + break; + default: + policeScript = m_policeScript; + m_policeScript = policeScript == PoliceScript::c_nps002la_RunAnim ? PoliceScript::c_nps001ni_RunAnim + : PoliceScript::c_nps002la_RunAnim; + } + + { + MxDSAction action; + action.SetObjectId(policeScript); + action.SetAtomId(*g_policeScript); + Start(&action); + } + + m_unk0x0c = 1; +} diff --git a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp index 803074d8..414f4faa 100644 --- a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp @@ -1,6 +1,6 @@ #include "registrationbook.h" -#include "infocenterstate.h" +#include "infocenter.h" #include "jukebox_actions.h" #include "legocontrolmanager.h" #include "legogamestate.h" diff --git a/LEGO1/lego/legoomni/src/worlds/score.cpp b/LEGO1/lego/legoomni/src/worlds/score.cpp index a4ff3621..1482e253 100644 --- a/LEGO1/lego/legoomni/src/worlds/score.cpp +++ b/LEGO1/lego/legoomni/src/worlds/score.cpp @@ -1,9 +1,10 @@ #include "score.h" -#include "ambulancemissionstate.h" -#include "carracestate.h" +#include "ambulance.h" +#include "carrace.h" #include "infoscor_actions.h" -#include "jetskiracestate.h" +#include "jetski.h" +#include "jetskirace.h" #include "jukebox.h" #include "jukebox_actions.h" #include "legocontrolmanager.h" @@ -17,13 +18,12 @@ #include "mxnotificationmanager.h" #include "mxnotificationparam.h" #include "mxtransitionmanager.h" -#include "pizzamissionstate.h" -#include "racestate.h" -#include "scorestate.h" +#include "pizza.h" #include "scripts.h" -#include "towtrackmissionstate.h" +#include "towtrack.h" DECOMP_SIZE_ASSERT(Score, 0x104) +DECOMP_SIZE_ASSERT(ScoreState, 0x0c) // FUNCTION: LEGO1 0x10001000 Score::Score()