Implement/match PlayCamAnim and CameraTriggerFire (#935)

* Implement/match PlayCamAnim and CameraTriggerFire

* Fix type

* Name var
This commit is contained in:
Christian Semmler 2024-05-18 14:43:19 -04:00 committed by GitHub
parent 01735bdc28
commit 732de04433
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 382 additions and 233 deletions

View file

@ -17,7 +17,7 @@ struct ModelInfo {
struct AnimInfo { struct AnimInfo {
char* m_name; // 0x00 char* m_name; // 0x00
MxU32 m_objectId; // 0x04 MxU32 m_objectId; // 0x04
MxS16 m_unk0x08; // 0x08 MxS16 m_location; // 0x08
MxBool m_unk0x0a; // 0x0a MxBool m_unk0x0a; // 0x0a
MxU8 m_unk0x0b; // 0x0b MxU8 m_unk0x0b; // 0x0b
MxU8 m_unk0x0c; // 0x0c MxU8 m_unk0x0c; // 0x0c

View file

@ -38,7 +38,7 @@ class IslePathActor : public LegoPathActor {
float p_srcScale, float p_srcScale,
MxS16 p_dest, MxS16 p_dest,
float p_destScale, float p_destScale,
undefined4 p_unk0x30, MxU32 p_location,
JukeboxScript::Script p_music JukeboxScript::Script p_music
) )
{ {
@ -50,7 +50,7 @@ class IslePathActor : public LegoPathActor {
m_srcScale = p_srcScale; m_srcScale = p_srcScale;
m_dest = p_dest; m_dest = p_dest;
m_destScale = p_destScale; m_destScale = p_destScale;
m_unk0x30 = p_unk0x30; m_location = p_location;
m_music = p_music; m_music = p_music;
} }
@ -65,7 +65,7 @@ class IslePathActor : public LegoPathActor {
m_srcScale = p_location.m_srcScale; m_srcScale = p_location.m_srcScale;
m_dest = p_location.m_dest; m_dest = p_location.m_dest;
m_destScale = p_location.m_destScale; m_destScale = p_location.m_destScale;
m_unk0x30 = p_location.m_unk0x30; m_location = p_location.m_location;
m_music = p_location.m_music; m_music = p_location.m_music;
return *this; return *this;
} }
@ -78,7 +78,7 @@ class IslePathActor : public LegoPathActor {
float m_srcScale; // 0x24 float m_srcScale; // 0x24
MxS16 m_dest; // 0x28 MxS16 m_dest; // 0x28
float m_destScale; // 0x2c float m_destScale; // 0x2c
undefined4 m_unk0x30; // 0x30 MxU32 m_location; // 0x30
JukeboxScript::Script m_music; // 0x34 JukeboxScript::Script m_music; // 0x34
}; };

View file

@ -9,6 +9,7 @@
#include "mxgeometry/mxgeometry3d.h" #include "mxgeometry/mxgeometry3d.h"
class AnimState; class AnimState;
class IslePathActor;
class LegoAnimPresenter; class LegoAnimPresenter;
class LegoEntity; class LegoEntity;
class LegoExtraActor; class LegoExtraActor;
@ -81,7 +82,7 @@ class LegoAnimationManager : public MxCore {
void Suspend(); void Suspend();
void Resume(); void Resume();
void FUN_1005f6d0(MxBool p_unk0x400); void FUN_1005f6d0(MxBool p_unk0x400);
void FUN_1005f700(MxBool p_unk0x3a); void EnableCamAnims(MxBool p_enableCamAnims);
MxResult LoadScriptInfo(MxS32 p_scriptIndex); MxResult LoadScriptInfo(MxS32 p_scriptIndex);
MxBool FindVehicle(const char* p_name, MxU32& p_index); MxBool FindVehicle(const char* p_name, MxU32& p_index);
MxResult ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info); MxResult ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info);
@ -101,6 +102,7 @@ class LegoAnimationManager : public MxCore {
MxBool p_param8, MxBool p_param8,
MxBool p_param9 MxBool p_param9
); );
void CameraTriggerFire(IslePathActor* p_actor, undefined4, MxU32 p_location, MxBool p_bool);
void FUN_10061010(MxBool p_und); void FUN_10061010(MxBool p_und);
LegoTranInfo* GetTranInfo(MxU32 p_index); LegoTranInfo* GetTranInfo(MxU32 p_index);
void FUN_10062770(); void FUN_10062770();
@ -183,8 +185,8 @@ class LegoAnimationManager : public MxCore {
MxPresenter* m_unk0x28[2]; // 0x28 MxPresenter* m_unk0x28[2]; // 0x28
MxLong m_unk0x30[2]; // 0x30 MxLong m_unk0x30[2]; // 0x30
MxBool m_unk0x38; // 0x38 MxBool m_unk0x38; // 0x38
MxBool m_unk0x39; // 0x39 MxBool m_animRunning; // 0x39
MxBool m_unk0x3a; // 0x3a MxBool m_enableCamAnims; // 0x3a
Extra m_extras[40]; // 0x3c Extra m_extras[40]; // 0x3c
MxU32 m_lastExtraCharacterId; // 0x3fc MxU32 m_lastExtraCharacterId; // 0x3fc
MxBool m_unk0x400; // 0x400 MxBool m_unk0x400; // 0x400
@ -199,7 +201,7 @@ class LegoAnimationManager : public MxCore {
undefined4 m_unk0x41c; // 0x41c undefined4 m_unk0x41c; // 0x41c
AnimState* m_animState; // 0x420 AnimState* m_animState; // 0x420
LegoROIList* m_unk0x424; // 0x424 LegoROIList* m_unk0x424; // 0x424
MxBool m_unk0x428; // 0x428 MxBool m_suspendedEnableCamAnims; // 0x428
MxBool m_unk0x429; // 0x429 MxBool m_unk0x429; // 0x429
MxBool m_unk0x42a; // 0x42a MxBool m_unk0x42a; // 0x42a
MxBool m_suspended; // 0x42b MxBool m_suspended; // 0x42b

View file

@ -23,7 +23,8 @@ struct LegoLocation {
float m_up[3]; // 0x20 float m_up[3]; // 0x20
Boundary m_boundaryA; // 0x2c Boundary m_boundaryA; // 0x2c
Boundary m_boundaryB; // 0x44 Boundary m_boundaryB; // 0x44
undefined4 m_unk0x5c; // 0x5c MxBool m_unk0x5c; // 0x5c
MxU8 m_frequency; // 0x5d
}; };
extern LegoLocation g_locations[70]; extern LegoLocation g_locations[70];

View file

@ -23,7 +23,7 @@ struct LegoTranInfo {
m_unk0x08 = NULL; m_unk0x08 = NULL;
m_unk0x0c = NULL; m_unk0x0c = NULL;
m_unk0x10 = 0; m_unk0x10 = 0;
m_unk0x12 = -1; m_location = -1;
m_unk0x14 = FALSE; m_unk0x14 = FALSE;
m_unk0x1c = NULL; m_unk0x1c = NULL;
m_unk0x20 = NULL; m_unk0x20 = NULL;
@ -42,7 +42,7 @@ struct LegoTranInfo {
LegoROI* m_unk0x08; // 0x08 LegoROI* m_unk0x08; // 0x08
MxMatrix* m_unk0x0c; // 0x0c MxMatrix* m_unk0x0c; // 0x0c
MxU8 m_unk0x10; // 0x10 MxU8 m_unk0x10; // 0x10
MxS16 m_unk0x12; // 0x12 MxS16 m_location; // 0x12
MxBool m_unk0x14; // 0x14 MxBool m_unk0x14; // 0x14
MxBool m_unk0x15; // 0x15 MxBool m_unk0x15; // 0x15
MxU32 m_objectId; // 0x18 MxU32 m_objectId; // 0x18

View file

@ -24,7 +24,7 @@ Extra::ActionType MatchActionString(const char*);
void InvokeAction(Extra::ActionType p_actionId, const MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender); void InvokeAction(Extra::ActionType p_actionId, const MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender);
void SetCameraControllerFromIsle(); void SetCameraControllerFromIsle();
void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut); void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut);
void FUN_1003ecc0(IslePathActor* p_actor, undefined4, undefined4, MxBool); void PlayCamAnim(IslePathActor* p_actor, undefined4 p_unused, MxU32 p_location, MxBool p_bool);
void FUN_1003eda0(); void FUN_1003eda0();
MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id); MxBool RemoveFromCurrentWorld(const MxAtomId& p_atomId, MxS32 p_id);
void FUN_1003ef00(MxBool p_enable); void FUN_1003ef00(MxBool p_enable);

