diff --git a/LEGO1/lego/legoomni/include/towtrack.h b/LEGO1/lego/legoomni/include/towtrack.h index c20d4d36..b9d4ab32 100644 --- a/LEGO1/lego/legoomni/include/towtrack.h +++ b/LEGO1/lego/legoomni/include/towtrack.h @@ -97,13 +97,14 @@ public: void CreateState(); void FUN_1004dab0(); void FUN_1004dad0(); - void FUN_1004db10(); + void StopActions(); void FUN_1004dbe0(); // SYNTHETIC: LEGO1 0x1004c950 // TowTrack::`scalar deleting destructor' private: + void Leave(); void FUN_1004dcf0(IsleScript::Script); undefined4 m_unk0x160; // 0x160 diff --git a/LEGO1/lego/legoomni/src/actors/towtrack.cpp b/LEGO1/lego/legoomni/src/actors/towtrack.cpp index 357a51cb..67321333 100644 --- a/LEGO1/lego/legoomni/src/actors/towtrack.cpp +++ b/LEGO1/lego/legoomni/src/actors/towtrack.cpp @@ -204,10 +204,29 @@ MxLong TowTrack::HandleClick() return 1; } -// STUB: LEGO1 0x1004d8f0 +// FUNCTION: LEGO1 0x1004d8f0 void TowTrack::Exit() { - // TODO + GameState()->m_currentArea = LegoGameState::e_garageExterior; + StopActions(); + FUN_1004dbe0(); + Leave(); +} + +// FUNCTION: LEGO1 0x1004d920 +void TowTrack::Leave() +{ + IslePathActor::Exit(); + CurrentWorld()->RemoveActor(this); + m_roi->SetVisibility(FALSE); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowTrackDashboard_Bitmap); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowTrackArms_Ctl); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowHorn_Ctl); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowHorn_Sound); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowInfo_Ctl); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowSpeedMeter); + RemoveFromCurrentWorld(*g_isleScript, IsleScript::c_TowFuelMeter); + ControlManager()->Unregister(this); } // STUB: LEGO1 0x1004d9e0 @@ -229,10 +248,18 @@ void TowTrack::FUN_1004dad0() // TODO } -// STUB: LEGO1 0x1004db10 -void TowTrack::FUN_1004db10() +// FUNCTION: LEGO1 0x1004db10 +void TowTrack::StopActions() { - // TODO + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns050p1_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns046mg_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns057rd_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns048p1_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns049p1_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns051bd_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns053pr_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_wns045di_RunAnim, NULL); + InvokeAction(Extra::e_stop, *g_isleScript, IsleScript::c_pns123pr_RunAnim, NULL); } // STUB: LEGO1 0x1004dbe0 diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index fa9f9c5f..20c7d28a 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -1196,7 +1196,7 @@ MxBool Isle::Escape() break; case 8: if (UserActor() != NULL && !UserActor()->IsA("TowTrack")) { - m_towtrack->FUN_1004db10(); + m_towtrack->StopActions(); m_towtrack->FUN_1004dbe0(); } break; @@ -1250,7 +1250,7 @@ void Isle::FUN_10033350() if (m_act1state->m_unk0x018 == 8) { if (UserActor() != NULL && !UserActor()->IsA("TowTrack")) { - m_towtrack->FUN_1004db10(); + m_towtrack->StopActions(); m_towtrack->FUN_1004dbe0(); } }