Clear unknowns in legoracers.h (#1729)

This commit is contained in:
Fabian Neundorf
2026-01-25 20:45:58 +01:00
committed by GitHub
parent d69a381a18
commit a251424b10
2 changed files with 23 additions and 21 deletions

View File

@@ -6,9 +6,11 @@
// clang-format on // clang-format on
#include "legoracemap.h" #include "legoracemap.h"
#define LEGORACECAR_UNKNOWN_0 0 #define LEGORACECAR_NONE 0
#define LEGORACECAR_UNKNOWN_1 1 #define LEGORACECAR_NEAR_SKELETON 1
// kick to the left
#define LEGORACECAR_KICK1 2 // name guessed #define LEGORACECAR_KICK1 2 // name guessed
// kick to the right
#define LEGORACECAR_KICK2 4 // name validated by BETA10 0x100cb659 #define LEGORACECAR_KICK2 4 // name validated by BETA10 0x100cb659
// SIZE 0x08 // SIZE 0x08
@@ -23,7 +25,7 @@ struct SkeletonKickPhase {
EdgeReference* m_edgeRef; // 0x00 EdgeReference* m_edgeRef; // 0x00
float m_lower; // 0x04 float m_lower; // 0x04
float m_upper; // 0x08 float m_upper; // 0x08
MxU8 m_userState; // 0x0c MxU8 m_kickState; // 0x0c
}; };
// VTABLE: LEGO1 0x100d5a08 LegoCarRaceActor // VTABLE: LEGO1 0x100d5a08 LegoCarRaceActor
@@ -80,7 +82,7 @@ public:
// FUNCTION: LEGO1 0x10014210 // FUNCTION: LEGO1 0x10014210
MxResult VTable0x9c() override { return LegoJetskiRaceActor::VTable0x9c(); } // vtable+0x9c MxResult VTable0x9c() override { return LegoJetskiRaceActor::VTable0x9c(); } // vtable+0x9c
virtual void FUN_100136f0(float p_worldSpeed); virtual void SetMaxLinearVelocity(float p_worldSpeed);
static void InitSoundIndices(); static void InitSoundIndices();
@@ -154,7 +156,7 @@ public:
// LegoRaceCar::`scalar deleting destructor' // LegoRaceCar::`scalar deleting destructor'
private: private:
undefined m_userState; // 0x54 MxU8 m_kickState; // 0x54
float m_kickStart; // 0x58 float m_kickStart; // 0x58
Mx3DPointFloat m_unk0x5c; // 0x5c Mx3DPointFloat m_unk0x5c; // 0x5c

View File