View file

@ -498,10 +498,10 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p
LegoVehicleBuildState* state = NULL; LegoVehicleBuildState* state = NULL;
if (p_flags & c_spawnBit1) { if (p_flags & c_spawnBit1) {
MxBool und = FALSE; MxBool camAnim = FALSE;
IsleScript::Script anim; IsleScript::Script anim;
switch (g_spawnLocations[i].m_unk0x30) { switch (g_spawnLocations[i].m_location) {
case 0x00: case 0x00:
case 0x44: case 0x44:
break; break;
@ -522,7 +522,7 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p
anim = IsleScript::c_irt007in_RunAnim; anim = IsleScript::c_irt007in_RunAnim;
break; break;
default: default:
und = TRUE; camAnim = TRUE;
break; break;
} }
@ -530,12 +530,12 @@ void IslePathActor::SpawnPlayer(LegoGameState::Area p_area, MxBool p_und, MxU8 p
if (AnimationManager()->FUN_10060dc0(anim, NULL, TRUE, FALSE, NULL, FALSE, TRUE, TRUE, TRUE) == if (AnimationManager()->FUN_10060dc0(anim, NULL, TRUE, FALSE, NULL, FALSE, TRUE, TRUE, TRUE) ==
SUCCESS) { SUCCESS) {
state->m_unk0x4e = TRUE; state->m_unk0x4e = TRUE;
und = FALSE; camAnim = FALSE;
} }
} }
if (und) { if (camAnim) {
FUN_1003ecc0(this, 0, g_spawnLocations[i].m_unk0x30, TRUE); PlayCamAnim(this, 0, g_spawnLocations[i].m_location, TRUE);
} }
} }

View file

