diff --git a/CMakeLists.txt b/CMakeLists.txt index e2fc1192..4f995f33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -292,10 +292,7 @@ function(add_lego_libraries NAME) LEGO1/lego/legoomni/src/actors/helicopter.cpp LEGO1/lego/legoomni/src/worlds/gasstation.cpp LEGO1/lego/legoomni/src/audio/legocachsound.cpp - LEGO1/lego/legoomni/src/actors/act2actor.cpp LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp - LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp - LEGO1/lego/legoomni/src/actors/buildingentity.cpp LEGO1/lego/legoomni/src/actors/skateboard.cpp LEGO1/lego/legoomni/src/entity/legoentity.cpp LEGO1/lego/legoomni/src/audio/lego3dsound.cpp @@ -303,6 +300,7 @@ function(add_lego_libraries NAME) LEGO1/lego/legoomni/src/race/legoracers.cpp LEGO1/lego/legoomni/src/race/legoraceactor.cpp LEGO1/lego/legoomni/src/common/legostate.cpp + LEGO1/lego/legoomni/src/actors/buildingentity.cpp LEGO1/lego/legoomni/src/actors/buildings.cpp LEGO1/lego/legoomni/src/common/misc.cpp LEGO1/lego/legoomni/src/race/legorace.cpp @@ -310,7 +308,9 @@ function(add_lego_libraries NAME) LEGO1/lego/legoomni/src/race/carrace.cpp LEGO1/lego/legoomni/src/actors/pizzeria.cpp LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp + LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp LEGO1/lego/legoomni/src/actors/act2genactor.cpp + LEGO1/lego/legoomni/src/actors/act2actor.cpp LEGO1/lego/legoomni/src/actors/islepathactor.cpp LEGO1/lego/legoomni/src/paths/legopathstruct.cpp LEGO1/lego/legoomni/src/paths/legoanimactor.cpp diff --git a/LEGO1/lego/legoomni/include/act2actor.h b/LEGO1/lego/legoomni/include/act2actor.h index 68b8f59d..324cf4b3 100644 --- a/LEGO1/lego/legoomni/include/act2actor.h +++ b/LEGO1/lego/legoomni/include/act2actor.h @@ -19,13 +19,23 @@ public: Act2Actor(); - void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24 - void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 - MxS32 VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3) override; // vtable+0x68 - void Animate(float p_time) override; // vtable+0x70 - MxResult HitActor(LegoPathActor*, MxBool) override; // vtable+0x94 - MxResult VTable0x9c() override; // vtable+0x9c - MxS32 VTable0xa0() override; // vtable+0xa0 + void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24 + void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + + // FUNCTION: LEGO1 0x1001a180 + MxS32 VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3) override + { + if (m_unk0x1f) { + return 0; + } + + return LegoAnimActor::VTable0x68(p_v1, p_v2, p_v3); + } // vtable+0x68 + + void Animate(float p_time) override; // vtable+0x70 + MxResult HitActor(LegoPathActor*, MxBool) override; // vtable+0x94 + MxResult VTable0x9c() override; // vtable+0x9c + MxS32 VTable0xa0() override; // vtable+0xa0 void FUN_10018980(); void FUN_10019250(MxFloat p_speed, MxFloat p_param2); diff --git a/LEGO1/lego/legoomni/include/act3.h b/LEGO1/lego/legoomni/include/act3.h index f5170277..174d74a7 100644 --- a/LEGO1/lego/legoomni/include/act3.h +++ b/LEGO1/lego/legoomni/include/act3.h @@ -54,6 +54,9 @@ class Act3State : public LegoState { public: Act3State() { m_unk0x08 = 0; } + // FUNCTION: LEGO1 0x1000e2f0 + MxBool IsSerializable() override { return FALSE; } + // FUNCTION: LEGO1 0x1000e300 // FUNCTION: BETA10 0x10017e10 const char* ClassName() const override // vtable+0x0c @@ -68,9 +71,6 @@ public: 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' diff --git a/LEGO1/lego/legoomni/include/buildings.h b/LEGO1/lego/legoomni/include/buildings.h index 71201a48..165bc87e 100644 --- a/LEGO1/lego/legoomni/include/buildings.h +++ b/LEGO1/lego/legoomni/include/buildings.h @@ -5,80 +5,6 @@ class LegoEventNotificationParam; -// VTABLE: LEGO1 0x100d48a8 -// VTABLE: BETA10 0x101bd818 -// SIZE 0x68 -class RaceStandsEntity : public BuildingEntity { - // FUNCTION: LEGO1 0x1000efa0 - // FUNCTION: BETA10 0x100a9820 - const char* ClassName() const override // vtable+0x0c - { - // at LEGO1 0x100f0300, needs no annotation - return "RaceStandsEntity"; - } - - // FUNCTION: LEGO1 0x1000efb0 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong HandleClick(LegoEventNotificationParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000f9e0 - // RaceStandsEntity::`scalar deleting destructor' -}; - -// VTABLE: LEGO1 0x100d4a18 -// VTABLE: BETA10 0x101bd7b0 -// SIZE 0x68 -class BeachHouseEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ee80 - // FUNCTION: BETA10 0x100a96f0 - const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0314 - return "BeachHouseEntity"; - } - - // FUNCTION: LEGO1 0x1000ee90 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong HandleClick(LegoEventNotificationParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000f970 - // BeachHouseEntity::`scalar deleting destructor' -}; - -// VTABLE: LEGO1 0x100d4ab0 -// VTABLE: BETA10 0x101bd748 -// SIZE 0x68 -class PoliceEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ed60 - // FUNCTION: BETA10 0x100a95c0 - const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0328 - return "PoliceEntity"; - } - - // FUNCTION: LEGO1 0x1000ed70 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, PoliceEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50 - - // SYNTHETIC: LEGO1 0x1000f900 - // PoliceEntity::`scalar deleting destructor' -}; - // VTABLE: LEGO1 0x100d4b90 // VTABLE: BETA10 0x101bd610 // SIZE 0x68 @@ -104,79 +30,6 @@ public: // InfoCenterEntity::`scalar deleting destructor' }; -// VTABLE: LEGO1 0x100d5068 -// VTABLE: BETA10 0x101bd678 -// SIZE 0x68 -class HospitalEntity : public BuildingEntity { -public: - // FUNCTION: LEGO1 0x1000ec40 - // FUNCTION: BETA10 0x100a9360 - const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0338 - return "HospitalEntity"; - } - - // FUNCTION: LEGO1 0x1000ec50 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50 - - // SYNTHETIC: LEGO1 0x1000f820 - // HospitalEntity::`scalar deleting destructor' -}; - -// VTABLE: LEGO1 0x100d50c0 -// VTABLE: BETA10 0x101bd880 -// SIZE 0x68 -class CaveEntity : public BuildingEntity { - // FUNCTION: LEGO1 0x1000f1e0 - // FUNCTION: BETA10 0x100a9950 - const char* ClassName() const override // vtable+0x0c - { - // at LEGO1 0x100f0300, needs no annotation - return "RaceStandsEntity"; - } - - // FUNCTION: LEGO1 0x1000f1f0 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, CaveEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong HandleClick(LegoEventNotificationParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000fa50 - // CaveEntity::`scalar deleting destructor' -}; - -// VTABLE: LEGO1 0x100d5200 -// VTABLE: BETA10 0x101bd8e8 -// SIZE 0x68 -class JailEntity : public BuildingEntity { - // FUNCTION: LEGO1 0x1000f0c0 - // FUNCTION: BETA10 0x100a9a80 - const char* ClassName() const override // vtable+0x0c - { - // at LEGO1 0x100f0300, needs no annotation - return "RaceStandsEntity"; - } - - // FUNCTION: LEGO1 0x1000f0d0 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, JailEntity::ClassName()) || BuildingEntity::IsA(p_name); - } - - MxLong HandleClick(LegoEventNotificationParam& p_param) override; - - // SYNTHETIC: LEGO1 0x1000fac0 - // JailEntity::`scalar deleting destructor' -}; - // VTABLE: LEGO1 0x100d5258 // VTABLE: BETA10 0x101bd6e0 // SIZE 0x68 @@ -202,4 +55,151 @@ public: // GasStationEntity::`scalar deleting destructor' }; +// VTABLE: LEGO1 0x100d5068 +// VTABLE: BETA10 0x101bd678 +// SIZE 0x68 +class HospitalEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ec40 + // FUNCTION: BETA10 0x100a9360 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0338 + return "HospitalEntity"; + } + + // FUNCTION: LEGO1 0x1000ec50 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, HospitalEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50 + + // SYNTHETIC: LEGO1 0x1000f820 + // HospitalEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d4ab0 +// VTABLE: BETA10 0x101bd748 +// SIZE 0x68 +class PoliceEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ed60 + // FUNCTION: BETA10 0x100a95c0 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0328 + return "PoliceEntity"; + } + + // FUNCTION: LEGO1 0x1000ed70 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, PoliceEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong HandleClick(LegoEventNotificationParam& p_param) override; // vtable+0x50 + + // SYNTHETIC: LEGO1 0x1000f900 + // PoliceEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d4a18 +// VTABLE: BETA10 0x101bd7b0 +// SIZE 0x68 +class BeachHouseEntity : public BuildingEntity { +public: + // FUNCTION: LEGO1 0x1000ee80 + // FUNCTION: BETA10 0x100a96f0 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0314 + return "BeachHouseEntity"; + } + + // FUNCTION: LEGO1 0x1000ee90 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, BeachHouseEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong HandleClick(LegoEventNotificationParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000f970 + // BeachHouseEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d48a8 +// VTABLE: BETA10 0x101bd818 +// SIZE 0x68 +class RaceStandsEntity : public BuildingEntity { + // FUNCTION: LEGO1 0x1000efa0 + // FUNCTION: BETA10 0x100a9820 + const char* ClassName() const override // vtable+0x0c + { + // at LEGO1 0x100f0300, needs no annotation + return "RaceStandsEntity"; + } + + // FUNCTION: LEGO1 0x1000efb0 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong HandleClick(LegoEventNotificationParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000f9e0 + // RaceStandsEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d5200 +// VTABLE: BETA10 0x101bd8e8 +// SIZE 0x68 +class JailEntity : public BuildingEntity { + // FUNCTION: LEGO1 0x1000f0c0 + // FUNCTION: BETA10 0x100a9a80 + const char* ClassName() const override // vtable+0x0c + { + // at LEGO1 0x100f0300, needs no annotation + return "RaceStandsEntity"; + } + + // FUNCTION: LEGO1 0x1000f0d0 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, JailEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong HandleClick(LegoEventNotificationParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000fac0 + // JailEntity::`scalar deleting destructor' +}; + +// VTABLE: LEGO1 0x100d50c0 +// VTABLE: BETA10 0x101bd880 +// SIZE 0x68 +class CaveEntity : public BuildingEntity { + // FUNCTION: LEGO1 0x1000f1e0 + // FUNCTION: BETA10 0x100a9950 + const char* ClassName() const override // vtable+0x0c + { + // at LEGO1 0x100f0300, needs no annotation + return "RaceStandsEntity"; + } + + // FUNCTION: LEGO1 0x1000f1f0 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, CaveEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + + MxLong HandleClick(LegoEventNotificationParam& p_param) override; + + // SYNTHETIC: LEGO1 0x1000fa50 + // CaveEntity::`scalar deleting destructor' +}; + #endif // BUILDINGS_H diff --git a/LEGO1/lego/legoomni/include/elevatorbottom.h b/LEGO1/lego/legoomni/include/elevatorbottom.h index 899a830a..ad1fe29f 100644 --- a/LEGO1/lego/legoomni/include/elevatorbottom.h +++ b/LEGO1/lego/legoomni/include/elevatorbottom.h @@ -17,6 +17,9 @@ public: MxLong Notify(MxParam& p_param) override; // vtable+0x04 + // FUNCTION: LEGO1 0x10017f10 + MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c + // FUNCTION: LEGO1 0x10017f20 // FUNCTION: BETA10 0x10028130 const char* ClassName() const override // vtable+0x0c @@ -33,12 +36,8 @@ public: MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 void ReadyWorld() override; // vtable+0x50 - - // FUNCTION: LEGO1 0x10017f10 - MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c - - MxBool Escape() override; // vtable+0x64 - void Enable(MxBool p_enable) override; // vtable+0x68 + MxBool Escape() override; // vtable+0x64 + void Enable(MxBool p_enable) override; // vtable+0x68 // SYNTHETIC: LEGO1 0x10018040 // ElevatorBottom::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/helicopter.h b/LEGO1/lego/legoomni/include/helicopter.h index 6f8193b0..8496faf9 100644 --- a/LEGO1/lego/legoomni/include/helicopter.h +++ b/LEGO1/lego/legoomni/include/helicopter.h @@ -14,6 +14,16 @@ class HelicopterState : public LegoState { public: HelicopterState() : m_unk0x08(0) {} + // FUNCTION: LEGO1 0x1000e0b0 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + // FUNCTION: LEGO1 0x1000e0c0 + MxBool Reset() override + { + m_unk0x08 = 0; + return TRUE; + } // vtable+0x18 + // FUNCTION: LEGO1 0x1000e0d0 // FUNCTION: BETA10 0x100a7cc0 const char* ClassName() const override // vtable+0x0c @@ -28,16 +38,6 @@ public: return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name); } - // FUNCTION: LEGO1 0x1000e0b0 - MxBool IsSerializable() override { return FALSE; } // vtable+0x14 - - // FUNCTION: LEGO1 0x1000e0c0 - MxBool Reset() override - { - m_unk0x08 = 0; - return TRUE; - } // vtable+0x18 - // SYNTHETIC: LEGO1 0x1000e190 // HelicopterState::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/isleactor.h b/LEGO1/lego/legoomni/include/isleactor.h index 56df85f4..15896e79 100644 --- a/LEGO1/lego/legoomni/include/isleactor.h +++ b/LEGO1/lego/legoomni/include/isleactor.h @@ -14,22 +14,7 @@ class MxNotificationParam; // SIZE 0x7c class IsleActor : public LegoActor { public: - MxLong Notify(MxParam& p_param) override; // vtable+0x04 - - // FUNCTION: LEGO1 0x1000e660 - // FUNCTION: BETA10 0x100a8300 - const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f07dc - return "IsleActor"; - } - - // FUNCTION: LEGO1 0x1000e670 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, IsleActor::ClassName()) || LegoActor::IsA(p_name); - } - + MxLong Notify(MxParam& p_param) override; // vtable+0x04 MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 // FUNCTION: LEGO1 0x1000e5f0 @@ -53,6 +38,20 @@ public: // FUNCTION: LEGO1 0x1000e650 virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0x80 + // FUNCTION: LEGO1 0x1000e660 + // FUNCTION: BETA10 0x100a8300 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f07dc + return "IsleActor"; + } + + // FUNCTION: LEGO1 0x1000e670 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, IsleActor::ClassName()) || LegoActor::IsA(p_name); + } + protected: LegoWorld* m_world; // 0x78 }; diff --git a/LEGO1/lego/legoomni/include/jetskirace.h b/LEGO1/lego/legoomni/include/jetskirace.h index e880086f..7542d851 100644 --- a/LEGO1/lego/legoomni/include/jetskirace.h +++ b/LEGO1/lego/legoomni/include/jetskirace.h @@ -3,32 +3,6 @@ #include "legorace.h" -// VTABLE: LEGO1 0x100d4fa8 -// VTABLE: BETA10 0x101bd5d0 -// SIZE 0x2c -class JetskiRaceState : public RaceState { -public: - // FUNCTION: LEGO1 0x1000dc40 - // FUNCTION: BETA10 0x100a8f30 - const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f00ac - // STRING: BETA10 0x101f1d0c - return "JetskiRaceState"; - } - - // FUNCTION: LEGO1 0x1000dc50 - // FUNCTION: BETA10 0x100a8f60 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name); - } - - // SYNTHETIC: LEGO1 0x1000f680 - // SYNTHETIC: BETA10 0x100a9d10 - // JetskiRaceState::`scalar deleting destructor' -}; - // VTABLE: LEGO1 0x100d4fe8 // VTABLE: BETA10 0x101bd268 // SIZE 0x144 @@ -68,6 +42,32 @@ private: static MxS32 g_unk0x100f0c78; }; +// VTABLE: LEGO1 0x100d4fa8 +// VTABLE: BETA10 0x101bd5d0 +// SIZE 0x2c +class JetskiRaceState : public RaceState { +public: + // FUNCTION: LEGO1 0x1000dc40 + // FUNCTION: BETA10 0x100a8f30 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f00ac + // STRING: BETA10 0x101f1d0c + return "JetskiRaceState"; + } + + // FUNCTION: LEGO1 0x1000dc50 + // FUNCTION: BETA10 0x100a8f60 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, JetskiRaceState::ClassName()) || RaceState::IsA(p_name); + } + + // SYNTHETIC: LEGO1 0x1000f680 + // SYNTHETIC: BETA10 0x100a9d10 + // JetskiRaceState::`scalar deleting destructor' +}; + // SYNTHETIC: LEGO1 0x1000f530 // SYNTHETIC: BETA10 0x100a9b70 // JetskiRace::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/jukebox.h b/LEGO1/lego/legoomni/include/jukebox.h index b3512503..8196f454 100644 --- a/LEGO1/lego/legoomni/include/jukebox.h +++ b/LEGO1/lego/legoomni/include/jukebox.h @@ -24,6 +24,9 @@ public: JukeBoxState() : m_music(e_pasquell), m_active(FALSE) {} + // FUNCTION: LEGO1 0x1000f300 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + // FUNCTION: LEGO1 0x1000f310 // FUNCTION: BETA10 0x100389c0 const char* ClassName() const override // vtable+0x0c @@ -38,9 +41,6 @@ public: 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' diff --git a/LEGO1/lego/legoomni/include/legoact2.h b/LEGO1/lego/legoomni/include/legoact2.h index 89da6c41..62c5f04e 100644 --- a/LEGO1/lego/legoomni/include/legoact2.h +++ b/LEGO1/lego/legoomni/include/legoact2.h @@ -22,6 +22,9 @@ public: } ~LegoAct2State() override {} + // FUNCTION: LEGO1 0x1000df70 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + // FUNCTION: LEGO1 0x1000df80 // FUNCTION: BETA10 0x1003c7e0 const char* ClassName() const override // vtable+0x0c @@ -36,9 +39,6 @@ public: 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' diff --git a/LEGO1/lego/legoomni/include/legoanimpresenter.h b/LEGO1/lego/legoomni/include/legoanimpresenter.h index 30da04ff..f31423c5 100644 --- a/LEGO1/lego/legoomni/include/legoanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoanimpresenter.h @@ -7,7 +7,6 @@ class LegoAnim; class LegoWorld; -class LegoAnimActor; class LegoPathBoundary; class MxMatrix; class Vector3; diff --git a/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h b/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h index 6f0e283a..df2f872e 100644 --- a/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h @@ -4,6 +4,8 @@ #include "legoloopinganimpresenter.h" #include "legoroimaplist.h" +class LegoAnimActor; + // VTABLE: LEGO1 0x100d9170 // SIZE 0xd8 class LegoLocomotionAnimPresenter : public LegoLoopingAnimPresenter { diff --git a/LEGO1/lego/legoomni/include/legomodelpresenter.h b/LEGO1/lego/legoomni/include/legomodelpresenter.h index 7f9886a9..21e47afd 100644 --- a/LEGO1/lego/legoomni/include/legomodelpresenter.h +++ b/LEGO1/lego/legoomni/include/legomodelpresenter.h @@ -18,6 +18,9 @@ public: // FUNCTION: LEGO1 0x10067a10 ~LegoModelPresenter() override { Destroy(TRUE); } + // FUNCTION: LEGO1 0x1000cca0 + void Destroy() override { Destroy(FALSE); } // vtable+0x38 + static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig); // FUNCTION: BETA10 0x100a7180 @@ -42,7 +45,6 @@ public: void ReadyTickle() override; // vtable+0x18 void ParseExtra() override; // vtable+0x30 - void Destroy() override; // vtable+0x38 MxResult FUN_1007ff70(MxDSChunk& p_chunk, LegoEntity* p_entity, MxBool p_roiVisible, LegoWorld* p_world); diff --git a/LEGO1/lego/legoomni/include/legopartpresenter.h b/LEGO1/lego/legoomni/include/legopartpresenter.h index 76285f49..c8874c0c 100644 --- a/LEGO1/lego/legoomni/include/legopartpresenter.h +++ b/LEGO1/lego/legoomni/include/legopartpresenter.h @@ -13,6 +13,9 @@ public: // FUNCTION: LEGO1 0x10067300 ~LegoPartPresenter() override { Destroy(TRUE); } + // FUNCTION: LEGO1 0x1000cf60 + void Destroy() override { Destroy(FALSE); } // vtable+0x38 + // FUNCTION: BETA10 0x100a75d0 static const char* HandlerClassName() { @@ -35,7 +38,6 @@ public: void ReadyTickle() override; // vtable+0x18 MxResult AddToManager() override; // vtable+0x34 - void Destroy() override; // vtable+0x38 static void configureLegoPartPresenter(MxS32, MxS32); diff --git a/LEGO1/lego/legoomni/include/legorace.h b/LEGO1/lego/legoomni/include/legorace.h index 43368f99..c508f3ed 100644 --- a/LEGO1/lego/legoomni/include/legorace.h +++ b/LEGO1/lego/legoomni/include/legorace.h @@ -112,6 +112,19 @@ public: return "LegoRace"; } + MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + + virtual MxLong HandleClick(LegoEventNotificationParam&) = 0; // vtable+0x6c + + // FUNCTION: LEGO1 0x10015b70 + virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&) { return 0; } // vtable+0x70 + + // FUNCTION: LEGO1 0x10015b80 + virtual MxLong HandleEndAction(MxEndActionNotificationParam&) { return 0; } // vtable+0x74 + + // FUNCTION: LEGO1 0x10015b90 + MxBool Escape() override { return FALSE; } // vtable+0x64 + // FUNCTION: LEGO1 0x10015ba0 // FUNCTION: BETA10 0x100a8940 const char* ClassName() const override // vtable+0x0c @@ -126,17 +139,6 @@ public: return !strcmp(p_name, LegoRace::ClassName()) || LegoWorld::IsA(p_name); } - MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 - - // FUNCTION: LEGO1 0x1000dae0 - MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c - - MxBool Escape() override; // vtable+0x64 - void Enable(MxBool p_enable) override; // vtable+0x68 - virtual MxLong HandleClick(LegoEventNotificationParam&) = 0; // vtable+0x6c - virtual MxLong HandlePathStruct(LegoPathStructNotificationParam&); // vtable+0x70 - virtual MxLong HandleEndAction(MxEndActionNotificationParam&); // vtable+0x74 - // FUNCTION: LEGO1 0x1000dab0 virtual MxLong HandleType0Notification(MxNotificationParam&) { return 0; } // vtable+0x78 @@ -147,6 +149,11 @@ public: m_maps[p_index] = p_map; } + // FUNCTION: LEGO1 0x1000dae0 + MxBool VTable0x5c() override { return TRUE; } // vtable+0x5c + + void Enable(MxBool p_enable) override; // vtable+0x68 + // SYNTHETIC: LEGO1 0x10015cc0 // LegoRace::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/legoraceactor.h b/LEGO1/lego/legoomni/include/legoraceactor.h index 9262f258..bc3d54dc 100644 --- a/LEGO1/lego/legoomni/include/legoraceactor.h +++ b/LEGO1/lego/legoomni/include/legoraceactor.h @@ -34,9 +34,7 @@ public: MxU32 VTable0x90(float p_time, Matrix4& p_matrix) override; // vtable+0x90 MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94 - // FUNCTION: LEGO1 0x10014aa0 - // FUNCTION: BETA10 0x100ca038 - virtual MxResult FUN_10014aa0() { return SUCCESS; } + virtual MxResult FUN_10014aa0(); // SYNTHETIC: LEGO1 0x10012c10 // LegoRaceActor::`vbase destructor' diff --git a/LEGO1/lego/legoomni/include/legoracers.h b/LEGO1/lego/legoomni/include/legoracers.h index 3cc4df2e..461b3a52 100644 --- a/LEGO1/lego/legoomni/include/legoracers.h +++ b/LEGO1/lego/legoomni/include/legoracers.h @@ -25,81 +25,6 @@ struct SkeletonKickPhase { MxU8 m_userState; // 0x0c }; -// VTABLE: LEGO1 0x100d58a0 LegoRaceActor -// VTABLE: LEGO1 0x100d58a8 LegoAnimActor -// VTABLE: LEGO1 0x100d58b8 LegoPathActor -// VTABLE: LEGO1 0x100d5984 LegoRaceMap -// VTABLE: LEGO1 0x100d5988 LegoCarRaceActor -// VTABLE: BETA10 0x101be6ec LegoRaceActor -// VTABLE: BETA10 0x101be6f0 LegoAnimActor -// VTABLE: BETA10 0x101be708 LegoPathActor -// VTABLE: BETA10 0x101be7f8 LegoRaceMap -// VTABLE: BETA10 0x101be800 LegoCarRaceActor -// SIZE 0x200 -class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap { -public: - LegoRaceCar(); - ~LegoRaceCar() override; - - MxLong Notify(MxParam& p_param) override; // vtable+0x04 - - // FUNCTION: LEGO1 0x100142a0 - // FUNCTION: BETA10 0x100cd500 - const char* ClassName() const override // vtable+0x0c - { - // STRING: LEGO1 0x100f0548 - return "LegoRaceCar"; - } - - // FUNCTION: LEGO1 0x100142c0 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, LegoRaceCar::ClassName()) || LegoCarRaceActor::IsA(p_name); - } - - void ParseAction(char* p_extra) override; // vtable+0x20 - void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 - MxU32 VTable0x6c( - LegoPathBoundary* p_boundary, - Vector3& p_v1, - Vector3& p_v2, - float p_f1, - float p_f2, - Vector3& p_v3 - ) override; // vtable+0x6c - void Animate(float p_time) override; // vtable+0x70 - MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94 - void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) - override; // vtable+0x98 - MxResult VTable0x9c() override; // vtable+0x9c - - virtual void SetMaxLinearVelocity(float p_maxLinearVelocity); - virtual void FUN_10012ff0(float p_param); - virtual MxU32 HandleSkeletonKicks(float p_param1); - - static void FUN_10012de0(); - static void FUN_10012e00(); - static void FUN_10013670(); - - // SYNTHETIC: LEGO1 0x10014240 - // LegoRaceCar::`scalar deleting destructor' - -private: - undefined m_userState; // 0x54 - float m_unk0x58; // 0x58 - Mx3DPointFloat m_unk0x5c; // 0x5c - - // Names verified by BETA10 0x100cb4a9 - LegoAnimActorStruct* m_skelKick1Anim; // 0x70 - LegoAnimActorStruct* m_skelKick2Anim; // 0x74 - - // Name verified by BETA10 0x100cb4f0 - LegoPathBoundary* m_kick1B; // 0x78 - - // Name verified by BETA10 0x100cb537 - LegoPathBoundary* m_kick2B; // 0x7c -}; - // VTABLE: LEGO1 0x100d5a08 LegoCarRaceActor // VTABLE: LEGO1 0x100d5a28 LegoRaceActor // VTABLE: LEGO1 0x100d5a30 LegoAnimActor @@ -134,19 +59,25 @@ public: void ParseAction(char* p_extra) override; // vtable+0x20 void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 - MxU32 VTable0x6c( - LegoPathBoundary* p_boundary, - Vector3& p_v1, - Vector3& p_v2, - float p_f1, - float p_f2, - Vector3& p_v3 - ) override; // vtable+0x6c + + // FUNCTION: LEGO1 0x10014150 + MxU32 VTable0x6c(LegoPathBoundary* p_boundary, Vector3& p_v1, Vector3& p_v2, float p_f1, float p_f2, Vector3& p_v3) + override + { + return LegoJetskiRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3); + } // vtable+0x6c + void Animate(float p_time) override; // vtable+0x70 MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94 - void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) - override; // vtable+0x98 - MxResult VTable0x9c() override; // vtable+0x9c + + // FUNCTION: LEGO1 0x100141d0 + void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) override + { + LegoJetskiRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4); + } // vtable+0x98 + + // FUNCTION: LEGO1 0x10014210 + MxResult VTable0x9c() override { return LegoJetskiRaceActor::VTable0x9c(); } // vtable+0x9c virtual void FUN_100136f0(float p_worldSpeed); @@ -154,6 +85,88 @@ public: // LegoJetski::`scalar deleting destructor' }; +// VTABLE: LEGO1 0x100d58a0 LegoRaceActor +// VTABLE: LEGO1 0x100d58a8 LegoAnimActor +// VTABLE: LEGO1 0x100d58b8 LegoPathActor +// VTABLE: LEGO1 0x100d5984 LegoRaceMap +// VTABLE: LEGO1 0x100d5988 LegoCarRaceActor +// VTABLE: BETA10 0x101be6ec LegoRaceActor +// VTABLE: BETA10 0x101be6f0 LegoAnimActor +// VTABLE: BETA10 0x101be708 LegoPathActor +// VTABLE: BETA10 0x101be7f8 LegoRaceMap +// VTABLE: BETA10 0x101be800 LegoCarRaceActor +// SIZE 0x200 +class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap { +public: + LegoRaceCar(); + ~LegoRaceCar() override; + + MxLong Notify(MxParam& p_param) override; // vtable+0x04 + + // FUNCTION: LEGO1 0x100142a0 + // FUNCTION: BETA10 0x100cd500 + const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0548 + return "LegoRaceCar"; + } + + // FUNCTION: LEGO1 0x100142c0 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, LegoRaceCar::ClassName()) || LegoCarRaceActor::IsA(p_name); + } + + void ParseAction(char* p_extra) override; // vtable+0x20 + void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + + // FUNCTION: LEGO1 0x10014500 + // FUNCTION: BETA10 0x100cd5e0 + MxU32 VTable0x6c(LegoPathBoundary* p_boundary, Vector3& p_v1, Vector3& p_v2, float p_f1, float p_f2, Vector3& p_v3) + override + { + return LegoCarRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3); + } // vtable+0x6c + + void Animate(float p_time) override; // vtable+0x70 + MxResult HitActor(LegoPathActor* p_actor, MxBool p_bool) override; // vtable+0x94 + + // FUNCTION: LEGO1 0x10014560 + // FUNCTION: BETA10 0x100cd660 + void SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) override + { + LegoCarRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4); + } // vtable+0x98 + + MxResult VTable0x9c() override; // vtable+0x9c + + virtual void SetMaxLinearVelocity(float p_maxLinearVelocity); + virtual void FUN_10012ff0(float p_param); + virtual MxU32 HandleSkeletonKicks(float p_param1); + + static void FUN_10012de0(); + static void FUN_10012e00(); + static void FUN_10013670(); + + // SYNTHETIC: LEGO1 0x10014240 + // LegoRaceCar::`scalar deleting destructor' + +private: + undefined m_userState; // 0x54 + float m_unk0x58; // 0x58 + Mx3DPointFloat m_unk0x5c; // 0x5c + + // Names verified by BETA10 0x100cb4a9 + LegoAnimActorStruct* m_skelKick1Anim; // 0x70 + LegoAnimActorStruct* m_skelKick2Anim; // 0x74 + + // Name verified by BETA10 0x100cb4f0 + LegoPathBoundary* m_kick1B; // 0x78 + + // Name verified by BETA10 0x100cb537 + LegoPathBoundary* m_kick2B; // 0x7c +}; + // GLOBAL: LEGO1 0x100d5890 // LegoRaceCar::`vbtable'{for `LegoCarRaceActor'} diff --git a/LEGO1/lego/legoomni/include/score.h b/LEGO1/lego/legoomni/include/score.h index 28a67434..36252f6f 100644 --- a/LEGO1/lego/legoomni/include/score.h +++ b/LEGO1/lego/legoomni/include/score.h @@ -15,6 +15,16 @@ class ScoreState : public LegoState { public: ScoreState() : m_playCubeTutorial(TRUE) {} + // FUNCTION: LEGO1 0x1000de20 + MxBool IsSerializable() override { return FALSE; } // vtable+0x14 + + // FUNCTION: LEGO1 0x1000de30 + MxBool Reset() override + { + m_playCubeTutorial = TRUE; + return TRUE; + } // vtable+0x18 + // FUNCTION: LEGO1 0x1000de40 // FUNCTION: BETA10 0x100a7a70 const char* ClassName() const override // vtable+0x0c @@ -29,16 +39,6 @@ public: return !strcmp(p_name, ScoreState::ClassName()) || LegoState::IsA(p_name); } - // FUNCTION: LEGO1 0x1000de20 - MxBool IsSerializable() override { return FALSE; } // vtable+0x14 - - // FUNCTION: LEGO1 0x1000de30 - MxBool Reset() override - { - m_playCubeTutorial = TRUE; - return TRUE; - } // vtable+0x18 - MxBool GetTutorialFlag() { return m_playCubeTutorial; } void SetTutorialFlag(MxBool p_playCubeTutorial) { m_playCubeTutorial = p_playCubeTutorial; } diff --git a/LEGO1/lego/legoomni/src/actors/act2actor.cpp b/LEGO1/lego/legoomni/src/actors/act2actor.cpp index 52506121..a13abf1c 100644 --- a/LEGO1/lego/legoomni/src/actors/act2actor.cpp +++ b/LEGO1/lego/legoomni/src/actors/act2actor.cpp @@ -869,13 +869,3 @@ LegoEntity* Act2Actor::FUN_10019b90(MxBool* p_param) return result; } - -// FUNCTION: LEGO1 0x1001a180 -MxS32 Act2Actor::VTable0x68(Vector3& p_v1, Vector3& p_v2, Vector3& p_v3) -{ - if (m_unk0x1f) { - return 0; - } - - return LegoAnimActor::VTable0x68(p_v1, p_v2, p_v3); -} diff --git a/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp b/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp index b5c4f521..06bf7746 100644 --- a/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp +++ b/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp @@ -1,5 +1,36 @@ #include "legoobjectfactory.h" +// Headers need to be included in a certain order to match the original binary. +// Some of the following headers were probably not directly included, +// but were included from one of the higher level classes. We should attempt +// to reverse engineer the inclusion "graph" at some point. Until then, to maintain +// correct order in the binary, we include them in the order we want here. +// clang-format off +#include "mxpresenter.h" +#include "legoentity.h" +#include "legopathactor.h" +// The below header inclusions should be sound. +#include "legoloopinganimpresenter.h" +#include "mxcompositemediapresenter.h" +#include "legoactorpresenter.h" +#include "legomodelpresenter.h" +#include "legotexturepresenter.h" +#include "legopartpresenter.h" +#include "legoactioncontrolpresenter.h" +#include "lego3dwavepresenter.h" +#include "jetskirace.h" +#include "carrace.h" +#include "score.h" +#include "legoact2.h" +#include "helicopter.h" +#include "act2policestation.h" +#include "act3.h" +#include "doors.h" +#include "pizzeria.h" +#include "buildings.h" +#include "jukebox.h" +// clang-format on + #include "act2actor.h" #include "act2brick.h" #include "act2genactor.h" diff --git a/LEGO1/lego/legoomni/src/race/legorace.cpp b/LEGO1/lego/legoomni/src/race/legorace.cpp index 355e2914..de895ad5 100644 --- a/LEGO1/lego/legoomni/src/race/legorace.cpp +++ b/LEGO1/lego/legoomni/src/race/legorace.cpp @@ -35,24 +35,6 @@ LegoRace::LegoRace() NotificationManager()->Register(this); } -// FUNCTION: LEGO1 0x10015b70 -MxLong LegoRace::HandlePathStruct(LegoPathStructNotificationParam&) -{ - return 0; -} - -// FUNCTION: LEGO1 0x10015b80 -MxLong LegoRace::HandleEndAction(MxEndActionNotificationParam&) -{ - return 0; -} - -// FUNCTION: LEGO1 0x10015b90 -MxBool LegoRace::Escape() -{ - return FALSE; -} - // FUNCTION: LEGO1 0x10015ce0 // FUNCTION: BETA10 0x100c7a71 MxResult LegoRace::Create(MxDSAction& p_dsAction) diff --git a/LEGO1/lego/legoomni/src/race/legoraceactor.cpp b/LEGO1/lego/legoomni/src/race/legoraceactor.cpp index a8a7fccd..92c99d4f 100644 --- a/LEGO1/lego/legoomni/src/race/legoraceactor.cpp +++ b/LEGO1/lego/legoomni/src/race/legoraceactor.cpp @@ -116,3 +116,10 @@ MxResult LegoRaceActor::HitActor(LegoPathActor* p_actor, MxBool p_bool) return SUCCESS; } + +// FUNCTION: LEGO1 0x10014aa0 +// FUNCTION: BETA10 0x100ca038 +MxResult LegoRaceActor::FUN_10014aa0() +{ + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/race/legoracers.cpp b/LEGO1/lego/legoomni/src/race/legoracers.cpp index 7e8795cd..f16a488c 100644 --- a/LEGO1/lego/legoomni/src/race/legoracers.cpp +++ b/LEGO1/lego/legoomni/src/race/legoracers.cpp @@ -167,11 +167,6 @@ undefined4 g_hitValerieSoundsIndex = 0; // GLOBAL: LEGO1 0x100f0bb4 MxLong g_unk0x100f0bb4 = 0; -// Initialized at LEGO1 0x10012db0 -// GLOBAL: LEGO1 0x10102af0 -// GLOBAL: BETA10 0x102114c0 -Mx3DPointFloat g_unk0x10102af0 = Mx3DPointFloat(0.0f, 2.0f, 0.0f); - // FUNCTION: LEGO1 0x10012950 LegoRaceCar::LegoRaceCar() { @@ -197,6 +192,11 @@ MxLong LegoRaceCar::Notify(MxParam& p_param) return LegoRaceMap::Notify(p_param); } +// Initialized at LEGO1 0x10012db0 +// GLOBAL: LEGO1 0x10102af0 +// GLOBAL: BETA10 0x102114c0 +Mx3DPointFloat g_unk0x10102af0 = Mx3DPointFloat(0.0f, 2.0f, 0.0f); + // FUNCTION: LEGO1 0x10012de0 void LegoRaceCar::FUN_10012de0() { @@ -727,49 +727,3 @@ MxResult LegoJetski::HitActor(LegoPathActor* p_actor, MxBool p_bool) return SUCCESS; } - -// FUNCTION: LEGO1 0x10014150 -MxU32 LegoJetski::VTable0x6c( - LegoPathBoundary* p_boundary, - Vector3& p_v1, - Vector3& p_v2, - float p_f1, - float p_f2, - Vector3& p_v3 -) -{ - return LegoJetskiRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3); -} - -// FUNCTION: LEGO1 0x100141d0 -void LegoJetski::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) -{ - LegoJetskiRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4); -} - -// FUNCTION: LEGO1 0x10014210 -MxResult LegoJetski::VTable0x9c() -{ - return LegoJetskiRaceActor::VTable0x9c(); -} - -// FUNCTION: LEGO1 0x10014500 -// FUNCTION: BETA10 0x100cd5e0 -MxU32 LegoRaceCar::VTable0x6c( - LegoPathBoundary* p_boundary, - Vector3& p_v1, - Vector3& p_v2, - float p_f1, - float p_f2, - Vector3& p_v3 -) -{ - return LegoCarRaceActor::VTable0x6c(p_boundary, p_v1, p_v2, p_f1, p_f2, p_v3); -} - -// FUNCTION: LEGO1 0x10014560 -// FUNCTION: BETA10 0x100cd660 -void LegoRaceCar::SwitchBoundary(LegoPathBoundary*& p_boundary, LegoUnknown100db7f4*& p_edge, float& p_unk0xe4) -{ - LegoCarRaceActor::SwitchBoundary(p_boundary, p_edge, p_unk0xe4); -} diff --git a/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp b/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp index f1525a63..a3040d37 100644 --- a/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp @@ -24,12 +24,6 @@ DECOMP_SIZE_ASSERT(LegoModelPresenter, 0x6c) // GLOBAL: LEGO1 0x100f7ae0 MxS32 g_modelPresenterConfig = 1; -// FUNCTION: LEGO1 0x1000cca0 -void LegoModelPresenter::Destroy() -{ - Destroy(FALSE); -} - // FUNCTION: LEGO1 0x1007f660 void LegoModelPresenter::configureLegoModelPresenter(MxS32 p_modelPresenterConfig) { diff --git a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp index 87e15745..60f33d89 100644 --- a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp @@ -20,12 +20,6 @@ MxS32 g_partPresenterConfig1 = 1; // GLOBAL: LEGO1 0x100f7aa4 MxS32 g_partPresenterConfig2 = 100; -// FUNCTION: LEGO1 0x1000cf60 -void LegoPartPresenter::Destroy() -{ - Destroy(FALSE); -} - // FUNCTION: LEGO1 0x1007c990 void LegoPartPresenter::configureLegoPartPresenter(MxS32 p_partPresenterConfig1, MxS32 p_partPresenterConfig2) { diff --git a/LEGO1/omni/include/mxaudiopresenter.h b/LEGO1/omni/include/mxaudiopresenter.h index ec73e336..67c8cf94 100644 --- a/LEGO1/omni/include/mxaudiopresenter.h +++ b/LEGO1/omni/include/mxaudiopresenter.h @@ -10,6 +10,12 @@ class MxAudioPresenter : public MxMediaPresenter { public: MxAudioPresenter() { m_volume = 100; } + // FUNCTION: LEGO1 0x1000d260 + virtual MxS32 GetVolume() { return m_volume; } // vtable+0x5c + + // FUNCTION: LEGO1 0x1000d270 + virtual void SetVolume(MxS32 p_volume) { m_volume = p_volume; } // vtable+0x60 + // FUNCTION: BETA10 0x1008cba0 static const char* HandlerClassName() { @@ -30,12 +36,6 @@ public: return !strcmp(p_name, MxAudioPresenter::ClassName()) || MxMediaPresenter::IsA(p_name); } - // FUNCTION: LEGO1 0x1000d260 - virtual MxS32 GetVolume() { return m_volume; } // vtable+0x5c - - // FUNCTION: LEGO1 0x1000d270 - virtual void SetVolume(MxS32 p_volume) { m_volume = p_volume; } // vtable+0x60 - protected: MxS32 m_volume; // 0x50 }; diff --git a/LEGO1/omni/include/mxmediapresenter.h b/LEGO1/omni/include/mxmediapresenter.h index 40bb0961..3cfee4bd 100644 --- a/LEGO1/omni/include/mxmediapresenter.h +++ b/LEGO1/omni/include/mxmediapresenter.h @@ -16,6 +16,9 @@ public: // FUNCTION: LEGO1 0x1000c550 ~MxMediaPresenter() override { Destroy(TRUE); } + // FUNCTION: LEGO1 0x1000c5b0 + void Destroy() override { Destroy(FALSE); } // vtable+0x38 + MxResult Tickle() override; // vtable+0x08 // FUNCTION: BETA10 0x10054f50 @@ -42,9 +45,6 @@ public: void RepeatingTickle() override; // vtable+0x24 void DoneTickle() override; // vtable+0x2c - // FUNCTION: LEGO1 0x1000c5b0 - void Destroy() override { Destroy(FALSE); } // vtable+0x38 - MxResult StartAction(MxStreamController*, MxDSAction*) override; // vtable+0x3c void EndAction() override; // vtable+0x40 void Enable(MxBool p_enable) override; // vtable+0x54 diff --git a/LEGO1/omni/include/mxpresenter.h b/LEGO1/omni/include/mxpresenter.h index 3358c832..3af93fd0 100644 --- a/LEGO1/omni/include/mxpresenter.h +++ b/LEGO1/omni/include/mxpresenter.h @@ -28,31 +28,8 @@ public: MxPresenter() { Init(); } - // FUNCTION: LEGO1 0x1000bf00 - ~MxPresenter() override {} // vtable+0x00 - MxResult Tickle() override; // vtable+0x08 - // FUNCTION: BETA10 0x1004d9e0 - static const char* HandlerClassName() - { - // STRING: LEGO1 0x100f0740 - return "MxPresenter"; - } - - // FUNCTION: LEGO1 0x1000bfe0 - // FUNCTION: BETA10 0x1004d9b0 - const char* ClassName() const override // vtable+0x0c - { - return HandlerClassName(); - } - - // FUNCTION: LEGO1 0x1000bff0 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, MxPresenter::ClassName()) || MxCore::IsA(p_name); - } - // FUNCTION: LEGO1 0x1000be30 virtual void VTable0x14() {} // vtable+0x14 @@ -88,6 +65,9 @@ protected: } public: + // FUNCTION: LEGO1 0x1000bf00 + ~MxPresenter() override {} // vtable+0x00 + // FUNCTION: LEGO1 0x1000bf70 virtual MxResult AddToManager() { return SUCCESS; } // vtable+0x34 @@ -115,6 +95,26 @@ public: virtual void Enable(MxBool p_enable); // vtable+0x54 + // FUNCTION: BETA10 0x1004d9e0 + static const char* HandlerClassName() + { + // STRING: LEGO1 0x100f0740 + return "MxPresenter"; + } + + // FUNCTION: LEGO1 0x1000bfe0 + // FUNCTION: BETA10 0x1004d9b0 + const char* ClassName() const override // vtable+0x0c + { + return HandlerClassName(); + } + + // FUNCTION: LEGO1 0x1000bff0 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, MxPresenter::ClassName()) || MxCore::IsA(p_name); + } + MxEntity* CreateEntity(const char* p_defaultName); void SendToCompositePresenter(MxOmni* p_omni); MxBool IsEnabled(); diff --git a/LEGO1/omni/include/mxsoundpresenter.h b/LEGO1/omni/include/mxsoundpresenter.h index e2d80e3d..041b8a17 100644 --- a/LEGO1/omni/include/mxsoundpresenter.h +++ b/LEGO1/omni/include/mxsoundpresenter.h @@ -10,6 +10,9 @@ public: // FUNCTION: LEGO1 0x1000d430 ~MxSoundPresenter() override { Destroy(TRUE); } + // FUNCTION: LEGO1 0x1000d490 + void Destroy() override { Destroy(FALSE); } // vtable+0x38 + // FUNCTION: BETA10 0x1008ca70 static const char* HandlerClassName() { @@ -32,9 +35,6 @@ public: MxResult AddToManager() override; // vtable+0x34 - // FUNCTION: LEGO1 0x1000d490 - void Destroy() override { Destroy(FALSE); } // vtable+0x38 - // SYNTHETIC: LEGO1 0x1000d5c0 // MxSoundPresenter::`scalar deleting destructor' diff --git a/LEGO1/omni/include/mxvideopresenter.h b/LEGO1/omni/include/mxvideopresenter.h index 30d65354..907ddc0e 100644 --- a/LEGO1/omni/include/mxvideopresenter.h +++ b/LEGO1/omni/include/mxvideopresenter.h @@ -14,43 +14,6 @@ class MxVideoPresenter : public MxMediaPresenter { public: MxVideoPresenter() { Init(); } - // FUNCTION: LEGO1 0x1000c740 - ~MxVideoPresenter() override { Destroy(TRUE); } // vtable+0x00 - - // FUNCTION: BETA10 0x100551b0 - static const char* HandlerClassName() - { - // STRING: LEGO1 0x100f0760 - return "MxVideoPresenter"; - } - - // FUNCTION: LEGO1 0x1000c820 - // FUNCTION: BETA10 0x10055180 - const char* ClassName() const override // vtable+0x0c - { - return HandlerClassName(); - } - - // FUNCTION: LEGO1 0x1000c830 - MxBool IsA(const char* p_name) const override // vtable+0x10 - { - return !strcmp(p_name, MxVideoPresenter::ClassName()) || MxMediaPresenter::IsA(p_name); - } - - void ReadyTickle() override; // vtable+0x18 - void StartingTickle() override; // vtable+0x1c - void StreamingTickle() override; // vtable+0x20 - void RepeatingTickle() override; // vtable+0x24 - void FreezingTickle() override; // vtable+0x28 - MxResult AddToManager() override; // vtable+0x34 - - // FUNCTION: LEGO1 0x1000c7a0 - void Destroy() override { Destroy(FALSE); } // vtable+0x38 - - void EndAction() override; // vtable+0x40 - MxResult PutData() override; // vtable+0x4c - MxBool IsHit(MxS32 p_x, MxS32 p_y) override; // vtable+0x50 - // FUNCTION: LEGO1 0x1000c700 // FUNCTION: BETA10 0x10054a80 virtual void LoadHeader(MxStreamChunk* p_chunk) {} // vtable+0x5c @@ -72,6 +35,12 @@ public: virtual undefined VTable0x74(); // vtable+0x74 + // FUNCTION: LEGO1 0x1000c740 + ~MxVideoPresenter() override { Destroy(TRUE); } // vtable+0x00 + + // FUNCTION: LEGO1 0x1000c7a0 + void Destroy() override { Destroy(FALSE); } // vtable+0x38 + // FUNCTION: LEGO1 0x1000c7b0 virtual LPDIRECTDRAWSURFACE VTable0x78() { return m_unk0x58; } // vtable+0x78 @@ -84,6 +53,36 @@ public: // FUNCTION: LEGO1 0x1000c800 virtual MxS32 GetHeight() { return m_alpha ? m_alpha->m_height : m_frameBitmap->GetBmiHeightAbs(); } // vtable+0x84 + // FUNCTION: BETA10 0x100551b0 + static const char* HandlerClassName() + { + // STRING: LEGO1 0x100f0760 + return "MxVideoPresenter"; + } + + // FUNCTION: LEGO1 0x1000c820 + // FUNCTION: BETA10 0x10055180 + const char* ClassName() const override // vtable+0x0c + { + return HandlerClassName(); + } + + // FUNCTION: LEGO1 0x1000c830 + MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, MxVideoPresenter::ClassName()) || MxMediaPresenter::IsA(p_name); + } + + void ReadyTickle() override; // vtable+0x18 + void StartingTickle() override; // vtable+0x1c + void StreamingTickle() override; // vtable+0x20 + void RepeatingTickle() override; // vtable+0x24 + void FreezingTickle() override; // vtable+0x28 + MxResult AddToManager() override; // vtable+0x34 + void EndAction() override; // vtable+0x40 + MxResult PutData() override; // vtable+0x4c + MxBool IsHit(MxS32 p_x, MxS32 p_y) override; // vtable+0x50 + // VTABLE: LEGO1 0x100dc2bc // SIZE 0x0c struct AlphaMask { diff --git a/LEGO1/omni/include/mxwavepresenter.h b/LEGO1/omni/include/mxwavepresenter.h index d0fedb05..cf64b90f 100644 --- a/LEGO1/omni/include/mxwavepresenter.h +++ b/LEGO1/omni/include/mxwavepresenter.h @@ -15,6 +15,15 @@ public: // FUNCTION: LEGO1 0x1000d640 ~MxWavePresenter() override { Destroy(TRUE); } // vtable+0x00 + // FUNCTION: LEGO1 0x1000d6a0 + void Destroy() override { Destroy(FALSE); } // vtable+0x38 + + virtual void Pause(); // vtable+0x64 + virtual void Resume(); // vtable+0x68 + + // FUNCTION: LEGO1 0x1000d6b0 + virtual MxBool IsPaused() { return m_paused; } // vtable+0x6c + // FUNCTION: BETA10 0x1008cd00 static const char* HandlerClassName() { @@ -35,26 +44,17 @@ public: return !strcmp(p_name, MxWavePresenter::ClassName()) || MxSoundPresenter::IsA(p_name); } - void ReadyTickle() override; // vtable+0x18 - void StartingTickle() override; // vtable+0x1c - void StreamingTickle() override; // vtable+0x20 - void DoneTickle() override; // vtable+0x2c - void ParseExtra() override; // vtable+0x30 - MxResult AddToManager() override; // vtable+0x34 - - // FUNCTION: LEGO1 0x1000d6a0 - void Destroy() override { Destroy(FALSE); } // vtable+0x38 - + void ReadyTickle() override; // vtable+0x18 + void StartingTickle() override; // vtable+0x1c + void StreamingTickle() override; // vtable+0x20 + void DoneTickle() override; // vtable+0x2c + void ParseExtra() override; // vtable+0x30 + MxResult AddToManager() override; // vtable+0x34 void EndAction() override; // vtable+0x40 MxResult PutData() override; // vtable+0x4c void Enable(MxBool p_enable) override; // vtable+0x54 void LoopChunk(MxStreamChunk* p_chunk) override; // vtable+0x58 void SetVolume(MxS32 p_volume) override; // vtable+0x60 - virtual void Pause(); // vtable+0x64 - virtual void Resume(); // vtable+0x68 - - // FUNCTION: LEGO1 0x1000d6b0 - virtual MxBool IsPaused() { return m_paused; } // vtable+0x6c // SIZE 0x18 struct WaveFormat {