@@ -171,7 +171,7 @@ MxLong g_timeLastJetskiSoundPlayed = 0;
// FUNCTION: BETA10 0x100cad10 // FUNCTION: BETA10 0x100cad10
LegoRaceCar::LegoRaceCar() LegoRaceCar::LegoRaceCar()
{ {
m_userState = 0; m_kickState = LEGORACECAR_NONE;
m_skelKick1Anim = 0; m_skelKick1Anim = 0;
m_skelKick2Anim = 0; m_skelKick2Anim = 0;
m_unk0x5c.Clear(); m_unk0x5c.Clear();
@@ -301,11 +301,11 @@ void LegoRaceCar::KickCamera(float p_param)
LegoAnimActorStruct* a; // called `a` in BETA10 LegoAnimActorStruct* a; // called `a` in BETA10
float deltaTime; float deltaTime;
if (m_userState == LEGORACECAR_KICK1) { if (m_kickState == LEGORACECAR_KICK1) {
a = m_skelKick1Anim; a = m_skelKick1Anim;
} }
else { else {
assert(m_userState == LEGORACECAR_KICK2); assert(m_kickState == LEGORACECAR_KICK2);
a = m_skelKick2Anim; a = m_skelKick2Anim;
} }
@@ -315,7 +315,7 @@ void LegoRaceCar::KickCamera(float p_param)
deltaTime = p_param - m_kickStart; deltaTime = p_param - m_kickStart;
if (a->GetDuration() <= deltaTime || deltaTime < 0.0) { if (a->GetDuration() <= deltaTime || deltaTime < 0.0) {
if (m_userState == LEGORACECAR_KICK1) { if (m_kickState == LEGORACECAR_KICK1) {
LegoOrientedEdge** edges = m_kick1B->GetEdges(); LegoOrientedEdge** edges = m_kick1B->GetEdges();
m_destEdge = edges[2]; m_destEdge = edges[2];
m_boundary = m_kick1B; m_boundary = m_kick1B;
@@ -326,7 +326,7 @@ void LegoRaceCar::KickCamera(float p_param)
m_boundary = m_kick2B; m_boundary = m_kick2B;
} }
m_userState = LEGORACECAR_UNKNOWN_0; m_kickState = LEGORACECAR_NONE;
} }
else if (a->GetAnimTreePtr()->GetCamAnim()) { else if (a->GetAnimTreePtr()->GetCamAnim()) {
MxMatrix transformationMatrix; MxMatrix transformationMatrix;
@@ -370,12 +370,12 @@ MxU32 LegoRaceCar::HandleSkeletonKicks(float p_param1)
for (MxS32 i = 0; i < sizeOfArray(g_skeletonKickPhases); i++) { for (MxS32 i = 0; i < sizeOfArray(g_skeletonKickPhases); i++) {
if (m_boundary == current->m_edgeRef->m_b && current->m_lower <= skeletonCurAnimPhase && if (m_boundary == current->m_edgeRef->m_b && current->m_lower <= skeletonCurAnimPhase &&
skeletonCurAnimPhase <= current->m_upper) { skeletonCurAnimPhase <= current->m_upper) {
m_userState = current->m_userState; m_kickState = current->m_kickState;
} }
current = &current[1]; current = &current[1];
} }
if (m_userState != LEGORACECAR_KICK1 && m_userState != LEGORACECAR_KICK2) { if (m_kickState != LEGORACECAR_KICK1 && m_kickState != LEGORACECAR_KICK2) {
MxTrace( MxTrace(
// STRING: BETA10 0x101f64c8 // STRING: BETA10 0x101f64c8
"Got kicked in boundary %s %d %g:%g %g\n", "Got kicked in boundary %s %d %g:%g %g\n",
@@ -397,14 +397,14 @@ MxU32 LegoRaceCar::HandleSkeletonKicks(float p_param1)
// FUNCTION: BETA10 0x100cb88a // FUNCTION: BETA10 0x100cb88a
void LegoRaceCar::Animate(float p_time) void LegoRaceCar::Animate(float p_time)
{ {
if (m_userNavFlag && (m_userState == LEGORACECAR_KICK1 || m_userState == LEGORACECAR_KICK2)) { if (m_userNavFlag && (m_kickState == LEGORACECAR_KICK1 || m_kickState == LEGORACECAR_KICK2)) {
KickCamera(p_time); KickCamera(p_time);
return; return;
} }
LegoCarRaceActor::Animate(p_time); LegoCarRaceActor::Animate(p_time);
if (m_userNavFlag && m_userState == LEGORACECAR_UNKNOWN_1) { if (m_userNavFlag && m_kickState == LEGORACECAR_NEAR_SKELETON) {
if (HandleSkeletonKicks(p_time)) { if (HandleSkeletonKicks(p_time)) {
return; return;
} }
@@ -539,23 +539,23 @@ MxResult LegoRaceCar::VTable0x9c()
result = LegoCarRaceActor::VTable0x9c(); result = LegoCarRaceActor::VTable0x9c();
if (m_boundary) { if (m_boundary) {
MxS32 bVar2 = 0; MxS32 onSkeletonBoundary = FALSE;
for (MxS32 i = 0; i < sizeOfArray(g_skBMap); i++) { for (MxS32 i = 0; i < sizeOfArray(g_skBMap); i++) {
assert(g_skBMap[i].m_b); assert(g_skBMap[i].m_b);
if (m_boundary == g_skBMap[i].m_b) { if (m_boundary == g_skBMap[i].m_b) {
bVar2 = 1; onSkeletonBoundary = TRUE;
break; break;
} }
} }
if (m_userState == LEGORACECAR_UNKNOWN_1) { if (m_kickState == LEGORACECAR_NEAR_SKELETON) {
if (!bVar2) { if (!onSkeletonBoundary) {
m_userState = LEGORACECAR_UNKNOWN_0; m_kickState = LEGORACECAR_NONE;
} }
} }
else { else {
m_userState = LEGORACECAR_UNKNOWN_1; m_kickState = LEGORACECAR_NEAR_SKELETON;
} }
} }
} }
@@ -591,7 +591,7 @@ void LegoJetski::SetWorldSpeed(MxFloat p_worldSpeed)
// FUNCTION: LEGO1 0x100136f0 // FUNCTION: LEGO1 0x100136f0
// FUNCTION: BETA10 0x100cc01a // FUNCTION: BETA10 0x100cc01a
void LegoJetski::FUN_100136f0(float p_worldSpeed) void LegoJetski::SetMaxLinearVelocity(float p_worldSpeed)
{ {
if (p_worldSpeed < 0) { if (p_worldSpeed < 0) {
LegoCarRaceActor::m_animState = 2; LegoCarRaceActor::m_animState = 2;