From 68bb20f04f60cd052b1c5a0ef68cc6334635ed00 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 22 Mar 2024 13:40:19 -0400 Subject: [PATCH] Implement LegoCharacterManager::CreateROI (#709) * WIP * Create globals * Add Read * Name Init * Add LegoCharacter init data * Add define for NULL * Use MxS8 * Add LegoCharacterLOD * WIP CreateROI * Fix * WIP * Match * Match * Match, implement Find * Fix MeshBuilder * Fix * space --- CMakeLists.txt | 1 + .../legoomni/include/legocharactermanager.h | 41 +- LEGO1/lego/legoomni/include/legocharacters.h | 51 + .../src/common/legocharactermanager.cpp | 285 +++- .../legoomni/src/common/legocharacters.cpp | 1232 +++++++++++++++++ .../legoomni/src/common/legogamestate.cpp | 6 +- .../src/entity/legocameracontroller.cpp | 6 +- LEGO1/lego/sources/roi/legolod.cpp | 68 +- LEGO1/lego/sources/roi/legolod.h | 5 +- LEGO1/lego/sources/roi/legoroi.cpp | 17 + LEGO1/lego/sources/roi/legoroi.h | 4 + LEGO1/mxgeometry/mxgeometry3d.h | 2 +- LEGO1/omni/include/mxtypes.h | 4 + LEGO1/realtime/orientableroi.h | 2 + LEGO1/tgl/d3drm/meshbuilder.cpp | 2 +- 15 files changed, 1617 insertions(+), 109 deletions(-) create mode 100644 LEGO1/lego/legoomni/include/legocharacters.h create mode 100644 LEGO1/lego/legoomni/src/common/legocharacters.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c1b52a8d..369c646e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -317,6 +317,7 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/common/legoanimmmpresenter.cpp LEGO1/lego/legoomni/src/common/legobackgroundcolor.cpp LEGO1/lego/legoomni/src/common/legocharactermanager.cpp + LEGO1/lego/legoomni/src/common/legocharacters.cpp LEGO1/lego/legoomni/src/common/legofullscreenmovie.cpp LEGO1/lego/legoomni/src/common/legogamestate.cpp LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp diff --git a/LEGO1/lego/legoomni/include/legocharactermanager.h b/LEGO1/lego/legoomni/include/legocharactermanager.h index 4d7ea084..4421c74d 100644 --- a/LEGO1/lego/legoomni/include/legocharactermanager.h +++ b/LEGO1/lego/legoomni/include/legocharactermanager.h @@ -31,50 +31,27 @@ struct LegoCharacter { MxU32 m_refCount; // 0x04 }; -typedef map LegoCharacterMap; +struct LegoCharacterData; -struct LegoSaveDataEntry3 { - char* m_name; - void* m_unk0x04; - LegoActor* m_actor; - MxS32 m_savePart1; - MxS32 m_savePart2; - MxU8 m_savePart3; - undefined4 m_unk0x18[6]; - MxU8 m_frameOffsetInDwords; // 0x30 - MxS32* m_pFrameData; - MxU8 m_currentFrame; - undefined4 m_unk0x3c[2]; - MxU8 m_savePart5; // 0x44 - undefined4 m_unk0x48[5]; - MxU8 m_savePart6; // 0x5c - undefined4 m_unk0x60[11]; - MxU8 m_savePart7; // 0x8c - undefined4 m_unk0x90[5]; - MxU8 m_savePart8; // 0xa4 - undefined4 m_unk0xa8[17]; - MxU8 m_savePart9; // 0xec - undefined4 m_unk0xf0[5]; - MxU8 m_savePart10; // 0x104 -}; +typedef map LegoCharacterMap; // SIZE 0x08 class LegoCharacterManager { public: LegoCharacterManager(); - MxResult WriteSaveData3(LegoStorage* p_storage); - MxResult ReadSaveData3(LegoStorage* p_storage); + MxResult Write(LegoStorage* p_storage); + MxResult Read(LegoStorage* p_storage); LegoROI* GetROI(const char* p_key, MxBool p_createEntity); - void InitSaveData(); + void Init(); static void SetCustomizeAnimFile(const char* p_value); static MxBool FUN_10084c00(const LegoChar*); void FUN_100832a0(); void FUN_10083db0(LegoROI* p_roi); void FUN_10083f10(LegoROI* p_roi); - LegoSaveDataEntry3* FUN_10084c60(const char* p_key); + LegoCharacterData* Find(const char* p_key); MxBool FUN_10084ec0(LegoROI* p_roi); MxU32 FUN_10085140(LegoROI*, MxBool); LegoROI* FUN_10085210(const LegoChar*, LegoChar*, undefined); @@ -92,6 +69,12 @@ class LegoCharacterManager { }; // clang-format off +// TEMPLATE: LEGO1 0x1001a690 +// list >::_Buynode + +// TEMPLATE: LEGO1 0x10035790 +// _Construct + // TEMPLATE: LEGO1 0x10082b90 // _Tree,map >::_Kfn,LegoCharacterComparator,allocator >::~_Tree,map >::_Kfn,LegoCharacterComparator,allocator > diff --git a/LEGO1/lego/legoomni/include/legocharacters.h b/LEGO1/lego/legoomni/include/legocharacters.h new file mode 100644 index 00000000..aff7a23e --- /dev/null +++ b/LEGO1/lego/legoomni/include/legocharacters.h @@ -0,0 +1,51 @@ +#ifndef LEGOCHARACTERS_H +#define LEGOCHARACTERS_H + +#include "decomp.h" +#include "mxtypes.h" + +class LegoActor; +class LegoROI; + +// SIZE 0x108 +struct LegoCharacterData { + // SIZE 0x18 + struct Part { + MxU8* m_unk0x00; // 0x00 + const char** m_unk0x04; // 0x04 + MxU8 m_unk0x08; // 0x08 + MxU8* m_unk0x0c; // 0x0c + const char** m_unk0x10; // 0x10 + MxU8 m_unk0x14; // 0x14 + }; + + char* m_name; // 0x00 + LegoROI* m_roi; // 0x04 + LegoActor* m_actor; // 0x08 + MxS32 m_unk0x0c; // 0x0c + MxS32 m_unk0x10; // 0x10 + MxU8 m_unk0x14; // 0x14 + Part m_parts[10]; // 0x18 +}; + +// SIZE 0x58 +struct LegoCharacterLOD { + enum { + c_flag1 = 0x01, + c_flag2 = 0x02 + }; + + const char* m_name; // 0x00 + const char* m_parentName; // 0x04 + MxU32 m_flags; // 0x08 + float m_boundingSphere[4]; // 0x0c + float m_boundingBox[6]; // 0x1c + float m_position[3]; // 0x34 + float m_direction[3]; // 0x40 + float m_up[3]; // 0x4c +}; + +extern LegoCharacterData g_characterDataInit[66]; +extern LegoCharacterLOD g_characterLODs[11]; + +#endif // LEGOCHARACTERS_H diff --git a/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp b/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp index 8b466c41..6503b2e3 100644 --- a/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legocharactermanager.cpp @@ -1,40 +1,40 @@ #include "legocharactermanager.h" #include "legoanimactor.h" +#include "legocharacters.h" #include "legogamestate.h" #include "legovideomanager.h" #include "misc.h" +#include "misc/legocontainer.h" #include "mxmisc.h" +#include "realtime/realtime.h" +#include "roi/legolod.h" #include "roi/legoroi.h" DECOMP_SIZE_ASSERT(LegoCharacter, 0x08) DECOMP_SIZE_ASSERT(LegoCharacterManager, 0x08) -DECOMP_SIZE_ASSERT(LegoSaveDataEntry3, 0x108) - -// GLOBAL: LEGO1 0x100f80c0 -LegoSaveDataEntry3 g_saveDataInit[66]; // TODO: add data // GLOBAL: LEGO1 0x100fc4e4 char* LegoCharacterManager::g_customizeAnimFile = NULL; // GLOBAL: LEGO1 0x10104f20 -LegoSaveDataEntry3 g_saveData3[66]; +LegoCharacterData g_characterData[66]; // FUNCTION: LEGO1 0x10082a20 LegoCharacterManager::LegoCharacterManager() { m_characters = new LegoCharacterMap(); - InitSaveData(); + Init(); m_customizeAnimFile = new CustomizeAnimFileVariable("CUSTOMIZE_ANIM_FILE"); VariableTable()->SetVariable(m_customizeAnimFile); } // FUNCTION: LEGO1 0x10083270 -void LegoCharacterManager::InitSaveData() +void LegoCharacterManager::Init() { - for (MxS32 i = 0; i < 66; i++) { - g_saveData3[i] = g_saveDataInit[i]; + for (MxS32 i = 0; i < _countof(g_characterData); i++) { + g_characterData[i] = g_characterDataInit[i]; } } @@ -45,59 +45,95 @@ void LegoCharacterManager::FUN_100832a0() } // FUNCTION: LEGO1 0x10083310 -MxResult LegoCharacterManager::WriteSaveData3(LegoStorage* p_storage) +MxResult LegoCharacterManager::Write(LegoStorage* p_storage) { MxResult result = FAILURE; - // This should probably be a for loop but I can't figure out how to - // make it match as a for loop. - LegoSaveDataEntry3* entry = g_saveData3; - const LegoSaveDataEntry3* end = &g_saveData3[66]; + for (MxS32 i = 0; i < _countof(g_characterData) - 1; i++) { + LegoCharacterData* data = &g_characterData[i]; - while (TRUE) { - if (p_storage->Write(&entry->m_savePart1, 4) != SUCCESS) { - break; + if (p_storage->Write(&data->m_unk0x0c, sizeof(data->m_unk0x0c)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart2, 4) != SUCCESS) { - break; + if (p_storage->Write(&data->m_unk0x10, sizeof(data->m_unk0x10)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart3, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_unk0x14, sizeof(data->m_unk0x14)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_currentFrame, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_parts[1].m_unk0x08, sizeof(data->m_parts[1].m_unk0x08)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart5, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_parts[1].m_unk0x14, sizeof(data->m_parts[1].m_unk0x14)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart6, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_parts[2].m_unk0x14, sizeof(data->m_parts[2].m_unk0x14)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart7, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_parts[4].m_unk0x14, sizeof(data->m_parts[4].m_unk0x14)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart8, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_parts[5].m_unk0x14, sizeof(data->m_parts[5].m_unk0x14)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart9, 1) != SUCCESS) { - break; + if (p_storage->Write(&data->m_parts[8].m_unk0x14, sizeof(data->m_parts[8].m_unk0x14)) != SUCCESS) { + goto done; } - if (p_storage->Write(&entry->m_savePart10, 1) != SUCCESS) { - break; - } - if (++entry >= end) { - result = SUCCESS; - break; + if (p_storage->Write(&data->m_parts[9].m_unk0x14, sizeof(data->m_parts[9].m_unk0x14)) != SUCCESS) { + goto done; } } + result = SUCCESS; + +done: return result; } -// STUB: LEGO1 0x100833f0 -MxResult LegoCharacterManager::ReadSaveData3(LegoStorage* p_storage) +// FUNCTION: LEGO1 0x100833f0 +MxResult LegoCharacterManager::Read(LegoStorage* p_storage) { - return SUCCESS; + MxResult result = FAILURE; + + for (MxS32 i = 0; i < _countof(g_characterData) - 1; i++) { + LegoCharacterData* data = &g_characterData[i]; + + if (p_storage->Read(&data->m_unk0x0c, sizeof(data->m_unk0x0c)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_unk0x10, sizeof(data->m_unk0x10)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_unk0x14, sizeof(data->m_unk0x14)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[1].m_unk0x08, sizeof(data->m_parts[1].m_unk0x08)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[1].m_unk0x14, sizeof(data->m_parts[1].m_unk0x14)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[2].m_unk0x14, sizeof(data->m_parts[2].m_unk0x14)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[4].m_unk0x14, sizeof(data->m_parts[4].m_unk0x14)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[5].m_unk0x14, sizeof(data->m_parts[5].m_unk0x14)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[8].m_unk0x14, sizeof(data->m_parts[8].m_unk0x14)) != SUCCESS) { + goto done; + } + if (p_storage->Read(&data->m_parts[9].m_unk0x14, sizeof(data->m_parts[9].m_unk0x14)) != SUCCESS) { + goto done; + } + } + + result = SUCCESS; + +done: + return result; } // FUNCTION: LEGO1 0x10083500 @@ -139,7 +175,7 @@ LegoROI* LegoCharacterManager::GetROI(const char* p_key, MxBool p_createEntity) actor->SetROI(character->m_roi, FALSE, FALSE); actor->FUN_100114e0(0); actor->SetFlag(LegoActor::c_bit2); - FUN_10084c60(p_key)->m_actor = actor; + Find(p_key)->m_actor = actor; } return character->m_roi; @@ -160,10 +196,153 @@ void LegoCharacterManager::FUN_10083f10(LegoROI* p_roi) // TODO } -// STUB: LEGO1 0x10084030 +// FUNCTION: LEGO1 0x10084030 LegoROI* LegoCharacterManager::CreateROI(const char* p_key) { - return NULL; + MxBool success = FALSE; + LegoROI* roi = NULL; + BoundingSphere boundingSphere; + BoundingBox boundingBox; + MxMatrix mat; + CompoundObject* comp; + MxS32 i, j; + + Tgl::Renderer* renderer = VideoManager()->GetRenderer(); + ViewLODListManager* lodManager = GetViewLODListManager(); + LegoTextureContainer* textureContainer = TextureContainer(); + LegoCharacterData* characterData = Find(p_key); + + if (characterData == NULL) { + goto done; + } + + if (!strcmpi(p_key, "pep")) { + LegoCharacterData* pepper = Find("pepper"); + + characterData->m_unk0x0c = pepper->m_unk0x0c; + characterData->m_unk0x10 = pepper->m_unk0x10; + characterData->m_unk0x14 = pepper->m_unk0x14; + + for (i = 0; i < _countof(characterData->m_parts); i++) { + characterData->m_parts[i] = pepper->m_parts[i]; + } + } + + roi = new LegoROI(renderer); + roi->SetName(p_key); + + boundingSphere.Center()[0] = g_characterLODs[0].m_boundingSphere[0]; + boundingSphere.Center()[1] = g_characterLODs[0].m_boundingSphere[1]; + boundingSphere.Center()[2] = g_characterLODs[0].m_boundingSphere[2]; + boundingSphere.Radius() = g_characterLODs[0].m_boundingSphere[3]; + roi->SetBoundingSphere(boundingSphere); + + boundingBox.Min()[0] = g_characterLODs[0].m_boundingBox[0]; + boundingBox.Min()[1] = g_characterLODs[0].m_boundingBox[1]; + boundingBox.Min()[2] = g_characterLODs[0].m_boundingBox[2]; + boundingBox.Max()[0] = g_characterLODs[0].m_boundingBox[3]; + boundingBox.Max()[1] = g_characterLODs[0].m_boundingBox[4]; + boundingBox.Max()[2] = g_characterLODs[0].m_boundingBox[5]; + roi->SetUnknown0x80(boundingBox); + + comp = new CompoundObject(); + roi->SetComp(comp); + + for (i = 0; i < _countof(g_characterLODs) - 1; i++) { + ViewLODList *lodList, *dupLodList; + LegoROI* childROI; + MxS32 lodSize; + const char* parentName; + char lodName[64]; + + LegoCharacterData::Part& part = characterData->m_parts[i]; + + if (i == 0 || i == 1) { + parentName = part.m_unk0x04[part.m_unk0x00[part.m_unk0x08]]; + } + else { + parentName = g_characterLODs[i + 1].m_parentName; + } + + lodList = lodManager->Lookup(parentName); + lodSize = lodList->Size(); + sprintf(lodName, "%s%d", p_key, i); + dupLodList = lodManager->Create(lodName, lodSize); + + for (j = 0; j < lodSize; j++) { + dupLodList->PushBack(((LegoLOD*) (*lodList)[j])->Clone(renderer)); + } + + lodList->Release(); + lodList = dupLodList; + + childROI = new LegoROI(renderer, lodList); + lodList->Release(); + + childROI->SetName(g_characterLODs[i + 1].m_name); + childROI->SetParentROI(roi); + + BoundingSphere childBoundingSphere; + childBoundingSphere.Center()[0] = g_characterLODs[i + 1].m_boundingSphere[0]; + childBoundingSphere.Center()[1] = g_characterLODs[i + 1].m_boundingSphere[1]; + childBoundingSphere.Center()[2] = g_characterLODs[i + 1].m_boundingSphere[2]; + childBoundingSphere.Radius() = g_characterLODs[i + 1].m_boundingSphere[3]; + childROI->SetBoundingSphere(childBoundingSphere); + + BoundingBox childBoundingBox; + childBoundingBox.Min()[0] = g_characterLODs[i + 1].m_boundingBox[0]; + childBoundingBox.Min()[1] = g_characterLODs[i + 1].m_boundingBox[1]; + childBoundingBox.Min()[2] = g_characterLODs[i + 1].m_boundingBox[2]; + childBoundingBox.Max()[0] = g_characterLODs[i + 1].m_boundingBox[3]; + childBoundingBox.Max()[1] = g_characterLODs[i + 1].m_boundingBox[4]; + childBoundingBox.Max()[2] = g_characterLODs[i + 1].m_boundingBox[5]; + childROI->SetUnknown0x80(childBoundingBox); + + CalcLocalTransform( + Mx3DPointFloat(g_characterLODs[i + 1].m_position), + Mx3DPointFloat(g_characterLODs[i + 1].m_direction), + Mx3DPointFloat(g_characterLODs[i + 1].m_up), + mat + ); + childROI->WrappedSetLocalTransform(mat); + + if (g_characterLODs[i + 1].m_flags & LegoCharacterLOD::c_flag1 && + (i != 0 || part.m_unk0x00[part.m_unk0x08] != 0)) { + + LegoTextureInfo* textureInfo = textureContainer->Get(part.m_unk0x10[part.m_unk0x0c[part.m_unk0x14]]); + + if (textureInfo != NULL) { + childROI->FUN_100a9210(textureInfo); + childROI->FUN_100a9170(1.0F, 1.0F, 1.0F, 0.0F); + } + } + else if (g_characterLODs[i + 1].m_flags & LegoCharacterLOD::c_flag2 || (i == 0 && part.m_unk0x00[part.m_unk0x08] == 0)) { + LegoFloat red, green, blue, alpha; + childROI->FUN_100a9bf0(part.m_unk0x10[part.m_unk0x0c[part.m_unk0x14]], red, green, blue, alpha); + childROI->FUN_100a9170(red, green, blue, alpha); + } + + comp->push_back(childROI); + } + + CalcLocalTransform( + Mx3DPointFloat(g_characterLODs[0].m_position), + Mx3DPointFloat(g_characterLODs[0].m_direction), + Mx3DPointFloat(g_characterLODs[0].m_up), + mat + ); + roi->WrappedSetLocalTransform(mat); + + characterData->m_roi = roi; + success = TRUE; + +done: + if (!success && roi != NULL) { + delete roi; + roi = NULL; + } + + return roi; } // STUB: LEGO1 0x10084c00 @@ -173,9 +352,21 @@ MxBool LegoCharacterManager::FUN_10084c00(const LegoChar*) return FALSE; } -// STUB: LEGO1 0x10084c60 -LegoSaveDataEntry3* LegoCharacterManager::FUN_10084c60(const char* p_key) +// FUNCTION: LEGO1 0x10084c60 +LegoCharacterData* LegoCharacterManager::Find(const char* p_key) { + MxU32 i; + + for (i = 0; i < _countof(g_characterData) - 1; i++) { + if (!strcmpi(g_characterData[i].m_name, p_key)) { + break; + } + } + + if (i < _countof(g_characterData)) { + return &g_characterData[i]; + } + return NULL; } diff --git a/LEGO1/lego/legoomni/src/common/legocharacters.cpp b/LEGO1/lego/legoomni/src/common/legocharacters.cpp new file mode 100644 index 00000000..bd30b0d4 --- /dev/null +++ b/LEGO1/lego/legoomni/src/common/legocharacters.cpp @@ -0,0 +1,1232 @@ +#include "legocharacters.h" + +DECOMP_SIZE_ASSERT(LegoCharacterData, 0x108) +DECOMP_SIZE_ASSERT(LegoCharacterData::Part, 0x18) +DECOMP_SIZE_ASSERT(LegoCharacterLOD, 0x58) + +// Unclear whether g_characterLODs[0] (top) is its own global, see: LegoCharacterManager::CreateROI + +// GLOBAL: LEGO1 0x100da3b0 +LegoCharacterLOD g_characterLODs[] = { + {"top", "top", 0, 0.000267, 0.780808, -0.01906, 0.951612, -0.461166, -0.002794, -0.299442, 0.4617, + 1.56441, 0.261321, 0, 0, 0, 0, 0, 1, 0, 1, 0}, + {"body", "body", LegoCharacterLOD::c_flag1, + 0.00158332, 0.401828, -0.00048697, + 0.408071, -0.287507, 0.150419, + -0.147452, 0.289219, 0.649774, + 0.14258, -0.00089, 0.436353, + 0.007277, 0, 0, + 1, 0, 1, + 0}, + {"infohat", "infohat", LegoCharacterLOD::c_flag2, + 0, -0.00938, -0.01955, + 0.35, -0.231822, -0.140237, + -0.320954, 0.234149, 0.076968, + 0.249083, 0.000191, 1.519793, + 0.001767, 0, 0, + 1, 0, 1, + 0}, + {"infogron", "infogron", LegoCharacterLOD::c_flag2, + 0, 0.11477, 0.00042, + 0.26, -0.285558, -0.134391, + -0.142231, 0.285507, 0.152986, + 0.143071, -0.00089, 0.436353, + 0.007277, 0, 0, + 1, 0, 1, + 0}, + {"head", "head", LegoCharacterLOD::c_flag1, + 0, -0.03006, 0, + 0.3, -0.189506, -0.209665, + -0.189824, 0.189532, 0.228822, + 0.194945, -0.00105, 1.293115, + 0.001781, 0, 0, + 1, 0, 1, + 0}, + {"arm-lft", "arm-lft", LegoCharacterLOD::c_flag2, + -0.06815, -0.0973747, 0.0154655, + 0.237, -0.137931, -0.282775, + -0.105316, 0.000989, 0.100221, + 0.140759, -0.225678, 0.963312, + 0.023286, -0.003031, -0.017187, + 0.999848, 0.173622, 0.984658, + 0.017453}, + {"arm-rt", "arm-rt", LegoCharacterLOD::c_flag2, + 0.0680946, -0.097152, 0.0152722, + 0.237, 0.00141, -0.289604, + -0.100831, 0.138786, 0.09291, + 0.145437, 0.223494, 0.963583, + 0.018302, 0, 0, + 1, -0.173648, 0.984808, + 0}, + {"claw-lft", "claw-lft", LegoCharacterLOD::c_flag2, + 0.000773381, -0.101422, -0.0237761, + 0.15, -0.089838, -0.246208, + -0.117735, 0.091275, 0.000263, + 0.07215, -0.341869, 0.700355, + 0.092779, 0.000001, 0.000003, + 1, 0.190812, 0.981627, + -0.000003}, + {"claw-rt", "claw-lft", LegoCharacterLOD::c_flag2, + 0.000773381, -0.101422, -0.0237761, + 0.15, -0.095016, -0.245349, + -0.117979, 0.086528, 0.00067, + 0.069743, 0.343317, 0.69924, + 0.096123, 0.00606, -0.034369, + 0.999391, -0.190704, 0.981027, + 0.034894}, + {"leg-lft", "leg", LegoCharacterLOD::c_flag2, + 0.00433584, -0.177404, -0.0313928, + 0.33, -0.129782, -0.440428, + -0.184207, 0.13817, 0.118415, + 0.122607, -0.156339, 0.436087, + 0.006822, 0, 0, + 1, 0, 1, + 0}, + {"leg-rt", "leg", LegoCharacterLOD::c_flag2, + 0.00433584, -0.177404, -0.0313928, + 0.33, -0.132864, -0.437138, + -0.183944, 0.134614, 0.12043, + 0.121888, 0.151154, 0.436296, + 0.007373, 0, 0, + 1, 0, 1, + 0} +}; + +// GLOBAL: LEGO1 0x100da778 +MxU8 g_unk0x100da778[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0xff}; + +// GLOBAL: LEGO1 0x100da790 +MxU8 g_unk0x100da790[] = {21, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0xff}; + +// GLOBAL: LEGO1 0x100da7a8 +MxU8 g_unk0x100da7a8[] = {22, 0xff}; + +// GLOBAL: LEGO1 0x100da7ac +MxU8 g_unk0x100da7ac[] = {20, 0xff}; + +// GLOBAL: LEGO1 0x100da7b0 +MxU8 g_unk0x100da7b0[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100da7c0 +MxU8 g_unk0x100da7c0[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100da7d0 +MxU8 g_unk0x100da7d0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0xff}; + +// GLOBAL: LEGO1 0x100da7e0 +MxU8 g_unk0x100da7e0[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 27, 0xff}; + +// GLOBAL: LEGO1 0x100da800 +MxU8 g_unk0x100da800[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100da810 +MxU8 g_unk0x100da810[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100da820 +MxU8 g_unk0x100da820[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100da830 +MxU8 g_unk0x100da830[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100da840 +MxU8 g_unk0x100da840[] = {0, 1, 2, 3, 4, 5, 6, 7, 0xff}; + +// GLOBAL: LEGO1 0x100f7f78 +const char* g_unk0x100f7f78[] = {"baseball", "chef", "cap", "cophat", "helmet", "ponytail", "pageboy", "shrthair", + "bald", "flower", "cboyhat", "cuphat", "cathat", "backbcap", "pizhat", "caprc", + "capch", "capdb", "capjs", "capmd", "sheet", "phat", "icap", NULL}; + +// GLOBAL: LEGO1 0x100f7fd8 +const char* g_unk0x100f7fd8[] = + {"body", "bodyred", "bodyblck", "bodywhte", "bodyyllw", "bodyblue", "bodygren", "bodybrwn"}; + +// GLOBAL: LEGO1 0x100f7ff8 +const char* g_unk0x100f7ff8[] = {"peprchst.gif", "mamachst.gif", "papachst.gif", "nickchst.gif", "norachst.gif", + "infochst.gif", "shftchst.gif", "rac1chst.gif", "rac2chst.gif", "bth1chst.gif", + "bth2chst.gif", "mech.gif", "polkadot.gif", "bowtie.gif", "postchst.gif", + "vest.gif", "doctor.gif", "copchest.gif", "l.gif", "e.gif", + "g.gif", "o.gif", "fruit.gif", "flowers.gif", "construct.gif", + "paint.gif", "l6.gif", "unkchst.gif"}; + +// GLOBAL: LEGO1 0x100f8068 +const char* g_unk0x100f8068[] = { + "peprface.gif", + "mamaface.gif", + "papaface.gif", + "nickface.gif", + "noraface.gif", + "infoface.gif", + "shftface.gif", + "dogface.gif", + "womanshd.gif", + "smileshd.gif", + "woman.gif", + "smile.gif", + "mustache.gif", + "black.gif" +}; + +// GLOBAL: LEGO1 0x100f80a0 +const char* g_unk0x100f80a0[] = + {"lego white", "lego black", "lego yellow", "lego red", "lego blue", "lego brown", "lego lt grey", "lego green"}; + +// GLOBAL: LEGO1 0x100f80c0 +LegoCharacterData g_characterDataInit[] = { + {"pepper", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 0}, + {g_unk0x100da790, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"mama", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 1}, + {g_unk0x100da778, g_unk0x100f7f78, 1, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 1}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"papa", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 2, g_unk0x100da7e0, g_unk0x100f7ff8, 2}, + {g_unk0x100da778, g_unk0x100f7f78, 1, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"nick", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 2, g_unk0x100da7e0, g_unk0x100f7ff8, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 3, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"laura", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 2, g_unk0x100da7e0, g_unk0x100f7ff8, 4}, + {g_unk0x100da778, g_unk0x100f7f78, 3, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"infoman", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 5}, + {g_unk0x100da7a8, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 5}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"brickstr", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 6}, + {g_unk0x100da778, g_unk0x100f7f78, 13, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 6}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"studs", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 7}, + {g_unk0x100da778, g_unk0x100f7f78, 4, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 7}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"rhoda", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 8}, + {g_unk0x100da778, g_unk0x100f7f78, 4, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"valerie", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 9}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}}}, + {"snap", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 10}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}}}, + {"pt", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 11}, + {g_unk0x100da778, g_unk0x100f7f78, 6, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"mg", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 12}, + {g_unk0x100da778, g_unk0x100f7f78, 6, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 10}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"bu", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 13}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 5}}}, + {"ml", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 14}, + {g_unk0x100da778, g_unk0x100f7f78, 2, g_unk0x100da7c0, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"nu", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 11}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 7}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"na", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 15}, + {g_unk0x100da778, g_unk0x100f7f78, 10, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"cl", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 16}, + {g_unk0x100da778, g_unk0x100f7f78, 19, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"en", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 16}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"re", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 16}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"ro", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 2, g_unk0x100da7e0, g_unk0x100f7ff8, 17}, + {g_unk0x100da778, g_unk0x100f7f78, 3, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"d1", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 11}, + {g_unk0x100da778, g_unk0x100f7f78, 15, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"d2", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 11}, + {g_unk0x100da778, g_unk0x100f7f78, 16, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"d3", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 11}, + {g_unk0x100da778, g_unk0x100f7f78, 17, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"d4", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 11}, + {g_unk0x100da778, g_unk0x100f7f78, 18, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"l1", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 18}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"l2", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 19}, + {g_unk0x100da778, g_unk0x100f7f78, 6, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"l3", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 20}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"l4", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 21}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"l5", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 26}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"l6", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 26}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"b1", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"b2", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 10}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"b3", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"b4", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"cm", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 4, g_unk0x100da7e0, g_unk0x100f7ff8, 22}, + {g_unk0x100da778, g_unk0x100f7f78, 9, g_unk0x100da7c0, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"gd", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 6}}}, + {"rd", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 7}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 7}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 7}}}, + {"pg", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"bd", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 6}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"sy", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 10}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"gn", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 6, g_unk0x100da7e0, g_unk0x100f7ff8, 13}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 5}}}, + {"df", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 5, g_unk0x100da7e0, g_unk0x100f7ff8, 23}, + {g_unk0x100da778, g_unk0x100f7f78, 6, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 6}}}, + {"bs", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 10}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 7}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}}}, + {"lt", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 10}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}}}, + {"st", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 9}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 10}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}}}, + {"bm", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 24}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 7}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"jk", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 24}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"ghost", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {g_unk0x100da7ac, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 13}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"ghost01", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {g_unk0x100da7ac, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 13}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"ghost02", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {g_unk0x100da7ac, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 13}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"ghost03", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {g_unk0x100da7ac, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 13}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"ghost04", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {g_unk0x100da7ac, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 13}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"ghost05", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {g_unk0x100da7ac, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 13}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 0}}}, + {"hg", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 8, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"pntgy", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 7}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"pep", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 0}, + {g_unk0x100da790, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"cop01", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 2, g_unk0x100da7e0, g_unk0x100f7ff8, 17}, + {g_unk0x100da778, g_unk0x100f7f78, 3, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"actor_01", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 10}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"actor_02", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 6}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 12}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 1}}}, + {"actor_03", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 1}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 1}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 6}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 6}}}, + {"actor_04", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 1, g_unk0x100da7e0, g_unk0x100f7ff8, 12}, + {g_unk0x100da778, g_unk0x100f7f78, 6, g_unk0x100da7c0, g_unk0x100f80a0, 5}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 10}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 4}}}, + {"actor_05", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 4, g_unk0x100da7e0, g_unk0x100f7ff8, 22}, + {g_unk0x100da778, g_unk0x100f7f78, 9, g_unk0x100da7c0, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 8}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"btmncycl", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 5, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 0}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 3}}}, + {"cboycycl", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 3, g_unk0x100da7e0, g_unk0x100f7ff8, 10}, + {g_unk0x100da778, g_unk0x100f7f78, 7, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 7}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 11}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 2}}}, + {"boatman", + NULL, + NULL, + 0, + 0, + 0, + {{g_unk0x100da7b0, g_unk0x100f7fd8, 0, g_unk0x100da840, g_unk0x100f80a0, 3}, + {g_unk0x100da778, g_unk0x100f7f78, 0, g_unk0x100da7c0, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da830, g_unk0x100f80a0, 7}, + {NULL, NULL, 0, g_unk0x100da7d0, g_unk0x100f8068, 9}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da800, g_unk0x100f80a0, 3}, + {NULL, NULL, 0, g_unk0x100da820, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da810, g_unk0x100f80a0, 2}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 7}, + {NULL, NULL, 0, g_unk0x100da840, g_unk0x100f80a0, 7}}} +}; diff --git a/LEGO1/lego/legoomni/src/common/legogamestate.cpp b/LEGO1/lego/legoomni/src/common/legogamestate.cpp index d151f26c..f223bdb5 100644 --- a/LEGO1/lego/legoomni/src/common/legogamestate.cpp +++ b/LEGO1/lego/legoomni/src/common/legogamestate.cpp @@ -235,7 +235,7 @@ MxResult LegoGameState::Save(MxULong p_slot) } WriteEndOfVariables(&fileStorage); - CharacterManager()->WriteSaveData3(&fileStorage); + CharacterManager()->Write(&fileStorage); PlantManager()->Save(&fileStorage); result = BuildingManager()->Save(&fileStorage); @@ -334,7 +334,7 @@ MxResult LegoGameState::Load(MxULong p_slot) SetLightPosition(atoi(lightPosition)); } - if (CharacterManager()->ReadSaveData3(&fileStorage) == FAILURE) { + if (CharacterManager()->Read(&fileStorage) == FAILURE) { goto done; } if (PlantManager()->Load(&fileStorage) == FAILURE) { @@ -1057,7 +1057,7 @@ void LegoGameState::Init() SetLightPosition(2); PlantManager()->Init(); BuildingManager()->Init(); - CharacterManager()->InitSaveData(); + CharacterManager()->Init(); AnimationManager()->FUN_1005ee80(TRUE); SetColors(); RemoveActor(); diff --git a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp index feed39ac..0245e46f 100644 --- a/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp +++ b/LEGO1/lego/legoomni/src/entity/legocameracontroller.cpp @@ -128,7 +128,7 @@ Mx3DPointFloat LegoCameraController::GetWorldUp() { if (m_lego3DView && m_lego3DView->GetPointOfView()) { Mx3DPointFloat vec; - vec = Vector3(m_lego3DView->GetPointOfView()->GetWorldUp()); + vec = m_lego3DView->GetPointOfView()->GetWorldUp(); return Mx3DPointFloat(vec[0], vec[1], vec[2]); } else { @@ -141,7 +141,7 @@ Mx3DPointFloat LegoCameraController::GetWorldLocation() { if (m_lego3DView && m_lego3DView->GetPointOfView()) { Mx3DPointFloat vec; - vec = Vector3(m_lego3DView->GetPointOfView()->GetWorldPosition()); + vec = m_lego3DView->GetPointOfView()->GetWorldPosition(); return Mx3DPointFloat(vec[0], vec[1] - m_entityOffsetUp, vec[2]); } else { @@ -154,7 +154,7 @@ Mx3DPointFloat LegoCameraController::GetWorldDirection() { if (m_lego3DView && m_lego3DView->GetPointOfView()) { Mx3DPointFloat vec; - vec = Vector3(m_lego3DView->GetPointOfView()->GetWorldDirection()); + vec = m_lego3DView->GetPointOfView()->GetWorldDirection(); return Mx3DPointFloat(vec[0], vec[1], vec[2]); } else { diff --git a/LEGO1/lego/sources/roi/legolod.cpp b/LEGO1/lego/sources/roi/legolod.cpp index 9536b51a..9a36ec9f 100644 --- a/LEGO1/lego/sources/roi/legolod.cpp +++ b/LEGO1/lego/sources/roi/legolod.cpp @@ -28,7 +28,7 @@ LegoLOD::LegoLOD(Tgl::Renderer* p_renderer) : ViewLOD(p_renderer) GetD3DRM(p_renderer)->CreateMaterial(10.0, &g_unk0x101013d4); } - m_meshes = NULL; + m_melems = NULL; m_numMeshes = 0; m_numVertices = 0; m_numPolys = 0; @@ -38,17 +38,17 @@ LegoLOD::LegoLOD(Tgl::Renderer* p_renderer) : ViewLOD(p_renderer) // FUNCTION: LEGO1 0x100aa450 LegoLOD::~LegoLOD() { - if (m_numMeshes && m_meshes != NULL) { + if (m_numMeshes && m_melems != NULL) { for (LegoU32 i = 0; i < m_numMeshes; i++) { - if (m_meshes[i].m_tglMesh != NULL) { - delete m_meshes[i].m_tglMesh; - m_meshes[i].m_tglMesh = NULL; + if (m_melems[i].m_tglMesh != NULL) { + delete m_melems[i].m_tglMesh; + m_melems[i].m_tglMesh = NULL; } } } - if (m_meshes) { - delete[] m_meshes; + if (m_melems) { + delete[] m_melems; } } @@ -90,8 +90,8 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text SetFlag(c_bit4); - m_meshes = new Mesh[m_numMeshes]; - memset(m_meshes, 0, sizeof(*m_meshes) * m_numMeshes); + m_melems = new Mesh[m_numMeshes]; + memset(m_melems, 0, sizeof(*m_melems) * m_numMeshes); meshUnd1 = m_numMeshes - 1; meshUnd2 = 0; @@ -193,7 +193,7 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text meshUnd2++; } - m_meshes[meshIndex].m_tglMesh = m_meshBuilder->CreateMesh( + m_melems[meshIndex].m_tglMesh = m_meshBuilder->CreateMesh( numPolys & MAXWORD, numVertices & MAXWORD, vertices, @@ -204,11 +204,11 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text shadingModel ); - if (m_meshes[meshIndex].m_tglMesh == NULL) { + if (m_melems[meshIndex].m_tglMesh == NULL) { goto done; } - m_meshes[meshIndex].m_tglMesh->SetShadingModel(shadingModel); + m_melems[meshIndex].m_tglMesh->SetShadingModel(shadingModel); if (textureName != NULL) { if (mesh->GetUnknown0x21()) { @@ -221,9 +221,9 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text goto done; } - m_meshes[meshIndex].m_tglMesh->SetColor(1.0F, 1.0F, 1.0F, 0.0F); - LegoTextureInfo::SetGroupTexture(m_meshes[meshIndex].m_tglMesh, textureInfo); - m_meshes[meshIndex].m_unk0x04 = TRUE; + m_melems[meshIndex].m_tglMesh->SetColor(1.0F, 1.0F, 1.0F, 0.0F); + LegoTextureInfo::SetGroupTexture(m_melems[meshIndex].m_tglMesh, textureInfo); + m_melems[meshIndex].m_unk0x04 = TRUE; } else { LegoFloat red = 1.0F; @@ -241,13 +241,13 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text alpha = mesh->GetAlpha(); } - m_meshes[meshIndex].m_tglMesh->SetColor(red, green, blue, alpha); + m_melems[meshIndex].m_tglMesh->SetColor(red, green, blue, alpha); } if (mesh->GetUnknown0x0d() > 0) { IDirect3DRMMesh* mesh; D3DRMGROUPINDEX index; - GetMeshData(mesh, index, m_meshes[meshIndex].m_tglMesh); + GetMeshData(mesh, index, m_melems[meshIndex].m_tglMesh); mesh->SetGroupMaterial(index, g_unk0x101013d4); } @@ -302,12 +302,34 @@ LegoResult LegoLOD::Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_text return FAILURE; } +// FUNCTION: LEGO1 0x100aabb0 +LegoLOD* LegoLOD::Clone(Tgl::Renderer* p_renderer) +{ + LegoLOD* dupLod = new LegoLOD(p_renderer); + + dupLod->m_meshBuilder = m_meshBuilder->Clone(); + dupLod->m_melems = new Mesh[m_numMeshes]; + + for (LegoU32 i = 0; i < m_numMeshes; i++) { + dupLod->m_melems[i].m_tglMesh = m_melems[i].m_tglMesh->ShallowClone(dupLod->m_meshBuilder); + dupLod->m_melems[i].m_unk0x04 = m_melems[i].m_unk0x04; + } + + dupLod->m_unk0x08 = m_unk0x08; + dupLod->m_numMeshes = m_numMeshes; + dupLod->m_numVertices = m_numVertices; + dupLod->m_numPolys = m_numPolys; + dupLod->m_unk0x1c = m_unk0x1c; + + return dupLod; +} + // FUNCTION: LEGO1 0x100aacb0 LegoResult LegoLOD::FUN_100aacb0(LegoFloat p_red, LegoFloat p_green, LegoFloat p_blue, LegoFloat p_alpha) { for (LegoU32 i = m_unk0x1c; i < m_numMeshes; i++) { - if (!m_meshes[i].m_unk0x04) { - m_meshes[i].m_tglMesh->SetColor(p_red, p_green, p_blue, p_alpha); + if (!m_melems[i].m_unk0x04) { + m_melems[i].m_tglMesh->SetColor(p_red, p_green, p_blue, p_alpha); } } @@ -318,10 +340,10 @@ LegoResult LegoLOD::FUN_100aacb0(LegoFloat p_red, LegoFloat p_green, LegoFloat p LegoResult LegoLOD::FUN_100aad00(LegoTextureInfo* p_textureInfo) { for (LegoU32 i = m_unk0x1c; i < m_numMeshes; i++) { - if (m_meshes[i].m_unk0x04) { - LegoTextureInfo::SetGroupTexture(m_meshes[i].m_tglMesh, p_textureInfo); - m_meshes[i].m_tglMesh->SetColor(1.0F, 1.0F, 1.0F, 0.0F); - m_meshes[i].m_unk0x04 = TRUE; + if (m_melems[i].m_unk0x04) { + LegoTextureInfo::SetGroupTexture(m_melems[i].m_tglMesh, p_textureInfo); + m_melems[i].m_tglMesh->SetColor(1.0F, 1.0F, 1.0F, 0.0F); + m_melems[i].m_unk0x04 = TRUE; } } diff --git a/LEGO1/lego/sources/roi/legolod.h b/LEGO1/lego/sources/roi/legolod.h index 9b1143ef..f454f200 100644 --- a/LEGO1/lego/sources/roi/legolod.h +++ b/LEGO1/lego/sources/roi/legolod.h @@ -27,7 +27,8 @@ class LegoLOD : public ViewLOD { // FUNCTION: LEGO1 0x100aae80 float VTable0x10() override { return 0.0; } // vtable+0x10 - LegoResult Read(Tgl::Renderer*, LegoTextureContainer* p_textureContainer, LegoStorage* p_storage); + LegoResult Read(Tgl::Renderer* p_renderer, LegoTextureContainer* p_textureContainer, LegoStorage* p_storage); + LegoLOD* Clone(Tgl::Renderer* p_renderer); LegoResult FUN_100aacb0(LegoFloat p_red, LegoFloat p_green, LegoFloat p_blue, LegoFloat p_alpha); LegoResult FUN_100aad00(LegoTextureInfo* p_textureInfo); @@ -37,7 +38,7 @@ class LegoLOD : public ViewLOD { // LegoLOD::`scalar deleting destructor' protected: - Mesh* m_meshes; // 0x0c + Mesh* m_melems; // 0x0c LegoU32 m_numMeshes; // 0x10 LegoU32 m_numVertices; // 0x14 LegoU32 m_numPolys; // 0x18 diff --git a/LEGO1/lego/sources/roi/legoroi.cpp b/LEGO1/lego/sources/roi/legoroi.cpp index 33475adc..8f57866c 100644 --- a/LEGO1/lego/sources/roi/legoroi.cpp +++ b/LEGO1/lego/sources/roi/legoroi.cpp @@ -553,6 +553,23 @@ void LegoROI::FUN_100a9d30(ROIHandler p_func) g_unk0x101013ac = p_func; } +// FUNCTION: LEGO1 0x100a9d40 +void LegoROI::SetName(const LegoChar* p_name) +{ + if (m_name != NULL) { + delete[] m_name; + } + + if (p_name != NULL) { + m_name = new LegoChar[strlen(p_name) + 1]; + strcpy(m_name, p_name); + strlwr(m_name); + } + else { + m_name = NULL; + } +} + // FUNCTION: LEGO1 0x100a9e10 void LegoROI::SetDisplayBB(int p_displayBB) { diff --git a/LEGO1/lego/sources/roi/legoroi.h b/LEGO1/lego/sources/roi/legoroi.h index 4f74f14f..60c0e790 100644 --- a/LEGO1/lego/sources/roi/legoroi.h +++ b/LEGO1/lego/sources/roi/legoroi.h @@ -34,6 +34,7 @@ class LegoROI : public ViewROI { LegoResult SetFrame(LegoAnim* p_anim, LegoTime p_time); LegoResult FUN_100a9170(LegoFloat p_red, LegoFloat p_green, LegoFloat p_blue, LegoFloat p_alpha); LegoResult FUN_100a9210(LegoTextureInfo* p_textureInfo); + void SetName(const LegoChar* p_name); float IntrinsicImportance() const override; // vtable+0x04 void UpdateWorldBoundingVolumes() override; // vtable+0x18 @@ -58,6 +59,9 @@ class LegoROI : public ViewROI { inline LegoEntity* GetEntity() { return m_entity; } inline void SetEntity(LegoEntity* p_entity) { m_entity = p_entity; } + inline void SetComp(CompoundObject* p_comp) { comp = p_comp; } + inline void SetBoundingSphere(const BoundingSphere& p_sphere) { m_sphere = m_world_bounding_sphere = p_sphere; } + inline void SetUnknown0x80(const BoundingBox& p_unk0x80) { m_unk0x80 = p_unk0x80; } // SYNTHETIC: LEGO1 0x100a82b0 // LegoROI::`scalar deleting destructor' diff --git a/LEGO1/mxgeometry/mxgeometry3d.h b/LEGO1/mxgeometry/mxgeometry3d.h index 0e1f5fdc..4659810e 100644 --- a/LEGO1/mxgeometry/mxgeometry3d.h +++ b/LEGO1/mxgeometry/mxgeometry3d.h @@ -20,7 +20,7 @@ class Mx3DPointFloat : public Vector3 { // FUNCTION: LEGO1 0x100343a0 inline Mx3DPointFloat(const Mx3DPointFloat& p_other) : Vector3(m_elements) { EqualsImpl(p_other.m_data); } - inline Mx3DPointFloat(const float* p_other) : Vector3(m_elements) { EqualsImpl((float*) p_other); } + inline Mx3DPointFloat(const Vector3& p_other) : Vector3(m_elements) { EqualsImpl(p_other.m_data); } // SYNTHETIC: LEGO1 0x1001d170 // Mx3DPointFloat::Mx3DPointFloat diff --git a/LEGO1/omni/include/mxtypes.h b/LEGO1/omni/include/mxtypes.h index 9ec63222..caecb68a 100644 --- a/LEGO1/omni/include/mxtypes.h +++ b/LEGO1/omni/include/mxtypes.h @@ -52,6 +52,10 @@ typedef MxU8 MxBool; #define FALSE 0 #endif +#ifndef NULL +#define NULL 0 +#endif + #define TWOCC(a, b) (((a) << 0) | ((b) << 8)) #define FOURCC(a, b, c, d) (((a) << 0) | ((b) << 8) | ((c) << 16) | ((d) << 24)) diff --git a/LEGO1/realtime/orientableroi.h b/LEGO1/realtime/orientableroi.h index beec0ef9..d7b9f998 100644 --- a/LEGO1/realtime/orientableroi.h +++ b/LEGO1/realtime/orientableroi.h @@ -45,6 +45,8 @@ class OrientableROI : public ROI { const float* GetWorldUp() const { return m_local2world[1]; } OrientableROI* GetParentROI() const { return m_parentROI; } + void SetParentROI(OrientableROI* p_parentROI) { m_parentROI = p_parentROI; } + void ToggleUnknown0xd8(BOOL p_enable) { if (p_enable) { diff --git a/LEGO1/tgl/d3drm/meshbuilder.cpp b/LEGO1/tgl/d3drm/meshbuilder.cpp index 2693e500..d654c987 100644 --- a/LEGO1/tgl/d3drm/meshbuilder.cpp +++ b/LEGO1/tgl/d3drm/meshbuilder.cpp @@ -178,7 +178,7 @@ Result MeshBuilderImpl::GetBoundingBox(float min[3], float max[3]) MeshBuilder* MeshBuilderImpl::Clone() { MeshBuilderImpl* mesh = new MeshBuilderImpl(); - int ret = m_data->Clone(0, IID_IDirect3DRMMeshBuilder, (void**) &mesh->m_data); + int ret = m_data->Clone(0, IID_IDirect3DRMMesh, (void**) &mesh->m_data); if (ret < 0) { delete mesh; mesh = NULL;