diff --git a/LEGO1/lego/legoomni/include/legoutils.h b/LEGO1/lego/legoomni/include/legoutils.h index 66d2a319..4e2652c3 100644 --- a/LEGO1/lego/legoomni/include/legoutils.h +++ b/LEGO1/lego/legoomni/include/legoutils.h @@ -20,7 +20,7 @@ Extra::ActionType MatchActionString(const char*); void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, MxS32 p_targetEntityId, LegoEntity* p_sender); void SetCameraControllerFromIsle(); void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bOut, float* p_gOut); -MxBool FUN_1003ee00(MxAtomId& p_atomId, MxS32 p_id); +MxBool RemoveFromCurrentWorld(MxAtomId& p_atomId, MxS32 p_id); void FUN_1003ef00(MxBool); void SetAppCursor(WPARAM p_wparam); MxBool FUN_1003ef60(); diff --git a/LEGO1/lego/legoomni/src/actors/bike.cpp b/LEGO1/lego/legoomni/src/actors/bike.cpp index b0dcab1f..733d6ec1 100644 --- a/LEGO1/lego/legoomni/src/actors/bike.cpp +++ b/LEGO1/lego/legoomni/src/actors/bike.cpp @@ -35,11 +35,11 @@ void Bike::VTable0xe4() { IslePathActor::VTable0xe4(); GameState()->SetCurrentArea(LegoGameState::Area::e_bike); - FUN_1003ee00(*g_isleScript, 11); - FUN_1003ee00(*g_isleScript, 12); - FUN_1003ee00(*g_isleScript, 15); - FUN_1003ee00(*g_isleScript, 14); - FUN_1003ee00(*g_isleScript, 13); + RemoveFromCurrentWorld(*g_isleScript, 11); + RemoveFromCurrentWorld(*g_isleScript, 12); + RemoveFromCurrentWorld(*g_isleScript, 15); + RemoveFromCurrentWorld(*g_isleScript, 14); + RemoveFromCurrentWorld(*g_isleScript, 13); ControlManager()->Unregister(this); } diff --git a/LEGO1/lego/legoomni/src/actors/helicopter.cpp b/LEGO1/lego/legoomni/src/actors/helicopter.cpp index 0b3a0878..d1df71db 100644 --- a/LEGO1/lego/legoomni/src/actors/helicopter.cpp +++ b/LEGO1/lego/legoomni/src/actors/helicopter.cpp @@ -79,16 +79,16 @@ void Helicopter::VTable0xe4() } m_state->SetUnknown8(0); - FUN_1003ee00(m_script, 0x16); - FUN_1003ee00(m_script, 0x17); - FUN_1003ee00(m_script, 0x18); - FUN_1003ee00(m_script, 0x19); - FUN_1003ee00(m_script, 0x1a); - FUN_1003ee00(m_script, 0x1b); - FUN_1003ee00(m_script, 0x1c); - FUN_1003ee00(m_script, 0x1d); - FUN_1003ee00(m_script, 0x1e); - FUN_1003ee00(m_script, 0x1f); + RemoveFromCurrentWorld(m_script, 0x16); + RemoveFromCurrentWorld(m_script, 0x17); + RemoveFromCurrentWorld(m_script, 0x18); + RemoveFromCurrentWorld(m_script, 0x19); + RemoveFromCurrentWorld(m_script, 0x1a); + RemoveFromCurrentWorld(m_script, 0x1b); + RemoveFromCurrentWorld(m_script, 0x1c); + RemoveFromCurrentWorld(m_script, 0x1d); + RemoveFromCurrentWorld(m_script, 0x1e); + RemoveFromCurrentWorld(m_script, 0x1f); AnimationManager()->FUN_1005f6d0(TRUE); ControlManager()->Unregister(this); } diff --git a/LEGO1/lego/legoomni/src/common/legoutils.cpp b/LEGO1/lego/legoomni/src/common/legoutils.cpp index 5aa9d663..114e3ee9 100644 --- a/LEGO1/lego/legoomni/src/common/legoutils.cpp +++ b/LEGO1/lego/legoomni/src/common/legoutils.cpp @@ -95,7 +95,7 @@ void InvokeAction(Extra::ActionType p_actionId, MxAtomId& p_pAtom, MxS32 p_targe break; case Extra::ActionType::e_stop: action.SetUnknown24(-2); - if (!FUN_1003ee00(p_pAtom, p_targetEntityId)) { + if (!RemoveFromCurrentWorld(p_pAtom, p_targetEntityId)) { DeleteObject(action); } break; @@ -238,10 +238,32 @@ void ConvertHSVToRGB(float p_h, float p_s, float p_v, float* p_rOut, float* p_bO } } -// STUB: LEGO1 0x1003ee00 -MxBool FUN_1003ee00(MxAtomId& p_atomId, MxS32 p_id) +// FUNCTION: LEGO1 0x1003ee00 +MxBool RemoveFromCurrentWorld(MxAtomId& p_atomId, MxS32 p_id) { - return TRUE; + LegoWorld* world = CurrentWorld(); + if (world) { + MxCore* object = world->Find(p_atomId, p_id); + + if (object) { + world->Remove(object); + + if (!object->IsA("MxPresenter")) { + delete object; + } + else { + if (((MxPresenter*) object)->GetAction()) { + FUN_100b7220(((MxPresenter*) object)->GetAction(), MxDSAction::c_world, FALSE); + } + + ((MxPresenter*) object)->EndAction(); + } + + return TRUE; + } + } + + return FALSE; } // FUNCTION: LEGO1 0x1003ee80