diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 419033cc..51b0759f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -145,6 +145,12 @@ jobs: run: | python3 tools/verexp/verexp.py legobin/LEGO1.DLL build/LEGO1.DLL + - name: Check Vtables + shell: bash + run: | + python3 tools/vtable/vtable.py legobin/ISLE.EXE build/ISLE.EXE build/ISLE.PDB . + python3 tools/vtable/vtable.py legobin/LEGO1.DLL build/LEGO1.DLL build/LEGO1.PDB . + - name: Upload Artifact uses: actions/upload-artifact@master with: diff --git a/CMakeLists.txt b/CMakeLists.txt index 34b67e0c..04ca97a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,10 +27,12 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/act1/act1state.cpp LEGO1/lego/legoomni/src/act2/act2brick.cpp LEGO1/lego/legoomni/src/act2/act2policestation.cpp + LEGO1/lego/legoomni/src/act2/legoact2.cpp LEGO1/lego/legoomni/src/act2/legoact2state.cpp LEGO1/lego/legoomni/src/act3/act3.cpp LEGO1/lego/legoomni/src/act3/act3shark.cpp LEGO1/lego/legoomni/src/act3/act3state.cpp + LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp LEGO1/lego/legoomni/src/audio/legocachesound.cpp LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp @@ -63,13 +65,17 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp LEGO1/lego/legoomni/src/entity/legoanimactor.cpp LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp + LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp LEGO1/lego/legoomni/src/entity/legoentity.cpp LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp LEGO1/lego/legoomni/src/entity/legojetski.cpp + LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp LEGO1/lego/legoomni/src/entity/legopathactor.cpp LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp LEGO1/lego/legoomni/src/entity/legorace.cpp + LEGO1/lego/legoomni/src/entity/legoraceactor.cpp + LEGO1/lego/legoomni/src/entity/legoracecar.cpp LEGO1/lego/legoomni/src/entity/legoworld.cpp LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp LEGO1/lego/legoomni/src/gasstation/gasstation.cpp @@ -92,6 +98,7 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp LEGO1/lego/legoomni/src/isle/bike.cpp LEGO1/lego/legoomni/src/isle/bumpbouy.cpp + LEGO1/lego/legoomni/src/isle/doors.cpp LEGO1/lego/legoomni/src/isle/historybook.cpp LEGO1/lego/legoomni/src/isle/isleactor.cpp LEGO1/lego/legoomni/src/isle/isle.cpp @@ -128,6 +135,7 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp + LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp LEGO1/lego/legoomni/src/video/legometerpresenter.cpp LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp LEGO1/lego/legoomni/src/video/legopalettepresenter.cpp diff --git a/LEGO1/lego/legoomni/include/act1state.h b/LEGO1/lego/legoomni/include/act1state.h index 82e95f63..4babf08a 100644 --- a/LEGO1/lego/legoomni/include/act1state.h +++ b/LEGO1/lego/legoomni/include/act1state.h @@ -22,6 +22,9 @@ public: return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name); }; + virtual MxBool SetFlag() override; // vtable+0x18 + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + inline void SetUnknown18(MxU32 p_unk0x18) { m_unk0x18 = p_unk0x18; } inline MxU32 GetUnknown18() { return m_unk0x18; } inline void SetUnknown21(MxS16 p_unk0x21) { m_unk0x21 = p_unk0x21; } diff --git a/LEGO1/lego/legoomni/include/act2brick.h b/LEGO1/lego/legoomni/include/act2brick.h index 5eb697ed..e9f771ad 100644 --- a/LEGO1/lego/legoomni/include/act2brick.h +++ b/LEGO1/lego/legoomni/include/act2brick.h @@ -26,6 +26,8 @@ public: return !strcmp(p_name, Act2Brick::ClassName()) || LegoEntity::IsA(p_name); } + virtual MxS32 VTable0x94() override; // vtable+0x94 + // SYNTHETIC: LEGO1 0x1007a450 // Act2Brick::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/act3.h b/LEGO1/lego/legoomni/include/act3.h index 053bde82..b693663f 100644 --- a/LEGO1/lego/legoomni/include/act3.h +++ b/LEGO1/lego/legoomni/include/act3.h @@ -11,6 +11,9 @@ public: virtual ~Act3() override; // vtable+00 + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 + virtual MxResult Tickle() override; // vtable+0x8 + // FUNCTION: LEGO1 0x10072510 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -24,6 +27,14 @@ public: return !strcmp(p_name, Act3::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual void VTable0x60() override; // vtable+0x60 + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + inline void SetUnkown420c(MxEntity* p_entity) { m_unk0x420c = p_entity; } inline void SetUnkown4270(MxU32 p_unk0x4270) { m_unk0x4270 = p_unk0x4270; } diff --git a/LEGO1/lego/legoomni/include/act3shark.h b/LEGO1/lego/legoomni/include/act3shark.h index e6910cdb..5ba5a6f2 100644 --- a/LEGO1/lego/legoomni/include/act3shark.h +++ b/LEGO1/lego/legoomni/include/act3shark.h @@ -7,12 +7,23 @@ class Act3Shark : public LegoAnimActor { public: // FUNCTION: LEGO1 0x100430c0 - inline virtual const char* ClassName() const override + inline virtual const char* ClassName() const override // vtable+0x0c { // STRING: LEGO1 0x100f03a0 return "Act3Shark"; } + // FUNCTION: LEGO1 0x1001a130 + inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, Act3Shark::ClassName()) || LegoAnimActor::IsA(p_name); + } + + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + // SYNTHETIC: LEGO1 0x10043020 // Act3Shark::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/ambulance.h b/LEGO1/lego/legoomni/include/ambulance.h index 7c54561a..88fd57d8 100644 --- a/LEGO1/lego/legoomni/include/ambulance.h +++ b/LEGO1/lego/legoomni/include/ambulance.h @@ -9,6 +9,9 @@ class Ambulance : public IslePathActor { public: Ambulance(); + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + virtual MxResult Tickle() override; // vtable+0x08 + // FUNCTION: LEGO1 0x10035fa0 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -22,6 +25,14 @@ public: return !strcmp(p_name, Ambulance::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 + virtual MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x10036130 // Ambulance::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/ambulancemissionstate.h b/LEGO1/lego/legoomni/include/ambulancemissionstate.h index cdfa608b..ea5cfb3e 100644 --- a/LEGO1/lego/legoomni/include/ambulancemissionstate.h +++ b/LEGO1/lego/legoomni/include/ambulancemissionstate.h @@ -22,6 +22,8 @@ public: return !strcmp(p_name, AmbulanceMissionState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + inline MxU16 GetColor(MxU8 p_id) { switch (p_id) { diff --git a/LEGO1/lego/legoomni/include/bike.h b/LEGO1/lego/legoomni/include/bike.h index 29aa6063..02265604 100644 --- a/LEGO1/lego/legoomni/include/bike.h +++ b/LEGO1/lego/legoomni/include/bike.h @@ -23,6 +23,11 @@ public: return !strcmp(p_name, Bike::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x10076880 // Bike::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/bumpbouy.h b/LEGO1/lego/legoomni/include/bumpbouy.h index a423ca3e..112801b2 100644 --- a/LEGO1/lego/legoomni/include/bumpbouy.h +++ b/LEGO1/lego/legoomni/include/bumpbouy.h @@ -7,6 +7,8 @@ // VTABLE: LEGO1 0x100d6790 class BumpBouy : public LegoAnimActor { public: + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 + // FUNCTION: LEGO1 0x100274e0 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -20,6 +22,11 @@ public: return !strcmp(p_name, BumpBouy::ClassName()) || LegoAnimActor::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + // SYNTHETIC: LEGO1 0x10027490 // BumpBouy::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/carrace.h b/LEGO1/lego/legoomni/include/carrace.h index 3a3b238a..776662db 100644 --- a/LEGO1/lego/legoomni/include/carrace.h +++ b/LEGO1/lego/legoomni/include/carrace.h @@ -23,6 +23,14 @@ public: return !strcmp(p_name, CarRace::ClassName()) || LegoRace::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual undefined4 VTable0x6c(undefined4) override; // vtable+0x6c + virtual undefined4 VTable0x70(undefined4) override; // vtable+0x70 + virtual undefined4 VTable0x74(undefined4) override; // vtable+0x74 + virtual undefined4 VTable0x78(undefined4) override; // vtable+0x78 + // SYNTHETIC: LEGO1 0x10016c70 // CarRace::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/doors.h b/LEGO1/lego/legoomni/include/doors.h index 321fdf61..dc98a866 100644 --- a/LEGO1/lego/legoomni/include/doors.h +++ b/LEGO1/lego/legoomni/include/doors.h @@ -20,6 +20,10 @@ public: return !strcmp(p_name, Doors::ClassName()) || LegoPathActor::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxS32 VTable0x94() override; // vtable+0x94 + // SYNTHETIC: LEGO1 0x1000e580 // Doors::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/dunebuggy.h b/LEGO1/lego/legoomni/include/dunebuggy.h index 918a8b1a..ca671955 100644 --- a/LEGO1/lego/legoomni/include/dunebuggy.h +++ b/LEGO1/lego/legoomni/include/dunebuggy.h @@ -23,6 +23,13 @@ public: return !strcmp(p_name, DuneBuggy::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 + virtual MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x10067dc0 // DuneBuggy::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/gasstation.h b/LEGO1/lego/legoomni/include/gasstation.h index 2c979d72..5f6c64f1 100644 --- a/LEGO1/lego/legoomni/include/gasstation.h +++ b/LEGO1/lego/legoomni/include/gasstation.h @@ -29,6 +29,12 @@ public: return !strcmp(p_name, GasStation::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + // SYNTHETIC: LEGO1 0x100048a0 // GasStation::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/gasstationstate.h b/LEGO1/lego/legoomni/include/gasstationstate.h index 0cdf7bf1..4f77e307 100644 --- a/LEGO1/lego/legoomni/include/gasstationstate.h +++ b/LEGO1/lego/legoomni/include/gasstationstate.h @@ -22,6 +22,8 @@ public: return !strcmp(p_name, GasStationState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + // SYNTHETIC: LEGO1 0x10006290 // GasStationState::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/helicopter.h b/LEGO1/lego/legoomni/include/helicopter.h index ec4faa59..e730fee4 100644 --- a/LEGO1/lego/legoomni/include/helicopter.h +++ b/LEGO1/lego/legoomni/include/helicopter.h @@ -38,8 +38,8 @@ public: } virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 - void VTable0x70(float p_float) override; // vtable+0x70 - void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 virtual MxU32 VTable0xcc() override; // vtable+0xcc virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 virtual MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8 diff --git a/LEGO1/lego/legoomni/include/helicopterstate.h b/LEGO1/lego/legoomni/include/helicopterstate.h index 41dcf84b..eb104c93 100644 --- a/LEGO1/lego/legoomni/include/helicopterstate.h +++ b/LEGO1/lego/legoomni/include/helicopterstate.h @@ -21,6 +21,9 @@ public: return !strcmp(p_name, HelicopterState::ClassName()) || LegoState::IsA(p_name); } + virtual MxBool VTable0x14() override; // vtable+0x14 + virtual MxBool SetFlag() override; // vtable+0x18 + inline void SetUnknown8(MxU32 p_unk0x8) { m_unk0x8 = p_unk0x8; } inline MxU32 GetUnkown8() { return m_unk0x8; } diff --git a/LEGO1/lego/legoomni/include/historybook.h b/LEGO1/lego/legoomni/include/historybook.h index 101e45a6..172dde98 100644 --- a/LEGO1/lego/legoomni/include/historybook.h +++ b/LEGO1/lego/legoomni/include/historybook.h @@ -25,6 +25,10 @@ public: return !strcmp(p_name, HistoryBook::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x64() override; // vtable+0x64 + // SYNTHETIC: LEGO1 0x100824b0 // HistoryBook::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/hospital.h b/LEGO1/lego/legoomni/include/hospital.h index bbaa3e74..3e88a58a 100644 --- a/LEGO1/lego/legoomni/include/hospital.h +++ b/LEGO1/lego/legoomni/include/hospital.h @@ -12,6 +12,7 @@ public: virtual ~Hospital() override; // vtable+0x0 virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + virtual MxResult Tickle() override; // vtable+0x08 // FUNCTION: LEGO1 0x100746b0 inline virtual const char* ClassName() const override // vtable+0x0c @@ -26,6 +27,12 @@ public: return !strcmp(p_name, Hospital::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + // SYNTHETIC: LEGO1 0x100747d0 // Hospital::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/hospitalstate.h b/LEGO1/lego/legoomni/include/hospitalstate.h index 7fabe10a..af876f89 100644 --- a/LEGO1/lego/legoomni/include/hospitalstate.h +++ b/LEGO1/lego/legoomni/include/hospitalstate.h @@ -23,6 +23,8 @@ public: return !strcmp(p_name, HospitalState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + // SYNTHETIC: LEGO1 0x100764c0 // HospitalState::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/isleactor.h b/LEGO1/lego/legoomni/include/isleactor.h index 1c2ddc5c..f9092363 100644 --- a/LEGO1/lego/legoomni/include/isleactor.h +++ b/LEGO1/lego/legoomni/include/isleactor.h @@ -6,6 +6,8 @@ // VTABLE: LEGO1 0x100d5178 class IsleActor : public LegoActor { public: + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 + // FUNCTION: LEGO1 0x1000e660 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -18,6 +20,8 @@ public: { return !strcmp(p_name, IsleActor::ClassName()) || LegoActor::IsA(p_name); } + + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 }; // SYNTHETIC: LEGO1 0x1000e940 diff --git a/LEGO1/lego/legoomni/include/islepathactor.h b/LEGO1/lego/legoomni/include/islepathactor.h index 96a3dce7..e2944876 100644 --- a/LEGO1/lego/legoomni/include/islepathactor.h +++ b/LEGO1/lego/legoomni/include/islepathactor.h @@ -17,6 +17,8 @@ public: // FUNCTION: LEGO1 0x10002e10 inline virtual ~IslePathActor() override { IslePathActor::Destroy(TRUE); } // vtable+0x0 + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 + // FUNCTION: LEGO1 0x10002ea0 inline virtual const char* ClassName() const override // vtable+0x0c { diff --git a/LEGO1/lego/legoomni/include/jetski.h b/LEGO1/lego/legoomni/include/jetski.h index c0129dbd..c3136d80 100644 --- a/LEGO1/lego/legoomni/include/jetski.h +++ b/LEGO1/lego/legoomni/include/jetski.h @@ -3,6 +3,7 @@ #include "decomp.h" #include "islepathactor.h" +#include "mxtype17notificationparam.h" // VTABLE: LEGO1 0x100d9ec8 // SIZE 0x164 @@ -23,6 +24,12 @@ public: return !strcmp(p_name, Jetski::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd4(MxType17NotificationParam&) override; // vtable+0xd4 + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x1007e5c0 // Jetski::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/jukebox.h b/LEGO1/lego/legoomni/include/jukebox.h index 0bef74fa..7ee46589 100644 --- a/LEGO1/lego/legoomni/include/jukebox.h +++ b/LEGO1/lego/legoomni/include/jukebox.h @@ -10,6 +10,9 @@ class JukeBox : public LegoWorld { public: JukeBox(); + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 + virtual MxResult Tickle() override; // vtable+0x8 + // FUNCTION: LEGO1 0x1005d6f0 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -23,6 +26,12 @@ public: return !strcmp(p_name, JukeBox::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + // SYNTHETIC: LEGO1 0x1005d810 // JukeBox::`scalar deleting destructor' enum JukeBoxScript { diff --git a/LEGO1/lego/legoomni/include/jukeboxentity.h b/LEGO1/lego/legoomni/include/jukeboxentity.h index 81a47ef9..a0121eed 100644 --- a/LEGO1/lego/legoomni/include/jukeboxentity.h +++ b/LEGO1/lego/legoomni/include/jukeboxentity.h @@ -10,6 +10,8 @@ public: JukeBoxEntity(); virtual ~JukeBoxEntity() override; // vtable+0x0 + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 + // FUNCTION: LEGO1 0x10085cc0 inline virtual const char* ClassName() const override // vtable+0x0c { diff --git a/LEGO1/lego/legoomni/include/lego3dwavepresenter.h b/LEGO1/lego/legoomni/include/lego3dwavepresenter.h index c08e777f..bf771d45 100644 --- a/LEGO1/lego/legoomni/include/lego3dwavepresenter.h +++ b/LEGO1/lego/legoomni/include/lego3dwavepresenter.h @@ -20,6 +20,11 @@ public: return !strcmp(p_name, Lego3DWavePresenter::ClassName()) || MxWavePresenter::IsA(p_name); } + virtual void StartingTickle() override; // vtable+0x1c + virtual void StreamingTickle() override; // vtable+0x20 + virtual MxResult AddToManager() override; // vtable+0x34 + virtual void Destroy() override; // vtable+0x38 + // SYNTHETIC: LEGO1 0x1000f4b0 // Lego3DWavePresenter::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoact2.h b/LEGO1/lego/legoomni/include/legoact2.h index 1f0138ce..4918fa76 100644 --- a/LEGO1/lego/legoomni/include/legoact2.h +++ b/LEGO1/lego/legoomni/include/legoact2.h @@ -3,10 +3,21 @@ #include "legocarraceactor.h" #include "legopathactor.h" +#include "legoworld.h" // VTABLE: LEGO1 0x100d82e0 // SIZE 0x1154 class LegoAct2 : public LegoWorld { + + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + virtual MxResult Tickle() override; // vtable+0x08 + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual void VTable0x60() override; // vtable+0x60 + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + // SYNTHETIC: LEGO1 0x1004fe20 // LegoAct2::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoact2state.h b/LEGO1/lego/legoomni/include/legoact2state.h index 2f8a2e79..b2ae4b7e 100644 --- a/LEGO1/lego/legoomni/include/legoact2state.h +++ b/LEGO1/lego/legoomni/include/legoact2state.h @@ -20,6 +20,8 @@ public: return !strcmp(p_name, LegoAct2State::ClassName()) || LegoState::IsA(p_name); } + virtual MxBool VTable0x14() override; // vtable+0x14 + // SYNTHETIC: LEGO1 0x1000e040 // LegoAct2State::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoactor.h b/LEGO1/lego/legoomni/include/legoactor.h index a183a249..76beb249 100644 --- a/LEGO1/lego/legoomni/include/legoactor.h +++ b/LEGO1/lego/legoomni/include/legoactor.h @@ -24,6 +24,9 @@ public: return !strcmp(p_name, LegoActor::ClassName()) || LegoEntity::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) override; // vtable+0x24 + // FUNCTION: LEGO1 0x10002cc0 virtual MxFloat VTable0x50() { return m_unk0x68; } // vtable+0x50 // FUNCTION: LEGO1 0x10002cd0 diff --git a/LEGO1/lego/legoomni/include/legoanimmmpresenter.h b/LEGO1/lego/legoomni/include/legoanimmmpresenter.h index 520f3c09..790ee92c 100644 --- a/LEGO1/lego/legoomni/include/legoanimmmpresenter.h +++ b/LEGO1/lego/legoomni/include/legoanimmmpresenter.h @@ -9,6 +9,8 @@ class LegoAnimMMPresenter : public MxCompositePresenter { public: LegoAnimMMPresenter(); + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + // FUNCTION: LEGO1 0x1004a950 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -22,6 +24,16 @@ public: return !strcmp(p_name, LegoAnimMMPresenter::ClassName()) || MxCompositePresenter::IsA(p_name); } + virtual void ReadyTickle() override; // vtable+0x18 + virtual void StartingTickle() override; // vtable+0x1c + virtual void StreamingTickle() override; // vtable+0x20 + virtual void RepeatingTickle() override; // vtable+0x24 + virtual void DoneTickle() override; // vtable+0x2c + virtual void ParseExtra() override; // vtable+0x30 + virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c + virtual void EndAction() override; // vtable+0x40 + virtual void VTable0x60(MxPresenter* p_presenter) override; // vtable+0x60 + // SYNTHETIC: LEGO1 0x1004aa40 // LegoAnimMMPresenter::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoanimpresenter.h b/LEGO1/lego/legoomni/include/legoanimpresenter.h index 5ff2f0c3..a5aa2df3 100644 --- a/LEGO1/lego/legoomni/include/legoanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoanimpresenter.h @@ -31,7 +31,9 @@ public: virtual void ReadyTickle() override; // vtable+0x18 virtual void StartingTickle() override; // vtable+0x1c virtual void StreamingTickle() override; // vtable+0x20 + virtual void DoneTickle() override; // vtable+0x2c virtual void ParseExtra() override; // vtable+0x30 + virtual MxResult AddToManager() override; // vtable+0x34 virtual void Destroy() override; // vtable+0x38 virtual MxResult StartAction(MxStreamController* p_controller, MxDSAction* p_action) override; // vtable+0x3c virtual void EndAction() override; // vtable+0x40 diff --git a/LEGO1/lego/legoomni/include/legobuildingmanager.h b/LEGO1/lego/legoomni/include/legobuildingmanager.h index 5c0061d3..969657ca 100644 --- a/LEGO1/lego/legoomni/include/legobuildingmanager.h +++ b/LEGO1/lego/legoomni/include/legobuildingmanager.h @@ -10,6 +10,8 @@ public: LegoBuildingManager(); virtual ~LegoBuildingManager() override; + virtual MxResult Tickle() override; // vtable+0x08 + // FUNCTION: LEGO1 0x1002f930 inline virtual const char* ClassName() const override // vtable+0x0c { diff --git a/LEGO1/lego/legoomni/include/legocarbuild.h b/LEGO1/lego/legoomni/include/legocarbuild.h index c3b1b1f6..70db5856 100644 --- a/LEGO1/lego/legoomni/include/legocarbuild.h +++ b/LEGO1/lego/legoomni/include/legocarbuild.h @@ -26,6 +26,12 @@ public: return !strcmp(p_name, LegoCarBuild::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + // SYNTHETIC: LEGO1 0x10022a60 // LegoCarBuild::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h b/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h index 8bd5ba75..fb2d254d 100644 --- a/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h @@ -23,6 +23,12 @@ public: return !strcmp(p_name, LegoCarBuildAnimPresenter::ClassName()) || LegoAnimPresenter::IsA(p_name); } + virtual void ReadyTickle() override; // vtable+0x18 + virtual void StreamingTickle() override; // vtable+0x20 + virtual void RepeatingTickle() override; // vtable+0x24 + virtual void EndAction() override; // vtable+0x40 + virtual void PutFrame() override; // vtable+0x6c + // SYNTHETIC: LEGO1 0x10078660 // LegoCarBuildAnimPresenter::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legocarraceactor.h b/LEGO1/lego/legoomni/include/legocarraceactor.h index d88da3f7..5f2756a3 100644 --- a/LEGO1/lego/legoomni/include/legocarraceactor.h +++ b/LEGO1/lego/legoomni/include/legocarraceactor.h @@ -19,6 +19,14 @@ public: return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoRaceActor::IsA(p_name); } + virtual void VTable0x68() override; // vtable+0x68 + virtual void VTable0x6c() override; // vtable+0x6c + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxS32 VTable0x90() override; // vtable+0x90 + virtual MxS32 VTable0x94() override; // vtable+0x94 + virtual void VTable0x98() override; // vtable+0x98 + virtual void VTable0x9c() override; // vtable+0x9c + // SYNTHETIC: LEGO1 0x10081610 // LegoCarRaceActor::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoeventnotificationparam.h b/LEGO1/lego/legoomni/include/legoeventnotificationparam.h index 8805d9cd..f5ec9205 100644 --- a/LEGO1/lego/legoomni/include/legoeventnotificationparam.h +++ b/LEGO1/lego/legoomni/include/legoeventnotificationparam.h @@ -10,6 +10,8 @@ // SIZE 0x20 class LegoEventNotificationParam : public MxNotificationParam { public: + virtual MxNotificationParam* Clone() override; // vtable+0x4 + inline LegoEventNotificationParam() : MxNotificationParam(c_notificationType0, NULL) {} inline LegoEventNotificationParam( NotificationId p_type, diff --git a/LEGO1/lego/legoomni/include/legoflctexturepresenter.h b/LEGO1/lego/legoomni/include/legoflctexturepresenter.h index f5ea7420..9b136074 100644 --- a/LEGO1/lego/legoomni/include/legoflctexturepresenter.h +++ b/LEGO1/lego/legoomni/include/legoflctexturepresenter.h @@ -17,6 +17,10 @@ public: return "LegoFlcTexturePresenter"; } + virtual void StartingTickle() override; // vtable+0x1c + virtual void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68 + virtual void PutFrame() override; // vtable+0x6c + // SYNTHETIC: LEGO1 0x1005df00 // LegoFlcTexturePresenter::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/legohideanimpresenter.h b/LEGO1/lego/legoomni/include/legohideanimpresenter.h index 59449283..06e8af33 100644 --- a/LEGO1/lego/legoomni/include/legohideanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legohideanimpresenter.h @@ -24,7 +24,12 @@ public: return !strcmp(p_name, ClassName()) || LegoAnimPresenter::IsA(p_name); } - virtual void Destroy() override; // vtable+0x38 + virtual void ReadyTickle() override; // vtable+0x18 + virtual void StartingTickle() override; // vtable+0x18 + virtual MxResult AddToManager() override; // vtable+0x34 + virtual void Destroy() override; // vtable+0x38 + virtual void EndAction() override; // vtable+0x40 + virtual void PutFrame() override; // vtable+0x6c private: void Init(); diff --git a/LEGO1/lego/legoomni/include/legoinputmanager.h b/LEGO1/lego/legoomni/include/legoinputmanager.h index 0f068a90..5198f71e 100644 --- a/LEGO1/lego/legoomni/include/legoinputmanager.h +++ b/LEGO1/lego/legoomni/include/legoinputmanager.h @@ -38,6 +38,9 @@ public: virtual MxResult Tickle() override; // vtable+0x8 + // FUNCTION: LEGO1 0x1005b8c0 + virtual MxResult PutData() override { return SUCCESS; }; // vtable+0x4c + MxResult Create(HWND p_hwnd); void Destroy(); void CreateAndAcquireKeyboard(HWND p_hwnd); diff --git a/LEGO1/lego/legoomni/include/legojetski.h b/LEGO1/lego/legoomni/include/legojetski.h index e4f876a3..ac376ab1 100644 --- a/LEGO1/lego/legoomni/include/legojetski.h +++ b/LEGO1/lego/legoomni/include/legojetski.h @@ -6,6 +6,8 @@ // VTABLE: LEGO1 0x100d5a40 class LegoJetski : public LegoJetskiRaceActor { public: + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + // FUNCTION: LEGO1 0x10013e80 inline const char* ClassName() const override // vtable+0xc { @@ -19,6 +21,14 @@ public: return !strcmp(p_name, LegoJetski::ClassName()) || LegoJetskiRaceActor::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + virtual void VTable0x6c() override; // vtable+0x6c + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxS32 VTable0x94() override; // vtable+0x94 + virtual void VTable0x98() override; // vtable+0x98 + virtual void VTable0x9c() override; // vtable+0x9c + // SYNTHETIC: LEGO1 0x10013e20 // LegoJetski::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legojetskiraceactor.h b/LEGO1/lego/legoomni/include/legojetskiraceactor.h index cd497525..8b3a38c7 100644 --- a/LEGO1/lego/legoomni/include/legojetskiraceactor.h +++ b/LEGO1/lego/legoomni/include/legojetskiraceactor.h @@ -19,6 +19,11 @@ public: return !strcmp(p_name, LegoJetskiRaceActor::ClassName()) || LegoCarRaceActor::IsA(p_name); } + virtual void VTable0x6c() override; // vtable+0x6c + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual void VTable0x98() override; // vtable+0x98 + virtual void VTable0x9c() override; // vtable+0x9c + // SYNTHETIC: LEGO1 0x10081d40 // LegoJetskiRaceActor::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoloadcachesoundpresenter.h b/LEGO1/lego/legoomni/include/legoloadcachesoundpresenter.h index 1c26cdec..dbfd478e 100644 --- a/LEGO1/lego/legoomni/include/legoloadcachesoundpresenter.h +++ b/LEGO1/lego/legoomni/include/legoloadcachesoundpresenter.h @@ -18,6 +18,11 @@ public: return "LegoLoadCacheSoundPresenter"; } + virtual void ReadyTickle() override; // vtable+0x18 + virtual void StreamingTickle() override; // vtable+0x20 + virtual void DoneTickle() override; // vtable+0x2c + virtual MxResult PutData() override; // vtable+0x4c + private: void Init(); void Destroy(MxBool p_fromDestructor); diff --git a/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h b/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h index 09370d0f..d6785fa2 100644 --- a/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legolocomotionanimpresenter.h @@ -21,6 +21,15 @@ public: return !strcmp(p_name, ClassName()) || LegoLoopingAnimPresenter::IsA(p_name); } + virtual void ReadyTickle() override; // vtable+0x18 + virtual void StartingTickle() override; // vtable+0x1c + virtual void StreamingTickle() override; // vtable+0x20 + virtual MxResult AddToManager() override; // vtable+0x34 + virtual void Destroy() override; // vtable+0x38 + virtual void EndAction() override; // vtable+0x40 + virtual void PutFrame() override; // vtable+0x6c + virtual MxResult VTable0x88(MxStreamChunk* p_chunk) override; // vtable+0x88 + // SYNTHETIC: LEGO1 0x1006cfe0 // LegoLocomotionAnimPresenter::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h b/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h index 844d1586..d4f47d7e 100644 --- a/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h @@ -19,6 +19,9 @@ public: { return !strcmp(p_name, ClassName()) || LegoAnimPresenter::IsA(p_name); } + + virtual void StreamingTickle() override; // vtable+0x20 + virtual void PutFrame() override; // vtable+0x6c }; // SYNTHETIC: LEGO1 0x1006d000 diff --git a/LEGO1/lego/legoomni/include/legonavcontroller.h b/LEGO1/lego/legoomni/include/legonavcontroller.h index 2ae35245..dd2a46ad 100644 --- a/LEGO1/lego/legoomni/include/legonavcontroller.h +++ b/LEGO1/lego/legoomni/include/legonavcontroller.h @@ -37,7 +37,8 @@ public: ); LegoNavController(); - virtual ~LegoNavController() override; // vtable+0x0 + virtual ~LegoNavController() override; // vtable+0x0 + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x4 // FUNCTION: LEGO1 0x10054b80 inline const char* ClassName() const override // vtable+0xc diff --git a/LEGO1/lego/legoomni/include/legopartpresenter.h b/LEGO1/lego/legoomni/include/legopartpresenter.h index e847d39b..5a422684 100644 --- a/LEGO1/lego/legoomni/include/legopartpresenter.h +++ b/LEGO1/lego/legoomni/include/legopartpresenter.h @@ -20,6 +20,10 @@ public: return !strcmp(p_name, LegoPartPresenter::ClassName()) || MxMediaPresenter::IsA(p_name); } + virtual void ReadyTickle() override; // vtable+0x18 + virtual MxResult AddToManager() override; // vtable+0x34 + virtual void Destroy() override; // vtable+0x38 + __declspec(dllexport) static void configureLegoPartPresenter(MxS32, MxS32); // SYNTHETIC: LEGO1 0x1000d060 diff --git a/LEGO1/lego/legoomni/include/legopathactor.h b/LEGO1/lego/legoomni/include/legopathactor.h index be2c87e3..2f0ce280 100644 --- a/LEGO1/lego/legoomni/include/legopathactor.h +++ b/LEGO1/lego/legoomni/include/legopathactor.h @@ -25,6 +25,7 @@ public: return !strcmp(p_name, LegoPathActor::ClassName()) || LegoActor::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 virtual void VTable0x68(); // vtable+0x68 virtual void VTable0x6c(); // vtable+0x6c virtual void VTable0x70(float p_float); // vtable+0x70 diff --git a/LEGO1/lego/legoomni/include/legophonemepresenter.h b/LEGO1/lego/legoomni/include/legophonemepresenter.h index c643f261..b5aa3616 100644 --- a/LEGO1/lego/legoomni/include/legophonemepresenter.h +++ b/LEGO1/lego/legoomni/include/legophonemepresenter.h @@ -20,6 +20,11 @@ public: return "LegoPhonemePresenter"; } + virtual void StartingTickle() override; // vtable+0x1c + virtual void EndAction() override; // vtable+0x40 + virtual void LoadFrame(MxStreamChunk* p_chunk) override; // vtable+0x68 + virtual void PutFrame() override; // vtable+0x6c + // SYNTHETIC: LEGO1 0x1004e320 // LegoPhonemePresenter::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/legoraceactor.h b/LEGO1/lego/legoomni/include/legoraceactor.h index 6df40e43..fc6c6a2d 100644 --- a/LEGO1/lego/legoomni/include/legoraceactor.h +++ b/LEGO1/lego/legoomni/include/legoraceactor.h @@ -2,6 +2,7 @@ #define LEGORACEACTOR_H #include "legoanimactor.h" +#include "realtime/matrix.h" // VTABLE: LEGO1 0x100d5b88 class LegoRaceActor : public LegoAnimActor { @@ -19,6 +20,14 @@ public: return !strcmp(p_name, LegoRaceActor::ClassName()) || LegoAnimActor::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + virtual void VTable0x68() override; // vtable+0x68 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + virtual MxS32 VTable0x90() override; // vtable+0x90 + virtual MxS32 VTable0x94() override; // vtable+0x94 + // SYNTHETIC: LEGO1 0x10014ab0 // LegoRaceActor::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legoracecar.h b/LEGO1/lego/legoomni/include/legoracecar.h index 7e200ff6..f080ba46 100644 --- a/LEGO1/lego/legoomni/include/legoracecar.h +++ b/LEGO1/lego/legoomni/include/legoracecar.h @@ -8,6 +8,8 @@ // SIZE 0x200 class LegoRaceCar : public LegoCarRaceActor { public: + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + // FUNCTION: LEGO1 0x10014290 inline const char* ClassName() const override // vtable+0xc { @@ -21,6 +23,14 @@ public: return !strcmp(p_name, LegoCarRaceActor::ClassName()) || LegoCarRaceActor::IsA(p_name); } + virtual void ParseAction(char*) override; // vtable+0x20 + virtual void SetWorldSpeed(MxFloat p_worldSpeed) override; // vtable+0x30 + virtual void VTable0x6c() override; // vtable+0x6c + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxS32 VTable0x94() override; // vtable+0x94 + virtual void VTable0x98() override; // vtable+0x98 + virtual void VTable0x9c() override; // vtable+0x9c + // SYNTHETIC: LEGO1 0x10014230 // LegoRaceCar::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legovehiclebuildstate.h b/LEGO1/lego/legoomni/include/legovehiclebuildstate.h index f441dfad..8deed7a5 100644 --- a/LEGO1/lego/legoomni/include/legovehiclebuildstate.h +++ b/LEGO1/lego/legoomni/include/legovehiclebuildstate.h @@ -23,6 +23,8 @@ public: return !strcmp(p_name, this->m_className.GetData()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + // SYNTHETIC: LEGO1 0x100260a0 // LegoVehicleBuildState::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/legovideomanager.h b/LEGO1/lego/legoomni/include/legovideomanager.h index 67a7805c..2fe7d7a4 100644 --- a/LEGO1/lego/legoomni/include/legovideomanager.h +++ b/LEGO1/lego/legoomni/include/legovideomanager.h @@ -32,7 +32,7 @@ public: virtual MxResult RealizePalette(MxPalette*) override; // vtable+0x30 virtual void UpdateView(MxU32 p_x, MxU32 p_y, MxU32 p_width, MxU32 p_height) override; // vtable+0x34 virtual void VTable0x38(undefined4, undefined4); // vtable+0x38 - // FUNCTION: LGEO1 0x1007ab10 + // FUNCTION: LEGO1 0x1007ab10 virtual LegoUnknown100d9d00* VTable0x3c() { return m_unk0x100d9d00; } // vtable+0x3c void SetSkyColor(float p_red, float p_green, float p_blue); diff --git a/LEGO1/lego/legoomni/include/motocycle.h b/LEGO1/lego/legoomni/include/motocycle.h index b4ccafd3..e7716a33 100644 --- a/LEGO1/lego/legoomni/include/motocycle.h +++ b/LEGO1/lego/legoomni/include/motocycle.h @@ -23,6 +23,13 @@ public: return !strcmp(p_name, Motocycle::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 + virtual MxU32 VTable0xdc(MxType19NotificationParam&) override; // vtable+0xdc + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x100359d0 // Motocycle::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/pizza.h b/LEGO1/lego/legoomni/include/pizza.h index 835a5b2e..78eb4f75 100644 --- a/LEGO1/lego/legoomni/include/pizza.h +++ b/LEGO1/lego/legoomni/include/pizza.h @@ -15,21 +15,23 @@ public: Pizza(); virtual ~Pizza() override; - virtual MxResult Tickle() override; // vtable+08 + virtual MxResult Tickle() override; // vtable+0x8 // FUNCTION: LEGO1 0x10037f90 - inline const char* ClassName() const // vtable+0c + inline const char* ClassName() const // vtable+0xc { // STRING: LEGO1 0x100f038c return "Pizza"; } // FUNCTION: LEGO1 0x10037fa0 - inline MxBool IsA(const char* p_name) const override // vtable+10 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 { return !strcmp(p_name, Pizza::ClassName()) || IsleActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + // SYNTHETIC: LEGO1 0x100380e0 // Pizza::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/pizzamissionstate.h b/LEGO1/lego/legoomni/include/pizzamissionstate.h index 76690a99..e3867728 100644 --- a/LEGO1/lego/legoomni/include/pizzamissionstate.h +++ b/LEGO1/lego/legoomni/include/pizzamissionstate.h @@ -28,6 +28,8 @@ public: return !strcmp(p_name, PizzaMissionState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + inline MxU16 GetColor(MxU8 p_id) { return GetState(p_id)->m_color; } // SYNTHETIC: LEGO1 0x10039350 diff --git a/LEGO1/lego/legoomni/include/pizzeria.h b/LEGO1/lego/legoomni/include/pizzeria.h index 1c73ca58..f75cf0a7 100644 --- a/LEGO1/lego/legoomni/include/pizzeria.h +++ b/LEGO1/lego/legoomni/include/pizzeria.h @@ -20,6 +20,8 @@ public: return !strcmp(p_name, Pizzeria::ClassName()) || IsleActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + // SYNTHETIC: LEGO1 0x1000e8d0 // Pizzeria::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/pizzeriastate.h b/LEGO1/lego/legoomni/include/pizzeriastate.h index 188ee624..402981ff 100644 --- a/LEGO1/lego/legoomni/include/pizzeriastate.h +++ b/LEGO1/lego/legoomni/include/pizzeriastate.h @@ -22,6 +22,8 @@ public: return !strcmp(p_name, PizzeriaState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + // SYNTHETIC: LEGO1 0x10017ce0 // PizzeriaState::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/police.h b/LEGO1/lego/legoomni/include/police.h index 92e19b42..999ae4aa 100644 --- a/LEGO1/lego/legoomni/include/police.h +++ b/LEGO1/lego/legoomni/include/police.h @@ -30,11 +30,14 @@ public: return !strcmp(p_name, Police::ClassName()) || LegoWorld::IsA(p_name); } - // SYNTHETIC: LEGO1 0x1005e300 - // Police::`scalar deleting destructor' - virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 virtual void VTable0x50() override; // vtable+0x50 + virtual MxBool VTable0x5c() override; // vtable+0x5c + virtual MxBool VTable0x64() override; // vtable+0x64 + virtual void VTable0x68(MxBool p_add) override; // vtable+0x68 + + // SYNTHETIC: LEGO1 0x1005e300 + // Police::`scalar deleting destructor' private: Radio m_radio; // 0xf8 diff --git a/LEGO1/lego/legoomni/include/policestate.h b/LEGO1/lego/legoomni/include/policestate.h index 517710ab..976588a3 100644 --- a/LEGO1/lego/legoomni/include/policestate.h +++ b/LEGO1/lego/legoomni/include/policestate.h @@ -23,11 +23,11 @@ public: return !strcmp(p_name, PoliceState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + // SYNTHETIC: LEGO1 0x1005e920 // PoliceState::`scalar deleting destructor' - virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1C - private: undefined4 m_unk0x8; // 0x8 undefined4 m_unk0xc; // 0xc diff --git a/LEGO1/lego/legoomni/include/racecar.h b/LEGO1/lego/legoomni/include/racecar.h index 39005831..ddd4a9ac 100644 --- a/LEGO1/lego/legoomni/include/racecar.h +++ b/LEGO1/lego/legoomni/include/racecar.h @@ -24,6 +24,9 @@ public: return !strcmp(p_name, RaceCar::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + // SYNTHETIC: LEGO1 0x10028400 // RaceCar::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/racestandsentity.h b/LEGO1/lego/legoomni/include/racestandsentity.h index 20b1b4a6..b2ca8ef3 100644 --- a/LEGO1/lego/legoomni/include/racestandsentity.h +++ b/LEGO1/lego/legoomni/include/racestandsentity.h @@ -6,6 +6,19 @@ // VTABLE: LEGO1 0x100d48a8 // SIZE 0x68 class RaceStandsEntity : public BuildingEntity { + // FUNCTION: LEGO1 0x1000efa0 + inline virtual const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f0300 + return "RaceStandsEntity"; + } + + // FUNCTION: LEGO1 0x1000efb0 + inline virtual MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, RaceStandsEntity::ClassName()) || BuildingEntity::IsA(p_name); + } + // SYNTHETIC: LEGO1 0x1000f9e0 // RaceStandsEntity::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/racestate.h b/LEGO1/lego/legoomni/include/racestate.h index 05760e32..bfae3525 100644 --- a/LEGO1/lego/legoomni/include/racestate.h +++ b/LEGO1/lego/legoomni/include/racestate.h @@ -30,6 +30,8 @@ public: return !strcmp(p_name, RaceState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream) override; // vtable+0x1c + inline MxU16 GetColor(MxU8 p_id) { return GetState(p_id)->m_color; } // SYNTHETIC: LEGO1 0x100160d0 diff --git a/LEGO1/lego/legoomni/include/radio.h b/LEGO1/lego/legoomni/include/radio.h index 3d8da44b..3afb44cb 100644 --- a/LEGO1/lego/legoomni/include/radio.h +++ b/LEGO1/lego/legoomni/include/radio.h @@ -10,6 +10,8 @@ public: Radio(); virtual ~Radio() override; + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + // FUNCTION: LEGO1 0x1002c8e0 inline virtual const char* ClassName() const override // vtable+0x0c { diff --git a/LEGO1/lego/legoomni/include/radiostate.h b/LEGO1/lego/legoomni/include/radiostate.h index 1035a659..68dc154a 100644 --- a/LEGO1/lego/legoomni/include/radiostate.h +++ b/LEGO1/lego/legoomni/include/radiostate.h @@ -22,6 +22,8 @@ public: return !strcmp(p_name, RadioState::ClassName()) || LegoState::IsA(p_name); } + virtual MxBool VTable0x14() override; // vtable+0x14 + // SYNTHETIC: LEGO1 0x1002d020 // RadioState::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/skateboard.h b/LEGO1/lego/legoomni/include/skateboard.h index 06adc8cb..f4154b8d 100644 --- a/LEGO1/lego/legoomni/include/skateboard.h +++ b/LEGO1/lego/legoomni/include/skateboard.h @@ -23,6 +23,12 @@ public: return !strcmp(p_name, SkateBoard::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd0() override; // vtable+0xd0 + virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x1000ff60 // SkateBoard::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/towtrack.h b/LEGO1/lego/legoomni/include/towtrack.h index 39c4f630..8fb6b818 100644 --- a/LEGO1/lego/legoomni/include/towtrack.h +++ b/LEGO1/lego/legoomni/include/towtrack.h @@ -23,6 +23,15 @@ public: return !strcmp(p_name, TowTrack::ClassName()) || IslePathActor::IsA(p_name); } + virtual MxLong Notify(MxParam& p_param) override; // vtable+0x04 + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x70(float p_float) override; // vtable+0x70 + virtual MxU32 VTable0xcc() override; // vtable+0xcc + virtual MxU32 VTable0xd4(MxType17NotificationParam& p_param) override; // vtable+0xd4 + virtual MxU32 VTable0xd8(MxType18NotificationParam& p_param) override; // vtable+0xd8 + virtual MxU32 VTable0xdc(MxType19NotificationParam& p_param) override; // vtable+0xdc + virtual void VTable0xe4() override; // vtable+0xe4 + // SYNTHETIC: LEGO1 0x1004c950 // TowTrack::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/src/act1/act1state.cpp b/LEGO1/lego/legoomni/src/act1/act1state.cpp index 17f09277..6a36e3c3 100644 --- a/LEGO1/lego/legoomni/src/act1/act1state.cpp +++ b/LEGO1/lego/legoomni/src/act1/act1state.cpp @@ -13,6 +13,20 @@ Act1State::Act1State() m_unk0x1c = 1; } +// STUB: LEGO1 0x10033ac0 +MxResult Act1State::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x100346d0 +MxBool Act1State::SetFlag() +{ + // TODO + return FALSE; +} + // STUB: LEGO1 0x10034d00 void Act1State::FUN_10034d00() { diff --git a/LEGO1/lego/legoomni/src/act2/act2brick.cpp b/LEGO1/lego/legoomni/src/act2/act2brick.cpp index 77e46622..338d2ae9 100644 --- a/LEGO1/lego/legoomni/src/act2/act2brick.cpp +++ b/LEGO1/lego/legoomni/src/act2/act2brick.cpp @@ -12,6 +12,13 @@ Act2Brick::~Act2Brick() // TODO } +// STUB: LEGO1 0x1007a750 +MxS32 Act2Brick::VTable0x94() +{ + // TODO + return 0; +} + // STUB: LEGO1 0x1007a7f0 MxResult Act2Brick::Tickle() { diff --git a/LEGO1/lego/legoomni/src/act2/legoact2.cpp b/LEGO1/lego/legoomni/src/act2/legoact2.cpp new file mode 100644 index 00000000..c487e9a4 --- /dev/null +++ b/LEGO1/lego/legoomni/src/act2/legoact2.cpp @@ -0,0 +1,54 @@ +#include "legoact2.h" + +// STUB: LEGO1 0x1004fe10 +MxBool LegoAct2::VTable0x5c() +{ + // TODO + return FALSE; +} + +// STUB: LEGO1 0x1004ff20 +MxResult LegoAct2::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10050040 +MxResult LegoAct2::Tickle() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10050380 +MxLong LegoAct2::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10050a80 +void LegoAct2::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x10050cf0 +void LegoAct2::VTable0x68(MxBool p_add) +{ + // TODO +} + +// STUB: LEGO1 0x100519c0 +void LegoAct2::VTable0x60() +{ + // TODO +} + +// STUB: LEGO1 0x100519d0 +MxBool LegoAct2::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/act2/legoact2state.cpp b/LEGO1/lego/legoomni/src/act2/legoact2state.cpp index 1ca6a144..46b09a93 100644 --- a/LEGO1/lego/legoomni/src/act2/legoact2state.cpp +++ b/LEGO1/lego/legoomni/src/act2/legoact2state.cpp @@ -1 +1,8 @@ #include "legoact2state.h" + +// STUB: LEGO1 0x1000df70 +MxBool LegoAct2State::VTable0x14() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/act3/act3.cpp b/LEGO1/lego/legoomni/src/act3/act3.cpp index 149e19a7..e17db3dc 100644 --- a/LEGO1/lego/legoomni/src/act3/act3.cpp +++ b/LEGO1/lego/legoomni/src/act3/act3.cpp @@ -8,8 +8,67 @@ Act3::Act3() // TODO } +// STUB: LEGO1 0x10072500 +MxBool Act3::VTable0x5c() +{ + // TODO + return FALSE; +} + // STUB: LEGO1 0x100726a0 Act3::~Act3() { // TODO } + +// STUB: LEGO1 0x10072c30 +MxResult Act3::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10072d50 +void Act3::Destroy(MxBool p_fromDestructor) +{ + // TODO +} + +// STUB: LEGO1 0x10072de0 +MxLong Act3::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10073270 +void Act3::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x10073300 +MxResult Act3::Tickle() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10073a90 +void Act3::VTable0x68(MxBool p_add) +{ + // TODO +} + +// STUB: LEGO1 0x10073e40 +void Act3::VTable0x60() +{ + // TODO +} + +// STUB: LEGO1 0x10073e50 +MxBool Act3::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/act3/act3shark.cpp b/LEGO1/lego/legoomni/src/act3/act3shark.cpp index 95e5a0e0..f695234d 100644 --- a/LEGO1/lego/legoomni/src/act3/act3shark.cpp +++ b/LEGO1/lego/legoomni/src/act3/act3shark.cpp @@ -1 +1,25 @@ #include "act3shark.h" + +// STUB: LEGO1 0x1001a1c0 +void Act3Shark::VTable0x74(Matrix4& p_transform) +{ + // TODO +} + +// STUB: LEGO1 0x100430e0 +void Act3Shark::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x100430f0 +void Act3Shark::SetWorldSpeed(MxFloat p_worldSpeed) +{ + // TODO +} + +// STUB: LEGO1 0x10043100 +void Act3Shark::VTable0x70(float p_float) +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp b/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp new file mode 100644 index 00000000..580f3405 --- /dev/null +++ b/LEGO1/lego/legoomni/src/audio/lego3dwavepresenter.cpp @@ -0,0 +1,26 @@ +#include "lego3dwavepresenter.h" + +// STUB: LEGO1 0x1004a7c0 +MxResult Lego3DWavePresenter::AddToManager() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1004a7f0 +void Lego3DWavePresenter::Destroy() +{ + // TODO +} + +// STUB: LEGO1 0x1004a810 +void Lego3DWavePresenter::StartingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004a8b0 +void Lego3DWavePresenter::StreamingTickle() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp b/LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp index 41445182..9aeac8ba 100644 --- a/LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp +++ b/LEGO1/lego/legoomni/src/audio/legoloadcachesoundpresenter.cpp @@ -28,3 +28,28 @@ void LegoLoadCacheSoundPresenter::Destroy(MxBool p_fromDestructor) delete this->m_unk0x70; MxWavePresenter::Destroy(p_fromDestructor); } + +// STUB: LEGO1 0x10018510 +void LegoLoadCacheSoundPresenter::ReadyTickle() +{ + // TODO +} + +// STUB: LEGO1 0x100185f0 +void LegoLoadCacheSoundPresenter::StreamingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x100186f0 +void LegoLoadCacheSoundPresenter::DoneTickle() +{ + // TODO +} + +// STUB: LEGO1 0x10018700 +MxResult LegoLoadCacheSoundPresenter::PutData() +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/build/dunebuggy.cpp b/LEGO1/lego/legoomni/src/build/dunebuggy.cpp index a32b612d..857a316c 100644 --- a/LEGO1/lego/legoomni/src/build/dunebuggy.cpp +++ b/LEGO1/lego/legoomni/src/build/dunebuggy.cpp @@ -10,3 +10,43 @@ DuneBuggy::DuneBuggy() this->m_unk0x13c = 25.0; this->m_unk0x164 = 1.0; } + +// STUB: LEGO1 0x10067e30 +MxResult DuneBuggy::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10067ec0 +void DuneBuggy::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10067fa0 +void DuneBuggy::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x10068060 +MxU32 DuneBuggy::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100681b0 +MxU32 DuneBuggy::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10068270 +MxU32 DuneBuggy::VTable0xdc(MxType19NotificationParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp index 70d71a0c..368edfad 100644 --- a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp +++ b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp @@ -1 +1,15 @@ #include "helicopterstate.h" + +// STUB: LEGO1 0x1000e0b0 +MxBool HelicopterState::VTable0x14() +{ + // TODO + return FALSE; +} + +// STUB: LEGO1 0x1000e0c0 +MxBool HelicopterState::SetFlag() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/build/jetski.cpp b/LEGO1/lego/legoomni/src/build/jetski.cpp index 8bdf3fff..4676ea91 100644 --- a/LEGO1/lego/legoomni/src/build/jetski.cpp +++ b/LEGO1/lego/legoomni/src/build/jetski.cpp @@ -9,3 +9,36 @@ Jetski::Jetski() this->m_unk0x150 = 2.0; this->m_unk0x148 = 1; } + +// STUB: LEGO1 0x1007e630 +MxResult Jetski::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1007e680 +void Jetski::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x1007e6f0 +void Jetski::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x1007e750 +MxU32 Jetski::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1007e8e0 +MxU32 Jetski::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp b/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp index 3e6c4d7b..ed890166 100644 --- a/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp +++ b/LEGO1/lego/legoomni/src/build/legobuildingmanager.cpp @@ -32,3 +32,10 @@ void LegoBuildingManager::FUN_1002fa00() { // TODO } + +// STUB: LEGO1 0x10030220 +MxResult LegoBuildingManager::Tickle() +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp index f75e4653..61576ece 100644 --- a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp +++ b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp @@ -6,12 +6,26 @@ LegoCarBuild::LegoCarBuild() // TODO } +// STUB: LEGO1 0x10022930 +MxBool LegoCarBuild::VTable0x5c() +{ + // TODO + return FALSE; +} + // STUB: LEGO1 0x10022a80 LegoCarBuild::~LegoCarBuild() { // TODO } +// STUB: LEGO1 0x10022b70 +MxResult LegoCarBuild::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + // STUB: LEGO1 0x100238b0 MxResult LegoCarBuild::Tickle() { @@ -27,3 +41,22 @@ MxLong LegoCarBuild::Notify(MxParam& p_param) return 0; } + +// STUB: LEGO1 0x100242c0 +void LegoCarBuild::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x100256c0 +void LegoCarBuild::VTable0x68(MxBool p_add) +{ + // TODO +} + +// STUB: LEGO1 0x10025e70 +MxBool LegoCarBuild::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp b/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp index b0dccde2..df9a0de6 100644 --- a/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp +++ b/LEGO1/lego/legoomni/src/build/legovehiclebuildstate.cpp @@ -23,3 +23,10 @@ LegoVehicleBuildState::LegoVehicleBuildState(char* p_classType) this->m_unk0x4e = 0; this->m_placedPartCount = 0; } + +// STUB: LEGO1 0x10026120 +MxResult LegoVehicleBuildState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/build/racecar.cpp b/LEGO1/lego/legoomni/src/build/racecar.cpp index 0fbc97b9..02f3a09d 100644 --- a/LEGO1/lego/legoomni/src/build/racecar.cpp +++ b/LEGO1/lego/legoomni/src/build/racecar.cpp @@ -13,3 +13,17 @@ RaceCar::~RaceCar() { // TODO } + +// STUB: LEGO1 0x10028490 +MxResult RaceCar::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x100284d0 +MxU32 RaceCar::VTable0xcc() +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/entity/legoactor.cpp b/LEGO1/lego/legoomni/src/entity/legoactor.cpp index e9010ef4..5c18b9d3 100644 --- a/LEGO1/lego/legoomni/src/entity/legoactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoactor.cpp @@ -17,3 +17,15 @@ LegoActor::~LegoActor() { // TODO } + +// STUB: LEGO1 0x1002d390 +void LegoActor::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x1002d670 +void LegoActor::SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp new file mode 100644 index 00000000..6e967472 --- /dev/null +++ b/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp @@ -0,0 +1,45 @@ +#include "legocarraceactor.h" + +// STUB: LEGO1 0x10014130 +void LegoCarRaceActor::VTable0x68() +{ + // TODO +} + +// STUB: LEGO1 0x100141a0 +MxS32 LegoCarRaceActor::VTable0x90() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1005d650 +MxS32 LegoCarRaceActor::VTable0x94() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10081830 +void LegoCarRaceActor::VTable0x6c() +{ + // TODO +} + +// STUB: LEGO1 0x10081d10 +void LegoCarRaceActor::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10081d20 +void LegoCarRaceActor::VTable0x98() +{ + // TODO +} + +// STUB: LEGO1 0x10081d30 +void LegoCarRaceActor::VTable0x9c() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/entity/legojetski.cpp b/LEGO1/lego/legoomni/src/entity/legojetski.cpp index d0fffd85..828b4f5b 100644 --- a/LEGO1/lego/legoomni/src/entity/legojetski.cpp +++ b/LEGO1/lego/legoomni/src/entity/legojetski.cpp @@ -1 +1,51 @@ #include "legojetski.h" + +// STUB: LEGO1 0x10013e70 +MxLong LegoJetski::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10014110 +void LegoJetski::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x10014120 +void LegoJetski::SetWorldSpeed(MxFloat p_worldSpeed) +{ + // TODO +} + +// STUB: LEGO1 0x10014140 +void LegoJetski::VTable0x6c() +{ + // TODO +} + +// STUB: LEGO1 0x10014180 +void LegoJetski::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x100141b0 +MxS32 LegoJetski::VTable0x94() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100141c0 +void LegoJetski::VTable0x98() +{ + // TODO +} + +// STUB: LEGO1 0x10014200 +void LegoJetski::VTable0x9c() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp new file mode 100644 index 00000000..e8c7801f --- /dev/null +++ b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp @@ -0,0 +1,25 @@ +#include "legojetskiraceactor.h" + +// STUB: LEGO1 0x10081fc0 +void LegoJetskiRaceActor::VTable0x6c() +{ + // TODO +} + +// STUB: LEGO1 0x100822c0 +void LegoJetskiRaceActor::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x100822d0 +void LegoJetskiRaceActor::VTable0x98() +{ + // TODO +} + +// STUB: LEGO1 0x100822e0 +void LegoJetskiRaceActor::VTable0x9c() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp index a806edd0..6a6a035c 100644 --- a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp @@ -222,3 +222,10 @@ float LegoNavController::CalculateNewVel(float p_targetVel, float p_currentVel, return newVel; } + +// STUB: LEGO1 0x10055a60 +MxLong LegoNavController::Notify(MxParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/entity/legopathactor.cpp b/LEGO1/lego/legoomni/src/entity/legopathactor.cpp index 472f2e4b..b3174f83 100644 --- a/LEGO1/lego/legoomni/src/entity/legopathactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legopathactor.cpp @@ -68,6 +68,12 @@ void LegoPathActor::VTable0x68() // TODO } +// STUB: LEGO1 0x1002f020 +void LegoPathActor::ParseAction(char*) +{ + // TODO +} + // STUB: LEGO1 0x1002f1b0 void LegoPathActor::VTable0x9c() { diff --git a/LEGO1/lego/legoomni/src/entity/legoraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legoraceactor.cpp new file mode 100644 index 00000000..84022005 --- /dev/null +++ b/LEGO1/lego/legoomni/src/entity/legoraceactor.cpp @@ -0,0 +1,45 @@ +#include "legoraceactor.h" + +// STUB: LEGO1 0x10014190 +void LegoRaceActor::VTable0x74(Matrix4& p_transform) +{ + // TODO +} + +// STUB: LEGO1 0x10014ca0 +void LegoRaceActor::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x10014cb0 +void LegoRaceActor::SetWorldSpeed(MxFloat p_worldSpeed) +{ + // TODO +} + +// STUB: LEGO1 0x10014cc0 +void LegoRaceActor::VTable0x68() +{ + // TODO +} + +// STUB: LEGO1 0x10014cd0 +void LegoRaceActor::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10014ce0 +MxS32 LegoRaceActor::VTable0x90() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10014cf0 +MxS32 LegoRaceActor::VTable0x94() +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/entity/legoracecar.cpp b/LEGO1/lego/legoomni/src/entity/legoracecar.cpp new file mode 100644 index 00000000..8728783a --- /dev/null +++ b/LEGO1/lego/legoomni/src/entity/legoracecar.cpp @@ -0,0 +1,51 @@ +#include "legoracecar.h" + +// STUB: LEGO1 0x10014280 +MxLong LegoRaceCar::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100144d0 +void LegoRaceCar::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x100144e0 +void LegoRaceCar::SetWorldSpeed(MxFloat p_worldSpeed) +{ + // TODO +} + +// STUB: LEGO1 0x100144f0 +void LegoRaceCar::VTable0x6c() +{ + // TODO +} + +// STUB: LEGO1 0x10014530 +void LegoRaceCar::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10014540 +MxS32 LegoRaceCar::VTable0x94() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10014550 +void LegoRaceCar::VTable0x98() +{ + // TODO +} + +// STUB: LEGO1 0x10014580 +void LegoRaceCar::VTable0x9c() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp index 7f7aff11..8bedf0cf 100644 --- a/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp +++ b/LEGO1/lego/legoomni/src/gasstation/gasstation.cpp @@ -19,12 +19,26 @@ GasStation::GasStation() NotificationManager()->Register(this); } +// STUB: LEGO1 0x10004770 +MxBool GasStation::VTable0x5c() +{ + // TODO + return FALSE; +} + // STUB: LEGO1 0x100048c0 GasStation::~GasStation() { // TODO } +// STUB: LEGO1 0x10004990 +MxResult GasStation::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + // STUB: LEGO1 0x10004a60 MxLong GasStation::Notify(MxParam& p_param) { @@ -33,6 +47,18 @@ MxLong GasStation::Notify(MxParam& p_param) return 0; } +// STUB: LEGO1 0x10004b30 +void GasStation::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x10005c40 +void GasStation::VTable0x68(MxBool p_add) +{ + // TODO +} + // STUB: LEGO1 0x10005c90 MxResult GasStation::Tickle() { @@ -40,3 +66,10 @@ MxResult GasStation::Tickle() return 0; } + +// STUB: LEGO1 0x10005e70 +MxBool GasStation::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp index b4ec4dfd..5bbcdde6 100644 --- a/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp +++ b/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp @@ -16,3 +16,10 @@ GasStationState::GasStationState() unk0x08[1] = -1; unk0x08[2] = -1; } + +// STUB: LEGO1 0x10006300 +MxResult GasStationState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/hospital/ambulance.cpp b/LEGO1/lego/legoomni/src/hospital/ambulance.cpp index 1d9ca918..a7bd2689 100644 --- a/LEGO1/lego/legoomni/src/hospital/ambulance.cpp +++ b/LEGO1/lego/legoomni/src/hospital/ambulance.cpp @@ -19,3 +19,63 @@ Ambulance::Ambulance() this->m_unk0x13c = 40.0; this->m_unk0x17c = 1.0; } + +// STUB: LEGO1 0x10035f90 +void Ambulance::Destroy(MxBool p_fromDestructor) +{ + // TODO +} + +// STUB: LEGO1 0x100361d0 +MxResult Ambulance::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10036300 +void Ambulance::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10036420 +MxLong Ambulance::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10036860 +MxU32 Ambulance::VTable0xdc(MxType19NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10036ce0 +MxU32 Ambulance::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10036e90 +void Ambulance::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x10036f90 +MxU32 Ambulance::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10037160 +MxResult Ambulance::Tickle() +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp b/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp index 4213a587..601f1ccd 100644 --- a/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp +++ b/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp @@ -18,3 +18,10 @@ AmbulanceMissionState::AmbulanceMissionState() m_color4 = 0; m_color5 = 0; } + +// STUB: LEGO1 0x10037440 +MxResult AmbulanceMissionState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/hospital/hospital.cpp b/LEGO1/lego/legoomni/src/hospital/hospital.cpp index e8de5495..8ede37e2 100644 --- a/LEGO1/lego/legoomni/src/hospital/hospital.cpp +++ b/LEGO1/lego/legoomni/src/hospital/hospital.cpp @@ -23,12 +23,26 @@ Hospital::Hospital() NotificationManager()->Register(this); } +// STUB: LEGO1 0x100746a0 +MxBool Hospital::VTable0x5c() +{ + // TODO + return FALSE; +} + // STUB: LEGO1 0x100747f0 Hospital::~Hospital() { // TODO } +// STUB: LEGO1 0x100748c0 +MxResult Hospital::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + // STUB: LEGO1 0x10074990 MxLong Hospital::Notify(MxParam& p_param) { @@ -36,3 +50,29 @@ MxLong Hospital::Notify(MxParam& p_param) return 0; } + +// STUB: LEGO1 0x10074a60 +void Hospital::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x10076220 +void Hospital::VTable0x68(MxBool p_add) +{ + // TODO +} + +// STUB: LEGO1 0x10076270 +MxResult Hospital::Tickle() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10076330 +MxBool Hospital::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp b/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp index 4f865128..5921cd0c 100644 --- a/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp +++ b/LEGO1/lego/legoomni/src/hospital/hospitalstate.cpp @@ -12,3 +12,10 @@ HospitalState::HospitalState() this->m_unk0x14 = 0; this->m_unk0x16 = 0; } + +// STUB: LEGO1 0x10076530 +MxResult HospitalState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/isle/bike.cpp b/LEGO1/lego/legoomni/src/isle/bike.cpp index 3c27ebc5..1c71b299 100644 --- a/LEGO1/lego/legoomni/src/isle/bike.cpp +++ b/LEGO1/lego/legoomni/src/isle/bike.cpp @@ -9,3 +9,30 @@ Bike::Bike() this->m_unk0x150 = 3.0; this->m_unk0x148 = 1; } + +// STUB: LEGO1 0x100768f0 +MxResult Bike::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10076920 +void Bike::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x100769a0 +MxU32 Bike::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10076aa0 +MxU32 Bike::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/isle/bumpbouy.cpp b/LEGO1/lego/legoomni/src/isle/bumpbouy.cpp index c4c8069d..6ae105ff 100644 --- a/LEGO1/lego/legoomni/src/isle/bumpbouy.cpp +++ b/LEGO1/lego/legoomni/src/isle/bumpbouy.cpp @@ -1 +1,32 @@ #include "bumpbouy.h" + +// STUB: LEGO1 0x1000fd00 +void BumpBouy::ParseAction(char*) +{ + // TODO +} + +// STUB: LEGO1 0x1000fd10 +void BumpBouy::SetWorldSpeed(MxFloat p_worldSpeed) +{ + // TODO +} + +// STUB: LEGO1 0x1000fd20 +void BumpBouy::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x1000fd30 +void BumpBouy::VTable0x74(Matrix4& p_transform) +{ + // TODO +} + +// STUB: LEGO1 0x100274d0 +MxLong BumpBouy::Notify(MxParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/isle/doors.cpp b/LEGO1/lego/legoomni/src/isle/doors.cpp new file mode 100644 index 00000000..aa7e2031 --- /dev/null +++ b/LEGO1/lego/legoomni/src/isle/doors.cpp @@ -0,0 +1,20 @@ +#include "doors.h" + +// STUB: LEGO1 0x10066100 +MxS32 Doors::VTable0x94() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10066250 +void Doors::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x100664e0 +void Doors::ParseAction(char*) +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/isle/historybook.cpp b/LEGO1/lego/legoomni/src/isle/historybook.cpp index d00e8acd..f5a970b3 100644 --- a/LEGO1/lego/legoomni/src/isle/historybook.cpp +++ b/LEGO1/lego/legoomni/src/isle/historybook.cpp @@ -12,6 +12,13 @@ HistoryBook::~HistoryBook() // TODO } +// STUB: LEGO1 0x10082610 +MxResult HistoryBook::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + // STUB: LEGO1 0x10082680 MxLong HistoryBook::Notify(MxParam& p_param) { @@ -19,3 +26,16 @@ MxLong HistoryBook::Notify(MxParam& p_param) return 0; } + +// STUB: LEGO1 0x100826f0 +void HistoryBook::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x10082a10 +MxBool HistoryBook::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/isle/isleactor.cpp b/LEGO1/lego/legoomni/src/isle/isleactor.cpp index a28afc6b..b6ac3556 100644 --- a/LEGO1/lego/legoomni/src/isle/isleactor.cpp +++ b/LEGO1/lego/legoomni/src/isle/isleactor.cpp @@ -2,3 +2,17 @@ // NOTE: This is copied from base class LegoActor. IsleActor may in fact be larger but we don't know yet. DECOMP_SIZE_ASSERT(IsleActor, 0x78) + +// STUB: LEGO1 0x1002c780 +MxResult IsleActor::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1002c7b0 +MxLong IsleActor::Notify(MxParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/isle/islepathactor.cpp b/LEGO1/lego/legoomni/src/isle/islepathactor.cpp index 76ec41bd..b93535f6 100644 --- a/LEGO1/lego/legoomni/src/isle/islepathactor.cpp +++ b/LEGO1/lego/legoomni/src/isle/islepathactor.cpp @@ -24,6 +24,13 @@ void IslePathActor::Destroy(MxBool p_fromDestructor) LegoPathActor::Destroy(FALSE); } +// STUB: LEGO1 0x1001a2c0 +MxLong IslePathActor::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + // STUB: LEGO1 0x1001a350 void IslePathActor::VTable0xe0() { diff --git a/LEGO1/lego/legoomni/src/isle/jukebox.cpp b/LEGO1/lego/legoomni/src/isle/jukebox.cpp index d5ded948..687c0a79 100644 --- a/LEGO1/lego/legoomni/src/isle/jukebox.cpp +++ b/LEGO1/lego/legoomni/src/isle/jukebox.cpp @@ -12,3 +12,50 @@ JukeBox::JukeBox() m_unk0xfc = 0; NotificationManager()->Register(this); } + +// STUB: LEGO1 0x1005d6e0 +MxBool JukeBox::VTable0x5c() +{ + // TODO + return FALSE; +} + +// STUB: LEGO1 0x1005d8d0 +MxResult JukeBox::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1005d980 +MxLong JukeBox::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1005d9f0 +void JukeBox::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x1005dde0 +void JukeBox::VTable0x68(MxBool p_add) +{ + // TODO +} + +// STUB: LEGO1 0x1005de30 +MxResult JukeBox::Tickle() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1005de70 +MxBool JukeBox::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/isle/jukeboxentity.cpp b/LEGO1/lego/legoomni/src/isle/jukeboxentity.cpp index 73071896..026772c0 100644 --- a/LEGO1/lego/legoomni/src/isle/jukeboxentity.cpp +++ b/LEGO1/lego/legoomni/src/isle/jukeboxentity.cpp @@ -11,3 +11,10 @@ JukeBoxEntity::~JukeBoxEntity() { // TODO } + +// STUB: LEGO1 0x10085e40 +MxLong JukeBoxEntity::Notify(MxParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/isle/motocycle.cpp b/LEGO1/lego/legoomni/src/isle/motocycle.cpp index 2628d7ce..c54bd841 100644 --- a/LEGO1/lego/legoomni/src/isle/motocycle.cpp +++ b/LEGO1/lego/legoomni/src/isle/motocycle.cpp @@ -10,3 +10,43 @@ Motocycle::Motocycle() this->m_unk0x148 = 1; this->m_unk0x164 = 1.0; } + +// STUB: LEGO1 0x10035a40 +MxResult Motocycle::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10035ad0 +void Motocycle::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x10035bc0 +void Motocycle::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x10035c50 +MxU32 Motocycle::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10035d70 +MxU32 Motocycle::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10035df0 +MxU32 Motocycle::VTable0xdc(MxType19NotificationParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/isle/radio.cpp b/LEGO1/lego/legoomni/src/isle/radio.cpp index f1befefd..c87ac04e 100644 --- a/LEGO1/lego/legoomni/src/isle/radio.cpp +++ b/LEGO1/lego/legoomni/src/isle/radio.cpp @@ -23,6 +23,13 @@ Radio::~Radio() // TODO } +// STUB: LEGO1 0x1002ca30 +MxLong Radio::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + // FUNCTION: LEGO1 0x1002cde0 void Radio::CreateRadioState() { diff --git a/LEGO1/lego/legoomni/src/isle/radiostate.cpp b/LEGO1/lego/legoomni/src/isle/radiostate.cpp index 012eea68..08aa91fa 100644 --- a/LEGO1/lego/legoomni/src/isle/radiostate.cpp +++ b/LEGO1/lego/legoomni/src/isle/radiostate.cpp @@ -5,3 +5,10 @@ RadioState::RadioState() { // TODO } + +// STUB: LEGO1 0x1002cf50 +MxBool RadioState::VTable0x14() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/isle/skateboard.cpp b/LEGO1/lego/legoomni/src/isle/skateboard.cpp index 96a26bcd..2863ec40 100644 --- a/LEGO1/lego/legoomni/src/isle/skateboard.cpp +++ b/LEGO1/lego/legoomni/src/isle/skateboard.cpp @@ -1,4 +1,4 @@ -#include "skateboard.h" +#include "SkateBoard.h" #include "decomp.h" #include "mxnotificationmanager.h" @@ -16,3 +16,37 @@ SkateBoard::SkateBoard() NotificationManager()->Register(this); } + +// STUB: LEGO1 0x10010000 +MxResult SkateBoard::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10010050 +void SkateBoard::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x100100e0 +MxU32 SkateBoard::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10010230 +MxU32 SkateBoard::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100104f0 +MxU32 SkateBoard::VTable0xd0() +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp b/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp index b6abd2c4..299bbe33 100644 --- a/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp +++ b/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp @@ -3,3 +3,10 @@ #include "decomp.h" DECOMP_SIZE_ASSERT(LegoEventNotificationParam, 0x20); + +// STUB: LEGO1 0x10028690 +MxNotificationParam* LegoEventNotificationParam::Clone() +{ + // TODO + return NULL; +} diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizza.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizza.cpp index 3b0201f6..8b7efe78 100644 --- a/LEGO1/lego/legoomni/src/pizzeria/pizza.cpp +++ b/LEGO1/lego/legoomni/src/pizzeria/pizza.cpp @@ -20,6 +20,13 @@ Pizza::~Pizza() TickleManager()->UnregisterClient(this); } +// STUB: LEGO1 0x10038170 +MxResult Pizza::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + // STUB: LEGO1 0x100388a0 MxResult Pizza::Tickle() { diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp index a7aa59b4..6fb460a1 100644 --- a/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp +++ b/LEGO1/lego/legoomni/src/pizzeria/pizzamissionstate.cpp @@ -3,6 +3,13 @@ DECOMP_SIZE_ASSERT(PizzaMissionStateEntry, 0x20) DECOMP_SIZE_ASSERT(PizzaMissionState, 0xb0) +// STUB: LEGO1 0x100393c0 +MxResult PizzaMissionState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return SUCCESS; +} + // FUNCTION: LEGO1 0x10039510 PizzaMissionStateEntry* PizzaMissionState::GetState(MxU8 p_id) { diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizzeria.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizzeria.cpp index 3b6e8d41..84404f01 100644 --- a/LEGO1/lego/legoomni/src/pizzeria/pizzeria.cpp +++ b/LEGO1/lego/legoomni/src/pizzeria/pizzeria.cpp @@ -1 +1,8 @@ #include "pizzeria.h" + +// STUB: LEGO1 0x100179c0 +MxResult Pizzeria::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp index ea54a028..3422c68d 100644 --- a/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp +++ b/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp @@ -5,3 +5,10 @@ PizzeriaState::PizzeriaState() { // TODO } + +// STUB: LEGO1 0x10017da0 +MxResult PizzeriaState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/police/police.cpp b/LEGO1/lego/legoomni/src/police/police.cpp index 89874e00..42456814 100644 --- a/LEGO1/lego/legoomni/src/police/police.cpp +++ b/LEGO1/lego/legoomni/src/police/police.cpp @@ -17,6 +17,13 @@ Police::Police() NotificationManager()->Register(this); } +// STUB: LEGO1 0x1005e1d0 +MxBool Police::VTable0x5c() +{ + // TODO + return FALSE; +} + // FUNCTION: LEGO1 0x1005e320 Police::~Police() { @@ -68,3 +75,16 @@ void Police::VTable0x50() PlayMusic(JukeBox::e_policeStation); FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen); } + +// STUB: LEGO1 0x1005e740 +void Police::VTable0x68(MxBool p_add) +{ + // TODO +} + +// STUB: LEGO1 0x1005e790 +MxBool Police::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/race/carrace.cpp b/LEGO1/lego/legoomni/src/race/carrace.cpp index 9fdb353f..2e5c3b11 100644 --- a/LEGO1/lego/legoomni/src/race/carrace.cpp +++ b/LEGO1/lego/legoomni/src/race/carrace.cpp @@ -8,3 +8,51 @@ CarRace::CarRace() this->m_unk0x150 = 0; this->m_unk0x130 = MxRect32(0x16c, 0x154, 0x1ec, 0x15e); } + +// STUB: LEGO1 0x10016ce0 +MxResult CarRace::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x10016dd0 +void CarRace::VTable0x50() +{ + // TODO +} + +// STUB: LEGO1 0x10016f60 +undefined4 CarRace::VTable0x74(undefined4) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100170e0 +undefined4 CarRace::VTable0x70(undefined4) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10017650 +undefined4 CarRace::VTable0x6c(undefined4) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x100177e0 +undefined4 CarRace::VTable0x78(undefined4) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x10017900 +MxBool CarRace::VTable0x64() +{ + // TODO + return FALSE; +} diff --git a/LEGO1/lego/legoomni/src/race/racestate.cpp b/LEGO1/lego/legoomni/src/race/racestate.cpp index 4776f97c..bdc003f0 100644 --- a/LEGO1/lego/legoomni/src/race/racestate.cpp +++ b/LEGO1/lego/legoomni/src/race/racestate.cpp @@ -11,6 +11,13 @@ RaceState::RaceState() // TODO } +// STUB: LEGO1 0x10016140 +MxResult RaceState::VTable0x1c(LegoFileStream* p_legoFileStream) +{ + // TODO + return SUCCESS; +} + // FUNCTION: LEGO1 0x10016280 RaceStateEntry* RaceState::GetState(MxU8 p_id) { diff --git a/LEGO1/lego/legoomni/src/towtrack/towtrack.cpp b/LEGO1/lego/legoomni/src/towtrack/towtrack.cpp index 3fd0d84d..eb05e57b 100644 --- a/LEGO1/lego/legoomni/src/towtrack/towtrack.cpp +++ b/LEGO1/lego/legoomni/src/towtrack/towtrack.cpp @@ -15,3 +15,57 @@ TowTrack::TowTrack() this->m_unk0x13c = 40.0; this->m_unk0x178 = 1.0; } + +// STUB: LEGO1 0x1004c9e0 +MxResult TowTrack::Create(MxDSAction& p_dsAction) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1004cb10 +void TowTrack::VTable0x70(float p_float) +{ + // TODO +} + +// STUB: LEGO1 0x1004cc80 +MxLong TowTrack::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1004cd30 +MxU32 TowTrack::VTable0xd8(MxType18NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1004d330 +MxU32 TowTrack::VTable0xdc(MxType19NotificationParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1004d690 +MxU32 TowTrack::VTable0xcc() +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1004d8f0 +void TowTrack::VTable0xe4() +{ + // TODO +} + +// STUB: LEGO1 0x1004d9e0 +MxU32 TowTrack::VTable0xd4(MxType17NotificationParam& p_param) +{ + // TODO + return 0; +} diff --git a/LEGO1/lego/legoomni/src/video/legoanimmmpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimmmpresenter.cpp index a6e20919..6b5a6040 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimmmpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimmmpresenter.cpp @@ -5,3 +5,65 @@ LegoAnimMMPresenter::LegoAnimMMPresenter() { // TODO } + +// STUB: LEGO1 0x1004aaf0 +MxResult LegoAnimMMPresenter::StartAction(MxStreamController* p_controller, MxDSAction* p_action) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1004aec0 +void LegoAnimMMPresenter::EndAction() +{ + // TODO +} + +// STUB: LEGO1 0x1004b140 +void LegoAnimMMPresenter::ReadyTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004b1c0 +void LegoAnimMMPresenter::StartingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004b220 +void LegoAnimMMPresenter::StreamingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004b250 +void LegoAnimMMPresenter::RepeatingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004b2c0 +void LegoAnimMMPresenter::DoneTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004b2d0 +MxLong LegoAnimMMPresenter::Notify(MxParam& p_param) +{ + // TODO + return 0; +} + +// STUB: LEGO1 0x1004b360 +void LegoAnimMMPresenter::VTable0x60(MxPresenter* p_presenter) +{ + // TODO +} + +// STUB: LEGO1 0x1004b390 +void LegoAnimMMPresenter::ParseExtra() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index 31fe68b3..d5f50654 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -155,6 +155,19 @@ void LegoAnimPresenter::StreamingTickle() } } +// STUB: LEGO1 0x1006b8c0 +void LegoAnimPresenter::DoneTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006b8d0 +MxResult LegoAnimPresenter::AddToManager() +{ + // TODO + return SUCCESS; +} + // FUNCTION: LEGO1 0x1006b8e0 void LegoAnimPresenter::Destroy() { diff --git a/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp index 0b5ba549..24bb175b 100644 --- a/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp @@ -6,8 +6,38 @@ LegoCarBuildAnimPresenter::LegoCarBuildAnimPresenter() // TODO } +// STUB: LEGO1 0x10078500 +void LegoCarBuildAnimPresenter::RepeatingTickle() +{ + // TODO +} + // STUB: LEGO1 0x10078680 LegoCarBuildAnimPresenter::~LegoCarBuildAnimPresenter() { // TODO } + +// STUB: LEGO1 0x10078790 +void LegoCarBuildAnimPresenter::PutFrame() +{ + // TODO +} + +// STUB: LEGO1 0x100788c0 +void LegoCarBuildAnimPresenter::ReadyTickle() +{ + // TODO +} + +// STUB: LEGO1 0x100789e0 +void LegoCarBuildAnimPresenter::StreamingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x10078db0 +void LegoCarBuildAnimPresenter::EndAction() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp b/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp index f96d2b47..8d77a1eb 100644 --- a/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoflctexturepresenter.cpp @@ -14,3 +14,21 @@ void LegoFlcTexturePresenter::Init() this->m_unk0x68 = 0; this->m_unk0x6c = 0; } + +// STUB: LEGO1 0x1005df80 +void LegoFlcTexturePresenter::StartingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1005e0c0 +void LegoFlcTexturePresenter::LoadFrame(MxStreamChunk* p_chunk) +{ + // TODO +} + +// STUB: LEGO1 0x1005e100 +void LegoFlcTexturePresenter::PutFrame() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp index 00718629..07035332 100644 --- a/LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legohideanimpresenter.cpp @@ -36,8 +36,39 @@ void LegoHideAnimPresenter::Destroy(MxBool p_fromDestructor) LegoHideAnimPresenter::Destroy(); } +// STUB: LEGO1 0x1006dab0 +MxResult LegoHideAnimPresenter::AddToManager() +{ + // TODO + return SUCCESS; +} + // FUNCTION: LEGO1 0x1006dac0 void LegoHideAnimPresenter::Destroy() { Destroy(FALSE); } + +// STUB: LEGO1 0x1006dad0 +void LegoHideAnimPresenter::PutFrame() +{ + // TODO +} + +// STUB: LEGO1 0x1006dae0 +void LegoHideAnimPresenter::ReadyTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006db20 +void LegoHideAnimPresenter::StartingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006e9e0 +void LegoHideAnimPresenter::EndAction() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp index 27d6e421..debe6659 100644 --- a/LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legolocomotionanimpresenter.cpp @@ -11,3 +11,53 @@ void LegoLocomotionAnimPresenter::Init() { // TODO } + +// STUB: LEGO1 0x1006d140 +MxResult LegoLocomotionAnimPresenter::VTable0x88(MxStreamChunk* p_chunk) +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1006d160 +MxResult LegoLocomotionAnimPresenter::AddToManager() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1006d5b0 +void LegoLocomotionAnimPresenter::Destroy() +{ + // TODO +} + +// STUB: LEGO1 0x1006d5c0 +void LegoLocomotionAnimPresenter::PutFrame() +{ + // TODO +} + +// STUB: LEGO1 0x1006d5d0 +void LegoLocomotionAnimPresenter::ReadyTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006d610 +void LegoLocomotionAnimPresenter::StartingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006d660 +void LegoLocomotionAnimPresenter::StreamingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006d670 +void LegoLocomotionAnimPresenter::EndAction() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp new file mode 100644 index 00000000..8cfb3499 --- /dev/null +++ b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp @@ -0,0 +1,13 @@ +#include "legoloopinganimpresenter.h" + +// STUB: LEGO1 0x1006caa0 +void LegoLoopingAnimPresenter::StreamingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1006cb40 +void LegoLoopingAnimPresenter::PutFrame() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp index 1ae834f9..545d2f65 100644 --- a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp @@ -6,9 +6,28 @@ int g_partPresenterConfig1 = 1; // GLOBAL: LEGO1 0x100f7aa4 int g_partPresenterConfig2 = 100; +// STUB: LEGO1 0x1000cf60 +void LegoPartPresenter::Destroy() +{ + // TODO +} + // FUNCTION: LEGO1 0x1007c990 void LegoPartPresenter::configureLegoPartPresenter(MxS32 p_partPresenterConfig1, MxS32 p_partPresenterConfig2) { g_partPresenterConfig1 = p_partPresenterConfig1; g_partPresenterConfig2 = p_partPresenterConfig2; } + +// STUB: LEGO1 0x1007c9b0 +MxResult LegoPartPresenter::AddToManager() +{ + // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1007deb0 +void LegoPartPresenter::ReadyTickle() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp b/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp index 31948367..4d128531 100644 --- a/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp @@ -21,3 +21,27 @@ void LegoPhonemePresenter::Init() m_unk0x70 = 0; m_unk0x84 = 0; } + +// STUB: LEGO1 0x1004e3d0 +void LegoPhonemePresenter::StartingTickle() +{ + // TODO +} + +// STUB: LEGO1 0x1004e800 +void LegoPhonemePresenter::LoadFrame(MxStreamChunk* p_chunk) +{ + // TODO +} + +// STUB: LEGO1 0x1004e840 +void LegoPhonemePresenter::PutFrame() +{ + // TODO +} + +// STUB: LEGO1 0x1004e870 +void LegoPhonemePresenter::EndAction() +{ + // TODO +} diff --git a/LEGO1/lego/sources/roi/legoroi.cpp b/LEGO1/lego/sources/roi/legoroi.cpp index 9d530b16..0f262a51 100644 --- a/LEGO1/lego/sources/roi/legoroi.cpp +++ b/LEGO1/lego/sources/roi/legoroi.cpp @@ -119,6 +119,12 @@ void LegoROI::SetDisplayBB(MxS32 p_displayBB) // Intentionally empty function } +// FUNCTION: LEGO1 0x100aa340 +float LegoROI::IntrinsicImportance() const +{ + return .5; +} + // Note: Actually part of parent class (doesn't exist yet) // STUB: LEGO1 0x100aa350 void LegoROI::UpdateWorldBoundingVolumes() diff --git a/LEGO1/lego/sources/roi/legoroi.h b/LEGO1/lego/sources/roi/legoroi.h index 302a0bd8..5dfac62f 100644 --- a/LEGO1/lego/sources/roi/legoroi.h +++ b/LEGO1/lego/sources/roi/legoroi.h @@ -17,6 +17,7 @@ class LegoROI : public ViewROI { public: LegoROI(Tgl::Renderer* p_renderer, ViewLODList* p_lodList, MxTime p_time); + virtual float IntrinsicImportance() const override; // vtable+0x4 // Note: Actually part of parent class (doesn't exist yet) virtual void UpdateWorldBoundingVolumes() override; // vtable+0x18 diff --git a/LEGO1/mxgeometry/mxmatrix.h b/LEGO1/mxgeometry/mxmatrix.h index 2db07671..3ae03404 100644 --- a/LEGO1/mxgeometry/mxmatrix.h +++ b/LEGO1/mxgeometry/mxmatrix.h @@ -10,6 +10,9 @@ public: inline MxMatrix() : Matrix4(m_elements) {} inline MxMatrix(const MxMatrix& p_matrix) : Matrix4(m_elements) { Equals(p_matrix); } + // FUNCTION: LEGO1 0x10002850 + virtual void operator=(const Matrix4& p_matrix) { Equals(p_matrix); } // vtable+0x28 + // No idea why there's another equals. Maybe to some other type like the // DirectX Retained Mode Matrix type which is also a float* alias? // FUNCTION: LEGO1 0x10002860 diff --git a/LEGO1/tgl/d3drm/group.cpp b/LEGO1/tgl/d3drm/group.cpp index 4b966cd2..bc7da727 100644 --- a/LEGO1/tgl/d3drm/group.cpp +++ b/LEGO1/tgl/d3drm/group.cpp @@ -112,7 +112,7 @@ Result GroupImpl::RemoveAll() return Error; } -// STUB: LEGO1 0x100a34c0 +// STUB: LEGO1 0x100a3540 Result GroupImpl::Unknown() { return Error; diff --git a/LEGO1/tgl/d3drm/impl.h b/LEGO1/tgl/d3drm/impl.h index 1e017cf2..614b5f60 100644 --- a/LEGO1/tgl/d3drm/impl.h +++ b/LEGO1/tgl/d3drm/impl.h @@ -63,7 +63,6 @@ public: // vtable+0x20 virtual Unk* CreateUnk() override; - virtual Texture* CreateTexture() override; virtual Texture* CreateTexture( int width, int height, @@ -73,6 +72,8 @@ public: int paletteEntryCount, const PaletteEntry* pEntries ) override; + virtual Texture* CreateTexture() override; + virtual Result SetTextureDefaultShadeCount(unsigned long) override; // vtable+0x30 @@ -307,12 +308,12 @@ public: virtual Result SetTexture(const Texture*); virtual Result GetTexture(Texture*&); virtual Result SetMaterialMode(MaterialMode); - virtual Result Add(const Group*); + virtual Result Add(const Mesh*); // vtable+0x20 - virtual Result Add(const Mesh*); - virtual Result Remove(const Group*); + virtual Result Add(const Group*); virtual Result Remove(const Mesh*); + virtual Result Remove(const Group*); virtual Result RemoveAll(); // vtable+0x30 diff --git a/LEGO1/tgl/d3drm/renderer.cpp b/LEGO1/tgl/d3drm/renderer.cpp index 4a8ca6c7..c3669e05 100644 --- a/LEGO1/tgl/d3drm/renderer.cpp +++ b/LEGO1/tgl/d3drm/renderer.cpp @@ -34,7 +34,7 @@ Result RendererImpl::Create() return (m_data != NULL) ? Success : Error; } -// FUNCTION: LEGO1 0x100a1894 +// FUNCTION: LEGO1 0x100a1830 Device* RendererImpl::CreateDevice(const DeviceDirect3DCreateData& data) { DeviceImpl* device = new DeviceImpl(); diff --git a/LEGO1/tgl/d3drm/texture.cpp b/LEGO1/tgl/d3drm/texture.cpp index 2b2c3eb0..b0ee3813 100644 --- a/LEGO1/tgl/d3drm/texture.cpp +++ b/LEGO1/tgl/d3drm/texture.cpp @@ -150,7 +150,7 @@ Result TextureImpl::Changed(int texelsChanged, int paletteChanged) return ResultVal(m_data->Changed(texelsChanged, paletteChanged)); } -// FUNCTION: LEGO1 0x100a3d00 +// FUNCTION: LEGO1 0x100a3cc0 Result TextureImpl::GetBufferAndPalette( int* width, int* height, diff --git a/LEGO1/tgl/tgl.h b/LEGO1/tgl/tgl.h index b8a09c3e..630510b9 100644 --- a/LEGO1/tgl/tgl.h +++ b/LEGO1/tgl/tgl.h @@ -131,7 +131,6 @@ public: // vtable+0x20 virtual Unk* CreateUnk() = 0; - virtual Texture* CreateTexture() = 0; virtual Texture* CreateTexture( int width, int height, @@ -141,6 +140,7 @@ public: int paletteEntryCount, const PaletteEntry* pEntries ) = 0; + virtual Texture* CreateTexture() = 0; virtual Result SetTextureDefaultShadeCount(unsigned long) = 0; // vtable+0x30 @@ -278,10 +278,10 @@ public: virtual Result SetTexture(const Texture*) = 0; virtual Result GetTexture(Texture*&) = 0; virtual Result SetMaterialMode(MaterialMode) = 0; - virtual Result Add(const Group*) = 0; virtual Result Add(const Mesh*) = 0; - virtual Result Remove(const Group*) = 0; + virtual Result Add(const Group*) = 0; virtual Result Remove(const Mesh*) = 0; + virtual Result Remove(const Group*) = 0; virtual Result RemoveAll() = 0; // This is TransformLocalToWorld in the leak, however it seems diff --git a/LEGO1/viewmanager/viewroi.cpp b/LEGO1/viewmanager/viewroi.cpp index ff846394..37b299b5 100644 --- a/LEGO1/viewmanager/viewroi.cpp +++ b/LEGO1/viewmanager/viewroi.cpp @@ -41,6 +41,24 @@ void ViewROI::UpdateWorldData(const MxMatrix& parent2world) } } +// STUB: LEGO1 0x100a9fc0 +void ViewROI::VTable0x24(const MxMatrix& p_transform) +{ + // TODO +} + +// STUB: LEGO1 0x100aa0a0 +void ViewROI::SetLocalTransform(const Matrix4& p_transform) +{ + // TODO +} + +// STUB: LEGO1 0x100aa180 +void ViewROI::VTable0x1c() +{ + // TODO +} + // FUNCTION: LEGO1 0x100aa500 undefined ViewROI::SetUnk101013d8(undefined p_flag) { diff --git a/LEGO1/viewmanager/viewroi.h b/LEGO1/viewmanager/viewroi.h index 7157033a..8e6d78a9 100644 --- a/LEGO1/viewmanager/viewroi.h +++ b/LEGO1/viewmanager/viewroi.h @@ -44,9 +44,12 @@ public: reinterpret_cast(m_lods)->AddRef(); } } - virtual float IntrinsicImportance() const; - virtual Tgl::Group* GetGeometry(); - virtual const Tgl::Group* GetGeometry() const; + virtual float IntrinsicImportance() const override; // vtable+0x04 + virtual void VTable0x1c() override; // vtable+0x1c + virtual void SetLocalTransform(const Matrix4& p_transform) override; // vtable+0x20 + virtual void VTable0x24(const MxMatrix& p_transform) override; // vtable+0x24 + virtual const Tgl::Group* GetGeometry() const; // vtable+0x34 + virtual Tgl::Group* GetGeometry(); // vtable+0x30 static undefined SetUnk101013d8(undefined p_flag); diff --git a/tools/vtable/vtable.py b/tools/vtable/vtable.py new file mode 100644 index 00000000..bdee080b --- /dev/null +++ b/tools/vtable/vtable.py @@ -0,0 +1,99 @@ +import os +import argparse +import logging +from typing import List +import colorama +from isledecomp.bin import Bin as IsleBin +from isledecomp.compare import Compare as IsleCompare +from isledecomp.utils import print_diff + +# Ignore all compare-db messages. +logging.getLogger("isledecomp.compare").addHandler(logging.NullHandler()) + +colorama.init() + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser(description="Comparing vtables.") + parser.add_argument( + "original", metavar="original-binary", help="The original binary" + ) + parser.add_argument( + "recompiled", metavar="recompiled-binary", help="The recompiled binary" + ) + parser.add_argument( + "pdb", metavar="recompiled-pdb", help="The PDB of the recompiled binary" + ) + parser.add_argument( + "decomp_dir", metavar="decomp-dir", help="The decompiled source tree" + ) + parser.add_argument( + "--verbose", "-v", action="store_true", help="Show more detailed information" + ) + parser.add_argument( + "--no-color", "-n", action="store_true", help="Do not color the output" + ) + + (args, _) = parser.parse_known_args() + + if not os.path.isfile(args.original): + parser.error(f"Original binary {args.original} does not exist") + + if not os.path.isfile(args.recompiled): + parser.error(f"Recompiled binary {args.recompiled} does not exist") + + if not os.path.isfile(args.pdb): + parser.error(f"Symbols PDB {args.pdb} does not exist") + + if not os.path.isdir(args.decomp_dir): + parser.error(f"Source directory {args.decomp_dir} does not exist") + + return args + + +def show_vtable_diff(udiff: List[str], verbose: bool = False, plain: bool = False): + lines = [ + line + for line in udiff + if verbose or line.startswith("+") or line.startswith("-") + ] + print_diff(lines, plain) + + +def print_summary(vtable_count: int, problem_count: int): + if problem_count == 0: + print(f"Vtables found: {vtable_count}.\n100% match.") + return + + print(f"Vtables found: {vtable_count}.\nVtables not matching: {problem_count}.") + + +def main(): + args = parse_args() + vtable_count = 0 + problem_count = 0 + + with IsleBin(args.original) as orig_bin, IsleBin(args.recompiled) as recomp_bin: + engine = IsleCompare(orig_bin, recomp_bin, args.pdb, args.decomp_dir) + + for tbl_match in engine.compare_vtables(): + vtable_count += 1 + if tbl_match.ratio < 1: + problem_count += 1 + + udiff = list(tbl_match.udiff) + + print( + tbl_match.name, + f": orig 0x{tbl_match.orig_addr:x}, recomp 0x{tbl_match.recomp_addr:x}", + ) + show_vtable_diff(udiff, args.verbose, args.no_color) + print() + + print_summary(vtable_count, problem_count) + + return 1 if problem_count > 0 else 0 + + +if __name__ == "__main__": + raise SystemExit(main())