Match Infocenter::HandleControl ()

* Add BETA10 references

* Refactor non-existent getters

* Infocenter::HandleControl maybe down to entropy

* Rename variable

* More refactoring

* Refactor public variable

* 100 %

* Fix clang-format

* Fix clang-format

---------

Co-authored-by: jonschz <jonschz@users.noreply.github.com>
Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
jonschz 2025-02-18 01:12:51 +01:00 committed by GitHub
parent d88ab0a50a
commit 777dfa82ec
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 160 additions and 149 deletions

View file

@ -55,11 +55,7 @@ public:
Playlist& GetExitDialogueAct1() { return m_exitDialogueAct1; }
Playlist& GetExitDialogueAct23() { return m_exitDialogueAct23; }
Playlist& GetReturnDialogue(LegoGameState::Act p_act) { return m_returnDialogue[p_act]; }
Playlist& GetLeaveDialogue(LegoGameState::Act p_act) { return m_leaveDialogue[p_act]; }
Playlist& GetBricksterDialogue() { return m_bricksterDialogue; }
MxU32 GetUnknown0x74() { return m_unk0x74; }
void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; }
// SYNTHETIC: LEGO1 0x10071900
// InfocenterState::`scalar deleting destructor'
@ -170,7 +166,7 @@ private:
LegoGameState::Area m_destLocation; // 0x104
Cutscene m_currentCutscene; // 0x108
Radio m_radio; // 0x10c
MxStillPresenter* m_unk0x11c; // 0x11c
MxStillPresenter* m_dragPresenter; // 0x11c
InfocenterMapEntry m_glowInfo[7]; // 0x120
MxS16 m_unk0x1c8; // 0x1c8
MxStillPresenter* m_frame; // 0x1cc

View file

@ -20,9 +20,7 @@ public:
// TODO: Most likely getters/setters are not used according to BETA.
MxS32 GetClickedObjectId() const { return m_clickedObjectId; }
const char* GetClickedAtom() const { return m_clickedAtom; }
MxS16 GetUnknown0x28() const { return m_unk0x28; }
void SetClickedObjectId(MxS32 p_clickedObjectId) { m_clickedObjectId = p_clickedObjectId; }
void SetClickedAtom(const char* p_clickedAtom) { m_clickedAtom = p_clickedAtom; }

View file

@ -215,7 +215,6 @@ public:
void SetDirty(MxBool p_isDirty) { m_isDirty = p_isDirty; }
void SetPreviousArea(Area p_previousArea) { m_previousArea = p_previousArea; }
void SetActorId(MxU8 p_actorId) { m_actorId = p_actorId; }
void SetUnknown0x42c(Area p_unk0x42c) { m_unk0x42c = p_unk0x42c; }
Username* GetPlayersIndex(MxS32 p_index) { return &m_players[p_index]; }
MxS16 GetPlayerCount() { return m_playerCount; }
LegoBackgroundColor* GetBackgroundColor() { return m_backgroundColor; }

View file

@ -437,8 +437,8 @@ MxLong Ambulance::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_AmbulanceArms_Ctl:
Exit();
GameState()->m_currentArea = LegoGameState::e_unk66;
@ -454,7 +454,7 @@ MxLong Ambulance::HandleControl(LegoControlManagerNotificationParam& p_param)
case IsleScript::c_AmbulanceHorn_Ctl:
MxSoundPresenter* presenter =
(MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "AmbulanceHorn_Sound");
presenter->Enable(p_param.GetUnknown0x28());
presenter->Enable(p_param.m_unk0x28);
break;
}
}

View file

@ -81,8 +81,8 @@ MxLong Bike::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_BikeArms_Ctl:
Exit();
GameState()->m_currentArea = LegoGameState::e_unk66;
@ -97,7 +97,7 @@ MxLong Bike::HandleControl(LegoControlManagerNotificationParam& p_param)
case IsleScript::c_BikeHorn_Ctl:
MxSoundPresenter* presenter =
(MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "BikeHorn_Sound");
presenter->Enable(p_param.GetUnknown0x28());
presenter->Enable(p_param.m_unk0x28);
break;
}
}

View file

@ -121,8 +121,8 @@ MxLong DuneBuggy::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_DuneCarArms_Ctl:
Exit();
GameState()->m_currentArea = LegoGameState::e_unk66;
@ -137,7 +137,7 @@ MxLong DuneBuggy::HandleControl(LegoControlManagerNotificationParam& p_param)
case IsleScript::c_DuneCarHorn_Ctl:
MxSoundPresenter* presenter =
(MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "DuneCarHorn_Sound");
presenter->Enable(p_param.GetUnknown0x28());
presenter->Enable(p_param.m_unk0x28);
break;
}
}

