diff --git a/CMakeLists.txt b/CMakeLists.txt index 34b67e0c..65b0d933 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,13 +63,16 @@ 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/legoworld.cpp LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp LEGO1/lego/legoomni/src/gasstation/gasstation.cpp 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 @@ class Act2Brick : public LegoPathActor { 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/act3shark.h b/LEGO1/lego/legoomni/include/act3shark.h index e6910cdb..63842f06 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); // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform); // vtable+0x74 + // SYNTHETIC: LEGO1 0x10043020 // Act3Shark::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/ambulancemissionstate.h b/LEGO1/lego/legoomni/include/ambulancemissionstate.h index cdfa608b..b5659757 100644 --- a/LEGO1/lego/legoomni/include/ambulancemissionstate.h +++ b/LEGO1/lego/legoomni/include/ambulancemissionstate.h @@ -22,6 +22,8 @@ class AmbulanceMissionState : public LegoState { return !strcmp(p_name, AmbulanceMissionState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream); // vtable+0x1c + inline MxU16 GetColor(MxU8 p_id) { switch (p_id) { diff --git a/LEGO1/lego/legoomni/include/bumpbouy.h b/LEGO1/lego/legoomni/include/bumpbouy.h index a423ca3e..76d1599d 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 @@ class BumpBouy : public LegoAnimActor { 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); // vtable+0x70 + virtual void VTable0x74(Matrix4& p_transform); // vtable+0x74 + // SYNTHETIC: LEGO1 0x10027490 // BumpBouy::`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 @@ class GasStation : public LegoWorld { 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/historybook.h b/LEGO1/lego/legoomni/include/historybook.h index 101e45a6..ec8bf221 100644 --- a/LEGO1/lego/legoomni/include/historybook.h +++ b/LEGO1/lego/legoomni/include/historybook.h @@ -25,6 +25,10 @@ class HistoryBook : public LegoWorld { return !strcmp(p_name, HistoryBook::ClassName()) || LegoWorld::IsA(p_name); } + virtual MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 + virtual void VTable0x50(); // vtable+0x50 + virtual MxBool VTable0x64(); // vtable+0x64 + // SYNTHETIC: LEGO1 0x100824b0 // HistoryBook::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/hospitalstate.h b/LEGO1/lego/legoomni/include/hospitalstate.h index 7fabe10a..92a85d55 100644 --- a/LEGO1/lego/legoomni/include/hospitalstate.h +++ b/LEGO1/lego/legoomni/include/hospitalstate.h @@ -23,6 +23,8 @@ class HospitalState : public LegoState { return !strcmp(p_name, HospitalState::ClassName()) || LegoState::IsA(p_name); } + virtual MxResult VTable0x1c(LegoFileStream* p_legoFileStream); // 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 @@ class IsleActor : public LegoActor { { 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 @@ class IslePathActor : public LegoPathActor { // 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..e373e41d 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 @@ class Jetski : public IslePathActor { 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); // 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/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 @@ class JukeBoxEntity : public LegoEntity { 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/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 @@ class LegoActor : public LegoEntity { 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/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 @@ class LegoCarRaceActor : public LegoRaceActor { 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/legoinputmanager.h b/LEGO1/lego/legoomni/include/legoinputmanager.h index 0f068a90..f97dc17f 100644 --- a/LEGO1/lego/legoomni/include/legoinputmanager.h +++ b/LEGO1/lego/legoomni/include/legoinputmanager.h @@ -38,6 +38,9 @@ class LegoInputManager : public MxPresenter { virtual MxResult Tickle() override; // vtable+0x8 + // FUNCTION: LEGO1 0x1005b8c0 + virtual MxResult PutData() { return SUCCESS; }; // vtable+0x4c + MxResult Create(HWND p_hwnd); void Destroy(); void CreateAndAcquireKeyboard(HWND p_hwnd); 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 @@ class LegoJetskiRaceActor : public LegoCarRaceActor { 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/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 @@ class LegoNavController : public MxCore { ); 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/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 @@ class LegoPathActor : public LegoActor { 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/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 @@ class LegoRaceActor : public LegoAnimActor { 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/legovideomanager.h b/LEGO1/lego/legoomni/include/legovideomanager.h index a9532e87..c635164e 100644 --- a/LEGO1/lego/legoomni/include/legovideomanager.h +++ b/LEGO1/lego/legoomni/include/legovideomanager.h @@ -32,7 +32,7 @@ class LegoVideoManager : public MxVideoManager { 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/pizza.h b/LEGO1/lego/legoomni/include/pizza.h index 835a5b2e..9be32915 100644 --- a/LEGO1/lego/legoomni/include/pizza.h +++ b/LEGO1/lego/legoomni/include/pizza.h @@ -15,21 +15,23 @@ class Pizza : public IsleActor { 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); // vtable+0x18 + // SYNTHETIC: LEGO1 0x100380e0 // Pizza::`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/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/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/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/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/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/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/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/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/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/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/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/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/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 @@ class MxMatrix : public Matrix4 { 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 @@ class RendererImpl : public Renderer { // vtable+0x20 virtual Unk* CreateUnk() override; - virtual Texture* CreateTexture() override; virtual Texture* CreateTexture( int width, int height, @@ -73,6 +72,8 @@ class RendererImpl : public Renderer { int paletteEntryCount, const PaletteEntry* pEntries ) override; + virtual Texture* CreateTexture() override; + virtual Result SetTextureDefaultShadeCount(unsigned long) override; // vtable+0x30 @@ -307,12 +308,12 @@ class GroupImpl : public Group { 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 @@ class Renderer : public Object { // vtable+0x20 virtual Unk* CreateUnk() = 0; - virtual Texture* CreateTexture() = 0; virtual Texture* CreateTexture( int width, int height, @@ -141,6 +140,7 @@ class Renderer : public Object { int paletteEntryCount, const PaletteEntry* pEntries ) = 0; + virtual Texture* CreateTexture() = 0; virtual Result SetTextureDefaultShadeCount(unsigned long) = 0; // vtable+0x30 @@ -278,10 +278,10 @@ class Group : public Object { 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 @@ class ViewROI : public OrientableROI { 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);