diff --git a/LEGO1/lego/legoomni/include/act3.h b/LEGO1/lego/legoomni/include/act3.h index 9875b1fe..95390540 100644 --- a/LEGO1/lego/legoomni/include/act3.h +++ b/LEGO1/lego/legoomni/include/act3.h @@ -122,6 +122,7 @@ class Act3 : public LegoWorld { void RemoveDonut(Act3Ammo& p_p); MxResult ShootPizza(LegoPathController* p_controller, Vector3& p_location, Vector3& p_direction, Vector3& p_up); MxResult ShootDonut(LegoPathController* p_controller, Vector3& p_location, Vector3& p_direction, Vector3& p_up); + void SetBrickster(Act3Brickster* p_brickster); void FUN_10073400(); void FUN_10073430(); void GoodEnding(const Matrix4& p_matrix); diff --git a/LEGO1/lego/legoomni/include/act3actors.h b/LEGO1/lego/legoomni/include/act3actors.h index 856213d8..727e51b5 100644 --- a/LEGO1/lego/legoomni/include/act3actors.h +++ b/LEGO1/lego/legoomni/include/act3actors.h @@ -101,12 +101,17 @@ class Act3Brickster : public Act3Actor { // Act3Brickster::`scalar deleting destructor' private: - MxFloat m_unk0x20; // 0x20 - MxFloat m_unk0x24; // 0x24 - undefined4 m_unk0x28[10]; // 0x28 - MxFloat m_unk0x50; // 0x50 - undefined4 m_unk0x54; // 0x54 - undefined4 m_unk0x58; // 0x58 + MxFloat m_unk0x20; // 0x20 + MxFloat m_unk0x24; // 0x24 + LegoWorld* m_world; // 0x28 + undefined4 m_unk0x2c; // 0x2c + undefined4 m_unk0x30; // 0x30 + LegoAnimActorStruct* m_shootAnim; // 0x34 + undefined4 m_unk0x38; // 0x38 + Mx3DPointFloat m_unk0x3c; // 0x3c + MxFloat m_unk0x50; // 0x50 + undefined4 m_unk0x54; // 0x54 + undefined m_unk0x58; // 0x58 }; // VTABLE: LEGO1 0x100d7920 LegoPathActor @@ -146,6 +151,9 @@ class Act3Shark : public LegoAnimActor { Mx3DPointFloat m_unk0x3c; // 0x3c }; +// FUNCTION: LEGO1 0x1003ff10 +// Act3Actor::`vbase destructor' + // TEMPLATE: LEGO1 0x10042c20 // list >::~list > @@ -155,6 +163,12 @@ class Act3Shark : public LegoAnimActor { // GLOBAL: LEGO1 0x100d7660 // Act3Actor::`vbtable' +// GLOBAL: LEGO1 0x100d7748 +// Act3Cop::`vbtable' + +// GLOBAL: LEGO1 0x100d7830 +// Act3Brickster::`vbtable' + // GLOBAL: LEGO1 0x100d7918 // Act3Shark::`vbtable' diff --git a/LEGO1/lego/legoomni/src/actors/act3actors.cpp b/LEGO1/lego/legoomni/src/actors/act3actors.cpp index fc59d71e..6d5491a3 100644 --- a/LEGO1/lego/legoomni/src/actors/act3actors.cpp +++ b/LEGO1/lego/legoomni/src/actors/act3actors.cpp @@ -99,10 +99,13 @@ MxResult Act3Actor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool) return SUCCESS; } -// STUB: LEGO1 0x1003fe30 +// FUNCTION: LEGO1 0x1003fe30 +// FUNCTION: BETA10 0x10018412 Act3Cop::Act3Cop() { - // TODO + m_unk0x20 = -1.0f; + m_world = NULL; + SetState(c_bit3); } // FUNCTION: LEGO1 0x1003ff70 @@ -140,6 +143,7 @@ MxResult Act3Cop::VTable0x94(LegoPathActor* p_actor, MxBool p_bool) } // STUB: LEGO1 0x10040060 +// STUB: BETA10 0x100186fa void Act3Cop::ParseAction(char* p_extra) { // TODO @@ -165,22 +169,49 @@ MxResult Act3Cop::VTable0x9c() return SUCCESS; } -// STUB: LEGO1 0x10040e10 +// FUNCTION: LEGO1 0x10040e10 +// FUNCTION: BETA10 0x10019516 Act3Brickster::Act3Brickster() { - // TODO + m_world = NULL; + m_unk0x2c = 0; + m_unk0x30 = 0; + m_shootAnim = NULL; + m_unk0x38 = 0; + m_unk0x20 = 0.0f; + m_unk0x24 = 0.0f; + m_unk0x54 = 0; + + SetState(c_bit3); + m_unk0x58 = 0; + + m_unk0x3c.Clear(); } // FUNCTION: LEGO1 0x10040f20 +// FUNCTION: BETA10 0x10019663 Act3Brickster::~Act3Brickster() { - // TODO + // empty } -// STUB: LEGO1 0x10040ff0 +// FUNCTION: LEGO1 0x10040ff0 +// FUNCTION: BETA10 0x100196ff void Act3Brickster::ParseAction(char* p_extra) { - // TODO + m_world = CurrentWorld(); + + LegoAnimActor::ParseAction(p_extra); + + ((Act3*) m_world)->SetBrickster(this); + + for (MxS32 i = 0; i < m_animMaps.size(); i++) { + if (m_animMaps[i]->GetUnknown0x00() == -1.0f) { + m_shootAnim = m_animMaps[i]; + } + } + + assert(m_shootAnim); } // STUB: LEGO1 0x10041050 diff --git a/LEGO1/lego/legoomni/src/worlds/act3.cpp b/LEGO1/lego/legoomni/src/worlds/act3.cpp index b309bca5..6a37d24f 100644 --- a/LEGO1/lego/legoomni/src/worlds/act3.cpp +++ b/LEGO1/lego/legoomni/src/worlds/act3.cpp @@ -534,6 +534,13 @@ MxResult Act3::Tickle() return SUCCESS; } +// STUB: LEGO1 0x100733f0 +// STUB: BETA10 0x10016ba2 +void Act3::SetBrickster(Act3Brickster* p_brickster) +{ + m_brickster = p_brickster; +} + // FUNCTION: LEGO1 0x10073400 void Act3::FUN_10073400() {