View file

@ -137,8 +137,8 @@ void Jetski::RemoveFromWorld()
// FUNCTION: LEGO1 0x1007e8e0
MxLong Jetski::HandleControl(LegoControlManagerNotificationParam& p_param)
{
if (p_param.GetUnknown0x28() == 1 && CurrentWorld()->IsA("Isle")) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1 && CurrentWorld()->IsA("Isle")) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_JetskiArms_Ctl:
Exit();
((IslePathActor*) UserActor())

View file

@ -115,8 +115,8 @@ MxLong Motocycle::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_MotoBikeArms_Ctl:
Exit();
GameState()->m_currentArea = LegoGameState::e_unk66;

View file

@ -144,7 +144,7 @@ void Radio::Stop()
MxLong Radio::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxDSAction action; // Unused
MxS32 objectId = p_param.GetClickedObjectId();
MxS32 objectId = p_param.m_clickedObjectId;
if (objectId == IsleScript::c_Radio_Ctl) {
if (m_state->IsActive()) {

View file

@ -110,7 +110,7 @@ MxLong SkateBoard::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxU32 result = 0;
if (p_param.GetUnknown0x28() == 1 && p_param.GetClickedObjectId() == IsleScript::c_SkateArms_Ctl) {
if (p_param.m_unk0x28 == 1 && p_param.m_clickedObjectId == IsleScript::c_SkateArms_Ctl) {
Exit();
GameState()->m_currentArea = LegoGameState::Area::e_unk66;
result = 1;

View file

@ -482,8 +482,8 @@ MxLong TowTrack::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_TowTrackArms_Ctl:
Exit();
GameState()->m_currentArea = LegoGameState::e_unk66;
@ -498,7 +498,7 @@ MxLong TowTrack::HandleControl(LegoControlManagerNotificationParam& p_param)
break;
case IsleScript::c_TowHorn_Ctl:
MxSoundPresenter* presenter = (MxSoundPresenter*) CurrentWorld()->Find("MxSoundPresenter", "TowHorn_Sound");
presenter->Enable(p_param.GetUnknown0x28());
presenter->Enable(p_param.m_unk0x28);
break;
}
}

View file

@ -319,6 +319,7 @@ void MxBackgroundAudioManager::LowerVolume()
}
// FUNCTION: LEGO1 0x1007f5b0
// FUNCTION: BETA10 0x100e9543
void MxBackgroundAudioManager::RaiseVolume()
{
if (m_unk0x148 != 0) {

View file

@ -185,7 +185,7 @@ MxBool LegoControlManager::FUN_10029630()
while (cursor.Next(presenter)) {
if (((MxControlPresenter*) presenter)->FUN_10044480(&m_event, m_unk0x14)) {
g_unk0x100f31b0 = m_event.GetClickedObjectId();
g_unk0x100f31b0 = m_event.m_clickedObjectId;
g_unk0x100f31b4 = m_event.GetClickedAtom();
FUN_100292e0();
m_unk0x08 = 1;

View file

@ -630,6 +630,7 @@ MxCore* LegoWorld::Find(const char* p_class, const char* p_name)
}
// FUNCTION: LEGO1 0x10021790
// FUNCTION: BETA10 0x100db3de
MxCore* LegoWorld::Find(const MxAtomId& p_atom, MxS32 p_entityId)
{
LegoEntityListCursor entityCursor(m_entityList);

View file

@ -38,6 +38,7 @@ MxAtomId* g_elevbottScript = NULL;
MxAtomId* g_infodoorScript = NULL;
// GLOBAL: LEGO1 0x100f4548
// GLOBAL: BETA10 0x102114dc
MxAtomId* g_infomainScript = NULL;
// GLOBAL: LEGO1 0x100f454c

View file

@ -127,10 +127,9 @@ MxLong LegoRaceMap::Notify(MxParam& p_param)
MxNotificationParam& param = (MxNotificationParam&) p_param;
if (param.GetNotification() == c_notificationControl &&
m_Map_Ctl->GetAction()->GetObjectId() ==
((LegoControlManagerNotificationParam&) p_param).GetClickedObjectId()) {
m_Map_Ctl->GetAction()->GetObjectId() == ((LegoControlManagerNotificationParam&) p_param).m_clickedObjectId) {
if (((LegoControlManagerNotificationParam&) p_param).GetUnknown0x28() == 1) {
if (((LegoControlManagerNotificationParam&) p_param).m_unk0x28 == 1) {
m_unk0x08 = TRUE;
FUN_1005d4b0();
m_stillPresenter->Enable(TRUE);

View file

@ -87,8 +87,8 @@ MxLong ElevatorBottom::HandleControl(LegoControlManagerNotificationParam& p_para
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case ElevbottScript::c_LeftArrow_Ctl:
m_destLocation = LegoGameState::e_infodoor;
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);

View file

@ -387,10 +387,10 @@ MxLong GasStation::HandleButtonDown(LegoControlManagerNotificationParam& p_param
// FUNCTION: BETA10 0x10029445
MxLong GasStation::HandleControl(LegoControlManagerNotificationParam& p_param)
{
if (p_param.GetUnknown0x28() == 1) {
if (p_param.m_unk0x28 == 1) {
MxDSAction action;
switch (p_param.GetClickedObjectId()) {
switch (p_param.m_clickedObjectId) {
case GarageScript::c_LeftArrow_Ctl:
case GarageScript::c_RightArrow_Ctl:
m_state->m_unk0x14 = 0;

View file

@ -553,8 +553,8 @@ MxLong Hospital::HandleButtonDown(LegoControlManagerNotificationParam& p_param)
// FUNCTION: LEGO1 0x10075f90
MxBool Hospital::HandleControl(LegoControlManagerNotificationParam& p_param)
{
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case HospitalScript::c_Info_Ctl:
BackgroundAudioManager()->RaiseVolume();
DeleteObjects(&m_atomId, HospitalScript::c_hho002cl_RunAnim, HospitalScript::c_hho006cl_RunAnim);

View file

@ -129,7 +129,7 @@ InfomainScript::Script g_bricksterDialogue[2] = {
Infocenter::Infocenter()
{
m_selectedCharacter = e_noCharacter;
m_unk0x11c = NULL;
m_dragPresenter = NULL;
m_infocenterState = NULL;
m_frame = NULL;
m_destLocation = LegoGameState::e_undefined;
@ -190,12 +190,12 @@ MxResult Infocenter::Create(MxDSAction& p_dsAction)
m_infocenterState = (InfocenterState*) GameState()->GetState("InfocenterState");
if (!m_infocenterState) {
m_infocenterState = (InfocenterState*) GameState()->CreateState("InfocenterState");
m_infocenterState->SetUnknown0x74(3);
m_infocenterState->m_unk0x74 = 3;
}
else {
if (m_infocenterState->GetUnknown0x74() != 8 && m_infocenterState->GetUnknown0x74() != 4 &&
m_infocenterState->GetUnknown0x74() != 15) {
m_infocenterState->SetUnknown0x74(2);
if (m_infocenterState->m_unk0x74 != 8 && m_infocenterState->m_unk0x74 != 4 &&
m_infocenterState->m_unk0x74 != 15) {
m_infocenterState->m_unk0x74 = 2;
}
MxS16 count, i;
@ -217,7 +217,7 @@ MxResult Infocenter::Create(MxDSAction& p_dsAction)
GameState()->m_currentArea = LegoGameState::e_infomain;
GameState()->StopArea(LegoGameState::e_previousArea);
if (m_infocenterState->GetUnknown0x74() == 4) {
if (m_infocenterState->m_unk0x74 == 4) {
LegoGameState* state = GameState();
state->SetPreviousArea(GameState()->GetUnknown0x42c());
}
@ -266,9 +266,9 @@ MxLong Infocenter::Notify(MxParam& p_param)
StopBookAnimation();
m_bookAnimationTimer = 0;
if (m_infocenterState->GetUnknown0x74() == 0x0c) {
if (m_infocenterState->m_unk0x74 == 0x0c) {
StartCredits();
m_infocenterState->SetUnknown0x74(0xd);
m_infocenterState->m_unk0x74 = 0xd;
}
else if (m_destLocation != 0) {
BackgroundAudioManager()->RaiseVolume();
@ -339,7 +339,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
m_unk0x1d6 = 0;
}
switch (m_infocenterState->GetUnknown0x74()) {
switch (m_infocenterState->m_unk0x74) {
case 0:
switch (m_currentCutscene) {
case e_legoMovie:
@ -350,13 +350,13 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
return 1;
case e_badEndMovie:
StopCutscene();
m_infocenterState->SetUnknown0x74(11);
m_infocenterState->m_unk0x74 = 11;
PlayAction(InfomainScript::c_tic092in_RunAnim);
m_currentCutscene = e_noIntro;
return 1;
case e_goodEndMovie:
StopCutscene();
m_infocenterState->SetUnknown0x74(11);
m_infocenterState->m_unk0x74 = 11;
PlayAction(InfomainScript::c_tic089in_RunAnim);
m_currentCutscene = e_noIntro;
return 1;
@ -364,7 +364,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
// default / 2nd case probably?
StopCutscene();
m_infocenterState->SetUnknown0x74(11);
m_infocenterState->m_unk0x74 = 11;
PlayAction(InfomainScript::c_iic001in_RunAnim);
m_currentCutscene = e_noIntro;
@ -374,7 +374,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
}
break;
case 1:
m_infocenterState->SetUnknown0x74(11);
m_infocenterState->m_unk0x74 = 11;
switch (m_currentCutscene) {
case e_badEndMovie:
@ -398,7 +398,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
if (action->GetObjectId() == InfomainScript::c_GoTo_RegBook ||
action->GetObjectId() == InfomainScript::c_GoTo_RegBook_Red) {
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
m_infocenterState->SetUnknown0x74(14);
m_infocenterState->m_unk0x74 = 14;
return 1;
}
break;
@ -408,7 +408,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
GameState()->SetActor(m_selectedCharacter);
}
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
m_infocenterState->SetUnknown0x74(14);
m_infocenterState->m_unk0x74 = 14;
return 1;
}
break;
@ -422,7 +422,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
PlayMusic(JukeboxScript::c_InformationCenter_Music);
}
m_infocenterState->SetUnknown0x74(2);
m_infocenterState->m_unk0x74 = 2;
SetROIVisible("infoman", TRUE);
return 1;
case 12:
@ -452,13 +452,13 @@ void Infocenter::ReadyWorld()
bg->Enable(TRUE);
InitializeBitmaps();
switch (m_infocenterState->GetUnknown0x74()) {
switch (m_infocenterState->m_unk0x74) {
case 3:
PlayCutscene(e_legoMovie, TRUE);
m_infocenterState->SetUnknown0x74(0);
m_infocenterState->m_unk0x74 = 0;
break;
case 4:
m_infocenterState->SetUnknown0x74(2);
m_infocenterState->m_unk0x74 = 2;
if (!m_infocenterState->HasRegistered()) {
m_bookAnimationTimer = 1;
}
@ -485,7 +485,7 @@ void Infocenter::ReadyWorld()
m_bookAnimationTimer = 1;
}
m_infocenterState->SetUnknown0x74(11);
m_infocenterState->m_unk0x74 = 11;
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
break;
}
@ -495,7 +495,7 @@ void Infocenter::ReadyWorld()
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
break;
case 0xf:
m_infocenterState->SetUnknown0x74(2);
m_infocenterState->m_unk0x74 = 2;
if (!m_infocenterState->HasRegistered()) {
m_bookAnimationTimer = 1;
}
@ -507,7 +507,7 @@ void Infocenter::ReadyWorld()
}
return;
case LegoGameState::e_act2: {
if (m_infocenterState->GetUnknown0x74() == 8) {
if (m_infocenterState->m_unk0x74 == 8) {
PlayMusic(JukeboxScript::c_InformationCenter_Music);
bgRed->Enable(TRUE);
PlayAction(InfomainScript::c_iic043in_RunAnim);
@ -521,11 +521,11 @@ void Infocenter::ReadyWorld()
if (state && state->GetUnknown0x08() == 0x68) {
bg->Enable(TRUE);
PlayCutscene(e_badEndMovie, TRUE);
m_infocenterState->SetUnknown0x74(0);
m_infocenterState->m_unk0x74 = 0;
return;
}
if (m_infocenterState->GetUnknown0x74() == 4) {
if (m_infocenterState->m_unk0x74 == 4) {
bgRed->Enable(TRUE);
if (GameState()->GetCurrentAct() == GameState()->GetLoadedAct()) {
@ -534,7 +534,7 @@ void Infocenter::ReadyWorld()
GameState()->m_currentArea = LegoGameState::e_infomain;
}
m_infocenterState->SetUnknown0x74(5);
m_infocenterState->m_unk0x74 = 5;
m_destLocation = LegoGameState::e_act2main;
InfomainScript::Script script =
@ -554,7 +554,7 @@ void Infocenter::ReadyWorld()
break;
}
case LegoGameState::e_act3: {
if (m_infocenterState->GetUnknown0x74() == 8) {
if (m_infocenterState->m_unk0x74 == 8) {
PlayMusic(JukeboxScript::c_InformationCenter_Music);
bgRed->Enable(TRUE);
PlayAction(InfomainScript::c_iic043in_RunAnim);
@ -569,19 +569,19 @@ void Infocenter::ReadyWorld()
if (state->GetUnknown0x08() == 3) {
bg->Enable(TRUE);
PlayCutscene(e_badEndMovie, TRUE);
m_infocenterState->SetUnknown0x74(0);
m_infocenterState->m_unk0x74 = 0;
return;
}
if (state && state->GetUnknown0x08() == 2) {
bg->Enable(TRUE);
PlayCutscene(e_goodEndMovie, TRUE);
m_infocenterState->SetUnknown0x74(0);
m_infocenterState->m_unk0x74 = 0;
return;
}
}
if (m_infocenterState->GetUnknown0x74() == 4) {
if (m_infocenterState->m_unk0x74 == 4) {
bgRed->Enable(TRUE);
if (GameState()->GetCurrentAct() == GameState()->GetLoadedAct()) {
@ -590,7 +590,7 @@ void Infocenter::ReadyWorld()
GameState()->m_currentArea = LegoGameState::e_infomain;
}
m_infocenterState->SetUnknown0x74(5);
m_infocenterState->m_unk0x74 = 5;
m_destLocation = LegoGameState::e_act3script;
InfomainScript::Script script =
@ -611,7 +611,7 @@ void Infocenter::ReadyWorld()
}
}
m_infocenterState->SetUnknown0x74(11);
m_infocenterState->m_unk0x74 = 11;
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
}
@ -700,20 +700,21 @@ void Infocenter::InitializeBitmaps()
}
// FUNCTION: LEGO1 0x1006fd00
// FUNCTION: BETA10 0x1002f808
MxU8 Infocenter::HandleMouseMove(MxS32 p_x, MxS32 p_y)
{
if (m_unk0x11c) {
if (!m_unk0x11c->IsEnabled()) {
MxS32 oldDisplayZ = m_unk0x11c->GetDisplayZ();
if (m_dragPresenter) {
if (!m_dragPresenter->IsEnabled()) {
MxS32 oldDisplayZ = m_dragPresenter->GetDisplayZ();
m_unk0x11c->SetDisplayZ(1000);
m_dragPresenter->SetDisplayZ(1000);
VideoManager()->SortPresenterList();
m_unk0x11c->Enable(TRUE);
m_unk0x11c->SetPosition(p_x, p_y);
m_unk0x11c->SetDisplayZ(oldDisplayZ);
m_dragPresenter->Enable(TRUE);
m_dragPresenter->SetPosition(p_x, p_y);
m_dragPresenter->SetDisplayZ(oldDisplayZ);
}
else {
m_unk0x11c->SetPosition(p_x, p_y);
m_dragPresenter->SetPosition(p_x, p_y);
}
FUN_10070d10(p_x, p_y);
@ -775,10 +776,10 @@ MxLong Infocenter::HandleKeyPress(MxS8 p_key)
// FUNCTION: BETA10 0x1002fa12
MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
{
if (m_unk0x11c) {
if (m_dragPresenter) {
MxControlPresenter* control = InputManager()->GetControlManager()->FUN_100294e0(p_x - 1, p_y - 1);
switch (m_unk0x11c->GetAction()->GetObjectId()) {
switch (m_dragPresenter->GetAction()->GetObjectId()) {
case InfomainScript::c_PepperHot_Bitmap:
m_selectedCharacter = e_pepper;
break;
@ -908,8 +909,8 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
}
}
m_unk0x11c->Enable(FALSE);
m_unk0x11c = NULL;
m_dragPresenter->Enable(FALSE);
m_dragPresenter = NULL;
if (m_infocenterState->m_unk0x74 == 5) {
InfomainScript::Script dialogueToPlay;
@ -967,9 +968,10 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
}
// FUNCTION: LEGO1 0x10070370
// FUNCTION: BETA10 0x1002ffd4
MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
{
if (p_param.GetUnknown0x28() == 1) {
if (p_param.m_unk0x28 == 1) {
m_infoManDialogueTimer = 0;
InfomainScript::Script actionToPlay = InfomainScript::c_noneInfomain;
@ -978,9 +980,9 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
LegoGameState* state = GameState();
switch (p_param.GetClickedObjectId()) {
switch (p_param.m_clickedObjectId) {
case InfomainScript::c_LeftArrow_Ctl:
m_infocenterState->SetUnknown0x74(14);
m_infocenterState->m_unk0x74 = 14;
StopCurrentAction();
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
@ -995,7 +997,7 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
break;
case InfomainScript::c_RightArrow_Ctl:
m_infocenterState->SetUnknown0x74(14);
m_infocenterState->m_unk0x74 = 14;
StopCurrentAction();
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
@ -1014,10 +1016,10 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
m_radio.Stop();
break;
case InfomainScript::c_Door_Ctl:
if (m_infocenterState->GetUnknown0x74() != 8) {
if (m_infocenterState->m_unk0x74 != 8) {
actionToPlay = InfomainScript::c_iic043in_RunAnim;
m_radio.Stop();
m_infocenterState->SetUnknown0x74(8);
m_infocenterState->m_unk0x74 = 8;
}
break;
@ -1048,52 +1050,56 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
case InfomainScript::c_BigInfo_Ctl:
switch (state->GetCurrentAct()) {
case LegoGameState::e_act1:
switch (state->GetPreviousArea()) {
case LegoGameState::e_infodoor:
case LegoGameState::e_regbook:
case LegoGameState::e_infoscor:
m_infocenterState->SetUnknown0x74(5);
m_destLocation = state->GetPreviousArea();
actionToPlay =
(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct())
.Next();
m_radio.Stop();
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
break;
case LegoGameState::e_unk4:
if (state->GetActorId() != LegoActor::c_none) {
if (m_infocenterState->HasRegistered()) {
m_infocenterState->SetUnknown0x74(5);
m_destLocation = state->GetPreviousArea();
actionToPlay = (InfomainScript::Script) m_infocenterState
->GetLeaveDialogue(GameState()->GetCurrentAct())
.Next();
m_radio.Stop();
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
}
else {
PlayAction(InfomainScript::c_iic007in_PlayWav);
m_infocenterState->SetUnknown0x74(2);
if (state->GetPreviousArea()) {
switch (state->GetPreviousArea()) {
case LegoGameState::e_infodoor:
case LegoGameState::e_regbook:
case LegoGameState::e_infoscor:
m_infocenterState->m_unk0x74 = 5;
m_destLocation = state->GetPreviousArea();
actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
m_radio.Stop();
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
break;
case LegoGameState::e_elevbott:
case LegoGameState::e_elevride:
case LegoGameState::e_elevride2:
case LegoGameState::e_elevopen:
case LegoGameState::e_seaview:
case LegoGameState::e_observe:
case LegoGameState::e_elevdown:
break;
default:
if (state->GetActorId() != LegoActor::c_none) {
if (!m_infocenterState->HasRegistered()) {
PlayAction(InfomainScript::c_iic007in_PlayWav);
m_infocenterState->m_unk0x74 = 2;
}
else {
m_infocenterState->m_unk0x74 = 5;
m_destLocation = state->m_previousArea;
actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
m_radio.Stop();
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
}
}
break;
}
break;
}
break;
case LegoGameState::e_act2:
m_infocenterState->SetUnknown0x74(5);
m_infocenterState->m_unk0x74 = 5;
m_destLocation = LegoGameState::e_act2main;
actionToPlay =
(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct()).Next();
actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
break;
case LegoGameState::e_act3:
m_infocenterState->SetUnknown0x74(5);
m_infocenterState->m_unk0x74 = 5;
m_destLocation = LegoGameState::e_act3script;
actionToPlay =
(InfomainScript::Script) m_infocenterState->GetLeaveDialogue(GameState()->GetCurrentAct()).Next();
actionToPlay = (InfomainScript::Script) m_infocenterState->GetNextLeaveDialogue();
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
break;
@ -1101,11 +1107,11 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
break;
case InfomainScript::c_Book_Ctl:
m_destLocation = LegoGameState::e_regbook;
m_infocenterState->SetUnknown0x74(4);
m_infocenterState->m_unk0x74 = 4;
actionToPlay = GameState()->GetCurrentAct() != LegoGameState::e_act1 ? InfomainScript::c_GoTo_RegBook_Red
: InfomainScript::c_GoTo_RegBook;
m_radio.Stop();
GameState()->SetUnknown0x42c(GameState()->GetPreviousArea());
GameState()->m_unk0x42c = GameState()->GetPreviousArea();
InputManager()->DisableInputProcessing();
break;
case InfomainScript::c_Mama_Ctl:
@ -1135,7 +1141,8 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
}
if (characterBitmap != InfomainScript::c_noneInfomain) {
m_unk0x11c = (MxStillPresenter*) Find(m_atomId, characterBitmap);
m_dragPresenter = (MxStillPresenter*) Find(m_atomId, characterBitmap);
assert(m_dragPresenter);
}
}
@ -1143,19 +1150,21 @@ MxU8 Infocenter::HandleControl(LegoControlManagerNotificationParam& p_param)
}
// FUNCTION: LEGO1 0x10070870
// FUNCTION: BETA10 0x1003039e
MxLong Infocenter::HandleNotification0(MxNotificationParam& p_param)
{
// MxLong result
// This function has changed significantly since BETA10
MxCore* sender = p_param.GetSender();
if (sender == NULL) {
if (m_infocenterState->GetUnknown0x74() == 8) {
if (m_infocenterState->m_unk0x74 == 8) {
m_infoManDialogueTimer = 0;
StopCutscene();
PlayAction(InfomainScript::c_iic043in_RunAnim);
}
}
else if (sender->IsA("MxEntity") && m_infocenterState->GetUnknown0x74() != 5 && m_infocenterState->GetUnknown0x74() != 12) {
else if (sender->IsA("MxEntity") && m_infocenterState->m_unk0x74 != 5 && m_infocenterState->m_unk0x74 != 12) {
switch (((MxEntity*) sender)->GetEntityId()) {
case 5: {
m_infoManDialogueTimer = 0;
@ -1174,21 +1183,21 @@ MxLong Infocenter::HandleNotification0(MxNotificationParam& p_param)
return 1;
}
case 6:
if (m_infocenterState->GetUnknown0x74() == 8) {
if (m_infocenterState->m_unk0x74 == 8) {
StopCurrentAction();
SetROIVisible(g_object2x4red, FALSE);
SetROIVisible(g_object2x4grn, FALSE);
m_infocenterState->SetUnknown0x74(2);
m_infocenterState->m_unk0x74 = 2;
PlayAction(InfomainScript::c_iicb28in_RunAnim);
return 1;
}
case 7:
if (m_infocenterState->GetUnknown0x74() == 8) {
if (m_infocenterState->m_unk0x74 == 8) {
if (m_infocenterState->HasRegistered()) {
GameState()->Save(0);
}
m_infocenterState->SetUnknown0x74(12);
m_infocenterState->m_unk0x74 = 12;
PlayAction(InfomainScript::c_iic046in_RunAnim);
InputManager()->DisableInputProcessing();
InputManager()->SetUnknown336(TRUE);
@ -1314,6 +1323,7 @@ MxBool Infocenter::VTable0x5c()
}
// FUNCTION: LEGO1 0x10070d10
// FUNCTION: BETA10 0x100307d4
void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
{
MxS16 i;
@ -1345,6 +1355,7 @@ void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
}
// FUNCTION: LEGO1 0x10070dc0
// FUNCTION: BETA10 0x10030911
void Infocenter::UpdateFrameHot(MxBool p_display)
{
if (p_display) {
@ -1409,7 +1420,7 @@ void Infocenter::Reset()
CharacterManager()->ReleaseAllActors();
GameState()->SetCurrentAct(LegoGameState::e_act1);
GameState()->SetPreviousArea(LegoGameState::e_undefined);
GameState()->SetUnknown0x42c(LegoGameState::e_undefined);
GameState()->m_unk0x42c = LegoGameState::e_undefined;
InitializeBitmaps();
m_selectedCharacter = e_pepper;
@ -1427,17 +1438,17 @@ void Infocenter::Reset()
MxBool Infocenter::Escape()
{
if (m_infocenterState != NULL) {
MxU32 val = m_infocenterState->GetUnknown0x74();
MxU32 val = m_infocenterState->m_unk0x74;
if (val == 0) {
StopCutscene();
m_infocenterState->SetUnknown0x74(1);
m_infocenterState->m_unk0x74 = 1;
}
else if (val == 13) {
StopCredits();
}
else if (val != 8) {
m_infocenterState->SetUnknown0x74(8);
m_infocenterState->m_unk0x74 = 8;
#ifdef COMPAT_MODE
{
@ -1517,6 +1528,7 @@ void Infocenter::StopCredits()
}
// FUNCTION: LEGO1 0x10071300
// FUNCTION: BETA10 0x1002ee8c
void Infocenter::PlayAction(InfomainScript::Script p_script)
{
MxDSAction action;

View file

@ -96,10 +96,10 @@ MxLong InfocenterDoor::HandleControl(LegoControlManagerNotificationParam& p_para
{
MxLong result = 0;
if (p_param.GetUnknown0x28() == 1) {
if (p_param.m_unk0x28 == 1) {
DeleteObjects(&m_atomId, InfodoorScript::c_iic037in_PlayWav, 510);
switch (p_param.GetClickedObjectId()) {
switch (p_param.m_clickedObjectId) {
case InfodoorScript::c_LeftArrow_Ctl:
m_destLocation = LegoGameState::e_infoscor;
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);

View file

@ -289,10 +289,10 @@ void Isle::ReadyWorld()
// FUNCTION: LEGO1 0x10031030
MxLong Isle::HandleControl(LegoControlManagerNotificationParam& p_param)
{
if (p_param.GetUnknown0x28() == 1) {
if (p_param.m_unk0x28 == 1) {
MxDSAction action;
switch (p_param.GetClickedObjectId()) {
switch (p_param.m_clickedObjectId) {
case IsleScript::c_ElevRide_Info_Ctl:
m_act1state->m_unk0x018 = 2;

View file

@ -101,8 +101,8 @@ void Police::ReadyWorld()
// FUNCTION: LEGO1 0x1005e550
MxLong Police::HandleControl(LegoControlManagerNotificationParam& p_param)
{
if (p_param.GetUnknown0x28() == 1) {
switch (p_param.GetClickedObjectId()) {
if (p_param.m_unk0x28 == 1) {
switch (p_param.m_clickedObjectId) {
case PoliceScript::c_LeftArrow_Ctl:
case PoliceScript::c_RightArrow_Ctl:
if (m_policeState->GetUnknown0x0c() == 1) {

View file

@ -226,18 +226,18 @@ MxLong RegistrationBook::HandleKeyPress(MxU8 p_key)
// FUNCTION: LEGO1 0x100774a0
MxLong RegistrationBook::HandleControl(LegoControlManagerNotificationParam& p_param)
{
MxS16 unk0x28 = p_param.GetUnknown0x28();
MxS16 unk0x28 = p_param.m_unk0x28;
if (unk0x28 >= 1 && unk0x28 <= 28) {
if (p_param.GetClickedObjectId() == RegbookScript::c_Alphabet_Ctl) {
if (p_param.m_clickedObjectId == RegbookScript::c_Alphabet_Ctl) {
if (unk0x28 == 28) {
DeleteObjects(&m_atomId, RegbookScript::c_iic006in_RunAnim, RegbookScript::c_iic008in_PlayWav);
if (GameState()->GetCurrentAct() == LegoGameState::e_act1) {
m_infocenterState->SetUnknown0x74(15);
m_infocenterState->m_unk0x74 = 15;
}
else {
m_infocenterState->SetUnknown0x74(2);
m_infocenterState->m_unk0x74 = 2;
}
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);
@ -256,7 +256,7 @@ MxLong RegistrationBook::HandleControl(LegoControlManagerNotificationParam& p_pa
MxS16 i;
for (i = 0; i < 10; i++) {
if (m_checkmark[i]->GetAction()->GetObjectId() == p_param.GetClickedObjectId()) {
if (m_checkmark[i]->GetAction()->GetObjectId() == p_param.m_clickedObjectId) {
break;
}
}
@ -318,7 +318,7 @@ void RegistrationBook::FUN_100775c0(MxS16 p_playerIndex)
break;
}
m_infocenterState->SetUnknown0x74(4);
m_infocenterState->m_unk0x74 = 4;
if (m_unk0x2b8 == 0 && !m_unk0x2c1) {
DeleteObjects(&m_atomId, RegbookScript::c_iic006in_RunAnim, RegbookScript::c_iic008in_PlayWav);
TransitionManager()->StartTransition(MxTransitionManager::e_mosaic, 50, FALSE, FALSE);

View file

@ -165,10 +165,10 @@ void Score::ReadyWorld()
// FUNCTION: LEGO1 0x100016d0
MxLong Score::FUN_100016d0(LegoControlManagerNotificationParam& p_param)
{
MxS16 unk0x28 = p_param.GetUnknown0x28();
MxS16 unk0x28 = p_param.m_unk0x28;
if (unk0x28 == 1 || p_param.GetClickedObjectId() == InfoscorScript::c_LegoBox_Ctl) {
switch (p_param.GetClickedObjectId()) {
if (unk0x28 == 1 || p_param.m_clickedObjectId == InfoscorScript::c_LegoBox_Ctl) {
switch (p_param.m_clickedObjectId) {
case InfoscorScript::c_LeftArrow_Ctl:
m_destLocation = LegoGameState::e_infomain;
DeleteScript();

View file

@ -123,6 +123,8 @@ public:
MxPoint32 GetLocation() const { return this->m_location; }
MxS32 GetX() const { return this->m_location.GetX(); }
MxS32 GetY() const { return this->m_location.GetY(); }
// FUNCTION: BETA10 0x10031b70
MxS32 GetDisplayZ() const { return this->m_displayZ; }
// FUNCTION: BETA10 0x10028430
@ -135,6 +137,7 @@ public:
m_compositePresenter = p_compositePresenter;
}
// FUNCTION: BETA10 0x10031b40
void SetDisplayZ(MxS32 p_displayZ) { m_displayZ = p_displayZ; }
// SYNTHETIC: LEGO1 0x1000c070

View file

@ -96,6 +96,7 @@ void MxVideoManager::UpdateRegion()
}
// FUNCTION: LEGO1 0x100be440
// FUNCTION: BETA10 0x1012ce5e
void MxVideoManager::SortPresenterList()
{
if (this->m_presenters->GetCount() <= 1) {