@ -397,7 +397,7 @@ void LegoAnimationManager::Reset(MxBool p_und)
Init(); Init();
m_suspended = suspended; m_suspended = suspended;
m_unk0x428 = m_unk0x3a; m_suspendedEnableCamAnims = m_enableCamAnims;
m_unk0x429 = m_unk0x400; m_unk0x429 = m_unk0x400;
m_unk0x42a = m_unk0x402; m_unk0x42a = m_unk0x402;
} }
@ -417,7 +417,7 @@ void LegoAnimationManager::Suspend()
if (!m_suspended) { if (!m_suspended) {
m_suspended = TRUE; m_suspended = TRUE;
m_unk0x428 = m_unk0x3a; m_suspendedEnableCamAnims = m_enableCamAnims;
m_unk0x429 = m_unk0x400; m_unk0x429 = m_unk0x400;
m_unk0x42a = m_unk0x402; m_unk0x42a = m_unk0x402;
m_unk0x402 = FALSE; m_unk0x402 = FALSE;
@ -460,7 +460,7 @@ void LegoAnimationManager::Suspend()
m_unk0x18 = 0; m_unk0x18 = 0;
m_unk0x1a = FALSE; m_unk0x1a = FALSE;
m_unk0x3a = FALSE; m_enableCamAnims = FALSE;
m_unk0x400 = FALSE; m_unk0x400 = FALSE;
m_unk0x414 = 0; m_unk0x414 = 0;
m_unk0x401 = FALSE; m_unk0x401 = FALSE;
@ -478,7 +478,7 @@ void LegoAnimationManager::Resume()
if (m_suspended) { if (m_suspended) {
m_unk0x408 = m_unk0x40c = m_unk0x404 = Timer()->GetTime(); m_unk0x408 = m_unk0x40c = m_unk0x404 = Timer()->GetTime();
m_unk0x410 = 5000; m_unk0x410 = 5000;
m_unk0x3a = m_unk0x428; m_enableCamAnims = m_suspendedEnableCamAnims;
m_unk0x400 = m_unk0x429; m_unk0x400 = m_unk0x429;
m_unk0x402 = m_unk0x42a; m_unk0x402 = m_unk0x42a;
m_suspended = FALSE; m_suspended = FALSE;
@ -513,8 +513,8 @@ void LegoAnimationManager::Init()
} }
m_unk0x38 = FALSE; m_unk0x38 = FALSE;
m_unk0x39 = FALSE; m_animRunning = FALSE;
m_unk0x3a = TRUE; m_enableCamAnims = TRUE;
m_lastExtraCharacterId = 0; m_lastExtraCharacterId = 0;
m_unk0x400 = FALSE; m_unk0x400 = FALSE;
m_unk0x414 = 0; m_unk0x414 = 0;
@ -564,13 +564,13 @@ void LegoAnimationManager::FUN_1005f6d0(MxBool p_unk0x400)
// FUNCTION: LEGO1 0x1005f700 // FUNCTION: LEGO1 0x1005f700
// FUNCTION: BETA10 0x1004024c // FUNCTION: BETA10 0x1004024c
void LegoAnimationManager::FUN_1005f700(MxBool p_unk0x3a) void LegoAnimationManager::EnableCamAnims(MxBool p_enableCamAnims)
{ {
if (m_suspended) { if (m_suspended) {
m_unk0x428 = p_unk0x3a; m_suspendedEnableCamAnims = p_enableCamAnims;
} }
else { else {
m_unk0x3a = p_unk0x3a; m_enableCamAnims = p_enableCamAnims;
} }
} }
@ -597,7 +597,7 @@ MxResult LegoAnimationManager::LoadScriptInfo(MxS32 p_scriptIndex)
} }
m_unk0x38 = FALSE; m_unk0x38 = FALSE;
m_unk0x39 = FALSE; m_animRunning = FALSE;
m_unk0x430 = FALSE; m_unk0x430 = FALSE;
m_unk0x42c = NULL; m_unk0x42c = NULL;
@ -681,7 +681,7 @@ MxResult LegoAnimationManager::LoadScriptInfo(MxS32 p_scriptIndex)
m_anims[j].m_unk0x2a[k] = -1; m_anims[j].m_unk0x2a[k] = -1;
} }
if (m_anims[j].m_unk0x08 == -1) { if (m_anims[j].m_location == -1) {
for (MxS32 l = 0; l < m_anims[j].m_modelCount; l++) { for (MxS32 l = 0; l < m_anims[j].m_modelCount; l++) {
MxS32 index = GetCharacterIndex(m_anims[j].m_models[l].m_name); MxS32 index = GetCharacterIndex(m_anims[j].m_models[l].m_name);
@ -714,10 +714,10 @@ MxResult LegoAnimationManager::LoadScriptInfo(MxS32 p_scriptIndex)
m_unk0x402 = TRUE; m_unk0x402 = TRUE;
if (m_suspended) { if (m_suspended) {
m_unk0x428 = m_unk0x3a; m_suspendedEnableCamAnims = m_enableCamAnims;
m_unk0x429 = m_unk0x400; m_unk0x429 = m_unk0x400;
m_unk0x42a = TRUE; m_unk0x42a = TRUE;
m_unk0x3a = FALSE; m_enableCamAnims = FALSE;
m_unk0x400 = FALSE; m_unk0x400 = FALSE;
m_unk0x402 = FALSE; m_unk0x402 = FALSE;
} }
@ -769,7 +769,7 @@ MxResult LegoAnimationManager::ReadAnimInfo(LegoFile* p_file, AnimInfo* p_info)
goto done; goto done;
} }
if (p_file->Read(&p_info->m_unk0x08, sizeof(p_info->m_unk0x08)) == FAILURE) { if (p_file->Read(&p_info->m_location, sizeof(p_info->m_location)) == FAILURE) {
goto done; goto done;
} }
if (p_file->Read(&p_info->m_unk0x0a, sizeof(p_info->m_unk0x0a)) == FAILURE) { if (p_file->Read(&p_info->m_unk0x0a, sizeof(p_info->m_unk0x0a)) == FAILURE) {
@ -896,7 +896,7 @@ void LegoAnimationManager::FUN_10060540(MxBool p_unk0x29)
// FUNCTION: BETA10 0x10041463 // FUNCTION: BETA10 0x10041463
void LegoAnimationManager::FUN_10060570(MxBool p_unk0x1a) void LegoAnimationManager::FUN_10060570(MxBool p_unk0x1a)
{ {
m_unk0x39 = FALSE; m_animRunning = FALSE;
m_unk0x430 = FALSE; m_unk0x430 = FALSE;
m_unk0x42c = NULL; m_unk0x42c = NULL;
@ -938,7 +938,7 @@ MxResult LegoAnimationManager::FUN_100605e0(
AnimInfo& animInfo = m_anims[p_index]; AnimInfo& animInfo = m_anims[p_index];
if (!p_bool1) { if (!p_bool1) {
if (m_unk0x39 || !animInfo.m_unk0x29) { if (m_animRunning || !animInfo.m_unk0x29) {
return FAILURE; return FAILURE;
} }
@ -958,7 +958,7 @@ MxResult LegoAnimationManager::FUN_100605e0(
tranInfo->m_index = ++m_unk0x1c; tranInfo->m_index = ++m_unk0x1c;
tranInfo->m_unk0x10 = 0; tranInfo->m_unk0x10 = 0;
tranInfo->m_unk0x08 = p_roi; tranInfo->m_unk0x08 = p_roi;
tranInfo->m_unk0x12 = m_anims[p_index].m_unk0x08; tranInfo->m_location = m_anims[p_index].m_location;
tranInfo->m_unk0x14 = p_unk0x0a; tranInfo->m_unk0x14 = p_unk0x0a;
tranInfo->m_objectId = animInfo.m_objectId; tranInfo->m_objectId = animInfo.m_objectId;
tranInfo->m_unk0x15 = p_bool2; tranInfo->m_unk0x15 = p_bool2;
@ -1002,7 +1002,7 @@ MxResult LegoAnimationManager::FUN_100605e0(
} }
} }
m_unk0x39 = TRUE; m_animRunning = TRUE;
result = SUCCESS; result = SUCCESS;
} }
} }
@ -1024,7 +1024,7 @@ MxResult LegoAnimationManager::FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix
info->m_index = ++m_unk0x1c; info->m_index = ++m_unk0x1c;
info->m_unk0x10 = 0; info->m_unk0x10 = 0;
info->m_unk0x08 = NULL; info->m_unk0x08 = NULL;
info->m_unk0x12 = -1; info->m_location = -1;
info->m_unk0x14 = FALSE; info->m_unk0x14 = FALSE;
info->m_objectId = p_objectId; info->m_objectId = p_objectId;
@ -1054,7 +1054,7 @@ MxResult LegoAnimationManager::FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix
if (StartActionIfUnknown0x13c(action) == SUCCESS) { if (StartActionIfUnknown0x13c(action) == SUCCESS) {
BackgroundAudioManager()->LowerVolume(); BackgroundAudioManager()->LowerVolume();
info->m_flags |= LegoTranInfo::c_bit2; info->m_flags |= LegoTranInfo::c_bit2;
m_unk0x39 = TRUE; m_animRunning = TRUE;
m_unk0x404 = Timer()->GetTime(); m_unk0x404 = Timer()->GetTime();
result = SUCCESS; result = SUCCESS;
} }
@ -1151,6 +1151,49 @@ MxResult LegoAnimationManager::FUN_10060dc0(
return result; return result;
} }
// FUNCTION: LEGO1 0x10060eb0
// FUNCTION: BETA10 0x1004206c
void LegoAnimationManager::CameraTriggerFire(IslePathActor* p_actor, undefined4, MxU32 p_location, MxBool p_bool)
{
if (Lego()->m_unk0x13c && m_enableCamAnims && !m_animRunning) {
LegoLocation* location = LegoNavController::GetLocation(p_location);
if (location != NULL) {
if (location->m_frequency == 0) {
return;
}
if (location->m_unk0x5c && location->m_frequency < rand() % 100) {
return;
}
}
MxU16 unk0x0e, unk0x10;
if (FUN_100617c0(p_location, unk0x0e, unk0x10) == SUCCESS) {
MxU16 index = unk0x0e;
MxU32 unk0x22 = -1;
MxBool success = FALSE;
for (MxU16 i = unk0x0e; i <= unk0x10; i++) {
AnimInfo& animInfo = m_anims[i];
if ((p_bool || !FUN_100623a0(animInfo)) && !FUN_10062710(animInfo) && animInfo.m_unk0x29 &&
animInfo.m_unk0x22 < unk0x22 && (animInfo.m_unk0x22 == 0 || *animInfo.m_name != 'i') &&
*animInfo.m_name != 'I') {
index = i;
unk0x22 = animInfo.m_unk0x22;
success = TRUE;
}
}
if (success) {
FUN_100605e0(index, m_anims[index].m_unk0x0a, NULL, TRUE, NULL, FALSE, TRUE, TRUE, TRUE);
location->m_unk0x5c = TRUE;
}
}
}
}
// FUNCTION: LEGO1 0x10061010 // FUNCTION: LEGO1 0x10061010
// FUNCTION: BETA10 0x100422cc // FUNCTION: BETA10 0x100422cc
void LegoAnimationManager::FUN_10061010(MxBool p_und) void LegoAnimationManager::FUN_10061010(MxBool p_und)
@ -1168,7 +1211,7 @@ void LegoAnimationManager::FUN_10061010(MxBool p_und)
// TODO: Match // TODO: Match
MxU32 flags = tranInfo->m_flags; MxU32 flags = tranInfo->m_flags;
if (tranInfo->m_unk0x14 && tranInfo->m_unk0x12 != -1 && p_und) { if (tranInfo->m_unk0x14 && tranInfo->m_location != -1 && p_und) {
LegoAnim* anim; LegoAnim* anim;
if (tranInfo->m_presenter->GetPresenter() != NULL && if (tranInfo->m_presenter->GetPresenter() != NULL &&
@ -1211,7 +1254,7 @@ void LegoAnimationManager::FUN_10061010(MxBool p_und)
} }
} }
m_unk0x39 = unk0x39; m_animRunning = unk0x39;
m_unk0x404 = Timer()->GetTime(); m_unk0x404 = Timer()->GetTime();
} }
@ -1245,18 +1288,18 @@ void LegoAnimationManager::FUN_10061530()
// FUNCTION: LEGO1 0x100617c0 // FUNCTION: LEGO1 0x100617c0
// FUNCTION: BETA10 0x1004240b // FUNCTION: BETA10 0x1004240b
MxResult LegoAnimationManager::FUN_100617c0(MxS32 p_unk0x08, MxU16& p_unk0x0e, MxU16& p_unk0x10) MxResult LegoAnimationManager::FUN_100617c0(MxS32 p_location, MxU16& p_unk0x0e, MxU16& p_unk0x10)
{ {
MxResult result = FAILURE; MxResult result = FAILURE;
MxU16 unk0x0e = 0; MxU16 unk0x0e = 0;
MxU16 unk0x10 = 0; MxU16 unk0x10 = 0;
MxBool success = FALSE; MxBool success = FALSE;
if (p_unk0x08 == -1) { if (p_location == -1) {
MxS32 i; MxS32 i;
for (i = 0; i < m_animCount; i++) { for (i = 0; i < m_animCount; i++) {
if (m_anims[i].m_unk0x08 == p_unk0x08) { if (m_anims[i].m_location == p_location) {
unk0x0e = i; unk0x0e = i;
success = TRUE; success = TRUE;
break; break;
@ -1264,7 +1307,7 @@ MxResult LegoAnimationManager::FUN_100617c0(MxS32 p_unk0x08, MxU16& p_unk0x0e, M
} }
if (success) { if (success) {
for (; i < m_animCount && m_anims[i].m_unk0x08 == p_unk0x08; i++) { for (; i < m_animCount && m_anims[i].m_location == p_location; i++) {
unk0x10 = i; unk0x10 = i;
} }
} }
@ -1272,8 +1315,8 @@ MxResult LegoAnimationManager::FUN_100617c0(MxS32 p_unk0x08, MxU16& p_unk0x0e, M
else { else {
MxS32 i; MxS32 i;
for (i = 0; m_animCount > i && m_anims[i].m_unk0x08 != -1; i++) { for (i = 0; m_animCount > i && m_anims[i].m_location != -1; i++) {
if (m_anims[i].m_unk0x08 == p_unk0x08) { if (m_anims[i].m_location == p_location) {
unk0x0e = i; unk0x0e = i;
success = TRUE; success = TRUE;
break; break;
@ -1281,7 +1324,7 @@ MxResult LegoAnimationManager::FUN_100617c0(MxS32 p_unk0x08, MxU16& p_unk0x0e, M
} }
if (success) { if (success) {
for (; i < m_animCount && m_anims[i].m_unk0x08 == p_unk0x08; i++) { for (; i < m_animCount && m_anims[i].m_location == p_location; i++) {
unk0x10 = i; unk0x10 = i;
} }
} }
@ -1340,7 +1383,7 @@ MxLong LegoAnimationManager::Notify(MxParam& p_param)
BackgroundAudioManager()->RaiseVolume(); BackgroundAudioManager()->RaiseVolume();
} }
m_unk0x39 = FALSE; m_animRunning = FALSE;
m_unk0x404 = Timer()->GetTime(); m_unk0x404 = Timer()->GetTime();
found = TRUE; found = TRUE;
@ -1441,7 +1484,7 @@ MxResult LegoAnimationManager::Tickle()
FUN_10064b50(time); FUN_10064b50(time);
if (!m_unk0x39 && time - m_unk0x404 > 10000 && speed < g_unk0x100f74b0[0][0] && speed > g_unk0x100f74b0[5][0]) { if (!m_animRunning && time - m_unk0x404 > 10000 && speed < g_unk0x100f74b0[0][0] && speed > g_unk0x100f74b0[5][0]) {
LegoPathBoundary* boundary = actor->GetBoundary(); LegoPathBoundary* boundary = actor->GetBoundary();
Mx3DPointFloat position(roi->GetWorldPosition()); Mx3DPointFloat position(roi->GetWorldPosition());
@ -1809,7 +1852,7 @@ void LegoAnimationManager::AddExtra(MxS32 p_location, MxBool p_und)
{ {
LegoLocation::Boundary* boundary = NULL; LegoLocation::Boundary* boundary = NULL;
if (p_und || (!m_unk0x39 && m_unk0x400)) { if (p_und || (!m_animRunning && m_unk0x400)) {
LegoWorld* world = CurrentWorld(); LegoWorld* world = CurrentWorld();
if (world != NULL) { if (world != NULL) {

View file

@ -427,7 +427,7 @@ MxBool LegoAnimMMPresenter::FUN_1004b6d0(MxLong p_time)
LegoROI* viewROI = VideoManager()->GetViewROI(); LegoROI* viewROI = VideoManager()->GetViewROI();
IslePathActor* actor = CurrentActor(); IslePathActor* actor = CurrentActor();
if (m_tranInfo != NULL && m_tranInfo->m_unk0x14 && m_tranInfo->m_unk0x12 != -1 && actor != NULL) { if (m_tranInfo != NULL && m_tranInfo->m_unk0x14 && m_tranInfo->m_location != -1 && actor != NULL) {
if (m_unk0x64 != NULL) { if (m_unk0x64 != NULL) {
undefined4 und = 1; undefined4 und = 1;

View file

@ -20,6 +20,7 @@
#include "mxmisc.h" #include "mxmisc.h"
#include "mxnotificationmanager.h" #include "mxnotificationmanager.h"
#include "mxstreamer.h" #include "mxstreamer.h"
#include "mxtype19notificationparam.h"
#include "mxtypes.h" #include "mxtypes.h"
#include "mxutilities.h" #include "mxutilities.h"
#include "mxvariabletable.h" #include "mxvariabletable.h"
@ -341,11 +342,21 @@ void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bO
} }
} }
// STUB: LEGO1 0x1003ecc0 // FUNCTION: LEGO1 0x1003ecc0
// FUNCTION: BETA10 0x100d4b38 // FUNCTION: BETA10 0x100d4b38
void FUN_1003ecc0(IslePathActor* p_actor, undefined4, undefined4, MxBool) void PlayCamAnim(IslePathActor* p_actor, undefined4 p_unused, MxU32 p_location, MxBool p_bool)
{ {
// TODO LegoWorld* world = CurrentWorld();
MxLong result = 0;
if (world != NULL) {
MxType19NotificationParam param(c_notificationType19, p_actor, 0x43, p_location);
result = world->Notify(param);
}
if (result == 0) {
AnimationManager()->CameraTriggerFire(p_actor, p_unused, p_location, p_bool);
}
} }
// FUNCTION: LEGO1 0x1003eda0 // FUNCTION: LEGO1 0x1003eda0

View file

@ -16,9 +16,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE}, FALSE,
0},
{1, {1,
"LCAMBA1", "LCAMBA1",
0.852546, 0.852546,
@ -30,9 +31,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_13", 2, 0.75, 0, 0.25, TRUE}, {"EDG02_13", 2, 0.75, 0, 0.25, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
10240}, FALSE,
40},
{2, {2,
"LCAMBA2", "LCAMBA2",
3.505301, 3.505301,
@ -44,9 +46,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_37", 2, 0.75, 0, 0.25, TRUE}, {"EDG02_37", 2, 0.75, 0, 0.25, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
5120}, FALSE,
20},
{3, {3,
"LCAMBA3", "LCAMBA3",
-7.472569, -7.472569,
@ -58,9 +61,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_26", 0, 0.75, 2, 0.25, TRUE}, {"EDG02_26", 0, 0.75, 2, 0.25, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
5120}, FALSE,
20},
{4, {4,
"LCAMBA4", "LCAMBA4",
38.55205, 38.55205,
@ -72,9 +76,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG00_146", 0, 0.5, 2, 0.5, TRUE}, {"EDG00_146", 0, 0.5, 2, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
7680}, FALSE,
30},
{5, {5,
"LCAMCA1", "LCAMCA1",
-36.778473, -36.778473,
@ -86,8 +91,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"INT01", 2, 0.5, 6, 0.5, TRUE}, {"INT01", 2, 0.5, 6, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{6, {6,
"LCAMCA2", "LCAMCA2",
@ -100,8 +106,9 @@ LegoLocation g_locations[] = {
0.000446, 0.000446,
0.999999, 0.999999,
-0.001387, -0.001387,
{"EDG00_104", 0, 0.5, 2, 0.5, TRUE}, {"EDG00_104", 0, 0.5, 2, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{7, {7,
"LCAMCA3", "LCAMCA3",
@ -114,8 +121,9 @@ LegoLocation g_locations[] = {
-0.000173, -0.000173,
0.999998, 0.999998,
0.001888, 0.001888,
{"EDG02_58", 2, 0.25, 0, 0.75, TRUE}, {"EDG02_58", 2, 0.25, 0, 0.75, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{8, {8,
"LCAMGS1", "LCAMGS1",
@ -128,9 +136,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_40", 2, 0.25, 0, 0.25, TRUE}, {"EDG02_40", 2, 0.25, 0, 0.25, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
17920}, FALSE,
70},
{9, {9,
"LCAMGS2", "LCAMGS2",
25.153421, 25.153421,
@ -142,8 +151,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"INT19", 1, 0.75, 0, 0.75, TRUE}, {"INT19", 1, 0.75, 0, 0.75, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{10, {10,
"LCAMGS3", "LCAMGS3",
@ -156,8 +166,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG00_74", 0, 0.5, 2, 0.5, TRUE}, {"EDG00_74", 0, 0.5, 2, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{11, {11,
"LCAMHO1", "LCAMHO1",
@ -170,9 +181,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
12800}, FALSE,
50},
{12, {12,
"LCAMHO2", "LCAMHO2",
90.92687, 90.92687,
@ -184,8 +196,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{13, {13,
"LCAMHO3", "LCAMHO3",
@ -198,8 +211,9 @@ LegoLocation g_locations[] = {
0.005781, 0.005781,
0.999976, 0.999976,
0.003708, 0.003708,
{"EDG02_27", 1, 0.89, 2, 0.89, FALSE}, {"EDG02_27", 1, 0.89, 2, 0.89, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{14, {14,
"LCAMHO4", "LCAMHO4",
@ -212,9 +226,10 @@ LegoLocation g_locations[] = {
-0.034088, -0.034088,
0.999355, 0.999355,
-0.011255, -0.011255,
{"EDG02_27", 1, 0.89, 2, 0.89, FALSE}, {"EDG02_27", 1, 0.89, 2, 0.89, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{15, {15,
"LCAMIC1", "LCAMIC1",
80.11602, 80.11602,
@ -226,8 +241,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG00_69", 2, 0.5, 0, 0.5, FALSE}, {"EDG00_69", 2, 0.5, 0, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{16, {16,
"LCAMIC2", "LCAMIC2",
@ -240,8 +256,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_66", 2, 0.5, 0, 0.5, FALSE}, {"EDG02_66", 2, 0.5, 0, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{17, {17,
"LCAMIC3", "LCAMIC3",
@ -254,9 +271,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_68", 0, 0.5, 2, 0.5, TRUE}, {"EDG02_68", 0, 0.5, 2, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
5120}, FALSE,
20},
{18, {18,
"LCAMJA1", "LCAMJA1",
95.05279, 95.05279,
@ -268,9 +286,10 @@ LegoLocation g_locations[] = {
-0.006372, -0.006372,
0.999977, 0.999977,
-0.002478, -0.002478,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{19, {19,
"LCAMJA2", "LCAMJA2",
97.214066, 97.214066,
@ -282,8 +301,9 @@ LegoLocation g_locations[] = {
-0.010811, -0.010811,
0.999927, 0.999927,
0.005453, 0.005453,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{20, {20,
"LCAMJA3", "LCAMJA3",
@ -296,8 +316,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"INT33", 1, 0.9, 3, 0.9, FALSE}, {"INT33", 1, 0.9, 3, 0.9, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{21, {21,
"LCAMJA4", "LCAMJA4",
@ -310,8 +331,9 @@ LegoLocation g_locations[] = {
-0.001442, -0.001442,
0.999945, 0.999945,
0.010407, 0.010407,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{22, {22,
"LCAMJA5", "LCAMJA5",
@ -324,8 +346,9 @@ LegoLocation g_locations[] = {
-0.007107, -0.007107,
0.999949, 0.999949,
-0.007199, -0.007199,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{23, {23,
"LCAMJS1", "LCAMJS1",
@ -338,9 +361,10 @@ LegoLocation g_locations[] = {
0.000653, 0.000653,
0.999999, 0.999999,
-0.000932, -0.000932,
{"INT26", 0, 0.5, 3, 0.5, FALSE}, {"INT26", 0, 0.5, 3, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{24, {24,
"LCAMJS2", "LCAMJS2",
14.753909, 14.753909,
@ -352,9 +376,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{25, {25,
"LCAMJS3", "LCAMJS3",
12.373611, 12.373611,
@ -366,9 +391,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{26, {26,
"LCAMJS4", "LCAMJS4",
27.136557, 27.136557,
@ -380,8 +406,9 @@ LegoLocation g_locations[] = {
-0.000261, -0.000261,
0.999999, 0.999999,
-0.001364, -0.001364,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{27, {27,
"LCAMMT1", "LCAMMT1",
@ -394,9 +421,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
12800}, FALSE,
50},
{28, {28,
"LCAMMT2", "LCAMMT2",
-58.28056, -58.28056,
@ -408,8 +436,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{29, {29,
"LCAMPK1", "LCAMPK1",
@ -422,9 +451,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG00_83", 0, 0.9, 2, 0.9, FALSE}, {"EDG00_83", 0, 0.9, 2, 0.9, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
12800}, FALSE,
50},
{30, {30,
"LCAMPK2", "LCAMPK2",
63.75, 63.75,
@ -436,8 +466,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{31, {31,
"LCAMPK4", "LCAMPK4",
@ -450,9 +481,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{32, {32,
"LCAMPO1", "LCAMPO1",
-24.38507, -24.38507,
@ -464,9 +496,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
5120}, FALSE,
20},
{33, {33,
"LCAMPO2", "LCAMPO2",
-41.35899, -41.35899,
@ -478,8 +511,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG00_191", 0, 0.5, 2, 0.5, TRUE}, {"EDG00_191", 0, 0.5, 2, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{34, {34,
"LCAMPS1", "LCAMPS1",
@ -492,9 +526,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_40", 0, 0.5, 2, 0.5, FALSE}, {"EDG02_40", 0, 0.5, 2, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{35, {35,
"LCAMPS2", "LCAMPS2",
70.99095, 70.99095,
@ -506,9 +541,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{36, {36,
"LCAMPS3", "LCAMPS3",
73.92391, 73.92391,
@ -520,9 +556,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_66", 1, 0.15, 2, 0.15, FALSE}, {"EDG02_66", 1, 0.15, 2, 0.15, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{37, {37,
"LCAMPS4", "LCAMPS4",
61.471172, 61.471172,
@ -534,8 +571,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG02_40", 0, 0.5, 2, 0.5, FALSE}, {"EDG02_40", 0, 0.5, 2, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{38, {38,
"LCAMPZ1", "LCAMPZ1",
@ -548,9 +586,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
20480}, FALSE,
80},
{39, {39,
"LCAMPZ2", "LCAMPZ2",
-21.870003, -21.870003,
@ -562,9 +601,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
23040}, FALSE,
90},
{40, {40,
"LCAMPZ3", "LCAMPZ3",
-21.860731, -21.860731,
@ -576,9 +616,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG00_24", 0, 0.9, 2, 0.9, TRUE}, {"EDG00_24", 0, 0.9, 2, 0.9, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{41, {41,
"LCAMPZ4", "LCAMPZ4",
-20.492962, -20.492962,
@ -590,9 +631,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE}, FALSE,
0},
{42, {42,
"LCAMPZ5", "LCAMPZ5",
-11.0625, -11.0625,
@ -604,9 +646,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
12800}, FALSE,
50},
{43, {43,
"LCAMPZ6", "LCAMPZ6",
-14.837131, -14.837131,
@ -618,8 +661,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{44, {44,
"LCAMPZ7", "LCAMPZ7",
@ -632,8 +676,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{45, {45,
"LCAMRA1", "LCAMRA1",
@ -646,8 +691,9 @@ LegoLocation g_locations[] = {
-0.007751, -0.007751,
0.998685, 0.998685,
-0.050677, -0.050677,
{"EDG00_03", 1, 0.5, 3, 0.5, TRUE}, {"EDG00_03", 1, 0.5, 3, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{46, {46,
"LCAMRA2", "LCAMRA2",
@ -660,9 +706,10 @@ LegoLocation g_locations[] = {
-0.000078, -0.000078,
1, 1,
0.000105, 0.000105,
{"EDG01_17", 0, 0.5, 3, 0.5, TRUE}, {"EDG01_17", 0, 0.5, 3, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{47, {47,
"LCAMRA3", "LCAMRA3",
-57.06778, -57.06778,
@ -674,8 +721,9 @@ LegoLocation g_locations[] = {
-0.000112, -0.000112,
1, 1,
0.000021, 0.000021,
{"EDG01_40", 2, 0.5, 0, 0.5, TRUE}, {"EDG01_40", 2, 0.5, 0, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{48, {48,
"LCAMRA4", "LCAMRA4",
@ -688,9 +736,10 @@ LegoLocation g_locations[] = {
0.035939, 0.035939,
0.999346, 0.999346,
-0.00388, -0.00388,
{"EDG01_27", 0, 0.5, 2, 0.5, TRUE}, {"EDG01_27", 0, 0.5, 2, 0.5, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{49, {49,
"LCAMRA5", "LCAMRA5",
-84.27638, -84.27638,
@ -702,9 +751,10 @@ LegoLocation g_locations[] = {
0.024875, 0.024875,
0.999675, 0.999675,
-0.005499, -0.005499,
{"EDG01_08", 2, 0.7, 0, 0.7, TRUE}, {"EDG01_08", 2, 0.7, 0, 0.7, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
6400}, FALSE,
25},
{50, {50,
"LCAMRA6", "LCAMRA6",
-86.96998, -86.96998,
@ -716,8 +766,9 @@ LegoLocation g_locations[] = {
0.000378, 0.000378,
1, 1,
0.000009, 0.000009,
{"EDG01_13", 1, 0.2, 0, 0.2, TRUE}, {"EDG01_13", 1, 0.2, 0, 0.2, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{51, {51,
"LCAMRT1", "LCAMRT1",
@ -730,9 +781,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG03_10", 0, 0.5, 2, 0.5, FALSE}, {"EDG03_10", 0, 0.5, 2, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
20480}, FALSE,
80},
{52, {52,
"LCAMRT2", "LCAMRT2",
-2.950222, -2.950222,
@ -744,9 +796,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG03_10", 0, 0.5, 2, 0.5, FALSE}, {"EDG03_10", 0, 0.5, 2, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{53, {53,
"LCAMRT3", "LCAMRT3",
-0.87654, -0.87654,
@ -758,9 +811,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
100},
{54, {54,
"LCAMRT4", "LCAMRT4",
0.4375, 0.4375,
@ -772,9 +826,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE}, FALSE,
0},
{55, {55,
"LCAMRT5", "LCAMRT5",
-27.213715, -27.213715,
@ -786,8 +841,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG03_05", 1, 0.5, 2, 0.5, FALSE}, {"EDG03_05", 1, 0.5, 2, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{56, {56,
"LCAMRT6", "LCAMRT6",
@ -800,9 +856,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"EDG03_10", 0, 0.5, 2, 0.5, FALSE}, {"EDG03_10", 0, 0.5, 2, 0.5, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
15360}, FALSE,
60},
{57, {57,
"LCAMST1", "LCAMST1",
-40.1615, -40.1615,
@ -814,9 +871,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
5120}, FALSE,
20},
{58, {58,
"LCAMST2", "LCAMST2",
-48.750553, -48.750553,
@ -828,8 +886,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{59, {59,
"LCAMZG1", "LCAMZG1",
@ -842,8 +901,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{"INT22", 0, 0.4, 2, 0.4, TRUE}, {"INT22", 0, 0.4, 2, 0.4, 1},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{60, {60,
"LCAMZI1", "LCAMZI1",
@ -856,9 +916,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE}, FALSE,
0},
{61, {61,
"LCAMZI2", "LCAMZI2",
93.37283, 93.37283,
@ -870,9 +931,10 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE}, FALSE,
0},
{62, {62,
"LCAMZIE", "LCAMZIE",
93.375, 93.375,
@ -884,8 +946,9 @@ LegoLocation g_locations[] = {
0.254493, 0.254493,
0.967075, 0.967075,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{63, {63,
"LCAMZIN", "LCAMZIN",
@ -898,8 +961,9 @@ LegoLocation g_locations[] = {
0, 0,
0.967203, 0.967203,
0.254006, 0.254006,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{64, {64,
"LCAMZIS", "LCAMZIS",
@ -912,8 +976,9 @@ LegoLocation g_locations[] = {
0, 0,
0.966946, 0.966946,
-0.254982, -0.254982,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{65, {65,
"LCAMZIW", "LCAMZIW",
@ -926,8 +991,9 @@ LegoLocation g_locations[] = {
-0.254493, -0.254493,
0.967075, 0.967075,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{66, {66,
"LCAMZP1", "LCAMZP1",
@ -940,8 +1006,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{67, {67,
"LCAMRT7", "LCAMRT7",
@ -954,8 +1021,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
FALSE,
0}, 0},
{68, {68,
"LCAMJS5", "LCAMJS5",
@ -968,8 +1036,9 @@ LegoLocation g_locations[] = {
0, 0,
1, 1,
0, 0,
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
{NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, 0},
25600}, FALSE,
{69, "overhead", 0, 135, 0, 0, -1, 0, 0, 0, 1, {NULL, 0, 0, 0, 0, FALSE}, {NULL, 0, 0, 0, 0, FALSE}, 0} 100},
{69, "overhead", 0, 135, 0, 0, -1, 0, 0, 0, 1, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, FALSE, 0}
}; };

View file

@ -722,7 +722,7 @@ void Isle::Enable(MxBool p_enable)
m_act1state->m_unk0x018 = 8; m_act1state->m_unk0x018 = 8;
AnimationManager()->FUN_1005f6d0(FALSE); AnimationManager()->FUN_1005f6d0(FALSE);
AnimationManager()->FUN_1005f700(FALSE); AnimationManager()->EnableCamAnims(FALSE);
g_unk0x100f1198 &= ~c_bit7; g_unk0x100f1198 &= ~c_bit7;
m_towtrack->FUN_1004dab0(); m_towtrack->FUN_1004dab0();
@ -731,7 +731,7 @@ void Isle::Enable(MxBool p_enable)
m_act1state->m_unk0x018 = 10; m_act1state->m_unk0x018 = 10;
AnimationManager()->FUN_1005f6d0(FALSE); AnimationManager()->FUN_1005f6d0(FALSE);
AnimationManager()->FUN_1005f700(FALSE); AnimationManager()->EnableCamAnims(FALSE);
g_unk0x100f1198 &= ~c_bit7; g_unk0x100f1198 &= ~c_bit7;
m_ambulance->FUN_10036e60(); m_ambulance->FUN_10036e60();

View file

@ -38,6 +38,7 @@ enum NotificationId {
// SIZE 0x0c // SIZE 0x0c
class MxNotificationParam : public MxParam { class MxNotificationParam : public MxParam {
public: public:
inline MxNotificationParam() : m_type(c_notificationType0), m_sender(NULL) {}
inline MxNotificationParam(NotificationId p_type, MxCore* p_sender) : MxParam(), m_type(p_type), m_sender(p_sender) inline MxNotificationParam(NotificationId p_type, MxCore* p_sender) : MxParam(), m_type(p_type), m_sender(p_sender)
{ {
} }

View file

@ -7,9 +7,31 @@
// VTABLE: LEGO1 0x100d6230 // VTABLE: LEGO1 0x100d6230
// SIZE 0x10 // SIZE 0x10
class MxType19NotificationParam : public MxNotificationParam { class MxType19NotificationParam : public MxNotificationParam {
public:
MxType19NotificationParam(NotificationId p_type, MxCore* p_sender, MxU8 p_unk0x0e, MxU16 p_unk0x0c)
: MxNotificationParam()
{
m_type = p_type;
m_sender = p_sender;
m_unk0x0c = p_unk0x0c;
m_unk0x0e = p_unk0x0e;
}
// FUNCTION: LEGO1 0x1001bac0
MxNotificationParam* Clone() const override
{
return new MxType19NotificationParam(m_type, m_sender, m_unk0x0e, m_unk0x0c);
} // vtable+0x04
protected: protected:
MxU16 m_unk0x0c; // 0x0c MxU16 m_unk0x0c; // 0x0c
MxU8 m_unk0x0e; // 0x0e MxU8 m_unk0x0e; // 0x0e
}; };
// SYNTHETIC: LEGO1 0x1001bb80
// MxType19NotificationParam::`scalar deleting destructor'
// SYNTHETIC: LEGO1 0x1001bbf0
// MxType19NotificationParam::~MxType19NotificationParam
#endif // MXTYPE19NOTIFICATIONPARAM_H #endif // MXTYPE19NOTIFICATIONPARAM_H