diff --git a/LEGO1/lego/legoomni/include/legobuildingmanager.h b/LEGO1/lego/legoomni/include/legobuildingmanager.h index ff627646..8c9c8cec 100644 --- a/LEGO1/lego/legoomni/include/legobuildingmanager.h +++ b/LEGO1/lego/legoomni/include/legobuildingmanager.h @@ -77,7 +77,7 @@ class LegoBuildingManager : public MxCore { MxBool SwitchMove(LegoEntity* p_entity); MxBool SwitchMood(LegoEntity* p_entity); MxU32 GetAnimationId(LegoEntity* p_entity); - MxU32 GetSoundId(LegoEntity* p_entity, MxBool); + MxU32 GetSoundId(LegoEntity* p_entity, MxBool p_state); MxBool FUN_10030000(LegoEntity* p_entity); MxBool FUN_10030030(MxS32 p_index); MxBool FUN_10030110(LegoBuildingInfo* p_data); diff --git a/LEGO1/lego/legoomni/include/legoplantmanager.h b/LEGO1/lego/legoomni/include/legoplantmanager.h index 6f02774b..48f69521 100644 --- a/LEGO1/lego/legoomni/include/legoplantmanager.h +++ b/LEGO1/lego/legoomni/include/legoplantmanager.h @@ -39,7 +39,7 @@ class LegoPlantManager : public MxCore { MxBool SwitchMood(LegoEntity* p_entity); MxU32 GetAnimationId(LegoEntity* p_entity); MxU32 GetSoundId(LegoEntity* p_entity, MxBool p_state); - void FUN_10026c50(LegoEntity* p_entity); + MxBool FUN_10026c50(LegoEntity* p_entity); void FUN_10027120(); static void SetCustomizeAnimFile(const char* p_value); @@ -53,6 +53,7 @@ class LegoPlantManager : public MxCore { void RemovePlant(MxS32 p_index, MxS32 p_worldId); void FUN_10026860(MxS32 p_index); LegoPlantInfo* GetInfo(LegoEntity* p_entity); + MxBool FUN_10026c80(MxS32 p_index); static char* g_customizeAnimFile; static MxS32 g_maxMove[4]; diff --git a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp index 723a3981..18d26315 100644 --- a/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp +++ b/LEGO1/lego/legoomni/src/common/legoplantmanager.cpp @@ -424,6 +424,7 @@ MxU32 LegoPlantManager::GetSoundId(LegoEntity* p_entity, MxBool p_state) } // FUNCTION: LEGO1 0x10026be0 +// FUNCTION: BETA10 0x100c62bc void LegoPlantManager::SetCustomizeAnimFile(const char* p_value) { if (g_customizeAnimFile != NULL) { @@ -442,10 +443,60 @@ void LegoPlantManager::SetCustomizeAnimFile(const char* p_value) } } -// STUB: LEGO1 0x10026c50 -void LegoPlantManager::FUN_10026c50(LegoEntity* p_entity) +// FUNCTION: LEGO1 0x10026c50 +// FUNCTION: BETA10 0x100c6349 +MxBool LegoPlantManager::FUN_10026c50(LegoEntity* p_entity) { - // TODO + LegoPlantInfo* info = GetInfo(p_entity); + + if (info == NULL) { + return FALSE; + } + + return FUN_10026c80(info - g_plantInfo); +} + +// FUNCTION: LEGO1 0x10026c80 +// FUNCTION: BETA10 0x100c63eb +MxBool LegoPlantManager::FUN_10026c80(MxS32 p_index) +{ + if (p_index >= sizeOfArray(g_plantInfo)) { + return FALSE; + } + + LegoPlantInfo* info = &g_plantInfo[p_index]; + + if (info == NULL) { + return FALSE; + } + + MxBool result = TRUE; + + if (info->m_unk0x16 < 0) { + info->m_unk0x16 = g_unk0x100f16c0[info->m_variant]; + } + + if (info->m_unk0x16 > 0) { + LegoROI* roi = info->m_entity->GetROI(); + info->m_unk0x16--; + + if (info->m_unk0x16 == 1) { + info->m_unk0x16 = 0; + } + + if (info->m_unk0x16 == 0) { + roi->SetVisibility(FALSE); + } + else { + FUN_10026860(info - g_plantInfo); + info->m_entity->SetLocation(info->m_position, info->m_direction, info->m_up, FALSE); + } + } + else { + result = FALSE; + } + + return result; } // STUB: LEGO1 0x10026e00 diff --git a/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp b/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp index 768f5333..30a33b03 100644 --- a/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp +++ b/LEGO1/lego/legoomni/src/worlds/elevatorbottom.cpp @@ -135,7 +135,7 @@ void ElevatorBottom::Enable(MxBool p_enable) // FUNCTION: LEGO1 0x10018310 MxBool ElevatorBottom::Escape() { - DeleteObjects(&m_atom, 500, 999); + DeleteObjects(&m_atom, ElevbottScript::c_iica31in_PlayWav, 999); m_destLocation = LegoGameState::e_infomain; return TRUE; } diff --git a/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp b/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp index 0673de11..f2812ecf 100644 --- a/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp +++ b/LEGO1/lego/legoomni/src/worlds/infocenterdoor.cpp @@ -95,7 +95,7 @@ MxLong InfocenterDoor::HandleControl(LegoControlManagerNotificationParam& p_para MxLong result = 0; if (p_param.GetUnknown0x28() == 1) { - DeleteObjects(&m_atom, 500, 510); + DeleteObjects(&m_atom, InfodoorScript::c_iic037in_PlayWav, 510); switch (p_param.GetClickedObjectId()) { case InfodoorScript::c_LeftArrow_Ctl: @@ -167,7 +167,7 @@ void InfocenterDoor::Enable(MxBool p_enable) // FUNCTION: LEGO1 0x10037cd0 MxBool InfocenterDoor::Escape() { - DeleteObjects(&m_atom, 500, 510); + DeleteObjects(&m_atom, InfodoorScript::c_iic037in_PlayWav, 510); m_destLocation = LegoGameState::e_infomain; return TRUE; }