From 1a46d370ec7e7e025cc6d2b95c1c8fba023ff562 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Mon, 17 Jun 2024 14:11:27 -0400 Subject: [PATCH] Bootstrap LegoPlantManager, add plants data (#1038) * Bootstrap LegoPlantManager, add plants data * Naming * Move * Fix --- CMakeLists.txt | 1 + .../legoomni/include/legobuildingmanager.h | 4 +- .../lego/legoomni/include/legoplantmanager.h | 9 +- LEGO1/lego/legoomni/include/legoplants.h | 58 + .../src/common/legobuildingmanager.cpp | 16 +- .../legoomni/src/common/legoplantmanager.cpp | 27 +- LEGO1/lego/legoomni/src/common/legoplants.cpp | 1951 +++++++++++++++++ 7 files changed, 2048 insertions(+), 18 deletions(-) create mode 100644 LEGO1/lego/legoomni/include/legoplants.h create mode 100644 LEGO1/lego/legoomni/src/common/legoplants.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ceba04d7..ba7af5ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -330,6 +330,7 @@ add_library(lego1 SHARED LEGO1/lego/legoomni/src/common/legoobjectfactory.cpp LEGO1/lego/legoomni/src/common/legophoneme.cpp LEGO1/lego/legoomni/src/common/legoplantmanager.cpp + LEGO1/lego/legoomni/src/common/legoplants.cpp LEGO1/lego/legoomni/src/common/legostate.cpp LEGO1/lego/legoomni/src/common/legotextureinfo.cpp LEGO1/lego/legoomni/src/common/legoutils.cpp diff --git a/LEGO1/lego/legoomni/include/legobuildingmanager.h b/LEGO1/lego/legoomni/include/legobuildingmanager.h index 57544ba7..45cb8caf 100644 --- a/LEGO1/lego/legoomni/include/legobuildingmanager.h +++ b/LEGO1/lego/legoomni/include/legobuildingmanager.h @@ -22,12 +22,12 @@ struct LegoBuildingInfo { }; LegoEntity* m_entity; // 0x00 - const char* m_hausName; // 0x04 + const char* m_variant; // 0x04 MxU32 m_sound; // 0x08 MxU32 m_move; // 0x0c MxU8 m_mood; // 0x10 MxS8 m_unk0x11; // 0x11 - MxS8 m_initialUnk0x11; // 0x12 = initial value loaded to m_unk0x11 + MxS8 m_initialUnk0x11; // 0x12 - initial value loaded to m_unk0x11 MxU8 m_flags; // 0x13 float m_unk0x014; // 0x14 const char* m_unk0x18; // 0x18 diff --git a/LEGO1/lego/legoomni/include/legoplantmanager.h b/LEGO1/lego/legoomni/include/legoplantmanager.h index f32adafa..765e5e7e 100644 --- a/LEGO1/lego/legoomni/include/legoplantmanager.h +++ b/LEGO1/lego/legoomni/include/legoplantmanager.h @@ -5,6 +5,7 @@ #include "mxcore.h" class LegoEntity; +class LegoPathBoundary; class LegoROI; class LegoStorage; @@ -27,7 +28,7 @@ class LegoPlantManager : public MxCore { void Init(); void FUN_10026360(MxS32 p_scriptIndex); void FUN_100263a0(undefined4 p_und); - void Write(LegoStorage* p_storage); + MxResult Write(LegoStorage* p_storage); MxResult Read(LegoStorage* p_storage); MxBool SwitchColor(LegoEntity* p_entity); MxBool SwitchVariant(LegoEntity* p_entity); @@ -48,7 +49,11 @@ class LegoPlantManager : public MxCore { private: static char* g_customizeAnimFile; - undefined m_unk0x08[0x24]; // 0x08 + undefined4 m_unk0x08; // 0x08 + undefined m_unk0x0c; // 0x0c + undefined m_unk0x10[0x17]; // 0x10 + undefined m_unk0x24; // 0x24 + undefined4 m_unk0x28; // 0x28 }; #endif // LEGOPLANTMANAGER_H diff --git a/LEGO1/lego/legoomni/include/legoplants.h b/LEGO1/lego/legoomni/include/legoplants.h new file mode 100644 index 00000000..638baea4 --- /dev/null +++ b/LEGO1/lego/legoomni/include/legoplants.h @@ -0,0 +1,58 @@ +#ifndef LEGOPLANTS_H +#define LEGOPLANTS_H + +#include "decomp.h" +#include "mxtypes.h" + +class LegoEntity; +class LegoPathBoundary; + +// SIZE 0x54 +struct LegoPlantInfo { + enum { + c_flag1 = 0x01, + c_flag2 = 0x02, + c_flag5 = 0x10, + c_flag6 = 0x20, + c_flag16 = 0x8000, + c_flag17 = 0x10000 + }; + + enum Variant { + e_flower = 0, + e_tree, + e_bush, + e_palm + }; + + enum Color { + e_white = 0, + e_black, + e_yellow, + e_red, + e_green + }; + + LegoEntity* m_entity; // 0x00 + MxU32 m_flags; // 0x04 + Variant m_variant; // 0x08 + MxU32 m_sound; // 0x0c + MxU32 m_move; // 0x10 + MxU8 m_mood; // 0x14 + MxU8 m_color; // 0x15 - see enum for possible values + MxS8 m_unk0x16; // 0x16 + MxS8 m_initialUnk0x16; // 0x17 - initial value loaded to m_unk0x16 + const char* m_name; // 0x18 + undefined4 m_unk0x1c; // 0x1c + float m_x; // 0x20 + float m_y; // 0x24 + float m_z; // 0x28 + LegoPathBoundary* m_boundary; // 0x2c + float m_position[3]; // 0x30 + float m_direction[3]; // 0x3c + float m_up[3]; // 0x48 +}; + +extern LegoPlantInfo g_plantInfoInit[81]; + +#endif // LEGOPLANTS_H diff --git a/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp b/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp index 9cd60b54..be886496 100644 --- a/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legobuildingmanager.cpp @@ -18,7 +18,7 @@ DECOMP_SIZE_ASSERT(LegoBuildingInfo, 0x2c) DECOMP_SIZE_ASSERT(LegoBuildingManager::AnimEntry, 0x14) // GLOBAL: LEGO1 0x100f3410 -const char* g_buildingInfoHausName[5] = { +const char* g_buildingInfoVariants[5] = { "haus1", "haus4", "haus5", @@ -238,7 +238,7 @@ LegoBuildingManager::LegoBuildingManager() // FUNCTION: LEGO1 0x1002f960 LegoBuildingManager::~LegoBuildingManager() { - delete g_customizeAnimFile; + delete[] g_customizeAnimFile; } // FUNCTION: LEGO1 0x1002f9d0 @@ -267,15 +267,15 @@ void LegoBuildingManager::FUN_1002fa00() } if (g_buildingManagerConfig <= 1) { - LegoEntity* entity = (LegoEntity*) world->Find("MxEntity", g_buildingInfoHausName[0]); + LegoEntity* entity = (LegoEntity*) world->Find("MxEntity", g_buildingInfoVariants[0]); if (entity) { entity->GetROI()->SetVisibility(TRUE); m_unk0x09 = 0; } } else { - for (i = 0; i < sizeOfArray(g_buildingInfoHausName); i++) { - LegoEntity* entity = (LegoEntity*) world->Find("MxEntity", g_buildingInfoHausName[i]); + for (i = 0; i < sizeOfArray(g_buildingInfoVariants); i++) { + LegoEntity* entity = (LegoEntity*) world->Find("MxEntity", g_buildingInfoVariants[i]); if (entity) { entity->GetROI()->SetVisibility(m_nextVariant == i); } @@ -289,7 +289,7 @@ void LegoBuildingManager::FUN_1002fa00() // FUNCTION: BETA10 0x10063b88 void LegoBuildingManager::UpdatePosition(MxS32 p_index, LegoWorld* p_world) { - LegoEntity* entity = (LegoEntity*) p_world->Find("MxEntity", g_buildingInfo[p_index].m_hausName); + LegoEntity* entity = (LegoEntity*) p_world->Find("MxEntity", g_buildingInfo[p_index].m_variant); if (entity) { entity->SetType(LegoEntity::e_building); @@ -451,12 +451,12 @@ MxBool LegoBuildingManager::SwitchVariant(LegoEntity* p_entity) if (info != NULL && info->m_flags & LegoBuildingInfo::c_hasVariants && info->m_unk0x11 == -1) { LegoROI* roi = p_entity->GetROI(); - if (++m_nextVariant >= sizeOfArray(g_buildingInfoHausName)) { + if (++m_nextVariant >= sizeOfArray(g_buildingInfoVariants)) { m_nextVariant = 0; } roi->SetVisibility(FALSE); - info->m_hausName = g_buildingInfoHausName[m_nextVariant]; + info->m_variant = g_buildingInfoVariants[m_nextVariant]; UpdatePosition(12, CurrentWorld()); if (info->m_entity != NULL) { diff --git a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp index 4cc23472..6be98452 100644 --- a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp @@ -1,31 +1,43 @@ #include "legoplantmanager.h" #include "legoentity.h" +#include "legoplants.h" DECOMP_SIZE_ASSERT(LegoPlantManager, 0x2c) // GLOBAL: LEGO1 0x100f3188 char* LegoPlantManager::g_customizeAnimFile = NULL; +// GLOBAL: LEGO1 0x10103180 +LegoPlantInfo g_plantInfo[81]; + // FUNCTION: LEGO1 0x10026220 LegoPlantManager::LegoPlantManager() { Init(); } -// STUB: LEGO1 0x100262c0 +// FUNCTION: LEGO1 0x100262c0 LegoPlantManager::~LegoPlantManager() { - // TODO + delete[] g_customizeAnimFile; } -// STUB: LEGO1 0x10026330 +// FUNCTION: LEGO1 0x10026330 +// FUNCTION: BETA10 0x100c4f90 void LegoPlantManager::Init() { - // TODO + for (MxS32 i = 0; i < sizeOfArray(g_plantInfo); i++) { + g_plantInfo[i] = g_plantInfoInit[i]; + } + + m_unk0x08 = -1; + m_unk0x0c = 0; + m_unk0x24 = 0; } // STUB: LEGO1 0x10026360 +// FUNCTION: BETA10 0x100c5032 void LegoPlantManager::FUN_10026360(MxS32 p_scriptIndex) { // TODO @@ -38,14 +50,18 @@ void LegoPlantManager::FUN_100263a0(undefined4 p_und) } // STUB: LEGO1 0x10026720 -void LegoPlantManager::Write(LegoStorage* p_storage) +// FUNCTION: BETA10 0x100c5918 +MxResult LegoPlantManager::Write(LegoStorage* p_storage) { // TODO + return SUCCESS; } // STUB: LEGO1 0x100267b0 +// FUNCTION: BETA10 0x100c5a76 MxResult LegoPlantManager::Read(LegoStorage* p_storage) { + // TODO return SUCCESS; } @@ -127,7 +143,6 @@ void LegoPlantManager::FUN_10026c50(LegoEntity* p_entity) MxResult LegoPlantManager::Tickle() { // TODO - return 0; } diff --git a/LEGO1/lego/legoomni/src/common/legoplants.cpp b/LEGO1/lego/legoomni/src/common/legoplants.cpp new file mode 100644 index 00000000..8979614a --- /dev/null +++ b/LEGO1/lego/legoomni/src/common/legoplants.cpp @@ -0,0 +1,1951 @@ +#include "legoplants.h" + +DECOMP_SIZE_ASSERT(LegoPlantInfo, 0x54) + +// GLOBAL: LEGO1 0x100f16c8 +LegoPlantInfo g_plantInfoInit[81] = { + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg01_20", + 1, + -7e1, + 8, + -8.40763, + NULL, + -73.75, + 8, + -8.4375, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg00_20", + 3, + -15.45, + 0, + -41.32, + NULL, + -16.8125, + 0, + -41.2, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg01_24", + 1, + -69.7176, + 7, + -25.25, + NULL, + -71, + 7, + -25, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg02_27", + 1, + 82.75, + 4, + 29.24163, + NULL, + 82.6125, + 4, + 27.625, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int18", + 3, + 28.15, + 2, + 29.27804, + NULL, + 29.8125, + 2, + 27.6875, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int48", + 0, + 85.16238, + 9, + -0.83761, + NULL, + 86.125, + 8.80447, + 0.3125, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int18", + 3, + 24.31819, + 2, + 29.04404, + NULL, + 22.8125, + 2, + 27.6875, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int56", + 4, + -64.125, + 14, + 27.5, + NULL, + -61.6875, + 14, + 28, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int67", + 3, + -23.3197, + 1, + 29.00803, + NULL, + -21.9375, + 1, + 27.6875, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg02_79", + 3, + 9.15, + 0, + -18.1854, + NULL, + 9.15, + 0, + -19.9375, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_79", + 1, + 9.15, + 0, + -14.5695, + NULL, + 9.15, + 0, + -12.9375, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg00_151", + 1, + -75.7186, + 4, + 44.60529, + NULL, + -74.9375, + 4, + 44.3875, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "int53", + 6, + -22.375, + 0, + -81.875, + NULL, + -21.625, + 0, + -83, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_47", + 1, + 42.8125, + 0, + -48.125, + NULL, + 47.75, + -0.299, + -58.125, + 0.6751, + -0.1071, + 0.7299, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_155", + 1, + -39, + 0, + 40.8125, + NULL, + -41, + 0, + 39.5, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg03_05", + 3, + -35.125, + 0, + 3.875, + NULL, + -35, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_bush, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_128", + 3, + -59.3624, + 14, + 22.86249, + NULL, + -58.375, + 14, + 21.98749, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_bush, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "int48", + 4, + 87.9875, + 9, + -1.125, + NULL, + 87.3, + 8.609336, + 1.125, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_bush, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_18", + 1, + -69.6875, + 8, + -3.5, + NULL, + -73.8, + 8, + -5.3, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_bush, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_85", + 1, + -26.45, + 0, + -48.5, + NULL, + -25.45, + 0, + -46.5, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_123", + 3, + -60.625, + 14, + 22.9375, + NULL, + -6e1, + 14, + 24, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_131", + 1, + -63.7755, + 14, + 26.70394, + NULL, + -65, + 14, + 26, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_61", + 3, + 70.1875, + 1, + -78.3125, + NULL, + 72.6875, + 1, + -80.3125, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_33", + 1, + -64.1875, + 7, + -45.25, + NULL, + -64.1875, + 7, + -43.4375, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_59", + 1, + -47.8124, + 1.8634, + -58.2624, + NULL, + -47.8124, + 1.875, + -60.2624, + 0.174, + 0, + 0.985, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg02_32", + 1, + 25.5, + 0, + 9, + NULL, + 22.8125, + 0, + 9, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int25", + 0, + 27.1875, + 0, + -16.3125, + NULL, + 29.8125, + 0, + -14.3125, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg02_01", + 1, + -19.625, + 0, + -17.9375, + NULL, + -19.625, + 0, + -2e1, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg00_95", + 3, + 34.125, + 0, + 3.5125, + NULL, + 32.9375, + 0, + 2.95, + -1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int25", + 1, + 25.6875, + 0, + -16.4375, + NULL, + 22.8125, + 0, + -12.9375, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int26", + 1, + 24.25, + 0, + -44.5, + NULL, + 22.8125, + 0, + -43.0625, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int26", + 6, + 28.25, + 0, + -47.3125, + NULL, + 29.8125, + 0, + -45.875, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int10", + 1, + -69.125, + 7, + -29.125, + NULL, + -70.5625, + 7, + -29.875, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg02_61", + 3, + 70.75, + 1, + -76.5625, + NULL, + 73.5, + 1, + -78.25, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int04", + 5, + -94.4, + 4, + -15.3125, + NULL, + -94.875, + 4, + -13.3125, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg02_79", + 1, + 9.15, + 0, + -14.5695, + NULL, + 9.15, + 0, + -11.5625, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "edg01_58", + 3, + 66.2125, + 0, + -17.5625, + NULL, + 65.33261, + 0.11868, + -19.8125, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "int34", + 4, + 0.375, + 0, + -44.8875, + NULL, + -1.3125, + 0, + -43.075, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_32", + 1, + 25.5, + 0, + 9.8, + NULL, + 22.8125, + 0, + 10.4875, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int22", + 6, + 28.92499, + 0, + 6.45, + NULL, + 29.8, + 0, + 8.0125, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_28", + 1, + 85.5, + 4, + 22.25, + NULL, + 82.5625, + 4, + 26.25, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg00_176", + 0, + 73.875, + 1, + -82.9375, + NULL, + 74.75, + 1, + -81.25, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_35", + 3, + 26.25, + 0, + -12.45, + NULL, + 22.8125, + 0, + -11.575, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_79", + 3, + 9.15, + 0, + -18.1854, + NULL, + 9.0875, + 0, + -21.3125, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_01", + 3, + -19.75, + 0, + -15.3125, + NULL, + -19.75, + 0, + -12.875, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg01_56", + 3, + 72.8125, + 0, + -25.9375, + NULL, + 70.6875, + 0, + -26.5625, + -0.9848, + 0, + 1.1736, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int67", + 0, + -26.9375, + 1, + 29.075, + NULL, + -28.9375, + 1, + 27.7, + 1, + 0, + 0, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int51", + 3, + -2.125, + 0, + -17.6875, + NULL, + -3.25, + 0, + -19.75, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "edg02_57", + 1, + -23.875, + 0, + -54.9375, + NULL, + -25.1875, + 0, + -52.625, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "int04", + 5, + -94, + 4, + -15.3125, + NULL, + -95.9375, + 4, + -14.25, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_36", + 3, + 18.6875, + 0, + -14.6375, + NULL, + 18.75, + 0, + -10.95, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_30", + 1, + 25.1375, + 2, + 25.5, + NULL, + 21.8875, + 1.84509, + 25.5, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_30", + 3, + 27.45, + 2, + 25.5, + NULL, + 30.95, + 2, + 25.5, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_78", + 1, + 64.35749, + 0, + 10.95579, + NULL, + 66.67, + 0.256506, + 10.95579, + 0, + 0, + -1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_38", + 1, + 9.625, + 0, + -45.375, + NULL, + 9.625, + 0, + -4e1, + 0.5, + 0, + 0.866, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_76", + 3, + 65, + 0, + 7.0125, + NULL, + 62, + 0, + 2.825, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_35", + 1, + 27.4375, + 0, + -8.125, + NULL, + 33.375, + 0, + -8.125, + 0.342, + 0, + 0.94, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_23", + 3, + 18.825, + 1.7575, + 30.125, + NULL, + 18.825, + 1, + 25.5, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_130", + 1, + -67.5, + 14, + 23.25, + NULL, + -63.6875, + 14, + 21.4375, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_13", + 3, + -92.75, + 4, + 2.5, + NULL, + -95.625, + 4, + 2.5, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_09", + 1, + -8e1, + 4, + -52.6875, + NULL, + -8e1, + 4, + -55.875, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_53", + 1, + -8.75, + 0, + -45.5, + NULL, + -8.75, + 0, + -40.75, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_37", + 3, + 27.5, + 0, + -32, + NULL, + 35.625, + 0, + -32, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_127", + 1, + -62.25, + 14, + 26.6875, + NULL, + -61, + 14, + 26.8125, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_01", + 1, + -16, + 0, + -18.575, + NULL, + -16, + 0, + -22.45, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_17", + 1, + -76.4325, + 8, + 5.875, + NULL, + -78, + 8, + 2.375, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_38", + 1, + -77.1875, + 7, + -36.9375, + NULL, + -72, + 7, + -36.5, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg02_82", + 1, + 97, + 0, + -42.125, + NULL, + 98.1875, + 0, + -41.3125, + 0.707, + 0, + 0.707, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_palm, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_15", + 3, + 96.5, + 4, + 18.75, + NULL, + 97.5, + 4, + 18.25, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + -67.5, + 14, + 23.25, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "int48", + 4, + 87.9875, + 9, + -1.125, + NULL, + 88.75, + 8.75, + 0.875, + 0.259, + 0, + 0.966, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_01", + 3, + -48.625, + 7, + -23.1875, + NULL, + -50.4375, + 7, + -25, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_01", + 0, + -48.625, + 7, + -23.1875, + NULL, + -49.125, + 7, + -25.8, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg01_01", + 3, + -48.625, + 7, + -23.1875, + NULL, + -51.25, + 7, + -23.75, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag1 | LegoPlantInfo::c_flag16 | LegoPlantInfo::c_flag17, + LegoPlantInfo::e_tree, + 3, + 0, + 1, + LegoPlantInfo::e_green, + -1, + -1, + "edg00_129", + 1, + -56.75, + 14, + 26.625, + NULL, + -58, + 14, + 26.75, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag2, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + -4.33403, + -2.18029, + -1.53595, + 0, + 0, + 1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag2, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + 1.280536, + -2.18024, + -1.57823, + 0, + 0, + -1, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag5, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + -1.52465, + -0.52473, + -11.1617, + -0.0175, + 0, + -0.9998, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag5, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + 1.439563, + -0.52554, + -11.1846, + 0.866, + 0, + -0.5, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag6, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_yellow, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + -1.82829, + -0.52554, + -11.7741, + 0.866, + 0, + -0.5, + 0, + 1, + 0}, + {NULL, + LegoPlantInfo::c_flag6, + LegoPlantInfo::e_flower, + 3, + 0, + 1, + LegoPlantInfo::e_red, + -1, + -1, + "", + 1, + 0, + 0, + 0, + NULL, + 1.801479, + -0.52473, + -11.75, + -0.0175, + 0, + -0.9998, + 0, + 1, + 0} +};