Merge remote-tracking branch 'isle/master'

This commit is contained in:
Christian Semmler 2025-08-01 15:04:02 -07:00
commit f2b6188d89
No known key found for this signature in database
GPG Key ID: 086DAA1360BEEE5C
9 changed files with 134 additions and 107 deletions

View File

@ -150,18 +150,18 @@ class Isle : public LegoWorld {
return !strcmp(p_name, Isle::ClassName()) || LegoWorld::IsA(p_name); return !strcmp(p_name, Isle::ClassName()) || LegoWorld::IsA(p_name);
} }
MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18 MxResult Create(MxDSAction& p_dsAction) override; // vtable+0x18
void ReadyWorld() override; // vtable+0x50 void ReadyWorld() override; // vtable+0x50
void Add(MxCore* p_object) override; // vtable+0x58 void Add(MxCore* p_object) override; // vtable+0x58
void VTable0x60() override; // vtable+0x60 void VTable0x60() override; // vtable+0x60
MxBool Escape() override; // vtable+0x64 MxBool Escape() override; // vtable+0x64
void Enable(MxBool p_enable) override; // vtable+0x68 void Enable(MxBool p_enable) override; // vtable+0x68
virtual void VTable0x6c(LegoPathActor* p_actor); // vtable+0x6c virtual void RemoveVehicle(LegoPathActor* p_actor); // vtable+0x6c
void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; } void SetDestLocation(LegoGameState::Area p_destLocation) { m_destLocation = p_destLocation; }
MxBool HasHelicopter() { return m_helicopter != NULL; } MxBool HasHelicopter() { return m_helicopter != NULL; }
void FUN_10033350(); void SwitchToInfocenter();
friend class Act1State; friend class Act1State;
@ -175,13 +175,13 @@ class Isle : public LegoWorld {
MxLong HandleTransitionEnd(); MxLong HandleTransitionEnd();
void HandleElevatorEndAction(); void HandleElevatorEndAction();
void UpdateGlobe(); void UpdateGlobe();
void FUN_10032620(); void CheckAreaExiting();
void CreateState(); void CreateState();
void FUN_10032d30( void TransitionToOverlay(
IsleScript::Script p_script, IsleScript::Script p_script,
JukeboxScript::Script p_music, JukeboxScript::Script p_music,
const char* p_cameraLocation, const char* p_cameraLocation,
MxBool p_und MxBool p_setCamera
); );
Act1State* m_act1state; // 0xf8 Act1State* m_act1state; // 0xf8

View File

@ -35,7 +35,7 @@ class Jetski : public IslePathActor {
void ActivateSceneActions(); void ActivateSceneActions();
MxS16 GetUnknown0x160() { return m_jetskiDashboardStreamId; } MxS16 GetJetskiDashboardStreamId() { return m_jetskiDashboardStreamId; }
// SYNTHETIC: LEGO1 0x1007e5c0 // SYNTHETIC: LEGO1 0x1007e5c0
// Jetski::`scalar deleting destructor' // Jetski::`scalar deleting destructor'

View File

@ -39,7 +39,7 @@ class PizzaMissionState : public LegoState {
m_unk0x08 = 1; m_unk0x08 = 1;
m_finishTimes = p_finishTimes; m_finishTimes = p_finishTimes;
m_startTime = INT_MIN; m_startTime = INT_MIN;
m_unk0x14 = 1; m_counter = 1;
m_score = LegoState::e_grey; m_score = LegoState::e_grey;
m_hiScore = LegoState::e_grey; m_hiScore = LegoState::e_grey;
m_actions = p_actions; m_actions = p_actions;
@ -54,7 +54,7 @@ class PizzaMissionState : public LegoState {
m_unk0x08 = p_mission.m_unk0x08; m_unk0x08 = p_mission.m_unk0x08;
m_finishTimes = p_mission.m_finishTimes; m_finishTimes = p_mission.m_finishTimes;
m_startTime = p_mission.m_startTime; m_startTime = p_mission.m_startTime;
m_unk0x14 = p_mission.m_unk0x14; m_counter = p_mission.m_counter;
m_score = p_mission.m_score; m_score = p_mission.m_score;
m_hiScore = p_mission.m_hiScore; m_hiScore = p_mission.m_hiScore;
m_actions = p_mission.m_actions; m_actions = p_mission.m_actions;
@ -102,12 +102,24 @@ class PizzaMissionState : public LegoState {
undefined m_unk0x08; // 0x08 undefined m_unk0x08; // 0x08
MxLong* m_finishTimes; // 0x0c MxLong* m_finishTimes; // 0x0c
MxLong m_startTime; // 0x10 MxLong m_startTime; // 0x10
MxS16 m_unk0x14; // 0x14 MxS16 m_counter; // 0x14
MxS16 m_score; // 0x16 MxS16 m_score; // 0x16
MxS16 m_hiScore; // 0x18 MxS16 m_hiScore; // 0x18
IsleScript::Script* m_actions; // 0x1c IsleScript::Script* m_actions; // 0x1c
}; };
enum {
e_none = 0,
e_introduction = 1,
e_waitAcceptingQuest = 2,
e_started = 3,
e_delivering = 4,
e_arrivedAtDestination = 5,
e_suggestHelicopter = 6,
e_transitionToAct2 = 8,
e_timeoutAcceptingQuest = 9,
};
PizzaMissionState(); PizzaMissionState();
// FUNCTION: LEGO1 0x10039290 // FUNCTION: LEGO1 0x10039290
@ -142,7 +154,7 @@ class PizzaMissionState : public LegoState {
MxS16 GetActorState(); MxS16 GetActorState();
PizzeriaState* m_pizzeriaState; // 0x08 PizzeriaState* m_pizzeriaState; // 0x08
undefined4 m_unk0x0c; // 0x0c MxU32 m_state; // 0x0c
Mission m_missions[5]; // 0x10 Mission m_missions[5]; // 0x10
MxU32 m_playedAction; // 0xb0 MxU32 m_playedAction; // 0xb0
@ -189,8 +201,8 @@ class Pizza : public IsleActor {
MxLong HandlePathStruct(LegoPathStructNotificationParam& p_param) override; // vtable+0x80 MxLong HandlePathStruct(LegoPathStructNotificationParam& p_param) override; // vtable+0x80
void CreateState(); void CreateState();
void FUN_10038220(IsleScript::Script p_objectId); void Start(IsleScript::Script p_objectId);
void FUN_100382b0(); void Reset();
void StopActions(); void StopActions();
void PlayAction(MxU32 p_objectId, MxBool p_param7); void PlayAction(MxU32 p_objectId, MxBool p_param7);
@ -207,7 +219,7 @@ class Pizza : public IsleActor {
IsleScript::Script m_speechAction; // 0x8c IsleScript::Script m_speechAction; // 0x8c
MxLong m_startTime; // 0x90 MxLong m_startTime; // 0x90
MxLong m_duration; // 0x94 MxLong m_duration; // 0x94
MxBool m_unk0x98; // 0x98 MxBool m_playedLocationAnimation; // 0x98
}; };
#endif // PIZZA_H #endif // PIZZA_H

View File

@ -49,7 +49,7 @@ MxLong InfoCenterEntity::HandleClick(LegoEventNotificationParam& p_param)
} }
Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle); Isle* isle = (Isle*) FindWorld(*g_isleScript, IsleScript::c__Isle);
isle->FUN_10033350(); isle->SwitchToInfocenter();
isle->SetDestLocation(LegoGameState::Area::e_infomain); isle->SetDestLocation(LegoGameState::Area::e_infomain);
Act1State* act1state = (Act1State*) GameState()->GetState("Act1State"); Act1State* act1state = (Act1State*) GameState()->GetState("Act1State");

View File

@ -137,7 +137,7 @@ Pizza::Pizza()
m_skateBoard = NULL; m_skateBoard = NULL;
m_act1state = NULL; m_act1state = NULL;
m_speechAction = IsleScript::c_noneIsle; m_speechAction = IsleScript::c_noneIsle;
m_unk0x98 = FALSE; m_playedLocationAnimation = FALSE;
m_startTime = INT_MIN; m_startTime = INT_MIN;
} }
@ -177,11 +177,11 @@ void Pizza::CreateState()
// FUNCTION: LEGO1 0x10038220 // FUNCTION: LEGO1 0x10038220
// FUNCTION: BETA10 0x100edb81 // FUNCTION: BETA10 0x100edb81
void Pizza::FUN_10038220(IsleScript::Script p_objectId) void Pizza::Start(IsleScript::Script p_objectId)
{ {
AnimationManager()->FUN_10064740(NULL); AnimationManager()->FUN_10064740(NULL);
m_mission = m_state->GetMission(GameState()->GetActorId()); m_mission = m_state->GetMission(GameState()->GetActorId());
m_state->m_unk0x0c = 1; m_state->m_state = PizzaMissionState::e_introduction;
m_act1state->m_state = Act1State::e_pizza; m_act1state->m_state = Act1State::e_pizza;
m_mission->m_startTime = INT_MIN; m_mission->m_startTime = INT_MIN;
g_isleFlags &= ~Isle::c_playMusic; g_isleFlags &= ~Isle::c_playMusic;
@ -193,22 +193,22 @@ void Pizza::FUN_10038220(IsleScript::Script p_objectId)
// FUNCTION: LEGO1 0x100382b0 // FUNCTION: LEGO1 0x100382b0
// FUNCTION: BETA10 0x100edc9b // FUNCTION: BETA10 0x100edc9b
void Pizza::FUN_100382b0() void Pizza::Reset()
{ {
if (m_state->m_unk0x0c != 8) { if (m_state->m_state != PizzaMissionState::e_transitionToAct2) {
if (m_speechAction != IsleScript::c_noneIsle) { if (m_speechAction != IsleScript::c_noneIsle) {
InvokeAction(Extra::e_stop, *g_isleScript, m_speechAction, NULL); InvokeAction(Extra::e_stop, *g_isleScript, m_speechAction, NULL);
} }
m_act1state->m_state = Act1State::e_none; m_act1state->m_state = Act1State::e_none;
m_state->m_unk0x0c = 0; m_state->m_state = PizzaMissionState::e_none;
UserActor()->SetActorState(LegoPathActor::c_initial); UserActor()->SetActorState(LegoPathActor::c_initial);
g_isleFlags |= Isle::c_playMusic; g_isleFlags |= Isle::c_playMusic;
AnimationManager()->EnableCamAnims(TRUE); AnimationManager()->EnableCamAnims(TRUE);
AnimationManager()->FUN_1005f6d0(TRUE); AnimationManager()->FUN_1005f6d0(TRUE);
m_mission->m_startTime = INT_MIN; m_mission->m_startTime = INT_MIN;
m_mission = NULL; m_mission = NULL;
m_unk0x98 = FALSE; m_playedLocationAnimation = FALSE;
m_speechAction = IsleScript::c_noneIsle; m_speechAction = IsleScript::c_noneIsle;
BackgroundAudioManager()->RaiseVolume(); BackgroundAudioManager()->RaiseVolume();
TickleManager()->UnregisterClient(this); TickleManager()->UnregisterClient(this);
@ -237,14 +237,14 @@ void Pizza::StopActions()
// FUNCTION: BETA10 0x100edd10 // FUNCTION: BETA10 0x100edd10
MxLong Pizza::HandleClick() MxLong Pizza::HandleClick()
{ {
if (m_state->m_unk0x0c == 1) { if (m_state->m_state == PizzaMissionState::e_introduction) {
m_state->m_unk0x0c = 2; m_state->m_state = PizzaMissionState::e_waitAcceptingQuest;
m_mission->m_startTime = Timer()->GetTime(); m_mission->m_startTime = Timer()->GetTime();
TickleManager()->RegisterClient(this, 200); TickleManager()->RegisterClient(this, 200);
AnimationManager()->FUN_10061010(FALSE); AnimationManager()->FUN_10061010(FALSE);
} }
if (m_state->m_unk0x0c == 2) { if (m_state->m_state == PizzaMissionState::e_waitAcceptingQuest) {
m_act1state->m_state = Act1State::e_pizza; m_act1state->m_state = Act1State::e_pizza;
if (m_skateBoard == NULL) { if (m_skateBoard == NULL) {
@ -266,7 +266,7 @@ MxLong Pizza::HandleClick()
} }
PlayAction(action, TRUE); PlayAction(action, TRUE);
m_state->m_unk0x0c = 3; m_state->m_state = PizzaMissionState::e_started;
PlayMusic(JukeboxScript::c_PizzaMission_Music); PlayMusic(JukeboxScript::c_PizzaMission_Music);
return 1; return 1;
} }
@ -278,12 +278,12 @@ MxLong Pizza::HandleClick()
// FUNCTION: BETA10 0x100ede53 // FUNCTION: BETA10 0x100ede53
MxLong Pizza::HandlePathStruct(LegoPathStructNotificationParam& p_param) MxLong Pizza::HandlePathStruct(LegoPathStructNotificationParam& p_param)
{ {
if (m_state->m_unk0x0c == 4) { if (m_state->m_state == PizzaMissionState::e_delivering) {
MxLong time = Timer()->GetTime() - m_mission->m_startTime; MxLong time = Timer()->GetTime() - m_mission->m_startTime;
if (p_param.GetTrigger() == LegoPathStruct::c_s && p_param.GetData() == 0x12e && if (p_param.GetTrigger() == LegoPathStruct::c_s && p_param.GetData() == 0x12e &&
GameState()->GetActorId() == LegoActor::c_pepper) { GameState()->GetActorId() == LegoActor::c_pepper) {
m_state->m_unk0x0c = 5; m_state->m_state = PizzaMissionState::e_arrivedAtDestination;
m_state->SetPlayedAction(SndanimScript::c_TRS302_OpenJailDoor); m_state->SetPlayedAction(SndanimScript::c_TRS302_OpenJailDoor);
if (time < m_mission->GetRedFinishTime()) { if (time < m_mission->GetRedFinishTime()) {
@ -348,20 +348,20 @@ MxLong Pizza::HandlePathStruct(LegoPathStructNotificationParam& p_param)
break; break;
} }
m_state->m_unk0x0c = 5; m_state->m_state = PizzaMissionState::e_arrivedAtDestination;
PlayAction(action, TRUE); PlayAction(action, TRUE);
MxTrace("Pizza mission: ending\n"); MxTrace("Pizza mission: ending\n");
} }
else if (p_param.GetTrigger() == LegoPathStruct::c_w) { else if (p_param.GetTrigger() == LegoPathStruct::c_w) {
if (p_param.GetData() == 0x15e && GameState()->GetActorId() == LegoActor::c_pepper) { if (p_param.GetData() == 0x15e && GameState()->GetActorId() == LegoActor::c_pepper) {
if (!m_unk0x98) { if (!m_playedLocationAnimation) {
m_unk0x98 = TRUE; m_playedLocationAnimation = TRUE;
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_pns050p1_RunAnim, NULL); InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_pns050p1_RunAnim, NULL);
} }
} }
else if (p_param.GetData() == 0x15f && GameState()->GetActorId() == LegoActor::c_papa && !m_unk0x98) { else if (p_param.GetData() == 0x15f && GameState()->GetActorId() == LegoActor::c_papa && !m_playedLocationAnimation) {
m_unk0x98 = TRUE; m_playedLocationAnimation = TRUE;
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns050p1_RunAnim, NULL); InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_wns050p1_RunAnim, NULL);
} }
} }
@ -384,13 +384,13 @@ MxResult Pizza::Tickle()
} }
if (m_mission != NULL && m_mission->m_startTime != INT_MIN) { if (m_mission != NULL && m_mission->m_startTime != INT_MIN) {
if (m_state->m_unk0x0c == 4) { if (m_state->m_state == PizzaMissionState::e_delivering) {
assert(m_mission); assert(m_mission);
if (time > m_mission->m_startTime + m_mission->GetTimeoutTime()) { if (time > m_mission->m_startTime + m_mission->GetTimeoutTime()) {
StopActions(); StopActions();
m_mission->UpdateScore(LegoState::e_grey); m_mission->UpdateScore(LegoState::e_grey);
FUN_100382b0(); Reset();
BackgroundAudioManager()->LowerVolume(); BackgroundAudioManager()->LowerVolume();
InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_Avo917In_PlayWav, NULL); InvokeAction(Extra::e_start, *g_isleScript, IsleScript::c_Avo917In_PlayWav, NULL);
MxTrace("Pizza mission: timeout, stop\n"); MxTrace("Pizza mission: timeout, stop\n");
@ -421,7 +421,7 @@ MxResult Pizza::Tickle()
} }
} }
} }
else if (m_state->m_unk0x0c == 2) { else if (m_state->m_state == PizzaMissionState::e_waitAcceptingQuest) {
assert(m_mission); assert(m_mission);
if (Timer()->GetTime() > m_mission->m_startTime + 5000) { if (Timer()->GetTime() > m_mission->m_startTime + 5000) {
@ -429,7 +429,7 @@ MxResult Pizza::Tickle()
m_skateBoard->EnableScenePresentation(FALSE); m_skateBoard->EnableScenePresentation(FALSE);
TickleManager()->UnregisterClient(this); TickleManager()->UnregisterClient(this);
m_mission->UpdateScore(LegoState::e_grey); m_mission->UpdateScore(LegoState::e_grey);
m_state->m_unk0x0c = 9; m_state->m_state = PizzaMissionState::e_timeoutAcceptingQuest;
AnimationManager()->FUN_1005f6d0(TRUE); AnimationManager()->FUN_1005f6d0(TRUE);
PlayAction(m_mission->GetUnknownFinishAction(), TRUE); PlayAction(m_mission->GetUnknownFinishAction(), TRUE);
MxTrace("Pizza mission: timeout, declining\n"); MxTrace("Pizza mission: timeout, declining\n");
@ -452,16 +452,16 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param)
return 1; return 1;
} }
switch (m_state->m_unk0x0c) { switch (m_state->m_state) {
case 1: case PizzaMissionState::e_introduction:
if (m_state->GetPlayedAction() == objectId) { if (m_state->GetPlayedAction() == objectId) {
m_state->m_unk0x0c = 2; m_state->m_state = PizzaMissionState::e_waitAcceptingQuest;
m_mission->m_startTime = Timer()->GetTime(); m_mission->m_startTime = Timer()->GetTime();
TickleManager()->RegisterClient(this, 200); TickleManager()->RegisterClient(this, 200);
MxTrace("Pizza mission: proposed\n"); MxTrace("Pizza mission: proposed\n");
} }
break; break;
case 3: case PizzaMissionState::e_started:
if (m_state->GetPlayedAction() == objectId) { if (m_state->GetPlayedAction() == objectId) {
m_mission->m_startTime = Timer()->GetTime(); m_mission->m_startTime = Timer()->GetTime();
@ -470,7 +470,7 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param)
InvokeAction(Extra::e_start, *g_isleScript, mission->GetActions()[i], NULL); InvokeAction(Extra::e_start, *g_isleScript, mission->GetActions()[i], NULL);
} }
m_state->m_unk0x0c = 4; m_state->m_state = PizzaMissionState::e_delivering;
m_state->SetPlayedAction(IsleScript::c_noneIsle); m_state->SetPlayedAction(IsleScript::c_noneIsle);
UserActor()->SetActorState(LegoPathActor::c_initial); UserActor()->SetActorState(LegoPathActor::c_initial);
m_skateBoard->SetPizzaVisible(TRUE); m_skateBoard->SetPizzaVisible(TRUE);
@ -489,7 +489,7 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param)
result = 1; result = 1;
} }
break; break;
case 5: case PizzaMissionState::e_arrivedAtDestination:
if (m_state->GetPlayedAction() == objectId) { if (m_state->GetPlayedAction() == objectId) {
StopActions(); StopActions();
@ -497,26 +497,26 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param)
IsleScript::Script action = IsleScript::c_noneIsle; IsleScript::Script action = IsleScript::c_noneIsle;
if (!((Isle*) CurrentWorld())->HasHelicopter()) { if (!((Isle*) CurrentWorld())->HasHelicopter()) {
switch (m_mission->m_unk0x14) { switch (m_mission->m_counter) {
case 1: case 1:
action = IsleScript::c_pja126br_RunAnim; action = IsleScript::c_pja126br_RunAnim;
m_mission->m_unk0x14++; m_mission->m_counter++;
m_state->m_unk0x0c = 6; m_state->m_state = PizzaMissionState::e_suggestHelicopter;
MxTrace("Pizza mission: succeeds\n"); MxTrace("Pizza mission: succeeds\n");
break; break;
case 2: case 2:
action = IsleScript::c_pja129br_RunAnim; action = IsleScript::c_pja129br_RunAnim;
m_startTime = Timer()->GetTime(); m_startTime = Timer()->GetTime();
m_duration = 500; m_duration = 500;
m_mission->m_unk0x14++; m_mission->m_counter++;
m_state->m_unk0x0c = 6; m_state->m_state = PizzaMissionState::e_suggestHelicopter;
MxTrace("Pizza mission: succeeds\n"); MxTrace("Pizza mission: succeeds\n");
break; break;
case 3: case 3:
action = IsleScript::c_pja131br_RunAnim; action = IsleScript::c_pja131br_RunAnim;
m_startTime = Timer()->GetTime(); m_startTime = Timer()->GetTime();
m_duration = 500; m_duration = 500;
m_state->m_unk0x0c = 6; m_state->m_state = PizzaMissionState::e_suggestHelicopter;
break; break;
} }
} }
@ -524,7 +524,7 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param)
action = IsleScript::c_pja132br_RunAnim; action = IsleScript::c_pja132br_RunAnim;
m_startTime = Timer()->GetTime(); m_startTime = Timer()->GetTime();
m_duration = 2300; m_duration = 2300;
m_state->m_unk0x0c = 8; m_state->m_state = PizzaMissionState::e_transitionToAct2;
InputManager()->DisableInputProcessing(); InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE); InputManager()->SetUnknown336(TRUE);
MxTrace("Pizza mission: go to Act2\n"); MxTrace("Pizza mission: go to Act2\n");
@ -533,42 +533,42 @@ MxLong Pizza::HandleEndAction(MxEndActionNotificationParam& p_param)
PlayAction(action, TRUE); PlayAction(action, TRUE);
} }
else { else {
FUN_100382b0(); Reset();
m_state->m_unk0x0c = 0; m_state->m_state = PizzaMissionState::e_none;
m_state->SetPlayedAction(IsleScript::c_noneIsle); m_state->SetPlayedAction(IsleScript::c_noneIsle);
} }
} }
break; break;
case 6: case PizzaMissionState::e_suggestHelicopter:
if (m_state->GetPlayedAction() == objectId) { if (m_state->GetPlayedAction() == objectId) {
if (objectId == IsleScript::c_pja126br_RunAnim) { if (objectId == IsleScript::c_pja126br_RunAnim) {
PlayAction(IsleScript::c_pja127br_RunAnim, TRUE); PlayAction(IsleScript::c_pja127br_RunAnim, TRUE); // build helicopter!
m_startTime = Timer()->GetTime(); m_startTime = Timer()->GetTime();
m_duration = 700; m_duration = 700;
} }
else if (objectId == IsleScript::c_pja129br_RunAnim) { else if (objectId == IsleScript::c_pja129br_RunAnim) {
PlayAction(IsleScript::c_pja130br_RunAnim, TRUE); PlayAction(IsleScript::c_pja130br_RunAnim, TRUE); // build helicopter!
} }
else { else {
FUN_100382b0(); Reset();
m_state->m_unk0x0c = 0; m_state->m_state = PizzaMissionState::e_none;
m_state->SetPlayedAction(IsleScript::c_noneIsle); m_state->SetPlayedAction(IsleScript::c_noneIsle);
} }
} }
break; break;
case 8: case PizzaMissionState::e_transitionToAct2:
if (m_state->GetPlayedAction() == objectId) { if (m_state->GetPlayedAction() == objectId) {
m_act1state->m_state = Act1State::e_none; m_act1state->m_state = Act1State::e_none;
m_state->m_unk0x0c = 0; m_state->m_state = PizzaMissionState::e_none;
GameState()->m_currentArea = LegoGameState::e_isle; GameState()->m_currentArea = LegoGameState::e_isle;
TickleManager()->UnregisterClient(this); TickleManager()->UnregisterClient(this);
((Isle*) CurrentWorld())->SetDestLocation(LegoGameState::e_act2main); ((Isle*) CurrentWorld())->SetDestLocation(LegoGameState::e_act2main);
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE); TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
} }
break; break;
case 9: case PizzaMissionState::e_timeoutAcceptingQuest:
if (m_state->GetPlayedAction() == objectId) { if (m_state->GetPlayedAction() == objectId) {
FUN_100382b0(); Reset();
} }
break; break;
} }
@ -594,7 +594,7 @@ void Pizza::PlayAction(MxU32 p_objectId, MxBool p_param7)
// FUNCTION: BETA10 0x100eea25 // FUNCTION: BETA10 0x100eea25
PizzaMissionState::PizzaMissionState() PizzaMissionState::PizzaMissionState()
{ {
m_unk0x0c = 0; m_state = PizzaMissionState::e_none;
m_missions[0] = Mission(LegoActor::c_pepper, 2, g_pepperFinishTimes, g_pepperActions, 4); m_missions[0] = Mission(LegoActor::c_pepper, 2, g_pepperFinishTimes, g_pepperActions, 4);
m_missions[1] = Mission(LegoActor::c_mama, 2, g_mamaFinishTimes, g_mamaActions, 4); m_missions[1] = Mission(LegoActor::c_mama, 2, g_mamaFinishTimes, g_mamaActions, 4);
m_missions[2] = Mission(LegoActor::c_papa, 2, g_papaFinishTimes, g_papaActions, 4); m_missions[2] = Mission(LegoActor::c_papa, 2, g_papaFinishTimes, g_papaActions, 4);
@ -613,7 +613,7 @@ MxResult PizzaMissionState::Serialize(LegoStorage* p_storage)
if (p_storage->IsReadMode()) { if (p_storage->IsReadMode()) {
for (MxS16 i = 0; i < 5; i++) { for (MxS16 i = 0; i < 5; i++) {
p_storage->ReadS16(m_missions[i].m_unk0x06); p_storage->ReadS16(m_missions[i].m_unk0x06);
p_storage->ReadS16(m_missions[i].m_unk0x14); p_storage->ReadS16(m_missions[i].m_counter);
p_storage->ReadS16(m_missions[i].m_score); p_storage->ReadS16(m_missions[i].m_score);
p_storage->ReadS16(m_missions[i].m_hiScore); p_storage->ReadS16(m_missions[i].m_hiScore);
} }
@ -621,7 +621,7 @@ MxResult PizzaMissionState::Serialize(LegoStorage* p_storage)
else if (p_storage->IsWriteMode()) { else if (p_storage->IsWriteMode()) {
for (MxS16 i = 0; i < 5; i++) { for (MxS16 i = 0; i < 5; i++) {
p_storage->WriteS16(m_missions[i].m_unk0x06); p_storage->WriteS16(m_missions[i].m_unk0x06);
p_storage->WriteS16(m_missions[i].m_unk0x14); p_storage->WriteS16(m_missions[i].m_counter);
p_storage->WriteS16(m_missions[i].m_score); p_storage->WriteS16(m_missions[i].m_score);
p_storage->WriteS16(m_missions[i].m_hiScore); p_storage->WriteS16(m_missions[i].m_hiScore);
} }

View File

@ -69,7 +69,7 @@ void Pizzeria::CreateState()
// FUNCTION: BETA10 0x100efc91 // FUNCTION: BETA10 0x100efc91
MxLong Pizzeria::HandleClick() MxLong Pizzeria::HandleClick()
{ {
if (CanExit() && m_pizzaMissionState->m_unk0x0c == 0) { if (CanExit() && m_pizzaMissionState->m_state == PizzaMissionState::e_none) {
if (UserActor()->GetActorId() != GameState()->GetActorId()) { if (UserActor()->GetActorId() != GameState()->GetActorId()) {
if (!UserActor()->IsA("SkateBoard")) { if (!UserActor()->IsA("SkateBoard")) {
((IslePathActor*) UserActor())->Exit(); ((IslePathActor*) UserActor())->Exit();
@ -79,7 +79,7 @@ MxLong Pizzeria::HandleClick()
AnimationManager()->FUN_10061010(FALSE); AnimationManager()->FUN_10061010(FALSE);
Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor); Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor);
pizza->FUN_10038220((IsleScript::Script) m_pizzeriaState->NextAction()); pizza->Start((IsleScript::Script) m_pizzeriaState->NextAction());
} }
return 1; return 1;

View File

@ -59,7 +59,7 @@ void SkateBoard::Exit()
if (m_act1state->m_state == Act1State::e_pizza) { if (m_act1state->m_state == Act1State::e_pizza) {
Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor); Pizza* pizza = (Pizza*) CurrentWorld()->Find(*g_isleScript, IsleScript::c_Pizza_Actor);
pizza->StopActions(); pizza->StopActions();
pizza->FUN_100382b0(); pizza->Reset();
m_pizzaVisible = FALSE; m_pizzaVisible = FALSE;
} }

View File

@ -1179,28 +1179,28 @@ void LegoGameState::Init()
Helicopter* copter = (Helicopter*) isle->Find(*g_copterScript, CopterScript::c_Helicopter_Actor); Helicopter* copter = (Helicopter*) isle->Find(*g_copterScript, CopterScript::c_Helicopter_Actor);
if (copter) { if (copter) {
isle->RemoveActor(copter); isle->RemoveActor(copter);
isle->VTable0x6c(copter); isle->RemoveVehicle(copter);
delete copter; delete copter;
} }
DuneBuggy* dunebuggy = (DuneBuggy*) isle->Find(*g_dunecarScript, DunecarScript::c_DuneBugy_Actor); DuneBuggy* dunebuggy = (DuneBuggy*) isle->Find(*g_dunecarScript, DunecarScript::c_DuneBugy_Actor);
if (dunebuggy) { if (dunebuggy) {
isle->RemoveActor(dunebuggy); isle->RemoveActor(dunebuggy);
isle->VTable0x6c(dunebuggy); isle->RemoveVehicle(dunebuggy);
delete dunebuggy; delete dunebuggy;
} }
Jetski* jetski = (Jetski*) isle->Find(*g_jetskiScript, JetskiScript::c_Jetski_Actor); Jetski* jetski = (Jetski*) isle->Find(*g_jetskiScript, JetskiScript::c_Jetski_Actor);
if (jetski) { if (jetski) {
isle->RemoveActor(jetski); isle->RemoveActor(jetski);
isle->VTable0x6c(jetski); isle->RemoveVehicle(jetski);
delete jetski; delete jetski;
} }
RaceCar* racecar = (RaceCar*) isle->Find(*g_racecarScript, RacecarScript::c_RaceCar_Actor); RaceCar* racecar = (RaceCar*) isle->Find(*g_racecarScript, RacecarScript::c_RaceCar_Actor);
if (racecar) { if (racecar) {
isle->RemoveActor(racecar); isle->RemoveActor(racecar);
isle->VTable0x6c(racecar); isle->RemoveVehicle(racecar);
delete racecar; delete racecar;
} }
} }

View File

@ -81,7 +81,7 @@ Isle::~Isle()
} }
if (UserActor() != NULL) { if (UserActor() != NULL) {
VTable0x6c(UserActor()); RemoveVehicle(UserActor());
} }
NotificationManager()->Unregister(this); NotificationManager()->Unregister(this);
@ -275,7 +275,7 @@ void Isle::ReadyWorld()
} }
else if (GameState()->GetLoadedAct() != LegoGameState::e_act1) { else if (GameState()->GetLoadedAct() != LegoGameState::e_act1) {
EnableAnimations(TRUE); EnableAnimations(TRUE);
FUN_10032620(); CheckAreaExiting();
m_act1state->PlaceActors(); m_act1state->PlaceActors();
Disable(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen); Disable(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
} }
@ -584,7 +584,7 @@ void Isle::Enable(MxBool p_enable)
actor->SetActorState(LegoPathActor::c_initial); actor->SetActorState(LegoPathActor::c_initial);
} }
else { else {
FUN_10032620(); CheckAreaExiting();
} }
switch (GameState()->m_currentArea) { switch (GameState()->m_currentArea) {
@ -858,7 +858,7 @@ void Isle::Enable(MxBool p_enable)
} }
// FUNCTION: LEGO1 0x10032620 // FUNCTION: LEGO1 0x10032620
void Isle::FUN_10032620() void Isle::CheckAreaExiting()
{ {
VideoManager()->Get3DManager()->SetFrustrum(90.0, 0.1, 250.0); VideoManager()->Get3DManager()->SetFrustrum(90.0, 0.1, 250.0);
@ -909,17 +909,27 @@ MxLong Isle::HandleTransitionEnd()
case LegoGameState::e_elevride: case LegoGameState::e_elevride:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
VariableTable()->SetVariable("VISIBILITY", "Hide infocen"); VariableTable()->SetVariable("VISIBILITY", "Hide infocen");
FUN_10032d30(IsleScript::c_ElevRide_Background_Bitmap, JukeboxScript::c_Elevator_Music, "LCAMZI1,90", FALSE); TransitionToOverlay(
IsleScript::c_ElevRide_Background_Bitmap,
JukeboxScript::c_Elevator_Music,
"LCAMZI1,90",
FALSE
);
break; break;
case LegoGameState::e_elevride2: case LegoGameState::e_elevride2:
FUN_10032d30(IsleScript::c_ElevRide_Background_Bitmap, JukeboxScript::c_Elevator_Music, "LCAMZI2,90", FALSE); TransitionToOverlay(
IsleScript::c_ElevRide_Background_Bitmap,
JukeboxScript::c_Elevator_Music,
"LCAMZI2,90",
FALSE
);
if (m_destLocation == LegoGameState::e_undefined) { if (m_destLocation == LegoGameState::e_undefined) {
((MxStillPresenter*) Find(m_atomId, IsleScript::c_Meter3_Bitmap))->Enable(TRUE); ((MxStillPresenter*) Find(m_atomId, IsleScript::c_Meter3_Bitmap))->Enable(TRUE);
} }
break; break;
case LegoGameState::e_elevopen: case LegoGameState::e_elevopen:
FUN_10032d30( TransitionToOverlay(
IsleScript::c_ElevOpen_Background_Bitmap, IsleScript::c_ElevOpen_Background_Bitmap,
JukeboxScript::c_InfoCenter_3rd_Floor_Music, JukeboxScript::c_InfoCenter_3rd_Floor_Music,
"LCAMZIS,90", "LCAMZIS,90",
@ -927,7 +937,7 @@ MxLong Isle::HandleTransitionEnd()
); );
break; break;
case LegoGameState::e_seaview: case LegoGameState::e_seaview:
FUN_10032d30( TransitionToOverlay(
IsleScript::c_SeaView_Background_Bitmap, IsleScript::c_SeaView_Background_Bitmap,
JukeboxScript::c_InfoCenter_3rd_Floor_Music, JukeboxScript::c_InfoCenter_3rd_Floor_Music,
"LCAMZIE,90", "LCAMZIE,90",
@ -935,7 +945,7 @@ MxLong Isle::HandleTransitionEnd()
); );
break; break;
case LegoGameState::e_observe: case LegoGameState::e_observe:
FUN_10032d30( TransitionToOverlay(
IsleScript::c_Observe_Background_Bitmap, IsleScript::c_Observe_Background_Bitmap,
JukeboxScript::c_InfoCenter_3rd_Floor_Music, JukeboxScript::c_InfoCenter_3rd_Floor_Music,
"LCAMZIW,90", "LCAMZIW,90",
@ -943,7 +953,7 @@ MxLong Isle::HandleTransitionEnd()
); );
break; break;
case LegoGameState::e_elevdown: case LegoGameState::e_elevdown:
FUN_10032d30( TransitionToOverlay(
IsleScript::c_ElevDown_Background_Bitmap, IsleScript::c_ElevDown_Background_Bitmap,
JukeboxScript::c_InfoCenter_3rd_Floor_Music, JukeboxScript::c_InfoCenter_3rd_Floor_Music,
"LCAMZIN,90", "LCAMZIN,90",
@ -953,7 +963,7 @@ MxLong Isle::HandleTransitionEnd()
case LegoGameState::e_garadoor: case LegoGameState::e_garadoor:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
VariableTable()->SetVariable("VISIBILITY", "Hide Gas"); VariableTable()->SetVariable("VISIBILITY", "Hide Gas");
FUN_10032d30(IsleScript::c_GaraDoor_Background_Bitmap, JukeboxScript::c_JBMusic2, "LCAMZG1,90", FALSE); TransitionToOverlay(IsleScript::c_GaraDoor_Background_Bitmap, JukeboxScript::c_JBMusic2, "LCAMZG1,90", FALSE);
break; break;
case LegoGameState::e_garageExited: case LegoGameState::e_garageExited:
GameState()->SwitchArea(m_destLocation); GameState()->SwitchArea(m_destLocation);
@ -978,7 +988,7 @@ MxLong Isle::HandleTransitionEnd()
case LegoGameState::e_polidoor: case LegoGameState::e_polidoor:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
VariableTable()->SetVariable("VISIBILITY", "Hide Policsta"); VariableTable()->SetVariable("VISIBILITY", "Hide Policsta");
FUN_10032d30( TransitionToOverlay(
IsleScript::c_PoliDoor_Background_Bitmap, IsleScript::c_PoliDoor_Background_Bitmap,
JukeboxScript::c_PoliceStation_Music, JukeboxScript::c_PoliceStation_Music,
"LCAMZP1,90", "LCAMZP1,90",
@ -987,7 +997,7 @@ MxLong Isle::HandleTransitionEnd()
break; break;
case LegoGameState::e_bike: case LegoGameState::e_bike:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
FUN_10032d30(IsleScript::c_BikeDashboard_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_BikeDashboard_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_bike->ActivateSceneActions(); m_bike->ActivateSceneActions();
@ -995,7 +1005,7 @@ MxLong Isle::HandleTransitionEnd()
break; break;
case LegoGameState::e_dunecar: case LegoGameState::e_dunecar:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
FUN_10032d30(IsleScript::c_DuneCarFuelMeter, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_DuneCarFuelMeter, JukeboxScript::c_MusicTheme1, NULL, TRUE);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_dunebuggy->ActivateSceneActions(); m_dunebuggy->ActivateSceneActions();
@ -1003,7 +1013,7 @@ MxLong Isle::HandleTransitionEnd()
break; break;
case LegoGameState::e_motocycle: case LegoGameState::e_motocycle:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
FUN_10032d30(IsleScript::c_MotoBikeDashboard_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_MotoBikeDashboard_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_motocycle->ActivateSceneActions(); m_motocycle->ActivateSceneActions();
@ -1011,11 +1021,11 @@ MxLong Isle::HandleTransitionEnd()
break; break;
case LegoGameState::e_copter: case LegoGameState::e_copter:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
FUN_10032d30(IsleScript::c_HelicopterDashboard_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_HelicopterDashboard_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE);
break; break;
case LegoGameState::e_skateboard: case LegoGameState::e_skateboard:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
FUN_10032d30(IsleScript::c_SkatePizza_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_SkatePizza_Bitmap, JukeboxScript::c_MusicTheme1, NULL, TRUE);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_skateboard->ActivateSceneActions(); m_skateboard->ActivateSceneActions();
@ -1024,7 +1034,7 @@ MxLong Isle::HandleTransitionEnd()
case LegoGameState::e_ambulance: case LegoGameState::e_ambulance:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
m_act1state->m_state = Act1State::e_ambulance; m_act1state->m_state = Act1State::e_ambulance;
FUN_10032d30(IsleScript::c_AmbulanceFuelMeter, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_AmbulanceFuelMeter, JukeboxScript::c_MusicTheme1, NULL, TRUE);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_ambulance->ActivateSceneActions(); m_ambulance->ActivateSceneActions();
@ -1033,7 +1043,7 @@ MxLong Isle::HandleTransitionEnd()
case LegoGameState::e_towtrack: case LegoGameState::e_towtrack:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
m_act1state->m_state = Act1State::e_towtrack; m_act1state->m_state = Act1State::e_towtrack;
FUN_10032d30(IsleScript::c_TowFuelMeter, JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(IsleScript::c_TowFuelMeter, JukeboxScript::c_MusicTheme1, NULL, TRUE);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_towtrack->ActivateSceneActions(); m_towtrack->ActivateSceneActions();
@ -1041,7 +1051,12 @@ MxLong Isle::HandleTransitionEnd()
break; break;
case LegoGameState::e_jetski: case LegoGameState::e_jetski:
m_act1state->m_unk0x01f = TRUE; m_act1state->m_unk0x01f = TRUE;
FUN_10032d30((IsleScript::Script) m_jetski->GetUnknown0x160(), JukeboxScript::c_MusicTheme1, NULL, TRUE); TransitionToOverlay(
(IsleScript::Script) m_jetski->GetJetskiDashboardStreamId(),
JukeboxScript::c_MusicTheme1,
NULL,
TRUE
);
if (!m_act1state->m_unk0x01f) { if (!m_act1state->m_unk0x01f) {
m_jetski->ActivateSceneActions(); m_jetski->ActivateSceneActions();
@ -1056,11 +1071,11 @@ MxLong Isle::HandleTransitionEnd()
} }
// FUNCTION: LEGO1 0x10032d30 // FUNCTION: LEGO1 0x10032d30
void Isle::FUN_10032d30( void Isle::TransitionToOverlay(
IsleScript::Script p_script, IsleScript::Script p_script,
JukeboxScript::Script p_music, JukeboxScript::Script p_music,
const char* p_cameraLocation, const char* p_cameraLocation,
MxBool p_und MxBool p_setCamera
) )
{ {
if (m_act1state->m_unk0x01f) { if (m_act1state->m_unk0x01f) {
@ -1071,7 +1086,7 @@ void Isle::FUN_10032d30(
PlayMusic(p_music); PlayMusic(p_music);
} }
if (p_und) { if (p_setCamera) {
InputManager()->SetCamera(m_cameraController); InputManager()->SetCamera(m_cameraController);
} }
else { else {
@ -1143,7 +1158,7 @@ void Isle::Add(MxCore* p_object)
} }
// FUNCTION: LEGO1 0x10033050 // FUNCTION: LEGO1 0x10033050
void Isle::VTable0x6c(LegoPathActor* p_actor) void Isle::RemoveVehicle(LegoPathActor* p_actor)
{ {
LegoWorld::Remove(p_actor); LegoWorld::Remove(p_actor);
@ -1197,7 +1212,7 @@ MxBool Isle::Escape()
case Act1State::e_pizza: case Act1State::e_pizza:
if (UserActor() != NULL) { if (UserActor() != NULL) {
m_pizza->StopActions(); m_pizza->StopActions();
m_pizza->FUN_100382b0(); m_pizza->Reset();
} }
break; break;
case Act1State::e_towtrack: case Act1State::e_towtrack:
@ -1245,7 +1260,7 @@ MxBool Isle::Escape()
} }
// FUNCTION: LEGO1 0x10033350 // FUNCTION: LEGO1 0x10033350
void Isle::FUN_10033350() void Isle::SwitchToInfocenter()
{ {
if (m_act1state->m_state == Act1State::e_ambulance) { if (m_act1state->m_state == Act1State::e_ambulance) {
if (UserActor() != NULL && !UserActor()->IsA("Ambulance")) { if (UserActor() != NULL && !UserActor()->IsA("Ambulance")) {
@ -1264,7 +1279,7 @@ void Isle::FUN_10033350()
if (m_act1state->m_state == Act1State::e_pizza) { if (m_act1state->m_state == Act1State::e_pizza) {
if (UserActor() != NULL) { if (UserActor() != NULL) {
m_pizza->StopActions(); m_pizza->StopActions();
m_pizza->FUN_100382b0(); m_pizza->Reset();
} }
} }
@ -1572,7 +1587,7 @@ void Act1State::RemoveActors()
isle->m_helicopter->UpdatePlane(m_helicopterPlane); isle->m_helicopter->UpdatePlane(m_helicopterPlane);
m_helicopter = isle->m_helicopter; m_helicopter = isle->m_helicopter;
isle->RemoveActor(m_helicopter); isle->RemoveActor(m_helicopter);
isle->VTable0x6c(m_helicopter); isle->RemoveVehicle(m_helicopter);
m_helicopter->SetBoundary(NULL); m_helicopter->SetBoundary(NULL);
m_helicopter->SetController(NULL); m_helicopter->SetController(NULL);
} }
@ -1581,7 +1596,7 @@ void Act1State::RemoveActors()
isle->m_jetski->UpdatePlane(m_jetskiPlane); isle->m_jetski->UpdatePlane(m_jetskiPlane);
m_jetski = isle->m_jetski; m_jetski = isle->m_jetski;
isle->RemoveActor(m_jetski); isle->RemoveActor(m_jetski);
isle->VTable0x6c(m_jetski); isle->RemoveVehicle(m_jetski);
m_jetski->SetBoundary(NULL); m_jetski->SetBoundary(NULL);
m_jetski->SetController(NULL); m_jetski->SetController(NULL);
} }
@ -1590,7 +1605,7 @@ void Act1State::RemoveActors()
isle->m_dunebuggy->UpdatePlane(m_dunebuggyPlane); isle->m_dunebuggy->UpdatePlane(m_dunebuggyPlane);
m_dunebuggy = isle->m_dunebuggy; m_dunebuggy = isle->m_dunebuggy;
isle->RemoveActor(m_dunebuggy); isle->RemoveActor(m_dunebuggy);
isle->VTable0x6c(m_dunebuggy); isle->RemoveVehicle(m_dunebuggy);
m_dunebuggy->SetBoundary(NULL); m_dunebuggy->SetBoundary(NULL);
m_dunebuggy->SetController(NULL); m_dunebuggy->SetController(NULL);
} }
@ -1599,7 +1614,7 @@ void Act1State::RemoveActors()
isle->m_racecar->UpdatePlane(m_racecarPlane); isle->m_racecar->UpdatePlane(m_racecarPlane);
m_racecar = isle->m_racecar; m_racecar = isle->m_racecar;
isle->RemoveActor(m_racecar); isle->RemoveActor(m_racecar);
isle->VTable0x6c(m_racecar); isle->RemoveVehicle(m_racecar);
m_racecar->SetBoundary(NULL); m_racecar->SetBoundary(NULL);
m_racecar->SetController(NULL); m_racecar->SetController(NULL);
} }