Implement/match Act3Brickster::ParseAction (#1211)

This commit is contained in:
Christian Semmler 2024-12-12 08:06:15 -07:00 committed by GitHub
parent 598d6dd10c
commit fe57a94416
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 66 additions and 13 deletions

View file

@ -122,6 +122,7 @@ class Act3 : public LegoWorld {
void RemoveDonut(Act3Ammo& p_p); void RemoveDonut(Act3Ammo& p_p);
MxResult ShootPizza(LegoPathController* p_controller, Vector3& p_location, Vector3& p_direction, Vector3& p_up); 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); MxResult ShootDonut(LegoPathController* p_controller, Vector3& p_location, Vector3& p_direction, Vector3& p_up);
void SetBrickster(Act3Brickster* p_brickster);
void FUN_10073400(); void FUN_10073400();
void FUN_10073430(); void FUN_10073430();
void GoodEnding(const Matrix4& p_matrix); void GoodEnding(const Matrix4& p_matrix);

View file

@ -101,12 +101,17 @@ class Act3Brickster : public Act3Actor {
// Act3Brickster::`scalar deleting destructor' // Act3Brickster::`scalar deleting destructor'
private: private:
MxFloat m_unk0x20; // 0x20 MxFloat m_unk0x20; // 0x20
MxFloat m_unk0x24; // 0x24 MxFloat m_unk0x24; // 0x24
undefined4 m_unk0x28[10]; // 0x28 LegoWorld* m_world; // 0x28
MxFloat m_unk0x50; // 0x50 undefined4 m_unk0x2c; // 0x2c
undefined4 m_unk0x54; // 0x54 undefined4 m_unk0x30; // 0x30
undefined4 m_unk0x58; // 0x58 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 // VTABLE: LEGO1 0x100d7920 LegoPathActor
@ -146,6 +151,9 @@ class Act3Shark : public LegoAnimActor {
Mx3DPointFloat m_unk0x3c; // 0x3c Mx3DPointFloat m_unk0x3c; // 0x3c
}; };
// FUNCTION: LEGO1 0x1003ff10
// Act3Actor::`vbase destructor'
// TEMPLATE: LEGO1 0x10042c20 // TEMPLATE: LEGO1 0x10042c20
// list<Act3Ammo *,allocator<Act3Ammo *> >::~list<Act3Ammo *,allocator<Act3Ammo *> > // list<Act3Ammo *,allocator<Act3Ammo *> >::~list<Act3Ammo *,allocator<Act3Ammo *> >
@ -155,6 +163,12 @@ class Act3Shark : public LegoAnimActor {
// GLOBAL: LEGO1 0x100d7660 // GLOBAL: LEGO1 0x100d7660
// Act3Actor::`vbtable' // Act3Actor::`vbtable'
// GLOBAL: LEGO1 0x100d7748
// Act3Cop::`vbtable'
// GLOBAL: LEGO1 0x100d7830
// Act3Brickster::`vbtable'
// GLOBAL: LEGO1 0x100d7918 // GLOBAL: LEGO1 0x100d7918
// Act3Shark::`vbtable' // Act3Shark::`vbtable'

View file

@ -99,10 +99,13 @@ MxResult Act3Actor::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
return SUCCESS; return SUCCESS;
} }
// STUB: LEGO1 0x1003fe30 // FUNCTION: LEGO1 0x1003fe30
// FUNCTION: BETA10 0x10018412
Act3Cop::Act3Cop() Act3Cop::Act3Cop()
{ {
// TODO m_unk0x20 = -1.0f;
m_world = NULL;
SetState(c_bit3);
} }
// FUNCTION: LEGO1 0x1003ff70 // FUNCTION: LEGO1 0x1003ff70
@ -140,6 +143,7 @@ MxResult Act3Cop::VTable0x94(LegoPathActor* p_actor, MxBool p_bool)
} }
// STUB: LEGO1 0x10040060 // STUB: LEGO1 0x10040060
// STUB: BETA10 0x100186fa
void Act3Cop::ParseAction(char* p_extra) void Act3Cop::ParseAction(char* p_extra)
{ {
// TODO // TODO
@ -165,22 +169,49 @@ MxResult Act3Cop::VTable0x9c()
return SUCCESS; return SUCCESS;
} }
// STUB: LEGO1 0x10040e10 // FUNCTION: LEGO1 0x10040e10
// FUNCTION: BETA10 0x10019516
Act3Brickster::Act3Brickster() 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: LEGO1 0x10040f20
// FUNCTION: BETA10 0x10019663
Act3Brickster::~Act3Brickster() Act3Brickster::~Act3Brickster()
{ {
// TODO // empty
} }
// STUB: LEGO1 0x10040ff0 // FUNCTION: LEGO1 0x10040ff0
// FUNCTION: BETA10 0x100196ff
void Act3Brickster::ParseAction(char* p_extra) 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 // STUB: LEGO1 0x10041050

View file

@ -534,6 +534,13 @@ MxResult Act3::Tickle()
return SUCCESS; return SUCCESS;
} }
// STUB: LEGO1 0x100733f0
// STUB: BETA10 0x10016ba2
void Act3::SetBrickster(Act3Brickster* p_brickster)
{
m_brickster = p_brickster;
}
// FUNCTION: LEGO1 0x10073400 // FUNCTION: LEGO1 0x10073400
void Act3::FUN_10073400() void Act3::FUN_10073400()
{ {