diff --git a/CMakeLists.txt b/CMakeLists.txt index 369c646e..c96cc111 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -282,6 +282,8 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/act2/legoact2state.cpp LEGO1/lego/legoomni/src/act3/act3shark.cpp LEGO1/lego/legoomni/src/act3/act3state.cpp + LEGO1/lego/legoomni/src/actors/act2actor.cpp + LEGO1/lego/legoomni/src/actors/act3actor.cpp LEGO1/lego/legoomni/src/actors/ambulance.cpp LEGO1/lego/legoomni/src/actors/bike.cpp LEGO1/lego/legoomni/src/actors/bumpbouy.cpp @@ -373,7 +375,9 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/race/legorace.cpp LEGO1/lego/legoomni/src/race/legoraceactor.cpp LEGO1/lego/legoomni/src/race/legoracecar.cpp + LEGO1/lego/legoomni/src/race/legoracemap.cpp LEGO1/lego/legoomni/src/race/racestandsentity.cpp + LEGO1/lego/legoomni/src/race/raceskel.cpp LEGO1/lego/legoomni/src/race/racestate.cpp LEGO1/lego/legoomni/src/towtrack/towtrackmissionstate.cpp LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp diff --git a/LEGO1/lego/legoomni/include/act2actor.h b/LEGO1/lego/legoomni/include/act2actor.h new file mode 100644 index 00000000..6b93af65 --- /dev/null +++ b/LEGO1/lego/legoomni/include/act2actor.h @@ -0,0 +1,22 @@ +#ifndef ACT2ACTOR_H +#define ACT2ACTOR_H + +#include "legoanimactor.h" + +/* + VTABLE: LEGO1 0x100d6078 LegoPathActor + VTABLE: LEGO1 0x100d6148 LegoAnimActor +*/ +// SIZE 0x1a8 +class Act2Actor : public LegoAnimActor { +public: + Act2Actor(); + + // SYNTHETIC: LEGO1 0x1001a090 + // Act2Actor::`scalar deleting destructor' + +private: + undefined m_unk0x1c[0x34]; // 0x1c +}; + +#endif // ACT2ACTOR_H diff --git a/LEGO1/lego/legoomni/include/act2brick.h b/LEGO1/lego/legoomni/include/act2brick.h index 32856732..74b50d46 100644 --- a/LEGO1/lego/legoomni/include/act2brick.h +++ b/LEGO1/lego/legoomni/include/act2brick.h @@ -30,6 +30,14 @@ class Act2Brick : public LegoPathActor { // SYNTHETIC: LEGO1 0x1007a450 // Act2Brick::`scalar deleting destructor' + +private: + undefined4 m_unk0x154; // 0x154 + undefined m_unk0x158[0x0c]; // 0x158 + undefined4 m_unk0x164; // 0x164 + Mx3DPointFloat m_unk0x168; // 0x168 + Mx3DPointFloat m_unk0x17c; // 0x17c + undefined4 m_unk0x190; // 0x190 }; #endif // ACT2BRICK_H diff --git a/LEGO1/lego/legoomni/include/act3actor.h b/LEGO1/lego/legoomni/include/act3actor.h index 3d146cb7..002839fe 100644 --- a/LEGO1/lego/legoomni/include/act3actor.h +++ b/LEGO1/lego/legoomni/include/act3actor.h @@ -1,18 +1,26 @@ #ifndef ACT3ACTOR_H #define ACT3ACTOR_H -#include "mxcore.h" +#include "legoanimactor.h" -// FIXME: Uncertain location. There are three vtables which eventually call this -// class' ClassName() function, but none of them call it directly. -class Act3Actor : public MxCore { +/* + VTABLE: LEGO1 0x100d7668 LegoPathActor + VTABLE: LEGO1 0x100d7738 LegoAnimActor +*/ +// SIZE 0x178 +class Act3Actor : public LegoAnimActor { public: - // FUNCTION: LEGO1 0x100431b0 + Act3Actor(); + + // FUNCTION: LEGO1 0x100433b0 inline const char* ClassName() const override { // STRING: LEGO1 0x100f03ac return "Act3Actor"; } + +private: + undefined4 m_unk0x1c; // 0x1c }; #endif // ACT3ACTOR_H diff --git a/LEGO1/lego/legoomni/include/act3shark.h b/LEGO1/lego/legoomni/include/act3shark.h index b0b26a48..180bab99 100644 --- a/LEGO1/lego/legoomni/include/act3shark.h +++ b/LEGO1/lego/legoomni/include/act3shark.h @@ -3,9 +3,15 @@ #include "legoanimactor.h" -// VTABLE: LEGO1 0x100d7920 +/* + VTABLE: LEGO1 0x100d7920 LegoPathActor + VTABLE: LEGO1 0x100d79f0 LegoAnimActor +*/ +// SIZE 0x1a8 class Act3Shark : public LegoAnimActor { public: + Act3Shark(); + // FUNCTION: LEGO1 0x100430c0 inline const char* ClassName() const override // vtable+0x0c { @@ -24,8 +30,17 @@ class Act3Shark : public LegoAnimActor { void VTable0x70(float p_float) override; // vtable+0x70 void VTable0x74(Matrix4& p_transform) override; // vtable+0x74 + virtual MxResult FUN_10042ce0(void*); + // SYNTHETIC: LEGO1 0x10043020 // Act3Shark::`scalar deleting destructor' + +private: + list m_unk0x1c; // 0x1c + undefined4 m_unk0x28; // 0x28 + undefined4 m_unk0x2c; // 0x2c + undefined m_unk0x30[0x0c]; // 0x30 + Mx3DPointFloat m_unk0x3c; // 0x3c }; #endif // ACT3SHARK_H diff --git a/LEGO1/lego/legoomni/include/buildingentity.h b/LEGO1/lego/legoomni/include/buildingentity.h index 57297558..dd6d4594 100644 --- a/LEGO1/lego/legoomni/include/buildingentity.h +++ b/LEGO1/lego/legoomni/include/buildingentity.h @@ -4,7 +4,7 @@ #include "legoentity.h" // VTABLE: LEGO1 0x100d5c88 -// SIZE <= 0x68, hard to tell because it's always constructed as a derivative +// SIZE 0x68 class BuildingEntity : public LegoEntity { public: BuildingEntity(); diff --git a/LEGO1/lego/legoomni/include/bumpbouy.h b/LEGO1/lego/legoomni/include/bumpbouy.h index c6308d57..6f9dee2d 100644 --- a/LEGO1/lego/legoomni/include/bumpbouy.h +++ b/LEGO1/lego/legoomni/include/bumpbouy.h @@ -4,9 +4,14 @@ #include "legoanimactor.h" #include "mxtypes.h" -// VTABLE: LEGO1 0x100d6790 +/* + VTABLE: LEGO1 0x100d6790 LegoPathActor + VTABLE: LEGO1 0x100d6860 LegoAnimActor +*/ +// SIZE 0x174 class BumpBouy : public LegoAnimActor { public: + BumpBouy(); MxLong Notify(MxParam& p_param) override; // vtable+0x04 // FUNCTION: LEGO1 0x100274e0 diff --git a/LEGO1/lego/legoomni/include/doors.h b/LEGO1/lego/legoomni/include/doors.h index 35958455..5a4a808a 100644 --- a/LEGO1/lego/legoomni/include/doors.h +++ b/LEGO1/lego/legoomni/include/doors.h @@ -26,6 +26,15 @@ class Doors : public LegoPathActor { // SYNTHETIC: LEGO1 0x1000e580 // Doors::`scalar deleting destructor' + +private: + undefined4 m_unk0x154; // 0x154 + undefined4 m_unk0x158; // 0x158 + undefined4 m_unk0x15c; // 0x15c + undefined4 m_unk0x160; // 0x160 + MxMatrix m_unk0x164; // 0x164 + MxMatrix m_unk0x1ac; // 0x1ac + undefined4 m_unk0x1f4; // 0x1f4 }; #endif // DOORS_H diff --git a/LEGO1/lego/legoomni/include/elevatorbottom.h b/LEGO1/lego/legoomni/include/elevatorbottom.h index 38fbc19a..e2886f5c 100644 --- a/LEGO1/lego/legoomni/include/elevatorbottom.h +++ b/LEGO1/lego/legoomni/include/elevatorbottom.h @@ -8,7 +8,7 @@ class LegoControlManagerEvent; // VTABLE: LEGO1 0x100d5f20 -// SIZE: 0xfc (from inlined ctor at 0x1000a8aa) +// SIZE 0xfc class ElevatorBottom : public LegoWorld { public: ElevatorBottom(); diff --git a/LEGO1/lego/legoomni/include/isleactor.h b/LEGO1/lego/legoomni/include/isleactor.h index c51946d3..5ddf79ac 100644 --- a/LEGO1/lego/legoomni/include/isleactor.h +++ b/LEGO1/lego/legoomni/include/isleactor.h @@ -4,6 +4,7 @@ #include "legoactor.h" // VTABLE: LEGO1 0x100d5178 +// SIZE 0x78 class IsleActor : public LegoActor { public: MxLong Notify(MxParam& p_param) override; // vtable+0x04 diff --git a/LEGO1/lego/legoomni/include/legoact2.h b/LEGO1/lego/legoomni/include/legoact2.h index dfedc85d..d90fe268 100644 --- a/LEGO1/lego/legoomni/include/legoact2.h +++ b/LEGO1/lego/legoomni/include/legoact2.h @@ -1,6 +1,7 @@ #ifndef LEGOACT2_H #define LEGOACT2_H +#include "act2brick.h" #include "legocarraceactor.h" #include "legopathactor.h" #include "legoworld.h" @@ -8,7 +9,7 @@ // VTABLE: LEGO1 0x100d82e0 // SIZE 0x1154 class LegoAct2 : public LegoWorld { - +public: MxLong Notify(MxParam& p_param) override; // vtable+0x04 MxResult Tickle() override; // vtable+0x08 MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 @@ -20,6 +21,30 @@ class LegoAct2 : public LegoWorld { // SYNTHETIC: LEGO1 0x1004fe20 // LegoAct2::`scalar deleting destructor' + +private: + Act2Brick m_bricks[10]; // 0x00f8 + undefined m_unk0x10c0; // 0x10c0 + undefined m_unk0x10c1; // 0x10c1 + undefined m_unk0x10c2; // 0x10c2 + undefined4 m_unk0x10c4; // 0x10c4 + undefined4 m_unk0x10c8; // 0x10c8 + undefined4 m_unk0x10cc; // 0x10cc + undefined4 m_unk0x10d0; // 0x10d0 + char* m_unk0x10d4; // 0x10d4 + undefined4 m_unk0x10d8; // 0x10d8 + MxMatrix m_unk0x10dc; // 0x10dc + undefined4 m_unk0x1124; // 0x1124 + undefined4 m_unk0x1128; // 0x1128 + undefined4 m_unk0x112c; // 0x112c + undefined4 m_unk0x1130; // 0x1130 + undefined4 m_unk0x1134; // 0x1134 + undefined4 m_unk0x1138; // 0x1138 + undefined m_unk0x113c; // 0x113c + undefined4 m_unk0x1140; // 0x1140 + undefined4 m_unk0x1144; // 0x1144 + undefined m_unk0x1148[0x08]; // 0x1148 + undefined4 m_unk0x1150; // 0x1150 }; #endif // LEGOACT2_H diff --git a/LEGO1/lego/legoomni/include/legoactor.h b/LEGO1/lego/legoomni/include/legoactor.h index 8cccbd71..5c3fe3e0 100644 --- a/LEGO1/lego/legoomni/include/legoactor.h +++ b/LEGO1/lego/legoomni/include/legoactor.h @@ -48,7 +48,7 @@ class LegoActor : public LegoEntity { static const char* GetActorName(MxU8 p_id); -private: +protected: MxFloat m_unk0x68; // 0x68 LegoCacheSound* m_sound; // 0x6c MxFloat m_unk0x70; // 0x70 diff --git a/LEGO1/lego/legoomni/include/legoanimactor.h b/LEGO1/lego/legoomni/include/legoanimactor.h index 8d1900e1..42763b84 100644 --- a/LEGO1/lego/legoomni/include/legoanimactor.h +++ b/LEGO1/lego/legoomni/include/legoanimactor.h @@ -4,10 +4,39 @@ #include "decomp.h" #include "legopathactor.h" -class LegoAnimActor : public LegoPathActor { +/* + VTABLE: LEGO1 0x100d5440 LegoPathActor + VTABLE: LEGO1 0x100d5510 LegoAnimActor +*/ +// SIZE 0x174 +class LegoAnimActor : public virtual LegoPathActor { public: - LegoAnimActor() {} - LegoAnimActor(undefined4); + LegoAnimActor() { m_index = -1; } + + // FUNCTION: LEGO1 0x1000fb90 + inline const char* ClassName() const override // vtable+0x0c + { + // STRING: LEGO1 0x100f057c + return "LegoAnimActor"; + } + + // FUNCTION: LEGO1 0x1000fbb0 + inline MxBool IsA(const char* p_name) const override // vtable+0x10 + { + return !strcmp(p_name, LegoAnimActor::ClassName()) || LegoPathActor::IsA(p_name); + } + + virtual MxResult FUN_1001c1f0(float& p_out); + virtual MxResult FUN_1001c360(float, undefined4); + virtual MxResult FUN_1001c450(undefined4, undefined4, undefined4, undefined4); + virtual void FUN_1001c800(); + + // SYNTHETIC: LEGO1 0x1000fb50 + // LegoAnimActor::`scalar deleting destructor' + +private: + vector m_unk0x08; // 0x08 + MxU16 m_index; // 0x18 }; #endif // LEGOANIMACTOR_H diff --git a/LEGO1/lego/legoomni/include/legoanimpresenter.h b/LEGO1/lego/legoomni/include/legoanimpresenter.h index 7f4d1b5d..d57080c6 100644 --- a/LEGO1/lego/legoomni/include/legoanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoanimpresenter.h @@ -10,7 +10,7 @@ class LegoWorld; class LegoAnimClass; // VTABLE: LEGO1 0x100d90c8 -// SIZE 0xc0 +// SIZE 0xbc class LegoAnimPresenter : public MxVideoPresenter { public: enum { @@ -93,7 +93,6 @@ class LegoAnimPresenter : public MxVideoPresenter { undefined4 m_unk0xa0; // 0xa0 undefined4 m_unk0xa4; // 0xa4 Mx3DPointFloat m_unk0xa8; // 0xa8 - undefined4 m_unk0xbc; // 0xbc }; // SYNTHETIC: LEGO1 0x10068650 diff --git a/LEGO1/lego/legoomni/include/legocarbuild.h b/LEGO1/lego/legoomni/include/legocarbuild.h index 03d0484d..0d2eccc1 100644 --- a/LEGO1/lego/legoomni/include/legocarbuild.h +++ b/LEGO1/lego/legoomni/include/legocarbuild.h @@ -34,6 +34,59 @@ class LegoCarBuild : public LegoWorld { // SYNTHETIC: LEGO1 0x10022a60 // LegoCarBuild::`scalar deleting destructor' + +private: + undefined4 m_unk0xf8; // 0xf8 + undefined m_unk0xfc[0x8]; // 0xfc + undefined4 m_unk0x104; // 0x104 + undefined m_unk0x108; // 0x108 + undefined m_unk0x109; // 0x109 + undefined4 m_unk0x10c; // 0x10c + undefined4 m_unk0x110; // 0x110 + Mx3DPointFloat m_unk0x114; // 0x114 + undefined4 m_unk0x128; // 0x128 + MxMatrix m_unk0x12c; // 0x12c + undefined m_unk0x174; // 0x174 + MxMatrix m_unk0x178; // 0x178 + MxMatrix m_unk0x1c0; // 0x1c0 + MxMatrix m_unk0x208; // 0x208 + undefined m_unk0x250[0x08]; // 0x250 + undefined4 m_unk0x258; // 0x258 + Mx4DPointFloat m_unk0x25c; // 0x25c + Mx4DPointFloat m_unk0x274; // 0x274 + undefined m_unk0x28c[0x18]; // 0x28c + Mx4DPointFloat m_unk0x2a4; // 0x2a4 + Mx4DPointFloat m_unk0x2bc; // 0x2bc + undefined m_unk0x2d4; // 0x2d4 + undefined4 m_unk0x2dc; // 0x2dc + undefined4 m_unk0x2e0; // 0x2e0 + undefined4 m_unk0x2e4; // 0x2e4 + undefined4 m_unk0x2e8; // 0x2e8 + undefined4 m_unk0x2ec; // 0x2ec + undefined4 m_unk0x2f0; // 0x2f0 + undefined4 m_unk0x2f4; // 0x2f4 + undefined4 m_unk0x2f8; // 0x2f8 + undefined4 m_unk0x2fc; // 0x2fc + undefined4 m_unk0x300; // 0x300 + undefined4 m_unk0x304; // 0x304 + undefined4 m_unk0x308; // 0x308 + undefined4 m_unk0x30c; // 0x30c + undefined4 m_unk0x310; // 0x310 + undefined4 m_unk0x314; // 0x314 + undefined4 m_unk0x318; // 0x318 + undefined4 m_unk0x31c; // 0x31c + undefined4 m_unk0x320; // 0x320 + undefined4 m_unk0x324; // 0x324 + undefined4 m_unk0x328; // 0x328 + undefined4 m_unk0x2d8; // 0x2d8 + undefined4 m_unk0x32c; // 0x32c + undefined4 m_unk0x330; // 0x330 + undefined4 m_unk0x334; // 0x334 + undefined4 m_unk0x338; // 0x338 + undefined4 m_unk0x33c; // 0x33c + undefined4 m_unk0x340; // 0x340 + undefined4 m_unk0x344; // 0x344 + undefined4 m_unk0x348; // 0x348 }; #endif // LEGOCARBUILD_H diff --git a/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h b/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h index fd5f8148..55036496 100644 --- a/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h +++ b/LEGO1/lego/legoomni/include/legocarbuildanimpresenter.h @@ -31,6 +31,24 @@ class LegoCarBuildAnimPresenter : public LegoAnimPresenter { // SYNTHETIC: LEGO1 0x10078660 // LegoCarBuildAnimPresenter::`scalar deleting destructor' + +private: + undefined2 m_unk0xbc; // 0xbc + undefined2 m_unk0xbe; // 0xbe + undefined2 m_unk0xc0; // 0xc0 + undefined4 m_unk0xc4; // 0xc4 + LegoAnim m_unk0xc8; // 0xc8 + MxMatrix m_unk0xe0; // 0xe0 + undefined4 m_unk0x128; // 0x128 + undefined4 m_unk0x12c; // 0x12c + undefined4 m_unk0x130; // 0x130 + undefined4 m_unk0x134; // 0x134 + undefined4 m_unk0x138; // 0x138 + undefined4 m_unk0x13c; // 0x13c + undefined4 m_unk0x140; // 0x140 + MxS32 m_unk0x144; // 0x144 + MxS32 m_unk0x148; // 0x148 + undefined4 m_unk0x14c; // 0x14c }; #endif // LEGOCARBUILDANIMPRESENTER_H diff --git a/LEGO1/lego/legoomni/include/legocarraceactor.h b/LEGO1/lego/legoomni/include/legocarraceactor.h index 3905be16..3d78db17 100644 --- a/LEGO1/lego/legoomni/include/legocarraceactor.h +++ b/LEGO1/lego/legoomni/include/legocarraceactor.h @@ -3,9 +3,17 @@ #include "legoraceactor.h" -// VTABLE: LEGO1 0x100da0d8 -class LegoCarRaceActor : public LegoRaceActor { +/* + VTABLE: LEGO1 0x100da0c0 LegoRaceActor + VTABLE: LEGO1 0x100da0c8 LegoAnimActor + VTABLE: LEGO1 0x100da0d8 LegoPathActor + VTABLE: LEGO1 0x100da1a8 LegoCarRaceActor +*/ +// SIZE 0x1a0 +class LegoCarRaceActor : public virtual LegoRaceActor { public: + LegoCarRaceActor(); + // FUNCTION: LEGO1 0x10081650 inline const char* ClassName() const override // vtable+0x0c { @@ -27,8 +35,38 @@ class LegoCarRaceActor : public LegoRaceActor { void VTable0x98() override; // vtable+0x98 void VTable0x9c() override; // vtable+0x9c + virtual void FUN_10080590(); + + // FUNCTION: LEGO1 0x10012bb0 + virtual void FUN_10012bb0(float p_unk0x14) { m_unk0x14 = p_unk0x14; } + + // FUNCTION: LEGO1 0x10012bc0 + virtual float FUN_10012bc0() { return m_unk0x14; } + + // FUNCTION: LEGO1 0x10012bd0 + virtual void FUN_10012bd0(float p_unk0x10) { m_unk0x10 = p_unk0x10; } + + // FUNCTION: LEGO1 0x10012be0 + virtual float FUN_10012be0() { return m_unk0x10; } + + // FUNCTION: LEGO1 0x10012bf0 + virtual void FUN_10012bf0(float p_unk0x18) { m_unk0x18 = p_unk0x18; } + + // FUNCTION: LEGO1 0x10012c00 + virtual float FUN_10012c00() { return m_unk0x18; } + + virtual void VTable0x1c(); // vtable+0x1c + // SYNTHETIC: LEGO1 0x10081610 // LegoCarRaceActor::`scalar deleting destructor' + +protected: + float m_unk0x08; // 0x08 + MxU8 m_unk0x0c; // 0x0c + float m_unk0x10; // 0x10 + float m_unk0x14; // 0x14 + float m_unk0x18; // 0x18 + undefined4 m_unk0x1c; // 0x1c }; #endif // LEGOCARRACEACTOR_H diff --git a/LEGO1/lego/legoomni/include/legoextraactor.h b/LEGO1/lego/legoomni/include/legoextraactor.h index 87a0ab21..0aaf58f2 100644 --- a/LEGO1/lego/legoomni/include/legoextraactor.h +++ b/LEGO1/lego/legoomni/include/legoextraactor.h @@ -3,9 +3,16 @@ #include "legoanimactor.h" -// VTABLE: LEGO1 0x100d6c10 -class LegoExtraActor : public LegoAnimActor { +/* + VTABLE: LEGO1 0x100d6c00 LegoAnimActor + VTABLE: LEGO1 0x100d6c10 LegoPathActor + VTABLE: LEGO1 0x100d6cdc LegoExtraActor +*/ +// SIZE 0x1dc +class LegoExtraActor : public virtual LegoAnimActor { public: + LegoExtraActor(); + // FUNCTION: LEGO1 0x1002b7a0 inline const char* ClassName() const override // vtable+0x0c { @@ -18,6 +25,19 @@ class LegoExtraActor : public LegoAnimActor { { return !strcmp(p_name, LegoExtraActor::ClassName()) || LegoAnimActor::IsA(p_name); } + + virtual MxResult FUN_1002aae0(); + +private: + undefined4 m_unk0x08; // 0x08 + undefined m_unk0x0c; // 0x0c + undefined m_unk0x0d; // 0x0d + undefined m_unk0x0e; // 0x0e + undefined4 m_unk0x10; // 0x10 + undefined m_unk0x14; // 0x14 + MxMatrix m_unk0x18; // 0x18 + undefined4 m_unk0x60; // 0x60 + undefined4 m_unk0x64; // 0x64 }; #endif // LEGOEXTRAACTOR_H diff --git a/LEGO1/lego/legoomni/include/legogamestate.h b/LEGO1/lego/legoomni/include/legogamestate.h index f6fc965e..54539326 100644 --- a/LEGO1/lego/legoomni/include/legogamestate.h +++ b/LEGO1/lego/legoomni/include/legogamestate.h @@ -13,9 +13,10 @@ class LegoState; class MxVariable; class MxString; +// SIZE 0x08 struct ColorStringStruct { - const char* m_targetName; - const char* m_colorName; + const char* m_targetName; // 0x00 + const char* m_colorName; // 0x04 }; // SIZE 0x430 diff --git a/LEGO1/lego/legoomni/include/legojetski.h b/LEGO1/lego/legoomni/include/legojetski.h index 1ec0b9bb..c2e6d813 100644 --- a/LEGO1/lego/legoomni/include/legojetski.h +++ b/LEGO1/lego/legoomni/include/legojetski.h @@ -2,10 +2,20 @@ #define LEGOJETSKI_H #include "legojetskiraceactor.h" +#include "legoracemap.h" -// VTABLE: LEGO1 0x100d5a40 -class LegoJetski : public LegoJetskiRaceActor { +/* + VTABLE: LEGO1 0x100d5a08 LegoJetskiRaceActor + VTABLE: LEGO1 0x100d5a28 LegoRaceActor + VTABLE: LEGO1 0x100d5a30 LegoAnimActor + VTABLE: LEGO1 0x100d5a40 LegoPathActor + VTABLE: LEGO1 0x100d5b10 LegoRaceMap +*/ +// SIZE 0x1dc +class LegoJetski : public LegoJetskiRaceActor, public LegoRaceMap { public: + LegoJetski(); + MxLong Notify(MxParam& p_param) override; // vtable+0x04 // FUNCTION: LEGO1 0x10013e80 @@ -29,6 +39,8 @@ class LegoJetski : public LegoJetskiRaceActor { void VTable0x98() override; // vtable+0x98 void VTable0x9c() override; // vtable+0x9c + virtual void FUN_100136f0(float p_worldSpeed); + // SYNTHETIC: LEGO1 0x10013e20 // LegoJetski::`scalar deleting destructor' }; diff --git a/LEGO1/lego/legoomni/include/legojetskiraceactor.h b/LEGO1/lego/legoomni/include/legojetskiraceactor.h index fd7d88bb..d24566f5 100644 --- a/LEGO1/lego/legoomni/include/legojetskiraceactor.h +++ b/LEGO1/lego/legoomni/include/legojetskiraceactor.h @@ -3,9 +3,17 @@ #include "legocarraceactor.h" -// VTABLE: LEGO1 0x100da240 -class LegoJetskiRaceActor : public LegoCarRaceActor { +/* + VTABLE: LEGO1 0x100da208 LegoCarRaceActor + VTABLE: LEGO1 0x100da228 LegoRaceActor + VTABLE: LEGO1 0x100da230 LegoAnimActor + VTABLE: LEGO1 0x100da240 LegoPathActor +*/ +// SIZE 0x1a8 +class LegoJetskiRaceActor : public virtual LegoCarRaceActor { public: + LegoJetskiRaceActor(); + // FUNCTION: LEGO1 0x10081d80 inline const char* ClassName() const override // vtable+0x0c { @@ -23,6 +31,7 @@ class LegoJetskiRaceActor : public LegoCarRaceActor { void VTable0x70(float p_float) override; // vtable+0x70 void VTable0x98() override; // vtable+0x98 void VTable0x9c() override; // vtable+0x9c + void VTable0x1c() override; // vtable+0x1c // SYNTHETIC: LEGO1 0x10081d40 // LegoJetskiRaceActor::`scalar deleting destructor' diff --git a/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h b/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h index 50815015..c7095dac 100644 --- a/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h +++ b/LEGO1/lego/legoomni/include/legoloopinganimpresenter.h @@ -4,7 +4,7 @@ #include "legoanimpresenter.h" // VTABLE: LEGO1 0x100d4900 -// SIZE 0xc0 (discovered through inlined constructor at 0x10009ecd) +// SIZE 0xc0 class LegoLoopingAnimPresenter : public LegoAnimPresenter { public: // FUNCTION: LEGO1 0x1000c9a0 @@ -22,6 +22,9 @@ class LegoLoopingAnimPresenter : public LegoAnimPresenter { void StreamingTickle() override; // vtable+0x20 void PutFrame() override; // vtable+0x6c + +private: + undefined4 m_unk0xbc; // 0xbc }; // SYNTHETIC: LEGO1 0x1006d000 diff --git a/LEGO1/lego/legoomni/include/legometerpresenter.h b/LEGO1/lego/legoomni/include/legometerpresenter.h index 378c0574..8bb57608 100644 --- a/LEGO1/lego/legoomni/include/legometerpresenter.h +++ b/LEGO1/lego/legoomni/include/legometerpresenter.h @@ -4,7 +4,7 @@ #include "mxstillpresenter.h" // VTABLE: LEGO1 0x100d7ac8 -// SIZE 0x94 (from 0x1000a163) +// SIZE 0x94 class LegoMeterPresenter : public MxStillPresenter { public: LegoMeterPresenter(); diff --git a/LEGO1/lego/legoomni/include/legomodelpresenter.h b/LEGO1/lego/legoomni/include/legomodelpresenter.h index 8bc784a4..f8b4cea1 100644 --- a/LEGO1/lego/legoomni/include/legomodelpresenter.h +++ b/LEGO1/lego/legoomni/include/legomodelpresenter.h @@ -9,7 +9,7 @@ class LegoEntity; class MxDSChunk; // VTABLE: LEGO1 0x100d4e50 -// SIZE 0x6c (discovered through inline constructor at 0x10009ae6) +// SIZE 0x6c class LegoModelPresenter : public MxVideoPresenter { public: LegoModelPresenter() { Reset(); } diff --git a/LEGO1/lego/legoomni/include/legoobjectfactory.h b/LEGO1/lego/legoomni/include/legoobjectfactory.h index b119631b..ceb5f56e 100644 --- a/LEGO1/lego/legoomni/include/legoobjectfactory.h +++ b/LEGO1/lego/legoomni/include/legoobjectfactory.h @@ -59,8 +59,8 @@ X(DuneBuggy) \ X(Pizza) \ X(PizzaMissionState) \ - /*X(Act2Actor)*/ \ - /*X(Act2Brick)*/ \ + X(Act2Actor) \ + X(Act2Brick) \ /*X(Act2GenActor)*/ \ X(Act2PoliceStation) \ X(Act3) \ @@ -98,10 +98,11 @@ X(MxCompositeMediaPresenter) \ X(JukeBox) \ X(JukeBoxState) \ - /*X(RaceSkel)*/ \ + X(RaceSkel) \ X(AnimState) // VTABLE: LEGO1 0x100d4768 +// SIZE 0x1c8 class LegoObjectFactory : public MxObjectFactory { public: LegoObjectFactory(); diff --git a/LEGO1/lego/legoomni/include/legopartpresenter.h b/LEGO1/lego/legoomni/include/legopartpresenter.h index 875c39a7..5de1402d 100644 --- a/LEGO1/lego/legoomni/include/legopartpresenter.h +++ b/LEGO1/lego/legoomni/include/legopartpresenter.h @@ -5,7 +5,7 @@ #include "mxmediapresenter.h" // VTABLE: LEGO1 0x100d4df0 -// SIZE 0x54 (from inlined construction at 0x10009fac) +// SIZE 0x54 class LegoPartPresenter : public MxMediaPresenter { public: LegoPartPresenter() { Reset(); } diff --git a/LEGO1/lego/legoomni/include/legopathactor.h b/LEGO1/lego/legoomni/include/legopathactor.h index 01bb91e0..509b4c18 100644 --- a/LEGO1/lego/legoomni/include/legopathactor.h +++ b/LEGO1/lego/legoomni/include/legopathactor.h @@ -6,7 +6,7 @@ #include "realtime/matrix.h" // VTABLE: LEGO1 0x100d6e28 -// SIZE 0x154 (from inlined construction at 0x1000a346) +// SIZE 0x154 class LegoPathActor : public LegoActor { public: LegoPathActor(); diff --git a/LEGO1/lego/legoomni/include/legopathcontroller.h b/LEGO1/lego/legoomni/include/legopathcontroller.h index 5d054356..1fc4f616 100644 --- a/LEGO1/lego/legoomni/include/legopathcontroller.h +++ b/LEGO1/lego/legoomni/include/legopathcontroller.h @@ -38,6 +38,19 @@ class LegoPathController : public MxCore { undefined4 FUN_10046770(IslePathActor* p_actor); MxResult FUN_10046b30(LegoPathBoundary** p_path, MxS32& p_value); void Enable(MxBool p_enable); + +private: + undefined4 m_unk0x08; // 0x08 + undefined4 m_unk0x0c; // 0x0c + undefined4 m_unk0x10; // 0x10 + undefined4 m_unk0x14; // 0x14 + undefined2 m_unk0x18; // 0x18 + undefined2 m_unk0x1a; // 0x1a + undefined2 m_unk0x1c; // 0x1c + undefined2 m_unk0x1e; // 0x1e + // These 2 are some sort of template class + undefined m_unk0x20[0x10]; // 0x20 + undefined m_unk0x30[0x10]; // 0x30 }; #endif // LEGOPATHCONTROLLER_H diff --git a/LEGO1/lego/legoomni/include/legoraceactor.h b/LEGO1/lego/legoomni/include/legoraceactor.h index 48f66b26..d43a6799 100644 --- a/LEGO1/lego/legoomni/include/legoraceactor.h +++ b/LEGO1/lego/legoomni/include/legoraceactor.h @@ -4,9 +4,16 @@ #include "legoanimactor.h" #include "realtime/matrix.h" -// VTABLE: LEGO1 0x100d5b88 -class LegoRaceActor : public LegoAnimActor { +/* + VTABLE: LEGO1 0x100d5b78 LegoAnimActor + VTABLE: LEGO1 0x100d5b88 LegoPathActor + VTABLE: LEGO1 0x100d5c54 LegoRaceActor +*/ +// SIZE 0x180 +class LegoRaceActor : public virtual LegoAnimActor { public: + LegoRaceActor(); + // FUNCTION: LEGO1 0x10014af0 inline const char* ClassName() const override // vtable+0x0c { @@ -28,8 +35,14 @@ class LegoRaceActor : public LegoAnimActor { MxS32 VTable0x90() override; // vtable+0x90 MxS32 VTable0x94() override; // vtable+0x94 + // FUNCTION: LEGO1 0x10014aa0 + virtual MxResult FUN_10014aa0() { return SUCCESS; } + // SYNTHETIC: LEGO1 0x10014ab0 // LegoRaceActor::`scalar deleting destructor' + +private: + undefined4 m_unk0x08; // 0x08 }; #endif // LEGORACEACTOR_H diff --git a/LEGO1/lego/legoomni/include/legoracecar.h b/LEGO1/lego/legoomni/include/legoracecar.h index f90c4cad..331f11f7 100644 --- a/LEGO1/lego/legoomni/include/legoracecar.h +++ b/LEGO1/lego/legoomni/include/legoracecar.h @@ -1,13 +1,21 @@ -#ifndef LEGOCARRACE_H -#define LEGOCARRACE_H +#ifndef LEGORACECAR_H +#define LEGORACECAR_H #include "legocarraceactor.h" #include "legopathactor.h" +#include "legoracemap.h" -// VTABLE: LEGO1 0x100d58b8 +/* + VTABLE: LEGO1 0x100d58a0 LegoRaceActor + VTABLE: LEGO1 0x100d58a8 LegoAnimActor + VTABLE: LEGO1 0x100d58b8 LegoPathActor + VTABLE: LEGO1 0x100d5894 LegoRaceMap + VTABLE: LEGO1 0x100d5898 LegoCarRaceActor +*/ // SIZE 0x200 -class LegoRaceCar : public LegoCarRaceActor { +class LegoRaceCar : public LegoCarRaceActor, public LegoRaceMap { public: + LegoRaceCar(); MxLong Notify(MxParam& p_param) override; // vtable+0x04 // FUNCTION: LEGO1 0x10014290 @@ -31,8 +39,21 @@ class LegoRaceCar : public LegoCarRaceActor { void VTable0x98() override; // vtable+0x98 void VTable0x9c() override; // vtable+0x9c + virtual void FUN_10012ea0(float p_worldSpeed); + virtual void FUN_10012ff0(float); + virtual MxBool FUN_10013130(float); + // SYNTHETIC: LEGO1 0x10014230 // LegoRaceCar::`scalar deleting destructor' + +private: + undefined m_unk0x54; // 0x54 + undefined4 m_unk0x58; // 0x58 + Mx3DPointFloat m_unk0x5c; // 0x5c + undefined4 m_unk0x70; // 0x70 + undefined4 m_unk0x74; // 0x74 + undefined4 m_unk0x78; // 0x78 + undefined4 m_unk0x7c; // 0x7c }; -#endif // LEGOCARRACE_H +#endif // LEGORACECAR_H diff --git a/LEGO1/lego/legoomni/include/legoracemap.h b/LEGO1/lego/legoomni/include/legoracemap.h new file mode 100644 index 00000000..11d3d69d --- /dev/null +++ b/LEGO1/lego/legoomni/include/legoracemap.h @@ -0,0 +1,36 @@ +#ifndef LEGORACEMAP_H +#define LEGORACEMAP_H + +#include "legoraceactor.h" + +/* + VTABLE: LEGO1 0x100d8858 LegoRaceActor + VTABLE: LEGO1 0x100d8860 LegoAnimActor + VTABLE: LEGO1 0x100d8870 LegoPathActor + VTABLE: LEGO1 0x100d893c LegoRaceMap +*/ +// SIZE 0x1b4 +class LegoRaceMap : public virtual LegoRaceActor { +public: + LegoRaceMap(); + + virtual void FUN_1005d4b0(); + + // SYNTHETIC: LEGO1 0x1005d5c0 + // LegoRaceMap::`scalar deleting destructor' + +private: + MxBool m_unk0x08; // 0x08 + void* m_unk0x0c; // 0x0c + undefined4 m_unk0x10; // 0x10 + float m_unk0x14; // 0x14 + float m_unk0x18; // 0x18 + float m_unk0x1c; // 0x1c + float m_unk0x20; // 0x20 + float m_unk0x24; // 0x24 + float m_unk0x28; // 0x28 + float m_unk0x2c; // 0x2c + undefined4 m_unk0x30; // 0x30 +}; + +#endif // LEGORACEMAP_H diff --git a/LEGO1/lego/legoomni/include/legotexturepresenter.h b/LEGO1/lego/legoomni/include/legotexturepresenter.h index be42cc59..49947295 100644 --- a/LEGO1/lego/legoomni/include/legotexturepresenter.h +++ b/LEGO1/lego/legoomni/include/legotexturepresenter.h @@ -5,7 +5,7 @@ #include "mxmediapresenter.h" // VTABLE: LEGO1 0x100d4d90 -// SIZE 0x54 (from inlined construction at 0x10009bb5) +// SIZE 0x54 class LegoTexturePresenter : public MxMediaPresenter { public: LegoTexturePresenter() : m_textures(NULL) {} diff --git a/LEGO1/lego/legoomni/include/legounknown100d7c88.h b/LEGO1/lego/legoomni/include/legounknown100d7c88.h index 2fa960c8..36f20e85 100644 --- a/LEGO1/lego/legoomni/include/legounknown100d7c88.h +++ b/LEGO1/lego/legoomni/include/legounknown100d7c88.h @@ -5,6 +5,7 @@ #include "mxstring.h" // VTABLE: LEGO1 0x100d7c88 +// SIZE 0x18 class LegoUnknown100d7c88 { public: ~LegoUnknown100d7c88(); diff --git a/LEGO1/lego/legoomni/include/pizzeria.h b/LEGO1/lego/legoomni/include/pizzeria.h index 49c4960a..ca09d7dc 100644 --- a/LEGO1/lego/legoomni/include/pizzeria.h +++ b/LEGO1/lego/legoomni/include/pizzeria.h @@ -7,6 +7,8 @@ // SIZE 0x84 class Pizzeria : public IsleActor { public: + Pizzeria() : m_unk0x7c(0) {} + // FUNCTION: LEGO1 0x1000e780 inline const char* ClassName() const override // vtable+0x0c { @@ -24,6 +26,11 @@ class Pizzeria : public IsleActor { // SYNTHETIC: LEGO1 0x1000e8d0 // Pizzeria::`scalar deleting destructor' + +private: + undefined4 m_unk0x78; // 0x78 + undefined4 m_unk0x7c; // 0x7c + undefined4 m_unk0x80; // 0x80 }; #endif // PIZZERIA_H diff --git a/LEGO1/lego/legoomni/include/pizzeriastate.h b/LEGO1/lego/legoomni/include/pizzeriastate.h index b4d6b0fe..2146d155 100644 --- a/LEGO1/lego/legoomni/include/pizzeriastate.h +++ b/LEGO1/lego/legoomni/include/pizzeriastate.h @@ -3,8 +3,17 @@ #include "legostate.h" +// SIZE 0x14 +struct PizzeriaStateStruct { + undefined4 m_unk0x00; // 0x00 + undefined4 m_unk0x04; // 0x04 + undefined4 m_unk0x08; // 0x08 + undefined4 m_unk0x0c; // 0x0c + undefined4 m_unk0x10; // 0x10 +}; + // VTABLE: LEGO1 0x100d5ee8 -// SIZE 0xb4 +// SIZE 0x58 class PizzeriaState : public LegoState { public: PizzeriaState(); @@ -26,6 +35,10 @@ class PizzeriaState : public LegoState { // SYNTHETIC: LEGO1 0x10017ce0 // PizzeriaState::`scalar deleting destructor' + +private: + Playlist m_unk0x08[5]; // 0x08 + PizzeriaStateStruct m_unk0x44; // 0x44 }; #endif // PIZZERIASTATE_H diff --git a/LEGO1/lego/legoomni/include/police.h b/LEGO1/lego/legoomni/include/police.h index 721ec7cb..5b4e4778 100644 --- a/LEGO1/lego/legoomni/include/police.h +++ b/LEGO1/lego/legoomni/include/police.h @@ -12,7 +12,6 @@ class PoliceState; // VTABLE: LEGO1 0x100d8a80 // SIZE 0x110 -// Radio at 0xf8 class Police : public LegoWorld { public: Police(); diff --git a/LEGO1/lego/legoomni/include/raceskel.h b/LEGO1/lego/legoomni/include/raceskel.h new file mode 100644 index 00000000..6d9a270b --- /dev/null +++ b/LEGO1/lego/legoomni/include/raceskel.h @@ -0,0 +1,19 @@ +#ifndef RACESKEL_H +#define RACESKEL_H + +#include "legoanimactor.h" + +/* + VTABLE: LEGO1 0x100d7668 LegoPathActor + VTABLE: LEGO1 0x100d7738 LegoAnimActor +*/ +// SIZE 0x178 +class RaceSkel : public LegoAnimActor { +public: + RaceSkel(); + +private: + undefined4 m_unk0x1c; // 0x1c +}; + +#endif // RACESKEL_H diff --git a/LEGO1/lego/legoomni/src/act3/act3shark.cpp b/LEGO1/lego/legoomni/src/act3/act3shark.cpp index f695234d..038cf67b 100644 --- a/LEGO1/lego/legoomni/src/act3/act3shark.cpp +++ b/LEGO1/lego/legoomni/src/act3/act3shark.cpp @@ -1,11 +1,26 @@ #include "act3shark.h" +DECOMP_SIZE_ASSERT(Act3Shark, 0x1a8) + // STUB: LEGO1 0x1001a1c0 void Act3Shark::VTable0x74(Matrix4& p_transform) { // TODO } +// STUB: LEGO1 0x10042ab0 +Act3Shark::Act3Shark() +{ + // TODO +} + +// STUB: LEGO1 0x10042ce0 +MxResult Act3Shark::FUN_10042ce0(void*) +{ + // TODO + return SUCCESS; +} + // STUB: LEGO1 0x100430e0 void Act3Shark::ParseAction(char*) { diff --git a/LEGO1/lego/legoomni/src/act3/act3state.cpp b/LEGO1/lego/legoomni/src/act3/act3state.cpp index 32b45eb3..7061d74f 100644 --- a/LEGO1/lego/legoomni/src/act3/act3state.cpp +++ b/LEGO1/lego/legoomni/src/act3/act3state.cpp @@ -1,5 +1,7 @@ #include "act3state.h" +DECOMP_SIZE_ASSERT(Act3State, 0x0c) + // FUNCTION: LEGO1 0x1000e2f0 MxBool Act3State::VTable0x14() { diff --git a/LEGO1/lego/legoomni/src/actors/act2actor.cpp b/LEGO1/lego/legoomni/src/actors/act2actor.cpp new file mode 100644 index 00000000..9626ef7a --- /dev/null +++ b/LEGO1/lego/legoomni/src/actors/act2actor.cpp @@ -0,0 +1,9 @@ +#include "act2actor.h" + +DECOMP_SIZE_ASSERT(Act2Actor, 0x1a8) + +// STUB: LEGO1 0x100187e0 +Act2Actor::Act2Actor() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/actors/act3actor.cpp b/LEGO1/lego/legoomni/src/actors/act3actor.cpp new file mode 100644 index 00000000..ff81900b --- /dev/null +++ b/LEGO1/lego/legoomni/src/actors/act3actor.cpp @@ -0,0 +1,9 @@ +#include "act3actor.h" + +DECOMP_SIZE_ASSERT(Act3Actor, 0x178) + +// STUB: LEGO1 0x1003fa50 +Act3Actor::Act3Actor() +{ + m_unk0x1c = 0; +} diff --git a/LEGO1/lego/legoomni/src/actors/ambulance.cpp b/LEGO1/lego/legoomni/src/actors/ambulance.cpp index 298b1fb4..168e48ed 100644 --- a/LEGO1/lego/legoomni/src/actors/ambulance.cpp +++ b/LEGO1/lego/legoomni/src/actors/ambulance.cpp @@ -2,7 +2,7 @@ #include "decomp.h" -DECOMP_SIZE_ASSERT(Ambulance, 0x184); +DECOMP_SIZE_ASSERT(Ambulance, 0x184) // FUNCTION: LEGO1 0x10035ee0 Ambulance::Ambulance() diff --git a/LEGO1/lego/legoomni/src/actors/bike.cpp b/LEGO1/lego/legoomni/src/actors/bike.cpp index 4ee38159..14133abd 100644 --- a/LEGO1/lego/legoomni/src/actors/bike.cpp +++ b/LEGO1/lego/legoomni/src/actors/bike.cpp @@ -8,7 +8,7 @@ #include "legoworld.h" #include "misc.h" -DECOMP_SIZE_ASSERT(Bike, 0x164); +DECOMP_SIZE_ASSERT(Bike, 0x164) // FUNCTION: LEGO1 0x10076670 Bike::Bike() diff --git a/LEGO1/lego/legoomni/src/actors/bumpbouy.cpp b/LEGO1/lego/legoomni/src/actors/bumpbouy.cpp index 6ae105ff..db86db35 100644 --- a/LEGO1/lego/legoomni/src/actors/bumpbouy.cpp +++ b/LEGO1/lego/legoomni/src/actors/bumpbouy.cpp @@ -1,5 +1,7 @@ #include "bumpbouy.h" +DECOMP_SIZE_ASSERT(BumpBouy, 0x174) + // STUB: LEGO1 0x1000fd00 void BumpBouy::ParseAction(char*) { @@ -24,6 +26,11 @@ void BumpBouy::VTable0x74(Matrix4& p_transform) // TODO } +// STUB: LEGO1 0x10027220 +BumpBouy::BumpBouy() +{ +} + // STUB: LEGO1 0x100274d0 MxLong BumpBouy::Notify(MxParam& p_param) { diff --git a/LEGO1/lego/legoomni/src/actors/doors.cpp b/LEGO1/lego/legoomni/src/actors/doors.cpp index aa7e2031..9799b870 100644 --- a/LEGO1/lego/legoomni/src/actors/doors.cpp +++ b/LEGO1/lego/legoomni/src/actors/doors.cpp @@ -1,5 +1,7 @@ #include "doors.h" +DECOMP_SIZE_ASSERT(Doors, 0x1f8) + // STUB: LEGO1 0x10066100 MxS32 Doors::VTable0x94() { diff --git a/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp b/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp index 70a19138..3331d82f 100644 --- a/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp +++ b/LEGO1/lego/legoomni/src/actors/dunebuggy.cpp @@ -2,7 +2,7 @@ #include "decomp.h" -DECOMP_SIZE_ASSERT(DuneBuggy, 0x16c); +DECOMP_SIZE_ASSERT(DuneBuggy, 0x16c) // FUNCTION: LEGO1 0x10067bb0 DuneBuggy::DuneBuggy() diff --git a/LEGO1/lego/legoomni/src/actors/jetski.cpp b/LEGO1/lego/legoomni/src/actors/jetski.cpp index b68e6b5e..8ac6924b 100644 --- a/LEGO1/lego/legoomni/src/actors/jetski.cpp +++ b/LEGO1/lego/legoomni/src/actors/jetski.cpp @@ -1,6 +1,6 @@ #include "jetski.h" -DECOMP_SIZE_ASSERT(Jetski, 0x164); +DECOMP_SIZE_ASSERT(Jetski, 0x164) // FUNCTION: LEGO1 0x1007e3b0 Jetski::Jetski() diff --git a/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp b/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp index 7e7a708b..167fc4ce 100644 --- a/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp +++ b/LEGO1/lego/legoomni/src/actors/jukeboxentity.cpp @@ -14,6 +14,8 @@ #include "mxnotificationmanager.h" #include "mxtransitionmanager.h" +DECOMP_SIZE_ASSERT(JukeBoxEntity, 0x6c) + // FUNCTION: LEGO1 0x10085bc0 JukeBoxEntity::JukeBoxEntity() { diff --git a/LEGO1/lego/legoomni/src/actors/motorcycle.cpp b/LEGO1/lego/legoomni/src/actors/motorcycle.cpp index 61e8eb3c..68ce7950 100644 --- a/LEGO1/lego/legoomni/src/actors/motorcycle.cpp +++ b/LEGO1/lego/legoomni/src/actors/motorcycle.cpp @@ -1,6 +1,6 @@ #include "motocycle.h" -DECOMP_SIZE_ASSERT(Motocycle, 0x16c); +DECOMP_SIZE_ASSERT(Motocycle, 0x16c) // FUNCTION: LEGO1 0x100357b0 Motocycle::Motocycle() diff --git a/LEGO1/lego/legoomni/src/actors/pizza.cpp b/LEGO1/lego/legoomni/src/actors/pizza.cpp index 1e36a7c4..e21effe1 100644 --- a/LEGO1/lego/legoomni/src/actors/pizza.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizza.cpp @@ -3,7 +3,7 @@ #include "mxmisc.h" #include "mxticklemanager.h" -DECOMP_SIZE_ASSERT(Pizza, 0x9c); +DECOMP_SIZE_ASSERT(Pizza, 0x9c) // FUNCTION: LEGO1 0x10037ef0 Pizza::Pizza() diff --git a/LEGO1/lego/legoomni/src/actors/pizzeria.cpp b/LEGO1/lego/legoomni/src/actors/pizzeria.cpp index 84404f01..b8c47e36 100644 --- a/LEGO1/lego/legoomni/src/actors/pizzeria.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizzeria.cpp @@ -1,5 +1,7 @@ #include "pizzeria.h" +DECOMP_SIZE_ASSERT(Pizzeria, 0x84) + // STUB: LEGO1 0x100179c0 MxResult Pizzeria::Create(MxDSAction& p_dsAction) { diff --git a/LEGO1/lego/legoomni/src/actors/racecar.cpp b/LEGO1/lego/legoomni/src/actors/racecar.cpp index f60beff6..3907a7d0 100644 --- a/LEGO1/lego/legoomni/src/actors/racecar.cpp +++ b/LEGO1/lego/legoomni/src/actors/racecar.cpp @@ -3,7 +3,7 @@ #include "legocontrolmanager.h" #include "misc.h" -DECOMP_SIZE_ASSERT(RaceCar, 0x164); +DECOMP_SIZE_ASSERT(RaceCar, 0x164) // FUNCTION: LEGO1 0x10028200 RaceCar::RaceCar() diff --git a/LEGO1/lego/legoomni/src/actors/radio.cpp b/LEGO1/lego/legoomni/src/actors/radio.cpp index 13c973ed..e21a399f 100644 --- a/LEGO1/lego/legoomni/src/actors/radio.cpp +++ b/LEGO1/lego/legoomni/src/actors/radio.cpp @@ -10,7 +10,7 @@ #include "mxmisc.h" #include "mxnotificationmanager.h" -DECOMP_SIZE_ASSERT(Radio, 0x10); +DECOMP_SIZE_ASSERT(Radio, 0x10) // FUNCTION: LEGO1 0x1002c850 Radio::Radio() diff --git a/LEGO1/lego/legoomni/src/actors/skateboard.cpp b/LEGO1/lego/legoomni/src/actors/skateboard.cpp index 5024c51d..a111c7a7 100644 --- a/LEGO1/lego/legoomni/src/actors/skateboard.cpp +++ b/LEGO1/lego/legoomni/src/actors/skateboard.cpp @@ -4,7 +4,7 @@ #include "mxmisc.h" #include "mxnotificationmanager.h" -DECOMP_SIZE_ASSERT(SkateBoard, 0x168); +DECOMP_SIZE_ASSERT(SkateBoard, 0x168) // FUNCTION: LEGO1 0x1000fd40 SkateBoard::SkateBoard() diff --git a/LEGO1/lego/legoomni/src/actors/towtrack.cpp b/LEGO1/lego/legoomni/src/actors/towtrack.cpp index 673efddc..c99c4f11 100644 --- a/LEGO1/lego/legoomni/src/actors/towtrack.cpp +++ b/LEGO1/lego/legoomni/src/actors/towtrack.cpp @@ -1,6 +1,6 @@ #include "towtrack.h" -DECOMP_SIZE_ASSERT(TowTrack, 0x180); +DECOMP_SIZE_ASSERT(TowTrack, 0x180) // FUNCTION: LEGO1 0x1004c720 TowTrack::TowTrack() diff --git a/LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp b/LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp index 27baac13..15f511be 100644 --- a/LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp +++ b/LEGO1/lego/legoomni/src/audio/legosoundmanager.cpp @@ -3,6 +3,8 @@ #include "mxautolock.h" #include "mxomni.h" +DECOMP_SIZE_ASSERT(LegoSoundManager, 0x44) + // FUNCTION: LEGO1 0x100298a0 LegoSoundManager::LegoSoundManager() { diff --git a/LEGO1/lego/legoomni/src/build/buildingentity.cpp b/LEGO1/lego/legoomni/src/build/buildingentity.cpp index 01eb235b..15a2fdfd 100644 --- a/LEGO1/lego/legoomni/src/build/buildingentity.cpp +++ b/LEGO1/lego/legoomni/src/build/buildingentity.cpp @@ -3,6 +3,8 @@ #include "mxmisc.h" #include "mxnotificationmanager.h" +DECOMP_SIZE_ASSERT(BuildingEntity, 0x68) + // FUNCTION: LEGO1 0x10014e20 BuildingEntity::BuildingEntity() { diff --git a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp index 70d71a0c..1a9ca3fa 100644 --- a/LEGO1/lego/legoomni/src/build/helicopterstate.cpp +++ b/LEGO1/lego/legoomni/src/build/helicopterstate.cpp @@ -1 +1,3 @@ #include "helicopterstate.h" + +DECOMP_SIZE_ASSERT(HelicopterState, 0x0c) diff --git a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp index f27a1533..90d06155 100644 --- a/LEGO1/lego/legoomni/src/build/legocarbuild.cpp +++ b/LEGO1/lego/legoomni/src/build/legocarbuild.cpp @@ -1,5 +1,7 @@ #include "legocarbuild.h" +DECOMP_SIZE_ASSERT(LegoCarBuild, 0x34c) + // STUB: LEGO1 0x100226d0 LegoCarBuild::LegoCarBuild() { diff --git a/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp b/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp index 6503b2e3..9854dd39 100644 --- a/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp @@ -170,7 +170,7 @@ LegoROI* LegoCharacterManager::GetROI(const char* p_key, MxBool p_createEntity) if (character != NULL) { if (p_createEntity && character->m_roi->GetEntity() == NULL) { // TODO: Match - LegoAnimActor* actor = new LegoAnimActor(1); + LegoAnimActor* actor = new LegoAnimActor(); actor->SetROI(character->m_roi, FALSE, FALSE); actor->FUN_100114e0(0); diff --git a/LEGO1/lego/legoomni/src/common/legogamestate.cpp b/LEGO1/lego/legoomni/src/common/legogamestate.cpp index f223bdb5..221e4081 100644 --- a/LEGO1/lego/legoomni/src/common/legogamestate.cpp +++ b/LEGO1/lego/legoomni/src/common/legogamestate.cpp @@ -34,6 +34,7 @@ DECOMP_SIZE_ASSERT(LegoGameState::Username, 0x0e) DECOMP_SIZE_ASSERT(LegoGameState::ScoreItem, 0x2c) DECOMP_SIZE_ASSERT(LegoGameState::History, 0x374) DECOMP_SIZE_ASSERT(LegoGameState, 0x430) +DECOMP_SIZE_ASSERT(ColorStringStruct, 0x08) // GLOBAL: LEGO1 0x100f3e40 // STRING: LEGO1 0x100f3e3c diff --git a/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp b/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp index 9d87ccf1..46926705 100644 --- a/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp +++ b/LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp @@ -1,5 +1,7 @@ #include "legoobjectfactory.h" +#include "act2actor.h" +#include "act2brick.h" #include "carrace.h" #include "decomp.h" #include "dunebuggy.h" @@ -56,8 +58,6 @@ #include "score.h" #include "scorestate.h" #include "skateboard.h" -// #include "act2actor.h" -#include "act2brick.h" // #include "act2genactor.h" #include "act2policestation.h" #include "act3.h" @@ -77,6 +77,7 @@ #include "act1state.h" #include "act3actor.h" #include "act3shark.h" +#include "animstate.h" #include "beachhouseentity.h" #include "bumpbouy.h" #include "carracestate.h" @@ -93,10 +94,9 @@ #include "pizzeria.h" #include "pizzeriastate.h" #include "policeentity.h" +#include "raceskel.h" #include "racestandsentity.h" #include "radiostate.h" -// #include "raceskel.h" -#include "animstate.h" // TODO: Before HospitalState, add all of the different LegoVehicleBuildState's diff --git a/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp b/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp index d1b6d83c..75034536 100644 --- a/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp +++ b/LEGO1/lego/legoomni/src/common/legotextureinfo.cpp @@ -6,7 +6,7 @@ #include "misc/legotexture.h" #include "tgl/d3drm/impl.h" -DECOMP_SIZE_ASSERT(LegoTextureInfo, 0x10); +DECOMP_SIZE_ASSERT(LegoTextureInfo, 0x10) // FUNCTION: LEGO1 0x10065bf0 LegoTextureInfo::LegoTextureInfo() diff --git a/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp b/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp index e37a738b..b7537d9e 100644 --- a/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/mxtransitionmanager.cpp @@ -11,7 +11,7 @@ #include "mxticklemanager.h" #include "mxvideopresenter.h" -DECOMP_SIZE_ASSERT(MxTransitionManager, 0x900); +DECOMP_SIZE_ASSERT(MxTransitionManager, 0x900) // GLOBAL: LEGO1 0x100f4378 RECT g_fullScreenRect = {0, 0, 640, 480}; diff --git a/LEGO1/lego/legoomni/src/entity/act2brick.cpp b/LEGO1/lego/legoomni/src/entity/act2brick.cpp index 338d2ae9..97992d0b 100644 --- a/LEGO1/lego/legoomni/src/entity/act2brick.cpp +++ b/LEGO1/lego/legoomni/src/entity/act2brick.cpp @@ -1,5 +1,7 @@ #include "act2brick.h" +DECOMP_SIZE_ASSERT(Act2Brick, 0x194) + // STUB: LEGO1 0x1007a2b0 Act2Brick::Act2Brick() { diff --git a/LEGO1/lego/legoomni/src/entity/act2policestation.cpp b/LEGO1/lego/legoomni/src/entity/act2policestation.cpp index 9116b70a..a8636335 100644 --- a/LEGO1/lego/legoomni/src/entity/act2policestation.cpp +++ b/LEGO1/lego/legoomni/src/entity/act2policestation.cpp @@ -1,5 +1,7 @@ #include "act2policestation.h" +DECOMP_SIZE_ASSERT(Act2PoliceStation, 0x68) + // STUB: LEGO1 0x1004e0e0 MxLong Act2PoliceStation::Notify(MxParam& p_param) { diff --git a/LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp b/LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp index 4f54a6a5..40273e1c 100644 --- a/LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoactorpresenter.cpp @@ -3,6 +3,8 @@ #include "legoentity.h" #include "misc.h" +DECOMP_SIZE_ASSERT(LegoActorPresenter, 0x50) + // FUNCTION: LEGO1 0x10076c30 void LegoActorPresenter::ReadyTickle() { diff --git a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp index 0245e46f..99bfbf46 100644 --- a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp @@ -6,7 +6,7 @@ #include "misc.h" #include "realtime/realtime.h" -DECOMP_SIZE_ASSERT(LegoCameraController, 0xc8); +DECOMP_SIZE_ASSERT(LegoCameraController, 0xc8) // FUNCTION: LEGO1 0x10011d50 LegoCameraController::LegoCameraController() diff --git a/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp index 6e967472..d58f796b 100644 --- a/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocarraceactor.cpp @@ -1,5 +1,14 @@ #include "legocarraceactor.h" +#include "mxmisc.h" +#include "mxvariabletable.h" + +DECOMP_SIZE_ASSERT(LegoCarRaceActor, 0x1a0) + +// GLOBAL: LEGO1 0x100f7af0 +// STRING: LEGO1 0x100f7ae4 +const char* g_fuel = "FUEL"; + // STUB: LEGO1 0x10014130 void LegoCarRaceActor::VTable0x68() { @@ -20,6 +29,34 @@ MxS32 LegoCarRaceActor::VTable0x94() return 0; } +// FUNCTION: LEGO1 0x10080350 +LegoCarRaceActor::LegoCarRaceActor() +{ + m_unk0x08 = 1.0f; + m_unk0x70 = 0.0f; + m_unk0x0c = 0; + m_unk0x13c = 0.0f; + m_unk0x68 = 1.0f; + m_unk0x1c = 0; + m_unk0x10 = 0.65f; + m_unk0x14 = 0.03f; + m_unk0x18 = 0.6f; + m_unk0x140 = 0.1f; + m_unk0x150 = -5.0f; + m_unk0x148 = 1; + VariableTable()->SetVariable(g_fuel, "0.8"); +} + +// STUB: LEGO1 0x10080590 +void LegoCarRaceActor::FUN_10080590() +{ +} + +// STUB: LEGO1 0x10080740 +void LegoCarRaceActor::VTable0x1c() +{ +} + // STUB: LEGO1 0x10081830 void LegoCarRaceActor::VTable0x6c() { diff --git a/LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp b/LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp index b185329f..a755bb2f 100644 --- a/LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoentitypresenter.cpp @@ -4,7 +4,7 @@ #include "legovideomanager.h" #include "misc.h" -DECOMP_SIZE_ASSERT(LegoEntityPresenter, 0x50); +DECOMP_SIZE_ASSERT(LegoEntityPresenter, 0x50) // FUNCTION: LEGO1 0x10053440 LegoEntityPresenter::LegoEntityPresenter() diff --git a/LEGO1/lego/legoomni/src/entity/legojetski.cpp b/LEGO1/lego/legoomni/src/entity/legojetski.cpp index 828b4f5b..c8b41efe 100644 --- a/LEGO1/lego/legoomni/src/entity/legojetski.cpp +++ b/LEGO1/lego/legoomni/src/entity/legojetski.cpp @@ -1,5 +1,29 @@ #include "legojetski.h" +#include "mxmisc.h" +#include "mxnotificationmanager.h" + +DECOMP_SIZE_ASSERT(LegoJetski, 0x1dc) + +// FUNCTION: LEGO1 0x100136f0 +void LegoJetski::FUN_100136f0(float p_worldSpeed) +{ + if (p_worldSpeed < 0) { + LegoCarRaceActor::m_unk0x0c = 2; + m_unk0x13c = 0; + SetWorldSpeed(0); + } + else { + m_unk0x13c = p_worldSpeed; + } +} + +// FUNCTION: LEGO1 0x10013820 +LegoJetski::LegoJetski() +{ + NotificationManager()->Register(this); +} + // STUB: LEGO1 0x10013e70 MxLong LegoJetski::Notify(MxParam& p_param) { diff --git a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp index e8c7801f..14fde544 100644 --- a/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp +++ b/LEGO1/lego/legoomni/src/entity/legojetskiraceactor.cpp @@ -1,5 +1,22 @@ #include "legojetskiraceactor.h" +DECOMP_SIZE_ASSERT(LegoJetskiRaceActor, 0x1a8) + +// STUB: LEGO1 0x10014220 +void LegoJetskiRaceActor::VTable0x1c() +{ + // TODO +} + +// FUNCTION: LEGO1 0x10080ef0 +LegoJetskiRaceActor::LegoJetskiRaceActor() +{ + m_unk0x10 = 0.95f; + m_unk0x14 = 0.04f; + m_unk0x18 = 0.5f; + m_unk0x150 = 1.5f; +} + // STUB: LEGO1 0x10081fc0 void LegoJetskiRaceActor::VTable0x6c() { diff --git a/LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp b/LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp index fe2ee2d0..ce1db830 100644 --- a/LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legopovcontroller.cpp @@ -11,8 +11,8 @@ #include "realtime/realtime.h" #include "roi/legoroi.h" -DECOMP_SIZE_ASSERT(LegoMouseController, 0x20); -DECOMP_SIZE_ASSERT(LegoPointOfViewController, 0x38); +DECOMP_SIZE_ASSERT(LegoMouseController, 0x20) +DECOMP_SIZE_ASSERT(LegoPointOfViewController, 0x38) // GLOBAL: LEGO1 0x100f75ac MxBool g_unk0x100f75ac = FALSE; diff --git a/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp b/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp index e3d93ba8..51c4c25d 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp @@ -29,6 +29,8 @@ #include +DECOMP_SIZE_ASSERT(LegoWorldPresenter, 0x54) + // GLOBAL: LEGO1 0x100f75d4 MxS32 g_legoWorldPresenterQuality = 1; diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp index ebe58c46..142c7466 100644 --- a/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp +++ b/LEGO1/lego/legoomni/src/gasstation/gasstationentity.cpp @@ -1 +1,3 @@ #include "gasstationentity.h" + +DECOMP_SIZE_ASSERT(GasStationEntity, 0x68) diff --git a/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp b/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp index b4b242ac..ed6f3248 100644 --- a/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp +++ b/LEGO1/lego/legoomni/src/gasstation/gasstationstate.cpp @@ -1,6 +1,6 @@ #include "gasstationstate.h" -DECOMP_SIZE_ASSERT(GasStationState, 0x24); +DECOMP_SIZE_ASSERT(GasStationState, 0x24) // FUNCTION: LEGO1 0x10005eb0 GasStationState::GasStationState() diff --git a/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp b/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp index e99c3229..ac8c6c6d 100644 --- a/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp +++ b/LEGO1/lego/legoomni/src/hospital/ambulancemissionstate.cpp @@ -1,6 +1,6 @@ #include "ambulancemissionstate.h" -DECOMP_SIZE_ASSERT(AmbulanceMissionState, 0x24); +DECOMP_SIZE_ASSERT(AmbulanceMissionState, 0x24) // FUNCTION: LEGO1 0x100373a0 AmbulanceMissionState::AmbulanceMissionState() diff --git a/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp b/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp index 8da86464..35e6eb90 100644 --- a/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp +++ b/LEGO1/lego/legoomni/src/hospital/hospitalentity.cpp @@ -1 +1,3 @@ #include "hospitalentity.h" + +DECOMP_SIZE_ASSERT(HospitalEntity, 0x68) diff --git a/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp b/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp index 211cf0b8..0f5689ac 100644 --- a/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp +++ b/LEGO1/lego/legoomni/src/infocenter/infocenterentity.cpp @@ -1 +1,3 @@ #include "infocenterentity.h" + +DECOMP_SIZE_ASSERT(InfoCenterEntity, 0x68) diff --git a/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp b/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp index 8efa9807..2af1ddbb 100644 --- a/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp +++ b/LEGO1/lego/legoomni/src/infocenter/infocenterstate.cpp @@ -3,7 +3,7 @@ #include "infocenter.h" #include "infomain_actions.h" -DECOMP_SIZE_ASSERT(InfocenterState, 0x94); +DECOMP_SIZE_ASSERT(InfocenterState, 0x94) // GLOBAL: LEGO1 0x100f76a8 InfomainScript::Script g_exitDialogueAct1[14] = { diff --git a/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp b/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp index bab97719..2d270334 100644 --- a/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp +++ b/LEGO1/lego/legoomni/src/infocenter/scorestate.cpp @@ -1,6 +1,6 @@ #include "scorestate.h" -DECOMP_SIZE_ASSERT(ScoreState, 0x0c); +DECOMP_SIZE_ASSERT(ScoreState, 0x0c) // FUNCTION: LEGO1 0x1000de20 MxBool ScoreState::VTable0x14() diff --git a/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp b/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp index f243b92a..a872b95a 100644 --- a/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp +++ b/LEGO1/lego/legoomni/src/isle/beachhouseentity.cpp @@ -1 +1,3 @@ #include "beachhouseentity.h" + +DECOMP_SIZE_ASSERT(BeachHouseEntity, 0x68) diff --git a/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp b/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp index d8245a7d..ab2af63e 100644 --- a/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp +++ b/LEGO1/lego/legoomni/src/isle/jukeboxstate.cpp @@ -1,5 +1,7 @@ #include "jukeboxstate.h" +DECOMP_SIZE_ASSERT(JukeBoxState, 0x10) + // FUNCTION: LEGO1 0x1000f300 MxBool JukeBoxState::VTable0x14() { diff --git a/LEGO1/lego/legoomni/src/isle/radiostate.cpp b/LEGO1/lego/legoomni/src/isle/radiostate.cpp index 03334f2d..fda29291 100644 --- a/LEGO1/lego/legoomni/src/isle/radiostate.cpp +++ b/LEGO1/lego/legoomni/src/isle/radiostate.cpp @@ -6,6 +6,8 @@ #include "mxmisc.h" #include "mxtimer.h" +DECOMP_SIZE_ASSERT(RadioState, 0x30) + // GLOBAL: LEGO1 0x100f3218 JukeboxScript::Script g_unk0x100f3218[6] = { JukeboxScript::c_sns002ra_Audio, diff --git a/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp b/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp index b6abd2c4..dd7b0fb5 100644 --- a/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp +++ b/LEGO1/lego/legoomni/src/notify/legoeventnotificationparam.cpp @@ -2,4 +2,4 @@ #include "decomp.h" -DECOMP_SIZE_ASSERT(LegoEventNotificationParam, 0x20); +DECOMP_SIZE_ASSERT(LegoEventNotificationParam, 0x20) diff --git a/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp b/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp index f55a5150..66320dd1 100644 --- a/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp +++ b/LEGO1/lego/legoomni/src/paths/legoanimactor.cpp @@ -1,9 +1,27 @@ #include "legoanimactor.h" -// TODO: This might not be the actual constructor of this class, -// it only exists temporarily to match other code -// STUB: LEGO1 0x1002a500 -LegoAnimActor::LegoAnimActor(undefined4) +DECOMP_SIZE_ASSERT(LegoAnimActor, 0x174) + +// STUB: LEGO1 0x1001c1f0 +MxResult LegoAnimActor::FUN_1001c1f0(float& p_out) { // TODO + return SUCCESS; +} + +// STUB: LEGO1 0x1001c360 +MxResult LegoAnimActor::FUN_1001c360(float, undefined4) +{ + return FAILURE; +} + +// STUB: LEGO1 0x1001c450 +MxResult LegoAnimActor::FUN_1001c450(undefined4, undefined4, undefined4, undefined4) +{ + return SUCCESS; +} + +// STUB: LEGO1 0x1001c800 +void LegoAnimActor::FUN_1001c800() +{ } diff --git a/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp new file mode 100644 index 00000000..677f95c9 --- /dev/null +++ b/LEGO1/lego/legoomni/src/paths/legoextraactor.cpp @@ -0,0 +1,16 @@ +#include "legoextraactor.h" + +DECOMP_SIZE_ASSERT(LegoExtraActor, 0x1dc) + +// STUB: LEGO1 0x1002a500 +LegoExtraActor::LegoExtraActor() +{ +} + +// STUB: LEGO1 0x1002aae0 +MxResult LegoExtraActor::FUN_1002aae0() +{ + // TODO + VTable0x9c(); + return SUCCESS; +} diff --git a/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp b/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp index 404835eb..bdc0d585 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathcontroller.cpp @@ -1,5 +1,7 @@ #include "legopathcontroller.h" +DECOMP_SIZE_ASSERT(LegoPathController, 0x40) + // STUB: LEGO1 0x10044f40 LegoPathController::LegoPathController() { diff --git a/LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp b/LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp index db02e525..1fb06970 100644 --- a/LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp +++ b/LEGO1/lego/legoomni/src/paths/legopathpresenter.cpp @@ -4,7 +4,7 @@ #include "misc.h" #include "mxautolock.h" -DECOMP_SIZE_ASSERT(LegoPathPresenter, 0x54); +DECOMP_SIZE_ASSERT(LegoPathPresenter, 0x54) // FUNCTION: LEGO1 0x100448d0 LegoPathPresenter::LegoPathPresenter() diff --git a/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp b/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp index 6694e4d8..4160b27e 100644 --- a/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp +++ b/LEGO1/lego/legoomni/src/pizzeria/pizzeriastate.cpp @@ -1,5 +1,7 @@ #include "pizzeriastate.h" +DECOMP_SIZE_ASSERT(PizzeriaState, 0x58) + // STUB: LEGO1 0x10017af0 PizzeriaState::PizzeriaState() { diff --git a/LEGO1/lego/legoomni/src/police/policeentity.cpp b/LEGO1/lego/legoomni/src/police/policeentity.cpp index b4492be5..a9bc65cb 100644 --- a/LEGO1/lego/legoomni/src/police/policeentity.cpp +++ b/LEGO1/lego/legoomni/src/police/policeentity.cpp @@ -1 +1,3 @@ #include "policeentity.h" + +DECOMP_SIZE_ASSERT(PoliceEntity, 0x68) diff --git a/LEGO1/lego/legoomni/src/race/carrace.cpp b/LEGO1/lego/legoomni/src/race/carrace.cpp index 6230ed78..b45ff7ea 100644 --- a/LEGO1/lego/legoomni/src/race/carrace.cpp +++ b/LEGO1/lego/legoomni/src/race/carrace.cpp @@ -1,6 +1,6 @@ #include "carrace.h" -DECOMP_SIZE_ASSERT(CarRace, 0x154); +DECOMP_SIZE_ASSERT(CarRace, 0x154) // FUNCTION: LEGO1 0x10016a90 CarRace::CarRace() diff --git a/LEGO1/lego/legoomni/src/race/jetskirace.cpp b/LEGO1/lego/legoomni/src/race/jetskirace.cpp index 8f477204..a976724d 100644 --- a/LEGO1/lego/legoomni/src/race/jetskirace.cpp +++ b/LEGO1/lego/legoomni/src/race/jetskirace.cpp @@ -1,5 +1,7 @@ #include "jetskirace.h" +DECOMP_SIZE_ASSERT(JetskiRace, 0x144) + // STUB: LEGO1 0x100162c0 MxResult JetskiRace::Create(MxDSAction& p_dsAction) { diff --git a/LEGO1/lego/legoomni/src/race/legoraceactor.cpp b/LEGO1/lego/legoomni/src/race/legoraceactor.cpp index 84022005..b8259711 100644 --- a/LEGO1/lego/legoomni/src/race/legoraceactor.cpp +++ b/LEGO1/lego/legoomni/src/race/legoraceactor.cpp @@ -1,11 +1,20 @@ #include "legoraceactor.h" +DECOMP_SIZE_ASSERT(LegoRaceActor, 0x180) + // STUB: LEGO1 0x10014190 void LegoRaceActor::VTable0x74(Matrix4& p_transform) { // TODO } +// FUNCTION: LEGO1 0x100145d0 +LegoRaceActor::LegoRaceActor() +{ + m_unk0x70 = 0; + m_unk0x08 = 0; +} + // STUB: LEGO1 0x10014ca0 void LegoRaceActor::ParseAction(char*) { diff --git a/LEGO1/lego/legoomni/src/race/legoracecar.cpp b/LEGO1/lego/legoomni/src/race/legoracecar.cpp index 8728783a..4f2a82bf 100644 --- a/LEGO1/lego/legoomni/src/race/legoracecar.cpp +++ b/LEGO1/lego/legoomni/src/race/legoracecar.cpp @@ -1,5 +1,49 @@ #include "legoracecar.h" +#include "mxmisc.h" +#include "mxnotificationmanager.h" + +DECOMP_SIZE_ASSERT(LegoRaceCar, 0x200) + +// FUNCTION: LEGO1 0x10012950 +LegoRaceCar::LegoRaceCar() +{ + m_unk0x54 = 0; + m_unk0x70 = 0; + m_unk0x74 = 0; + m_unk0x5c.Clear(); + m_unk0x58 = 0; + m_unk0x78 = 0; + m_unk0x7c = 0; + NotificationManager()->Register(this); +} + +// FUNCTION: LEGO1 0x10012ea0 +void LegoRaceCar::FUN_10012ea0(float p_worldSpeed) +{ + if (p_worldSpeed < 0) { + LegoCarRaceActor::m_unk0x0c = 2; + m_unk0x13c = 0; + SetWorldSpeed(0); + } + else { + m_unk0x13c = p_worldSpeed; + } +} + +// STUB: LEGO1 0x10012ff0 +void LegoRaceCar::FUN_10012ff0(float) +{ + // TODO +} + +// STUB: LEGO1 0x10013130 +MxBool LegoRaceCar::FUN_10013130(float) +{ + // TODO + return TRUE; +} + // STUB: LEGO1 0x10014280 MxLong LegoRaceCar::Notify(MxParam& p_param) { diff --git a/LEGO1/lego/legoomni/src/race/legoracemap.cpp b/LEGO1/lego/legoomni/src/race/legoracemap.cpp new file mode 100644 index 00000000..9af2bff4 --- /dev/null +++ b/LEGO1/lego/legoomni/src/race/legoracemap.cpp @@ -0,0 +1,21 @@ +#include "legoracemap.h" + +#include "legocontrolmanager.h" +#include "misc.h" + +DECOMP_SIZE_ASSERT(LegoRaceMap, 0x1b4) + +// FUNCTION: LEGO1 0x1005d0d0 +LegoRaceMap::LegoRaceMap() +{ + m_unk0x08 = FALSE; + m_unk0x0c = NULL; + m_unk0x10 = 0; + ControlManager()->Register(this); +} + +// FUNCTION: LEGO1 0x1005d4b0 +void LegoRaceMap::FUN_1005d4b0() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/race/raceskel.cpp b/LEGO1/lego/legoomni/src/race/raceskel.cpp new file mode 100644 index 00000000..5ef950e2 --- /dev/null +++ b/LEGO1/lego/legoomni/src/race/raceskel.cpp @@ -0,0 +1,9 @@ +#include "raceskel.h" + +DECOMP_SIZE_ASSERT(RaceSkel, 0x178) + +// STUB: LEGO1 0x100719b0 +RaceSkel::RaceSkel() +{ + // TODO +} diff --git a/LEGO1/lego/legoomni/src/race/racestandsentity.cpp b/LEGO1/lego/legoomni/src/race/racestandsentity.cpp index 13e65bb4..8b4b7be5 100644 --- a/LEGO1/lego/legoomni/src/race/racestandsentity.cpp +++ b/LEGO1/lego/legoomni/src/race/racestandsentity.cpp @@ -1 +1,3 @@ #include "racestandsentity.h" + +DECOMP_SIZE_ASSERT(RaceStandsEntity, 0x68) diff --git a/LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp b/LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp index b3f386e3..27349fbf 100644 --- a/LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp +++ b/LEGO1/lego/legoomni/src/unknown/legounknown100d7c88.cpp @@ -1,5 +1,7 @@ #include "legounknown100d7c88.h" +DECOMP_SIZE_ASSERT(LegoUnknown100d7c88, 0x18) + // FUNCTION: LEGO1 0x10044e50 LegoUnknown100d7c88::~LegoUnknown100d7c88() { diff --git a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp index e3b73b4f..d0e05e4c 100644 --- a/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoanimpresenter.cpp @@ -13,7 +13,7 @@ #include "mxvideomanager.h" #include "realtime/realtime.h" -DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xc0) +DECOMP_SIZE_ASSERT(LegoAnimPresenter, 0xbc) // FUNCTION: LEGO1 0x10068420 LegoAnimPresenter::LegoAnimPresenter() diff --git a/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp index 24bb175b..d759364b 100644 --- a/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legocarbuildanimpresenter.cpp @@ -1,5 +1,7 @@ #include "legocarbuildanimpresenter.h" +DECOMP_SIZE_ASSERT(LegoCarBuildAnimPresenter, 0x150) + // STUB: LEGO1 0x10078400 LegoCarBuildAnimPresenter::LegoCarBuildAnimPresenter() { diff --git a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp index 8cfb3499..dea9aa45 100644 --- a/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legoloopinganimpresenter.cpp @@ -1,5 +1,7 @@ #include "legoloopinganimpresenter.h" +DECOMP_SIZE_ASSERT(LegoLoopingAnimPresenter, 0xc0) + // STUB: LEGO1 0x1006caa0 void LegoLoopingAnimPresenter::StreamingTickle() { diff --git a/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp b/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp index 8693bf36..7e76154d 100644 --- a/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp @@ -16,6 +16,8 @@ #include "realtime/realtime.h" #include "roi/legoroi.h" +DECOMP_SIZE_ASSERT(LegoModelPresenter, 0x6c) + // GLOBAL: LEGO1 0x100f7ae0 MxS32 g_modelPresenterConfig = 1; diff --git a/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp b/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp index 8b226368..78a5c625 100644 --- a/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legophonemepresenter.cpp @@ -1,6 +1,6 @@ #include "legophonemepresenter.h" -DECOMP_SIZE_ASSERT(LegoPhonemePresenter, 0x88); +DECOMP_SIZE_ASSERT(LegoPhonemePresenter, 0x88) // FUNCTION: LEGO1 0x1004e180 LegoPhonemePresenter::LegoPhonemePresenter() diff --git a/LEGO1/lego/legoomni/src/video/legovideomanager.cpp b/LEGO1/lego/legoomni/src/video/legovideomanager.cpp index 5b967b29..28b9dde6 100644 --- a/LEGO1/lego/legoomni/src/video/legovideomanager.cpp +++ b/LEGO1/lego/legoomni/src/video/legovideomanager.cpp @@ -11,9 +11,9 @@ #include "tgl/d3drm/impl.h" #include "viewmanager/viewroi.h" -DECOMP_SIZE_ASSERT(LegoVideoManager, 0x590); -DECOMP_SIZE_ASSERT(MxStopWatch, 0x18); -DECOMP_SIZE_ASSERT(MxFrequencyMeter, 0x20); +DECOMP_SIZE_ASSERT(LegoVideoManager, 0x590) +DECOMP_SIZE_ASSERT(MxStopWatch, 0x18) +DECOMP_SIZE_ASSERT(MxFrequencyMeter, 0x20) // FUNCTION: LEGO1 0x1007aa20 LegoVideoManager::LegoVideoManager() diff --git a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp index 056863a4..aef8e00a 100644 --- a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp +++ b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp @@ -8,6 +8,8 @@ #include "mxnotificationmanager.h" #include "mxticklemanager.h" +DECOMP_SIZE_ASSERT(GasStation, 0x128) + // GLOBAL: LEGO1 0x100f0160 undefined4 g_unk0x100f0160 = 3; diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index ce5cf365..9f6c8353 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -32,7 +32,7 @@ #include -DECOMP_SIZE_ASSERT(Isle, 0x140); +DECOMP_SIZE_ASSERT(Isle, 0x140) // GLOBAL: LEGO1 0x100f1198 undefined4 g_unk0x100f1198 = 0x7f; diff --git a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp index 247cf975..43c05750 100644 --- a/LEGO1/lego/legoomni/src/worlds/legoact2.cpp +++ b/LEGO1/lego/legoomni/src/worlds/legoact2.cpp @@ -1,5 +1,7 @@ #include "legoact2.h" +DECOMP_SIZE_ASSERT(LegoAct2, 0x1154) + // FUNCTION: LEGO1 0x1004fe10 MxBool LegoAct2::VTable0x5c() {