Match functions to BETA

This commit is contained in:
Christian Semmler 2024-12-25 11:39:33 -07:00
parent 6b3fcafbe1
commit 5f297218fc
3 changed files with 33 additions and 19 deletions

View File

@ -30,6 +30,7 @@ DECOMP_SIZE_ASSERT(Matrix4, 0x08)
DECOMP_SIZE_ASSERT(MxMatrix, 0x48) DECOMP_SIZE_ASSERT(MxMatrix, 0x48)
// FUNCTION: LEGO1 0x10001e60 // FUNCTION: LEGO1 0x10001e60
// FUNCTION: BETA10 0x1002a0d0
Helicopter::Helicopter() Helicopter::Helicopter()
{ {
m_maxLinearVel = 60; m_maxLinearVel = 60;
@ -43,6 +44,7 @@ Helicopter::~Helicopter()
} }
// FUNCTION: LEGO1 0x100032c0 // FUNCTION: LEGO1 0x100032c0
// FUNCTION: BETA10 0x1002a16d
MxResult Helicopter::Create(MxDSAction& p_dsAction) MxResult Helicopter::Create(MxDSAction& p_dsAction)
{ {
MxResult result = IslePathActor::Create(p_dsAction); MxResult result = IslePathActor::Create(p_dsAction);
@ -52,6 +54,8 @@ MxResult Helicopter::Create(MxDSAction& p_dsAction)
((Act3*) m_world)->SetHelicopter(this); ((Act3*) m_world)->SetHelicopter(this);
} }
assert(m_world);
if (m_world != NULL) { if (m_world != NULL) {
m_world->Add(this); m_world->Add(this);
} }
@ -61,6 +65,7 @@ MxResult Helicopter::Create(MxDSAction& p_dsAction)
} }
// FUNCTION: LEGO1 0x10003320 // FUNCTION: LEGO1 0x10003320
// FUNCTION: BETA10 0x1002a240
void Helicopter::CreateState() void Helicopter::CreateState()
{ {
m_state = (HelicopterState*) GameState()->GetState("HelicopterState"); m_state = (HelicopterState*) GameState()->GetState("HelicopterState");
@ -70,8 +75,11 @@ void Helicopter::CreateState()
} }
// FUNCTION: LEGO1 0x10003360 // FUNCTION: LEGO1 0x10003360
// FUNCTION: BETA10 0x1002a29a
void Helicopter::Exit() void Helicopter::Exit()
{ {
assert(UserActor() == this);
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
SpawnPlayer( SpawnPlayer(
LegoGameState::e_unk40, LegoGameState::e_unk40,
@ -110,6 +118,7 @@ void Helicopter::Exit()
} }
// FUNCTION: LEGO1 0x10003480 // FUNCTION: LEGO1 0x10003480
// FUNCTION: BETA10 0x1002a3db
MxLong Helicopter::HandleClick() MxLong Helicopter::HandleClick()
{ {
if (!FUN_1003ef60()) { if (!FUN_1003ef60()) {
@ -118,6 +127,7 @@ MxLong Helicopter::HandleClick()
if (!m_world) { if (!m_world) {
m_world = CurrentWorld(); m_world = CurrentWorld();
assert(m_world);
} }
AnimationManager()->FUN_1005f6d0(FALSE); AnimationManager()->FUN_1005f6d0(FALSE);
@ -163,6 +173,8 @@ MxLong Helicopter::HandleClick()
MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param) MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
{ {
MxLong result = 0; MxLong result = 0;
assert(m_world);
MxAtomId script; MxAtomId script;
switch (GameState()->GetCurrentAct()) { switch (GameState()->GetCurrentAct()) {
@ -199,9 +211,10 @@ MxLong Helicopter::HandleControl(LegoControlManagerNotificationParam& p_param)
break; break;
} }
Act1State* state = (Act1State*) GameState()->GetState("Act1State"); Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
assert(act1State);
if (m_state->m_unk0x08 == 0) { if (m_state->m_unk0x08 == 0) {
state->m_unk0x018 = 4; act1State->m_unk0x018 = 4;
m_state->m_unk0x08 = 1; m_state->m_unk0x08 = 1;
m_world->RemoveActor(this); m_world->RemoveActor(this);
InvokeAction(Extra::ActionType::e_start, script, IsleScript::c_HelicopterTakeOff_Anim, NULL); InvokeAction(Extra::ActionType::e_start, script, IsleScript::c_HelicopterTakeOff_Anim, NULL);
@ -303,9 +316,9 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
switch (m_state->m_unk0x08) { switch (m_state->m_unk0x08) {
case 1: { case 1: {
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
assert(act1state); assert(act1State);
act1state->m_unk0x018 = 4; act1State->m_unk0x018 = 4;
SpawnPlayer( SpawnPlayer(
LegoGameState::e_unk42, LegoGameState::e_unk42,
TRUE, TRUE,
@ -344,9 +357,9 @@ MxLong Helicopter::HandleEndAnim(LegoEndAnimNotificationParam& p_param)
m_world->GetCameraController()->SetWorldTransform(at, dir, up); m_world->GetCameraController()->SetWorldTransform(at, dir, up);
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) { if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); Act1State* act1State = (Act1State*) GameState()->GetState("Act1State");
assert(act1state); assert(act1State);
act1state->m_unk0x018 = 0; act1State->m_unk0x018 = 0;
SpawnPlayer( SpawnPlayer(
LegoGameState::e_unk41, LegoGameState::e_unk41,
TRUE, TRUE,
@ -423,7 +436,7 @@ void Helicopter::Animate(float p_time)
((Act3*) m_world)->FUN_10073430(); ((Act3*) m_world)->FUN_10073430();
} }
LegoPathActor::m_actorState = c_disabled; SetActorState(c_disabled);
} }
} }
else { else {

View File

@ -164,9 +164,8 @@ inline int UnknownMx4DPointFloat::BETA_1004aaa0(Matrix4& p_matrix, float p_f)
if (FUN_100040a0(v, p_f) == 0) { if (FUN_100040a0(v, p_f) == 0) {
return p_matrix.FromQuaternion(v); return p_matrix.FromQuaternion(v);
} }
else {
return -1; return -1;
}
} }
// FUNCTION: LEGO1 0x10004520 // FUNCTION: LEGO1 0x10004520
@ -201,12 +200,14 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f)
p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0; p_v[3] = (1.0 - p_f) * acos((double) p_v[3]) * 2.0;
return p_v.NormalizeQuaternion(); return p_v.NormalizeQuaternion();
} }
else if (m_unk0x30 == c_bit2) {
if (m_unk0x30 == c_bit2) {
p_v = m_unk0x18; p_v = m_unk0x18;
p_v[3] = p_f * acos((double) p_v[3]) * 2.0; p_v[3] = p_f * acos((double) p_v[3]) * 2.0;
return p_v.NormalizeQuaternion(); return p_v.NormalizeQuaternion();
} }
else if (m_unk0x30 == (c_bit1 | c_bit2)) {
if (m_unk0x30 == (c_bit1 | c_bit2)) {
int i; int i;
double d1 = p_v.Dot(m_unk0x00, m_unk0x18); double d1 = p_v.Dot(m_unk0x00, m_unk0x18);
double a; double a;
@ -243,9 +244,8 @@ inline int UnknownMx4DPointFloat::FUN_100040a0(Vector4& p_v, float p_f)
return 0; return 0;
} }
else {
return -1; return -1;
}
} }
#endif // MXGEOMETRY3D_H #endif // MXGEOMETRY3D_H

View File

@ -286,8 +286,9 @@ inline int Matrix4::FromQuaternion(const Vector4& p_vec)
m_data[2][3] = 0; m_data[2][3] = 0;
return 0; return 0;
} }
else {
return -1; return -1;
}
} }
// FUNCTION: BETA10 0x1005a590 // FUNCTION: BETA10 0x1005a590