mirror of
https://github.com/isledecomp/isle.git
synced 2024-12-18 12:02:54 -05:00
Implement/match Act3Shark
functions (#1208)
* Implement/match `Act3Shark` functions * Naming
This commit is contained in:
parent
a2b2b5d734
commit
ac19539d0f
4 changed files with 77 additions and 19 deletions
|
@ -110,6 +110,7 @@ class Act3 : public LegoWorld {
|
||||||
void Enable(MxBool p_enable) override; // vtable+0x68
|
void Enable(MxBool p_enable) override; // vtable+0x68
|
||||||
|
|
||||||
void SetHelicopter(Helicopter* p_copter) { m_copter = p_copter; }
|
void SetHelicopter(Helicopter* p_copter) { m_copter = p_copter; }
|
||||||
|
void SetShark(Act3Shark* p_shark) { m_shark = p_shark; }
|
||||||
void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; }
|
void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10072630
|
// SYNTHETIC: LEGO1 0x10072630
|
||||||
|
|
|
@ -14,7 +14,8 @@ class Act3Ammo : public LegoPathActor {
|
||||||
c_pizza = 0x01,
|
c_pizza = 0x01,
|
||||||
c_donut = 0x02,
|
c_donut = 0x02,
|
||||||
c_valid = 0x04,
|
c_valid = 0x04,
|
||||||
c_bit4 = 0x08
|
c_bit4 = 0x08,
|
||||||
|
c_bit5 = 0x10
|
||||||
};
|
};
|
||||||
|
|
||||||
Act3Ammo();
|
Act3Ammo();
|
||||||
|
@ -57,6 +58,16 @@ class Act3Ammo : public LegoPathActor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetBit5(MxBool p_bit5)
|
||||||
|
{
|
||||||
|
if (p_bit5) {
|
||||||
|
m_ammoFlag |= c_bit5;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
m_ammoFlag &= ~c_bit5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MxFloat GetUnknown0x158() { return m_unk0x158; }
|
MxFloat GetUnknown0x158() { return m_unk0x158; }
|
||||||
|
|
||||||
void SetUnknown0x158(MxFloat p_unk0x158) { m_unk0x158 = p_unk0x158; }
|
void SetUnknown0x158(MxFloat p_unk0x158) { m_unk0x158 = p_unk0x158; }
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
|
|
||||||
#include "legoanimactor.h"
|
#include "legoanimactor.h"
|
||||||
|
|
||||||
|
class Act3;
|
||||||
|
class Act3Ammo;
|
||||||
|
|
||||||
// VTABLE: LEGO1 0x100d7920 LegoPathActor
|
// VTABLE: LEGO1 0x100d7920 LegoPathActor
|
||||||
// VTABLE: LEGO1 0x100d79f0 LegoAnimActor
|
// VTABLE: LEGO1 0x100d79f0 LegoAnimActor
|
||||||
// SIZE 0x1a8
|
// SIZE 0x1a8
|
||||||
|
@ -21,7 +24,7 @@ class Act3Shark : public LegoAnimActor {
|
||||||
void VTable0x70(float p_time) override; // vtable+0x70
|
void VTable0x70(float p_time) override; // vtable+0x70
|
||||||
|
|
||||||
// LegoAnimActor vtable
|
// LegoAnimActor vtable
|
||||||
virtual MxResult FUN_10042ce0(void*); // vtable+0x10
|
virtual MxResult FUN_10042ce0(Act3Ammo* p_ammo); // vtable+0x10
|
||||||
|
|
||||||
MxFloat GetUnknown0x2c() { return m_unk0x2c; }
|
MxFloat GetUnknown0x2c() { return m_unk0x2c; }
|
||||||
|
|
||||||
|
@ -31,16 +34,22 @@ class Act3Shark : public LegoAnimActor {
|
||||||
// Act3Shark::`scalar deleting destructor'
|
// Act3Shark::`scalar deleting destructor'
|
||||||
|
|
||||||
private:
|
private:
|
||||||
list<void*> m_unk0x1c; // 0x1c
|
list<Act3Ammo*> m_unk0x1c; // 0x1c
|
||||||
undefined4 m_unk0x28; // 0x28
|
undefined4 m_unk0x28; // 0x28
|
||||||
MxFloat m_unk0x2c; // 0x2c
|
MxFloat m_unk0x2c; // 0x2c
|
||||||
undefined m_unk0x30[0x0c]; // 0x30
|
Act3* m_a3; // 0x30
|
||||||
|
LegoAnimActorStruct* m_unk0x34; // 0x34
|
||||||
|
LegoROI* m_unk0x38; // 0x38
|
||||||
Mx3DPointFloat m_unk0x3c; // 0x3c
|
Mx3DPointFloat m_unk0x3c; // 0x3c
|
||||||
};
|
};
|
||||||
|
|
||||||
// STUB: LEGO1 0x10042c90
|
// TEMPLATE: LEGO1 0x10042c20
|
||||||
// List<void *>::~List<void *>
|
// list<Act3Ammo *,allocator<Act3Ammo *> >::~list<Act3Ammo *,allocator<Act3Ammo *> >
|
||||||
// TODO: Update once type is known.
|
|
||||||
// STUB to resolve diff in scalar dtor and not create a new one.
|
// TEMPLATE: LEGO1 0x10042c90
|
||||||
|
// List<Act3Ammo *>::~List<Act3Ammo *>
|
||||||
|
|
||||||
|
// GLOBAL: LEGO1 0x100d7918
|
||||||
|
// Act3Shark::`vbtable'
|
||||||
|
|
||||||
#endif // ACT3SHARK_H
|
#endif // ACT3SHARK_H
|
||||||
|
|
|
@ -1,17 +1,26 @@
|
||||||
#include "act3shark.h"
|
#include "act3shark.h"
|
||||||
|
|
||||||
|
#include "act3.h"
|
||||||
|
#include "act3ammo.h"
|
||||||
|
#include "define.h"
|
||||||
|
#include "legolocomotionanimpresenter.h"
|
||||||
|
#include "misc.h"
|
||||||
|
#include "mxutilities.h"
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(Act3Shark, 0x1a8)
|
DECOMP_SIZE_ASSERT(Act3Shark, 0x1a8)
|
||||||
|
|
||||||
// STUB: LEGO1 0x10042ab0
|
// FUNCTION: LEGO1 0x10042ab0
|
||||||
Act3Shark::Act3Shark()
|
Act3Shark::Act3Shark()
|
||||||
{
|
{
|
||||||
// TODO
|
m_unk0x2c = 0.0f;
|
||||||
|
m_unk0x28 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10042ce0
|
// FUNCTION: LEGO1 0x10042ce0
|
||||||
MxResult Act3Shark::FUN_10042ce0(void*)
|
MxResult Act3Shark::FUN_10042ce0(Act3Ammo* p_ammo)
|
||||||
{
|
{
|
||||||
// TODO
|
p_ammo->SetBit5(TRUE);
|
||||||
|
m_unk0x1c.push_back(p_ammo);
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,8 +30,36 @@ void Act3Shark::VTable0x70(float p_time)
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10042f30
|
// FUNCTION: LEGO1 0x10042f30
|
||||||
void Act3Shark::ParseAction(char*)
|
void Act3Shark::ParseAction(char* p_extra)
|
||||||
{
|
{
|
||||||
// TODO
|
LegoPathActor::ParseAction(p_extra);
|
||||||
|
|
||||||
|
m_a3 = (Act3*) CurrentWorld();
|
||||||
|
|
||||||
|
char value[256];
|
||||||
|
if (KeyValueStringParse(value, g_strANIMATION, p_extra)) {
|
||||||
|
char* token = strtok(value, g_parseExtraTokens);
|
||||||
|
|
||||||
|
while (token != NULL) {
|
||||||
|
LegoLocomotionAnimPresenter* presenter =
|
||||||
|
(LegoLocomotionAnimPresenter*) m_a3->Find("LegoAnimPresenter", token);
|
||||||
|
|
||||||
|
if (presenter != NULL) {
|
||||||
|
token = strtok(NULL, g_parseExtraTokens);
|
||||||
|
|
||||||
|
if (token != NULL) {
|
||||||
|
presenter->FUN_1006d680(this, atof(token));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
token = strtok(NULL, g_parseExtraTokens);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_a3->SetShark(this);
|
||||||
|
m_unk0x34 = m_animMaps[0];
|
||||||
|
m_unk0x38 = m_unk0x34->m_roiMap[1];
|
||||||
|
m_unk0x38->SetVisibility(FALSE);
|
||||||
|
m_a3->PlaceActor(this);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue