From a1388adcd730ba92136100a4983f050b30c92ddb Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 10 May 2024 10:23:47 -0400 Subject: [PATCH] Refactor camera locations and other structs, name functions based on BETA (#900) * Refactor camera locations and other structs, name functions based on BETA * Add size assert * Fix member name --- .../legoomni/include/legoanimationmanager.h | 74 +- .../legoomni/include/legocameralocations.h | 36 +- .../lego/legoomni/include/legonavcontroller.h | 3 + .../src/common/legoanimationmanager.cpp | 116 +- .../src/entity/legocameralocations.cpp | 1040 ++++++++++++++--- .../legoomni/src/entity/legonavcontroller.cpp | 11 + LEGO1/lego/legoomni/src/worlds/isle.cpp | 12 +- 7 files changed, 1036 insertions(+), 256 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoanimationmanager.h b/LEGO1/lego/legoomni/include/legoanimationmanager.h index 33ab9b20..a1862c14 100644 --- a/LEGO1/lego/legoomni/include/legoanimationmanager.h +++ b/LEGO1/lego/legoomni/include/legoanimationmanager.h @@ -16,44 +16,44 @@ class LegoROIList; struct ModelInfo; class MxDSAction; -// SIZE 0x18 -struct Character { - char* m_name; // 0x00 - MxBool m_unk0x04; // 0x04 - MxS8 m_vehicleId; // 0x05 - undefined m_unk0x06; // 0x06 (unused?) - MxBool m_unk0x07; // 0x07 - MxBool m_unk0x08; // 0x08 - MxBool m_unk0x09; // 0x09 - MxU32 m_unk0x0c; // 0x0c - MxS32 m_unk0x10; // 0x10 - MxBool m_active; // 0x14 - MxU8 m_unk0x15; // 0x15 - MxU8 m_unk0x16; // 0x16 -}; - -// SIZE 0x08 -struct Vehicle { - char* m_name; // 0x00 - undefined m_unk0x04; // 0x04 - MxBool m_unk0x05; // 0x05 -}; - -// SIZE 0x18 -struct Unknown0x3c { - LegoROI* m_roi; // 0x00 - MxS32 m_characterId; // 0x04 - MxLong m_unk0x08; // 0x08 - undefined m_unk0x0c; // 0x0c - MxBool m_unk0x0d; // 0x0d - float m_unk0x10; // 0x10 - MxBool m_unk0x14; // 0x14 -}; - // VTABLE: LEGO1 0x100d8c18 // SIZE 0x500 class LegoAnimationManager : public MxCore { public: + // SIZE 0x18 + struct Character { + char* m_name; // 0x00 + MxBool m_unk0x04; // 0x04 + MxS8 m_vehicleId; // 0x05 + undefined m_unk0x06; // 0x06 (unused?) + MxBool m_unk0x07; // 0x07 + MxBool m_unk0x08; // 0x08 + MxBool m_unk0x09; // 0x09 + MxU32 m_unk0x0c; // 0x0c + MxS32 m_unk0x10; // 0x10 + MxBool m_active; // 0x14 + MxU8 m_unk0x15; // 0x15 + MxU8 m_unk0x16; // 0x16 + }; + + // SIZE 0x08 + struct Vehicle { + char* m_name; // 0x00 + undefined m_unk0x04; // 0x04 + MxBool m_unk0x05; // 0x05 + }; + + // SIZE 0x18 + struct Extra { + LegoROI* m_roi; // 0x00 + MxS32 m_characterId; // 0x04 + MxLong m_unk0x08; // 0x08 + undefined m_unk0x0c; // 0x0c + MxBool m_unk0x0d; // 0x0d + float m_unk0x10; // 0x10 + MxBool m_unk0x14; // 0x14 + }; + LegoAnimationManager(); ~LegoAnimationManager() override; @@ -98,8 +98,8 @@ class LegoAnimationManager : public MxCore { void FUN_10061010(MxBool p_und); LegoTranInfo* GetTranInfo(MxU32 p_index); void FUN_10062770(); - void FUN_100627d0(MxBool p_und); - void FUN_100629b0(MxU32, MxBool); + void PurgeExtra(MxBool p_und); + void AddExtra(MxU32 p_cameraLocation, MxBool p_und); void FUN_10063270(LegoROIList*, LegoAnimPresenter*); void FUN_10063780(LegoROIList* p_list); void FUN_10064670(Vector3*); @@ -162,7 +162,7 @@ class LegoAnimationManager : public MxCore { MxBool m_unk0x38; // 0x38 MxBool m_unk0x39; // 0x39 MxBool m_unk0x3a; // 0x3a - Unknown0x3c m_unk0x3c[40]; // 0x3c + Extra m_extras[40]; // 0x3c undefined4 m_unk0x3fc; // 0x3fc MxBool m_unk0x400; // 0x400 MxBool m_unk0x401; // 0x401 diff --git a/LEGO1/lego/legoomni/include/legocameralocations.h b/LEGO1/lego/legoomni/include/legocameralocations.h index 480e7d67..bf6608fd 100644 --- a/LEGO1/lego/legoomni/include/legocameralocations.h +++ b/LEGO1/lego/legoomni/include/legocameralocations.h @@ -6,24 +6,24 @@ // SIZE 0x60 struct LegoCameraLocation { - MxU32 m_index; // 0x00 - const char* m_name; // 0x04 - float m_position[3]; // 0x08 - float m_direction[3]; // 0x14 - float m_up[3]; // 0x20 - const char* m_edgeName; // 0x2c - undefined4 m_unk0x30; // 0x30 - float m_unk0x34; // 0x34 - undefined4 m_unk0x38; // 0x38 - float m_unk0x3c; // 0x3c - undefined4 m_unk0x40; // 0x40 - undefined4 m_unk0x44; // 0x44 - undefined4 m_unk0x48; // 0x48 - undefined4 m_unk0x4c; // 0x4c - undefined4 m_unk0x50; // 0x50 - undefined4 m_unk0x54; // 0x54 - undefined4 m_unk0x58; // 0x58 - undefined4 m_unk0x5c; // 0x5c + // SIZE 0x18 + struct Path { + const char* m_name; // 0x00 + MxS32 m_src; // 0x04 + float m_srcScale; // 0x08 + MxS32 m_dest; // 0x0c + float m_destScale; // 0x10 + undefined4 m_unk0x10; // 0x14 + }; + + MxU32 m_index; // 0x00 + const char* m_name; // 0x04 + float m_position[3]; // 0x08 + float m_direction[3]; // 0x14 + float m_up[3]; // 0x20 + Path m_pathA; // 0x2c + Path m_pathB; // 0x44 + undefined4 m_unk0x5c; // 0x5c }; extern LegoCameraLocation g_cameraLocations[70]; diff --git a/LEGO1/lego/legoomni/include/legonavcontroller.h b/LEGO1/lego/legoomni/include/legonavcontroller.h index fdf0b5f3..89116a3e 100644 --- a/LEGO1/lego/legoomni/include/legonavcontroller.h +++ b/LEGO1/lego/legoomni/include/legonavcontroller.h @@ -5,6 +5,7 @@ #include "mxcore.h" #include "mxtypes.h" +struct LegoCameraLocation; class Vector3; ////////////////////////////////////////////////////////////////////////////// @@ -73,6 +74,8 @@ class LegoNavController : public MxCore { ); static MxResult UpdateCameraLocation(MxU32 p_location); static MxResult UpdateCameraLocation(const char* p_location); + static LegoCameraLocation* GetCameraLocation(MxU32 p_location); + inline void SetLinearVel(MxFloat p_linearVel) { m_linearVel = p_linearVel; } inline MxFloat GetLinearVel() { return m_linearVel; } inline MxFloat GetRotationalVel() { return m_rotationalVel; } diff --git a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp index 722ae378..468b28eb 100644 --- a/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoanimationmanager.cpp @@ -26,16 +26,16 @@ #include DECOMP_SIZE_ASSERT(LegoAnimationManager, 0x500) -DECOMP_SIZE_ASSERT(Character, 0x18) -DECOMP_SIZE_ASSERT(Vehicle, 0x08) -DECOMP_SIZE_ASSERT(Unknown0x3c, 0x18) +DECOMP_SIZE_ASSERT(LegoAnimationManager::Character, 0x18) +DECOMP_SIZE_ASSERT(LegoAnimationManager::Vehicle, 0x08) +DECOMP_SIZE_ASSERT(LegoAnimationManager::Extra, 0x18) DECOMP_SIZE_ASSERT(LegoTranInfo, 0x78) // GLOBAL: LEGO1 0x100d8b28 MxU8 g_unk0x100d8b28[] = {0, 1, 2, 4, 8, 16}; // GLOBAL: LEGO1 0x100f6d20 -Vehicle g_vehicles[] = { +LegoAnimationManager::Vehicle g_vehicles[] = { {"bikebd", 0, FALSE}, {"bikepg", 0, FALSE}, {"bikerd", 0, FALSE}, @@ -46,7 +46,7 @@ Vehicle g_vehicles[] = { }; // GLOBAL: LEGO1 0x100f7048 -Character g_characters[47] = { +LegoAnimationManager::Character g_characters[47] = { {"pepper", FALSE, 6, 0, FALSE, FALSE, TRUE, 1500, 20000, FALSE, 50, 1}, {"mama", FALSE, -1, 0, FALSE, FALSE, FALSE, 1500, 20000, FALSE, 0, 2}, {"papa", FALSE, -1, 0, FALSE, FALSE, FALSE, 1500, 20000, FALSE, 0, 3}, @@ -140,8 +140,8 @@ LegoAnimationManager::~LegoAnimationManager() FUN_10061010(FALSE); - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - LegoROI* roi = m_unk0x3c[i].m_roi; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + LegoROI* roi = m_extras[i].m_roi; if (roi != NULL) { LegoPathActor* actor = CharacterManager()->GetActor(roi->GetName()); @@ -226,8 +226,8 @@ void LegoAnimationManager::Suspend() FUN_10061010(FALSE); MxS32 i; - for (i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - LegoROI* roi = m_unk0x3c[i].m_roi; + for (i = 0; i < (MxS32) _countof(m_extras); i++) { + LegoROI* roi = m_extras[i].m_roi; if (roi != NULL) { LegoPathActor* actor = CharacterManager()->GetActor(roi->GetName()); @@ -240,10 +240,10 @@ void LegoAnimationManager::Suspend() CharacterManager()->FUN_10083db0(roi); } - if (m_unk0x3c[i].m_unk0x14) { - m_unk0x3c[i].m_unk0x14 = FALSE; + if (m_extras[i].m_unk0x14) { + m_extras[i].m_unk0x14 = FALSE; - MxS32 vehicleId = g_characters[m_unk0x3c[i].m_characterId].m_vehicleId; + MxS32 vehicleId = g_characters[m_extras[i].m_characterId].m_vehicleId; if (vehicleId >= 0) { g_vehicles[vehicleId].m_unk0x05 = FALSE; @@ -254,9 +254,9 @@ void LegoAnimationManager::Suspend() } } - m_unk0x3c[i].m_roi = NULL; - m_unk0x3c[i].m_characterId = -1; - m_unk0x3c[i].m_unk0x10 = -1.0f; + m_extras[i].m_roi = NULL; + m_extras[i].m_characterId = -1; + m_extras[i].m_unk0x10 = -1.0f; } m_unk0x18 = 0; @@ -306,11 +306,11 @@ void LegoAnimationManager::Init() m_unk0x30[i] = 0; } - for (i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - m_unk0x3c[i].m_roi = NULL; - m_unk0x3c[i].m_characterId = -1; - m_unk0x3c[i].m_unk0x10 = -1.0f; - m_unk0x3c[i].m_unk0x14 = FALSE; + for (i = 0; i < (MxS32) _countof(m_extras); i++) { + m_extras[i].m_roi = NULL; + m_extras[i].m_characterId = -1; + m_extras[i].m_unk0x10 = -1.0f; + m_extras[i].m_unk0x14 = FALSE; } m_unk0x38 = FALSE; @@ -358,7 +358,7 @@ void LegoAnimationManager::FUN_1005f6d0(MxBool p_unk0x400) m_unk0x400 = p_unk0x400; if (!p_unk0x400) { - FUN_100627d0(TRUE); + PurgeExtra(TRUE); } } } @@ -714,7 +714,7 @@ MxResult LegoAnimationManager::FUN_100605e0( MxResult result = FAILURE; if (m_scriptIndex != -1 && p_index < m_animCount && m_tranInfoList != NULL) { - FUN_100627d0(FALSE); + PurgeExtra(FALSE); FUN_10062770(); MxDSAction action; @@ -800,7 +800,7 @@ MxResult LegoAnimationManager::FUN_100609f0(MxU32 p_objectId, MxMatrix* p_matrix MxResult result = FAILURE; MxDSAction action; - FUN_100627d0(FALSE); + PurgeExtra(FALSE); LegoTranInfo* info = new LegoTranInfo(); info->m_animInfo = NULL; @@ -861,9 +861,9 @@ MxResult LegoAnimationManager::StartEntityAction(MxDSAction& p_dsAction, LegoEnt controller->FUN_10046770(actor); actor->ClearController(); - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - if (m_unk0x3c[i].m_roi == roi) { - MxS32 characterId = m_unk0x3c[i].m_characterId; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + if (m_extras[i].m_roi == roi) { + MxS32 characterId = m_extras[i].m_characterId; g_characters[characterId].m_unk0x07 = TRUE; MxS32 vehicleId = g_characters[characterId].m_vehicleId; @@ -1130,8 +1130,8 @@ MxLong LegoAnimationManager::Notify(MxParam& p_param) cursor.Detach(); delete tranInfo; - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - LegoROI* roi = m_unk0x3c[i].m_roi; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + LegoROI* roi = m_extras[i].m_roi; if (roi != NULL) { LegoExtraActor* actor = CharacterManager()->GetActor(roi->GetName()); @@ -1180,10 +1180,10 @@ MxResult LegoAnimationManager::Tickle() } if (m_unk0x401) { - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - LegoROI* roi = m_unk0x3c[i].m_roi; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + LegoROI* roi = m_extras[i].m_roi; - if (roi != NULL && m_unk0x3c[i].m_unk0x0d) { + if (roi != NULL && m_extras[i].m_unk0x0d) { LegoPathActor* actor = CharacterManager()->GetActor(roi->GetName()); if (actor != NULL && actor->GetController() != NULL) { @@ -1193,10 +1193,10 @@ MxResult LegoAnimationManager::Tickle() CharacterManager()->FUN_10083db0(roi); - if (m_unk0x3c[i].m_unk0x14) { - m_unk0x3c[i].m_unk0x14 = FALSE; + if (m_extras[i].m_unk0x14) { + m_extras[i].m_unk0x14 = FALSE; - MxS32 vehicleId = g_characters[m_unk0x3c[i].m_characterId].m_vehicleId; + MxS32 vehicleId = g_characters[m_extras[i].m_characterId].m_vehicleId; if (vehicleId >= 0) { g_vehicles[vehicleId].m_unk0x05 = FALSE; @@ -1207,11 +1207,11 @@ MxResult LegoAnimationManager::Tickle() } } - m_unk0x3c[i].m_roi = NULL; - g_characters[m_unk0x3c[i].m_characterId].m_unk0x04 = FALSE; - g_characters[m_unk0x3c[i].m_characterId].m_unk0x07 = FALSE; - m_unk0x3c[i].m_characterId = -1; - m_unk0x3c[i].m_unk0x0d = FALSE; + m_extras[i].m_roi = NULL; + g_characters[m_extras[i].m_characterId].m_unk0x04 = FALSE; + g_characters[m_extras[i].m_characterId].m_unk0x07 = FALSE; + m_extras[i].m_characterId = -1; + m_extras[i].m_unk0x0d = FALSE; m_unk0x414--; } } @@ -1237,11 +1237,11 @@ MxResult LegoAnimationManager::Tickle() unk0x0c = g_unk0x100d8b28[actorId]; } - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - LegoROI* roi = m_unk0x3c[i].m_roi; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + LegoROI* roi = m_extras[i].m_roi; if (roi != NULL) { - MxU16 result = FUN_10062110(roi, direction, position, boundary, speed, unk0x0c, m_unk0x3c[i].m_unk0x14); + MxU16 result = FUN_10062110(roi, direction, position, boundary, speed, unk0x0c, m_extras[i].m_unk0x14); if (result) { MxMatrix mat; @@ -1269,7 +1269,7 @@ MxResult LegoAnimationManager::Tickle() m_unk0x408 = time; if (time - m_unk0x404 > 10000) { - FUN_100629b0(-1, FALSE); + AddExtra(-1, FALSE); } double elapsedSeconds = VideoManager()->GetElapsedSeconds(); @@ -1450,9 +1450,9 @@ void LegoAnimationManager::FUN_10062580(AnimInfo& p_info) controller->FUN_10046770(actor); actor->ClearController(); - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - if (m_unk0x3c[i].m_roi == actor->GetROI()) { - MxS32 characterId = m_unk0x3c[i].m_characterId; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + if (m_extras[i].m_roi == actor->GetROI()) { + MxS32 characterId = m_extras[i].m_characterId; g_characters[characterId].m_unk0x07 = TRUE; MxS32 vehicleId = g_characters[characterId].m_vehicleId; @@ -1533,15 +1533,15 @@ void LegoAnimationManager::FUN_10062770() // FUNCTION: LEGO1 0x100627d0 // FUNCTION: BETA10 0x1004389d -void LegoAnimationManager::FUN_100627d0(MxBool p_und) +void LegoAnimationManager::PurgeExtra(MxBool p_und) { ViewManager* viewManager = GetViewManager(); if (p_und || viewManager != NULL) { MxLong time = Timer()->GetTime(); - for (MxS32 i = 0; i < (MxS32) _countof(m_unk0x3c); i++) { - LegoROI* roi = m_unk0x3c[i].m_roi; + for (MxS32 i = 0; i < (MxS32) _countof(m_extras); i++) { + LegoROI* roi = m_extras[i].m_roi; if (roi != NULL) { MxU16 prefix = *(MxU16*) roi->GetName(); @@ -1549,7 +1549,7 @@ void LegoAnimationManager::FUN_100627d0(MxBool p_und) MxBool maOrPa = prefix == TWOCC('m', 'a') || prefix == TWOCC('p', 'a'); if ((p_und && !maOrPa) || - (g_characters[m_unk0x3c[i].m_characterId].m_unk0x10 >= 0 && time - m_unk0x3c[i].m_unk0x08 > und && + (g_characters[m_extras[i].m_characterId].m_unk0x10 >= 0 && time - m_extras[i].m_unk0x08 > und && CharacterManager()->GetRefCount(roi) == 1 && !viewManager->FUN_100a6150(roi->GetWorldBoundingBox()))) { m_unk0x414--; @@ -1562,10 +1562,10 @@ void LegoAnimationManager::FUN_100627d0(MxBool p_und) CharacterManager()->FUN_10083db0(roi); - if (m_unk0x3c[i].m_unk0x14) { - m_unk0x3c[i].m_unk0x14 = FALSE; + if (m_extras[i].m_unk0x14) { + m_extras[i].m_unk0x14 = FALSE; - MxS32 vehicleId = g_characters[m_unk0x3c[i].m_characterId].m_vehicleId; + MxS32 vehicleId = g_characters[m_extras[i].m_characterId].m_vehicleId; if (vehicleId >= 0) { g_vehicles[vehicleId].m_unk0x05 = FALSE; @@ -1576,10 +1576,10 @@ void LegoAnimationManager::FUN_100627d0(MxBool p_und) } } - m_unk0x3c[i].m_roi = NULL; - g_characters[m_unk0x3c[i].m_characterId].m_unk0x04 = FALSE; - g_characters[m_unk0x3c[i].m_characterId].m_unk0x07 = FALSE; - m_unk0x3c[i].m_characterId = -1; + m_extras[i].m_roi = NULL; + g_characters[m_extras[i].m_characterId].m_unk0x04 = FALSE; + g_characters[m_extras[i].m_characterId].m_unk0x07 = FALSE; + m_extras[i].m_characterId = -1; } } } @@ -1588,7 +1588,7 @@ void LegoAnimationManager::FUN_100627d0(MxBool p_und) // STUB: LEGO1 0x100629b0 // FUNCTION: BETA10 0x10043c10 -void LegoAnimationManager::FUN_100629b0(MxU32, MxBool) +void LegoAnimationManager::AddExtra(MxU32 p_cameraLocation, MxBool p_und) { // TODO } diff --git a/LEGO1/lego/legoomni/src/entity/legocameralocations.cpp b/LEGO1/lego/legoomni/src/entity/legocameralocations.cpp index 07c8abd2..9c887e68 100644 --- a/LEGO1/lego/legoomni/src/entity/legocameralocations.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocameralocations.cpp @@ -1,144 +1,910 @@ #include "legocameralocations.h" DECOMP_SIZE_ASSERT(LegoCameraLocation, 0x60) +DECOMP_SIZE_ASSERT(LegoCameraLocation::Path, 0x18) // GLOBAL: LEGO1 0x100f4c60 LegoCameraLocation g_cameraLocations[] = { - {0, "look at origin from z=-8", 0, 1.25, -8, 0, 0, 1, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {1, "LCAMBA1", 0.852546, 1.25, -17.078703, 0.990515, 0, -0.137405, 0, 1, 0, "EDG02_13", - 2, 0.75, 0, 0.25, 1, 0, 0, 0, 0, 0, 0, 10240}, - {2, "LCAMBA2", 3.505301, 1.25, -27.955006, -0.002102, 0, 0.999998, 0, 1, 0, "EDG02_37", - 2, 0.75, 0, 0.25, 1, 0, 0, 0, 0, 0, 0, 5120}, - {3, "LCAMBA3", -7.472569, 1.25, -16.129034, 1, 0, 0.000926, 0, 1, 0, "EDG02_26", - 0, 0.75, 2, 0.25, 1, 0, 0, 0, 0, 0, 0, 5120}, - {4, "LCAMBA4", 38.55205, 1.25, -16.129, -0.999997, 0, 0.002449, 0, 1, 0, "EDG00_146", - 0, 0.5, 2, 0.5, 1, 0, 0, 0, 0, 0, 0, 7680}, - {5, "LCAMCA1", -36.778473, -1.996432, 30.392212, 0.001013, 0, -0.999999, 0, 1, 0, "INT01", - 2, 0.5, 6, 0.5, 1, 0, 0, 0, 0, 0, 0, 0}, - {6, "LCAMCA2", -36.774277, -1.996432, 24.695135, -0.305789, 0.001457, 0.952098, - 0.000446, 0.999999, -0.001387, "EDG00_104", 0, 0.5, 2, 0.5, - 1, 0, 0, 0, 0, 0, 0, 0}, - {7, "LCAMCA3", -36.888363, 0.5625, 33.169434, -0.091475, -0.001896, 0.995806, - -0.000173, 0.999998, 0.001888, "EDG02_58", 2, 0.25, 0, 0.75, - 1, 0, 0, 0, 0, 0, 0, 0}, - {8, "LCAMGS1", 27.647768, 1.25, -4.07201, 0, 0, 1, 0, 1, 0, "EDG02_40", - 2, 0.25, 0, 0.25, 1, 0, 0, 0, 0, 0, 0, 17920}, - {9, "LCAMGS2", 25.153421, 1.25, 6.101026, 0, 0, -1, 0, 1, 0, "INT19", 1, 0.75, 0, 0.75, 1, 0, 0, 0, 0, 0, 0, 0}, - {10, "LCAMGS3", 29.506308, 1.25, -1.23529, -1, 0, 0, 0, 1, 0, "EDG00_74", 0, 0.5, 2, 0.5, 1, 0, 0, 0, 0, 0, 0, 0}, - {11, "LCAMHO1", 84.22306, 4.78298, 29.150623, 0.779248, 0, -0.626715, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12800}, - {12, "LCAMHO2", 90.92687, 4.78298, 23.340658, -0.983254, 0, 0.182241, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {13, "LCAMHO3", 87.66666, 4.829471, 20.905437, 0.841755, -0.006868, 0.539817, - 0.005781, 0.999976, 0.003708, "EDG02_27", 1, 0.89, 2, 0.89, - 0, 0, 0, 0, 0, 0, 0, 0}, - {14, "LCAMHO4", 86.33506, 4.814447, 20.489912, 0.948965, 0.035898, 0.313331, - -0.034088, 0.999355, -0.011255, "EDG02_27", 1, 0.89, 2, 0.89, - 0, 0, 0, 0, 0, 0, 0, 25600}, - {15, "LCAMIC1", 80.11602, 10.193289, -17.946644, 0.664706, 0, 0.747105, 0, 1, 0, "EDG00_69", - 2, 0.5, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0}, - {16, "LCAMIC2", 86.31804, 10.193289, -11.24872, -0.936663, 0, -0.350231, 0, 1, 0, "EDG02_66", - 2, 0.5, 0, 0.5, 0, 0, 0, 0, 0, 0, 0, 0}, - {17, "LCAMIC3", 86.82608, 10.193289, -4.398705, 0.466761, 0, -0.884383, 0, 1, 0, "EDG02_68", - 0, 0.5, 2, 0.5, 1, 0, 0, 0, 0, 0, 0, 5120}, - {18, "LCAMJA1", 95.05279, 1.318484, -46.451622, 0.93196, 0.006837, 0.362497, -0.006372, 0.999977, -0.002478, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25600}, - {19, "LCAMJA2", 97.214066, 1.318484, -49.035267, -0.892783, -0.012109, 0.450324, - -0.010811, 0.999927, 0.005453, NULL, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0}, - {20, "LCAMJA3", 94.12146, 1.25, -48.242523, -1, 0, -0.000415, 0, 1, 0, "INT33", - 1, 0.9, 3, 0.9, 0, 0, 0, 0, 0, 0, 0, 0}, - {21, "LCAMJA4", 95.58649, 1.17483, -43.42485, 0.137268, 0.010506, -0.990478, -0.001442, 0.999945, 0.010407, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {22, "LCAMJA5", 91.586105, 1.17483, -48.882996, 0.702508, 0.010117, 0.711604, -0.007107, 0.999949, -0.007199, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {23, "LCAMJS1", 9.885858, 0.154871, -54.080086, 0.573803, -0.001138, -0.818993, - 0.000653, 0.999999, -0.000932, "INT26", 0, 0.5, 3, 0.5, - 0, 0, 0, 0, 0, 0, 0, 25600}, - {24, "LCAMJS2", 14.753909, 0.125, -55.5238, -0.789437, 0, -0.613832, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25600}, - {25, "LCAMJS3", 12.373611, 0.925977, -64.69941, 0.114162, 0, 0.993462, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25600}, - {26, "LCAMJS4", 27.136557, 1.125, -41.8613, -0.187784, -0.001389, -0.982209, -0.000261, 0.999999, -0.001364, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {27, "LCAMMT1", -63.277508, 15.25, 23.717245, -0.985194, 0, 0.171445, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12800}, - {28, "LCAMMT2", -58.28056, 15.25, 22.75, 0.829409, 0, -0.558642, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {29, "LCAMPK1", 39.875, 1.25, -1, 0.587492, 0, -0.80923, 0, 1, 0, "EDG00_83", - 0, 0.9, 2, 0.9, 0, 0, 0, 0, 0, 0, 0, 12800}, - {30, "LCAMPK2", 63.75, 1.25, 15.5625, -0.968277, 0, -0.249878, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {31, "LCAMPK4", 49.5625, 1.25, 0, -0.480011, 0, -0.877262, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6400}, - {32, "LCAMPO1", -24.38507, 1.25, -55.71749, -1, 0, 0.000066, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5120}, - {33, "LCAMPO2", -41.35899, 1.790912, -56.728477, 0.967347, 0, 0.253455, 0, 1, 0, "EDG00_191", - 0, 0.5, 2, 0.5, 1, 0, 0, 0, 0, 0, 0, 0}, - {34, "LCAMPS1", 63.1466, 2.25, -81.58665, 0.860361, 0, -0.509685, 0, 1, 0, "EDG02_40", - 0, 0.5, 2, 0.5, 0, 0, 0, 0, 0, 0, 0, 6400}, - {35, "LCAMPS2", 70.99095, 2.25, -87.82898, -0.746009, 0, 0.665936, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6400}, - {36, "LCAMPS3", 73.92391, 2.25, -71.65845, -0.480404, 0, -0.877047, 0, 1, 0, "EDG02_66", - 1, 0.15, 2, 0.15, 0, 0, 0, 0, 0, 0, 0, 6400}, - {37, "LCAMPS4", 61.471172, 1.829919, -74.37842, 0.812146, 0, -0.583455, 0, 1, 0, "EDG02_40", - 0, 0.5, 2, 0.5, 0, 0, 0, 0, 0, 0, 0, 0}, - {38, "LCAMPZ1", -19.517637, 1.25, -44.645412, -0.582251, 0, 0.813009, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20480}, - {39, "LCAMPZ2", -21.870003, 1.25, -41.47747, 0.310142, 0, 0.95069, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23040}, - {40, "LCAMPZ3", -21.860731, 1.25, -41.47234, 0.877738, 0, -0.479141, 0, 1, 0, "EDG00_24", - 0, 0.9, 2, 0.9, 1, 0, 0, 0, 0, 0, 0, 25600}, - {41, "LCAMPZ4", -20.492962, 1.25, -43.951485, 0, 0, 1, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {42, "LCAMPZ5", -11.0625, 1.25, -45.75, -0.998358, 0, -0.057283, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12800}, - {43, "LCAMPZ6", -14.837131, 1.25, -41.580185, -0.485221, 0, 0.874392, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {44, "LCAMPZ7", -22.17942, 1.25, -41.132347, 0.697186, 0, 0.716891, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {45, "LCAMRA1", -68.90462, 10.238018, -15.521397, -0.150999, -0.051266, -0.987204, - -0.007751, 0.998685, -0.050677, "EDG00_03", 1, 0.5, 3, 0.5, - 1, 0, 0, 0, 0, 0, 0, 0}, - {46, "LCAMRA2", -67.931305, 7.883309, -28.911201, -0.596641, -0.000131, 0.802509, - -0.000078, 1, 0.000105, "EDG01_17", 0, 0.5, 3, 0.5, - 1, 0, 0, 0, 0, 0, 0, 6400}, - {47, "LCAMRA3", -57.06778, 7.883309, -45.567757, -0.982252, -0.000114, 0.187564, -0.000112, 1, 0.000021, "EDG01_40", - 2, 0.5, 0, 0.5, 1, 0, 0, 0, 0, 0, 0, 0}, - {48, "LCAMRA4", -72.23135, 7.912604, -45.26192, 0.993571, -0.036148, -0.10728, - 0.035939, 0.999346, -0.00388, "EDG01_27", 0, 0.5, 2, 0.5, - 1, 0, 0, 0, 0, 0, 0, 6400}, - {49, "LCAMRA5", -84.27638, 4.683791, -52.99282, 0.976109, -0.025475, -0.215783, - 0.024875, 0.999675, -0.005499, "EDG01_08", 2, 0.7, 0, 0.7, - 1, 0, 0, 0, 0, 0, 0, 6400}, - {50, "LCAMRA6", -86.96998, 5.265254, -16.33013, -0.999696, 0.000378, -0.024655, 0.000378, 1, 0.000009, "EDG01_13", - 1, 0.2, 0, 0.2, 1, 0, 0, 0, 0, 0, 0, 0}, - {51, "LCAMRT1", -11.308265, 1.25, 9.629765, 1, 0, 0, 0, 1, 0, "EDG03_10", - 0, 0.5, 2, 0.5, 0, 0, 0, 0, 0, 0, 0, 20480}, - {52, "LCAMRT2", -2.950222, 1.25, 12.345603, 0.816763, 0, -0.576974, 0, 1, 0, "EDG03_10", - 0, 0.5, 2, 0.5, 0, 0, 0, 0, 0, 0, 0, 25600}, - {53, "LCAMRT3", -0.87654, 1.25, 11.844613, 0.006162, 0, -0.999981, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25600}, - {54, "LCAMRT4", 0.4375, 1.25, 7, -0.748454, 0, -0.663187, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {55, "LCAMRT5", -27.213715, 1.25, 13.280918, -0.670318, 0, -0.742074, 0, 1, 0, "EDG03_05", - 1, 0.5, 2, 0.5, 0, 0, 0, 0, 0, 0, 0, 0}, - {56, "LCAMRT6", -21.811115, 1.25, 9.006517, 0.97496, 0, 0.222379, 0, 1, 0, "EDG03_10", - 0, 0.5, 2, 0.5, 0, 0, 0, 0, 0, 0, 0, 15360}, - {57, "LCAMST1", -40.1615, 2.02756, -56.701893, -0.958601, 0, -0.284751, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5120}, - {58, "LCAMST2", -48.750553, 2.703701, -55.472034, -0.032008, 0, -0.999488, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {59, "LCAMZG1", 31.694365, 1.25, -2.814015, -0.650445, 0, 0.759553, 0, 1, 0, "INT22", - 0, 0.4, 2, 0.4, 1, 0, 0, 0, 0, 0, 0, 0}, - {60, "LCAMZI1", 93.37283, 10.1875, -10.382307, 0, 0, 1, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {61, "LCAMZI2", 93.37283, 19.4375, -10.382307, 0, 0, 1, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {62, "LCAMZIE", 93.375, 19.4375, -10.375, 0.967075, -0.254493, 0, 0.254493, 0.967075, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {63, "LCAMZIN", 93.37283, 19.4375, -10.382307, 0, -0.254006, 0.967203, 0, 0.967203, 0.254006, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {64, "LCAMZIS", 93.37283, 19.4375, -10.382307, 0, -0.254982, -0.966946, 0, 0.966946, -0.254982, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {65, "LCAMZIW", 93.375, 19.4375, -10.375, -0.967075, -0.254493, 0, -0.254493, 0.967075, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {66, "LCAMZP1", 73.70144, 2.25, -88.91317, -0.911398, 0, 0.411526, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {67, "LCAMRT7", -1.170637, 1.25, 5.082029, -1, 0, -0.000599, 0, 1, 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - {68, "LCAMJS5", -1.734375, -0.625, -61.8125, -0.454574, 0, -0.890709, 0, 1, 0, NULL, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25600}, - {69, "overhead", 0, 135, 0, 0, -1, 0, 0, 0, 1, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + {0, "look at origin from z=-8", 0, 1.25, -8, 0, 0, 1, 0, 1, 0, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, 0}, + {1, + "LCAMBA1", + 0.852546, + 1.25, + -17.078703, + 0.990515, + 0, + -0.137405, + 0, + 1, + 0, + {"EDG02_13", 2, 0.75, 0, 0.25, 1}, + {NULL, 0, 0, 0, 0, 0}, + 10240}, + {2, + "LCAMBA2", + 3.505301, + 1.25, + -27.955006, + -0.002102, + 0, + 0.999998, + 0, + 1, + 0, + {"EDG02_37", 2, 0.75, 0, 0.25, 1}, + {NULL, 0, 0, 0, 0, 0}, + 5120}, + {3, + "LCAMBA3", + -7.472569, + 1.25, + -16.129034, + 1, + 0, + 0.000926, + 0, + 1, + 0, + {"EDG02_26", 0, 0.75, 2, 0.25, 1}, + {NULL, 0, 0, 0, 0, 0}, + 5120}, + {4, + "LCAMBA4", + 38.55205, + 1.25, + -16.129, + -0.999997, + 0, + 0.002449, + 0, + 1, + 0, + {"EDG00_146", 0, 0.5, 2, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 7680}, + {5, + "LCAMCA1", + -36.778473, + -1.996432, + 30.392212, + 0.001013, + 0, + -0.999999, + 0, + 1, + 0, + {"INT01", 2, 0.5, 6, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {6, + "LCAMCA2", + -36.774277, + -1.996432, + 24.695135, + -0.305789, + 0.001457, + 0.952098, + 0.000446, + 0.999999, + -0.001387, + {"EDG00_104", 0, 0.5, 2, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {7, + "LCAMCA3", + -36.888363, + 0.5625, + 33.169434, + -0.091475, + -0.001896, + 0.995806, + -0.000173, + 0.999998, + 0.001888, + {"EDG02_58", 2, 0.25, 0, 0.75, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {8, + "LCAMGS1", + 27.647768, + 1.25, + -4.07201, + 0, + 0, + 1, + 0, + 1, + 0, + {"EDG02_40", 2, 0.25, 0, 0.25, 1}, + {NULL, 0, 0, 0, 0, 0}, + 17920}, + {9, + "LCAMGS2", + 25.153421, + 1.25, + 6.101026, + 0, + 0, + -1, + 0, + 1, + 0, + {"INT19", 1, 0.75, 0, 0.75, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {10, + "LCAMGS3", + 29.506308, + 1.25, + -1.23529, + -1, + 0, + 0, + 0, + 1, + 0, + {"EDG00_74", 0, 0.5, 2, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {11, + "LCAMHO1", + 84.22306, + 4.78298, + 29.150623, + 0.779248, + 0, + -0.626715, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 12800}, + {12, + "LCAMHO2", + 90.92687, + 4.78298, + 23.340658, + -0.983254, + 0, + 0.182241, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {13, + "LCAMHO3", + 87.66666, + 4.829471, + 20.905437, + 0.841755, + -0.006868, + 0.539817, + 0.005781, + 0.999976, + 0.003708, + {"EDG02_27", 1, 0.89, 2, 0.89, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {14, + "LCAMHO4", + 86.33506, + 4.814447, + 20.489912, + 0.948965, + 0.035898, + 0.313331, + -0.034088, + 0.999355, + -0.011255, + {"EDG02_27", 1, 0.89, 2, 0.89, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {15, + "LCAMIC1", + 80.11602, + 10.193289, + -17.946644, + 0.664706, + 0, + 0.747105, + 0, + 1, + 0, + {"EDG00_69", 2, 0.5, 0, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {16, + "LCAMIC2", + 86.31804, + 10.193289, + -11.24872, + -0.936663, + 0, + -0.350231, + 0, + 1, + 0, + {"EDG02_66", 2, 0.5, 0, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {17, + "LCAMIC3", + 86.82608, + 10.193289, + -4.398705, + 0.466761, + 0, + -0.884383, + 0, + 1, + 0, + {"EDG02_68", 0, 0.5, 2, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 5120}, + {18, + "LCAMJA1", + 95.05279, + 1.318484, + -46.451622, + 0.93196, + 0.006837, + 0.362497, + -0.006372, + 0.999977, + -0.002478, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {19, + "LCAMJA2", + 97.214066, + 1.318484, + -49.035267, + -0.892783, + -0.012109, + 0.450324, + -0.010811, + 0.999927, + 0.005453, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {20, + "LCAMJA3", + 94.12146, + 1.25, + -48.242523, + -1, + 0, + -0.000415, + 0, + 1, + 0, + {"INT33", 1, 0.9, 3, 0.9, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {21, + "LCAMJA4", + 95.58649, + 1.17483, + -43.42485, + 0.137268, + 0.010506, + -0.990478, + -0.001442, + 0.999945, + 0.010407, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {22, + "LCAMJA5", + 91.586105, + 1.17483, + -48.882996, + 0.702508, + 0.010117, + 0.711604, + -0.007107, + 0.999949, + -0.007199, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {23, + "LCAMJS1", + 9.885858, + 0.154871, + -54.080086, + 0.573803, + -0.001138, + -0.818993, + 0.000653, + 0.999999, + -0.000932, + {"INT26", 0, 0.5, 3, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {24, + "LCAMJS2", + 14.753909, + 0.125, + -55.5238, + -0.789437, + 0, + -0.613832, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {25, + "LCAMJS3", + 12.373611, + 0.925977, + -64.69941, + 0.114162, + 0, + 0.993462, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {26, + "LCAMJS4", + 27.136557, + 1.125, + -41.8613, + -0.187784, + -0.001389, + -0.982209, + -0.000261, + 0.999999, + -0.001364, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {27, + "LCAMMT1", + -63.277508, + 15.25, + 23.717245, + -0.985194, + 0, + 0.171445, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 12800}, + {28, + "LCAMMT2", + -58.28056, + 15.25, + 22.75, + 0.829409, + 0, + -0.558642, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {29, + "LCAMPK1", + 39.875, + 1.25, + -1, + 0.587492, + 0, + -0.80923, + 0, + 1, + 0, + {"EDG00_83", 0, 0.9, 2, 0.9, 0}, + {NULL, 0, 0, 0, 0, 0}, + 12800}, + {30, + "LCAMPK2", + 63.75, + 1.25, + 15.5625, + -0.968277, + 0, + -0.249878, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {31, + "LCAMPK4", + 49.5625, + 1.25, + 0, + -0.480011, + 0, + -0.877262, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {32, + "LCAMPO1", + -24.38507, + 1.25, + -55.71749, + -1, + 0, + 0.000066, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 5120}, + {33, + "LCAMPO2", + -41.35899, + 1.790912, + -56.728477, + 0.967347, + 0, + 0.253455, + 0, + 1, + 0, + {"EDG00_191", 0, 0.5, 2, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {34, + "LCAMPS1", + 63.1466, + 2.25, + -81.58665, + 0.860361, + 0, + -0.509685, + 0, + 1, + 0, + {"EDG02_40", 0, 0.5, 2, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {35, + "LCAMPS2", + 70.99095, + 2.25, + -87.82898, + -0.746009, + 0, + 0.665936, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {36, + "LCAMPS3", + 73.92391, + 2.25, + -71.65845, + -0.480404, + 0, + -0.877047, + 0, + 1, + 0, + {"EDG02_66", 1, 0.15, 2, 0.15, 0}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {37, + "LCAMPS4", + 61.471172, + 1.829919, + -74.37842, + 0.812146, + 0, + -0.583455, + 0, + 1, + 0, + {"EDG02_40", 0, 0.5, 2, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {38, + "LCAMPZ1", + -19.517637, + 1.25, + -44.645412, + -0.582251, + 0, + 0.813009, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 20480}, + {39, + "LCAMPZ2", + -21.870003, + 1.25, + -41.47747, + 0.310142, + 0, + 0.95069, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 23040}, + {40, + "LCAMPZ3", + -21.860731, + 1.25, + -41.47234, + 0.877738, + 0, + -0.479141, + 0, + 1, + 0, + {"EDG00_24", 0, 0.9, 2, 0.9, 1}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {41, "LCAMPZ4", -20.492962, 1.25, -43.951485, 0, 0, 1, 0, 1, 0, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, 0}, + {42, + "LCAMPZ5", + -11.0625, + 1.25, + -45.75, + -0.998358, + 0, + -0.057283, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 12800}, + {43, + "LCAMPZ6", + -14.837131, + 1.25, + -41.580185, + -0.485221, + 0, + 0.874392, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {44, + "LCAMPZ7", + -22.17942, + 1.25, + -41.132347, + 0.697186, + 0, + 0.716891, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {45, + "LCAMRA1", + -68.90462, + 10.238018, + -15.521397, + -0.150999, + -0.051266, + -0.987204, + -0.007751, + 0.998685, + -0.050677, + {"EDG00_03", 1, 0.5, 3, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {46, + "LCAMRA2", + -67.931305, + 7.883309, + -28.911201, + -0.596641, + -0.000131, + 0.802509, + -0.000078, + 1, + 0.000105, + {"EDG01_17", 0, 0.5, 3, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {47, + "LCAMRA3", + -57.06778, + 7.883309, + -45.567757, + -0.982252, + -0.000114, + 0.187564, + -0.000112, + 1, + 0.000021, + {"EDG01_40", 2, 0.5, 0, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {48, + "LCAMRA4", + -72.23135, + 7.912604, + -45.26192, + 0.993571, + -0.036148, + -0.10728, + 0.035939, + 0.999346, + -0.00388, + {"EDG01_27", 0, 0.5, 2, 0.5, 1}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {49, + "LCAMRA5", + -84.27638, + 4.683791, + -52.99282, + 0.976109, + -0.025475, + -0.215783, + 0.024875, + 0.999675, + -0.005499, + {"EDG01_08", 2, 0.7, 0, 0.7, 1}, + {NULL, 0, 0, 0, 0, 0}, + 6400}, + {50, + "LCAMRA6", + -86.96998, + 5.265254, + -16.33013, + -0.999696, + 0.000378, + -0.024655, + 0.000378, + 1, + 0.000009, + {"EDG01_13", 1, 0.2, 0, 0.2, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {51, + "LCAMRT1", + -11.308265, + 1.25, + 9.629765, + 1, + 0, + 0, + 0, + 1, + 0, + {"EDG03_10", 0, 0.5, 2, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 20480}, + {52, + "LCAMRT2", + -2.950222, + 1.25, + 12.345603, + 0.816763, + 0, + -0.576974, + 0, + 1, + 0, + {"EDG03_10", 0, 0.5, 2, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {53, + "LCAMRT3", + -0.87654, + 1.25, + 11.844613, + 0.006162, + 0, + -0.999981, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {54, "LCAMRT4", 0.4375, 1.25, 7, -0.748454, 0, -0.663187, 0, 1, 0, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, 0}, + {55, + "LCAMRT5", + -27.213715, + 1.25, + 13.280918, + -0.670318, + 0, + -0.742074, + 0, + 1, + 0, + {"EDG03_05", 1, 0.5, 2, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {56, + "LCAMRT6", + -21.811115, + 1.25, + 9.006517, + 0.97496, + 0, + 0.222379, + 0, + 1, + 0, + {"EDG03_10", 0, 0.5, 2, 0.5, 0}, + {NULL, 0, 0, 0, 0, 0}, + 15360}, + {57, + "LCAMST1", + -40.1615, + 2.02756, + -56.701893, + -0.958601, + 0, + -0.284751, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 5120}, + {58, + "LCAMST2", + -48.750553, + 2.703701, + -55.472034, + -0.032008, + 0, + -0.999488, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {59, + "LCAMZG1", + 31.694365, + 1.25, + -2.814015, + -0.650445, + 0, + 0.759553, + 0, + 1, + 0, + {"INT22", 0, 0.4, 2, 0.4, 1}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {60, "LCAMZI1", 93.37283, 10.1875, -10.382307, 0, 0, 1, 0, 1, 0, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, 0}, + {61, "LCAMZI2", 93.37283, 19.4375, -10.382307, 0, 0, 1, 0, 1, 0, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, 0}, + {62, + "LCAMZIE", + 93.375, + 19.4375, + -10.375, + 0.967075, + -0.254493, + 0, + 0.254493, + 0.967075, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {63, + "LCAMZIN", + 93.37283, + 19.4375, + -10.382307, + 0, + -0.254006, + 0.967203, + 0, + 0.967203, + 0.254006, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {64, + "LCAMZIS", + 93.37283, + 19.4375, + -10.382307, + 0, + -0.254982, + -0.966946, + 0, + 0.966946, + -0.254982, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {65, + "LCAMZIW", + 93.375, + 19.4375, + -10.375, + -0.967075, + -0.254493, + 0, + -0.254493, + 0.967075, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {66, + "LCAMZP1", + 73.70144, + 2.25, + -88.91317, + -0.911398, + 0, + 0.411526, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {67, + "LCAMRT7", + -1.170637, + 1.25, + 5.082029, + -1, + 0, + -0.000599, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 0}, + {68, + "LCAMJS5", + -1.734375, + -0.625, + -61.8125, + -0.454574, + 0, + -0.890709, + 0, + 1, + 0, + {NULL, 0, 0, 0, 0, 0}, + {NULL, 0, 0, 0, 0, 0}, + 25600}, + {69, "overhead", 0, 135, 0, 0, -1, 0, 0, 0, 1, {NULL, 0, 0, 0, 0, 0}, {NULL, 0, 0, 0, 0, 0}, 0} }; diff --git a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp index f56b1198..37436736 100644 --- a/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legonavcontroller.cpp @@ -476,6 +476,17 @@ MxResult LegoNavController::UpdateCameraLocation(MxU32 p_location) return result; } +// FUNCTION: LEGO1 0x10055720 +// FUNCTION: BETA10 0x1009c259 +LegoCameraLocation* LegoNavController::GetCameraLocation(MxU32 p_location) +{ + if (p_location < _countof(g_cameraLocations)) { + return &g_cameraLocations[p_location]; + } + + return NULL; +} + // FUNCTION: LEGO1 0x10055750 MxResult LegoNavController::ProcessJoystickInput(MxBool& p_und) { diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index f87b3412..bafe2e99 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -487,15 +487,15 @@ void Isle::Enable(MxBool p_enable) FUN_1003ef00(TRUE); if (m_act1state->m_unk0x018 == 0) { - MxU32 und[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + MxU32 cameraLocations[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; for (MxU32 i = 0; i < 5; i++) { - MxS32 und2 = rand() % 5; + MxS32 r = rand() % 5; - for (MxU32 j = 0; j < _countof(und); j++) { - if (und[j] != 0 && und2-- == 0) { - AnimationManager()->FUN_100629b0(und[j], TRUE); - und[j] = 0; + for (MxU32 j = 0; j < _countof(cameraLocations); j++) { + if (cameraLocations[j] != 0 && r-- == 0) { + AnimationManager()->AddExtra(cameraLocations[j], TRUE); + cameraLocations[j] = 0; break; } }