Implement/match Act3::ShootPizza and Act3::ShootDonut (#1203)

* Implement/match `Act3::LaunchPizza` and `Act3::LaunchDonut`

* Match Helicopter::HandleControl

* Rename

* Adjust total function count

* Rename
This commit is contained in:
Christian Semmler
2024-12-09 15:41:51 -07:00
committed by GitHub
parent 07def56326
commit c2ee761f81
11 changed files with 321 additions and 89 deletions

View File

@@ -17,7 +17,9 @@ class Helicopter;
// SIZE 0x0c
struct Act3ListElement {
undefined4 m_unk0x00[3]; // 0x00
MxU32 m_objectId; // 0x00
undefined4 m_unk0x04; // 0x04
undefined m_unk0x08; // 0x08
int operator==(Act3ListElement) const { return 0; }
int operator<(Act3ListElement) const { return 0; }
@@ -26,12 +28,13 @@ struct Act3ListElement {
// SIZE 0x10
class Act3List : private list<Act3ListElement> {
public:
Act3List() { m_unk0x04 = 0; }
Act3List() { m_unk0x0c = 0; }
void FUN_10071fa0();
void FUN_100720d0(MxU32 p_objectId);
private:
undefined4 m_unk0x04; // 0x0c
undefined4 m_unk0x0c; // 0x0c
};
// VTABLE: LEGO1 0x100d4fc8
@@ -103,8 +106,8 @@ public:
// SYNTHETIC: LEGO1 0x10072630
// Act3::`scalar deleting destructor'
MxBool FUN_100727e0(LegoPathController*, Mx3DPointFloat& p_loc, Mx3DPointFloat& p_dir, Mx3DPointFloat& p_up);
MxBool FUN_10072980(LegoPathController*, Mx3DPointFloat& p_loc, Mx3DPointFloat& p_dir, Mx3DPointFloat& 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);
void FUN_10073400();
void FUN_10073430();

View File

@@ -4,12 +4,14 @@
#include "legopathactor.h"
#include "mxgeometry/mxgeometry3d.h"
class Act3;
// VTABLE: LEGO1 0x100d8460
// SIZE 0x1a0
class Act3Ammo : public LegoPathActor {
public:
enum {
c_bit4 = 0x04
c_placed = 0x04
};
Act3Ammo();
@@ -18,20 +20,33 @@ public:
void Destroy(MxBool p_fromDestructor) override; // vtable+0x1c
void VTable0x70(float p_time) override; // vtable+0x70
MxU16 GetFlags() { return m_flags; }
// FUNCTION: BETA10 0x10017750
MxU32 IsPlaced() { return m_ammoFlag & c_placed; }
MxFloat GetUnknown0x158() { return m_unk0x158; }
// FUNCTION: BETA10 0x100177b0
Mx3DPointFloat* GetUnknown0x160() { return m_unk0x160; }
// FUNCTION: BETA10 0x100177e0
MxFloat* GetUnknown0x19c() { return &m_unk0x19c; }
void SetUnknown0x158(MxFloat p_unk0x158) { m_unk0x158 = p_unk0x158; }
MxResult FUN_10053980(Act3* p_a3, MxU32 p_isDonut, MxS32 p_index);
MxResult FUN_10053b40(Vector3& p_srcLoc, Vector3& p_srcDir, Vector3& p_srcUp);
MxResult FUN_10053cb0(LegoPathController* p_controller, LegoPathBoundary* p_boundary, MxFloat p_unk0x19c);
MxResult FUN_10053d30(LegoPathController* p_controller, MxFloat p_unk0x19c);
// SYNTHETIC: LEGO1 0x10053880
// Act3Ammo::`scalar deleting destructor'
private:
MxU16 m_flags; // 0x154
MxU16 m_ammoFlag; // 0x154
MxFloat m_unk0x158; // 0x158
undefined4 m_unk0x15c; // 0x15c
Act3* m_a3; // 0x15c
Mx3DPointFloat m_unk0x160[3]; // 0x160
undefined4 m_unk0x19c; // 0x19c
MxFloat m_unk0x19c; // 0x19c
};
#endif // ACT3AMMO_H

View File

@@ -135,7 +135,7 @@ public:
// FUNCTION: BETA10 0x1001c860
MxU32 GetState() { return m_state; }
LegoPathController* GetController() { return m_controller; }
LegoPathController* GetController() { return m_pathController; }
MxBool GetCollideBox() { return m_collideBox; }
MxFloat GetLastTime() { return m_lastTime; }
MxFloat GetActorTime() { return m_actorTime; }
@@ -145,7 +145,7 @@ public:
// FUNCTION: BETA10 0x10013430
void SetState(MxU32 p_state) { m_state = p_state; }
void SetController(LegoPathController* p_controller) { m_controller = p_controller; }
void SetController(LegoPathController* p_pathController) { m_pathController = p_pathController; }
void SetLastTime(MxFloat p_lastTime) { m_lastTime = p_lastTime; }
void SetActorTime(MxFloat p_actorTime) { m_actorTime = p_actorTime; }
@@ -167,27 +167,27 @@ protected:
MxS32 p_und
);
MxFloat m_BADuration; // 0x78
MxFloat m_unk0x7c; // 0x7c
MxFloat m_actorTime; // 0x80
MxFloat m_lastTime; // 0x84
LegoPathBoundary* m_boundary; // 0x88
LegoUnknown m_unk0x8c; // 0x8c
MxU32 m_state; // 0xdc
LegoUnknown100db7f4* m_destEdge; // 0xe0
MxFloat m_unk0xe4; // 0xe4
MxBool m_collideBox; // 0xe8
MxBool m_unk0xe9; // 0xe9
MxBool m_userNavFlag; // 0xea
MxMatrix m_unk0xec; // 0xec
LegoPathEdgeContainer* m_grec; // 0x134
LegoPathController* m_controller; // 0x138
MxFloat m_maxLinearVel; // 0x13c
MxFloat m_unk0x140; // 0x140
MxFloat m_unk0x144; // 0x144
MxU8 m_unk0x148; // 0x148
MxS32 m_unk0x14c; // 0x14c
MxFloat m_unk0x150; // 0x150
MxFloat m_BADuration; // 0x78
MxFloat m_unk0x7c; // 0x7c
MxFloat m_actorTime; // 0x80
MxFloat m_lastTime; // 0x84
LegoPathBoundary* m_boundary; // 0x88
LegoUnknown m_unk0x8c; // 0x8c
MxU32 m_state; // 0xdc
LegoUnknown100db7f4* m_destEdge; // 0xe0
MxFloat m_unk0xe4; // 0xe4
MxBool m_collideBox; // 0xe8
MxBool m_unk0xe9; // 0xe9
MxBool m_userNavFlag; // 0xea
MxMatrix m_unk0xec; // 0xec
LegoPathEdgeContainer* m_grec; // 0x134
LegoPathController* m_pathController; // 0x138
MxFloat m_maxLinearVel; // 0x13c
MxFloat m_unk0x140; // 0x140
MxFloat m_unk0x144; // 0x144
MxU8 m_unk0x148; // 0x148
MxS32 m_unk0x14c; // 0x14c
MxFloat m_unk0x150; // 0x150
};
// TEMPLATE: LEGO1 0x10018b70

View File

@@ -111,14 +111,6 @@ public:
LegoPathBoundary* GetPathBoundary(const char* p_name);
void Enable(MxBool p_enable);
void FUN_10046bb0(LegoWorld* p_world);
MxS32 FUN_1004a240(
LegoPathEdgeContainer& p_grec,
Vector3& p_v1,
Vector3& p_v2,
float p_f1,
LegoUnknown100db7f4*& p_edge,
LegoPathBoundary*& p_boundary
);
MxResult FUN_10048310(
LegoPathEdgeContainer* p_grec,
const Vector3& p_oldPosition,
@@ -130,6 +122,21 @@ public:
LegoU8 p_mask,
MxFloat* p_param9
);
MxS32 FUN_1004a240(
LegoPathEdgeContainer& p_grec,
Vector3& p_v1,
Vector3& p_v2,
float p_f1,
LegoUnknown100db7f4*& p_edge,
LegoPathBoundary*& p_boundary
);
undefined4 FUN_1004a380(
Vector3& p_param1,
Vector3& p_param2,
Mx3DPointFloat* p_param3,
LegoPathBoundary*& p_boundary,
MxFloat& p_param5
);
static MxResult Init();
static MxResult Reset();