Clear unknowns in Infocenter and InfocenterMapEntry (#1609)

This commit is contained in:
Fabian Neundorf 2025-07-08 02:35:21 +02:00 committed by GitHub
parent 8ffe7b776a
commit c7fda26cf4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 61 additions and 51 deletions

View File

@ -78,10 +78,20 @@ public:
// SIZE 0x18
struct InfocenterMapEntry {
enum {
e_infocenter = 3,
e_jetrace = 10,
e_carrace = 11,
e_pizzeria = 12,
e_garage = 13,
e_hospital = 14,
e_police = 15,
};
InfocenterMapEntry();
MxStillPresenter* m_destCtl; // 0x00
undefined4 m_unk0x04; // 0x04
MxU32 m_target; // 0x04
MxRect<MxS32> m_area; // 0x08
};
@ -154,7 +164,7 @@ private:
void PlayCutscene(Cutscene p_entityId, MxBool p_scale);
void StopCutscene();
void FUN_10070d10(MxS32 p_x, MxS32 p_y);
void UpdateEnabledGlowControl(MxS32 p_x, MxS32 p_y);
void StartCredits();
void StopCredits();
@ -173,12 +183,12 @@ private:
Radio m_radio; // 0x10c
MxStillPresenter* m_dragPresenter; // 0x11c
InfocenterMapEntry m_glowInfo[7]; // 0x120
MxS16 m_unk0x1c8; // 0x1c8
MxS16 m_enabledGlowControl; // 0x1c8
MxStillPresenter* m_frame; // 0x1cc
MxS16 m_infoManDialogueTimer; // 0x1d0
MxS16 m_bookAnimationTimer; // 0x1d2
MxU16 m_unk0x1d4; // 0x1d4
MxS16 m_unk0x1d6; // 0x1d6
MxU16 m_playingMovieCounter; // 0x1d4
MxS16 m_bigInfoBlinkTimer; // 0x1d6
};
#endif // INFOCENTER_H

View File

@ -138,14 +138,14 @@ Infocenter::Infocenter()
memset(&m_glowInfo, 0, sizeof(m_glowInfo));
m_unk0x1c8 = -1;
m_enabledGlowControl = -1;
SetAppCursor(e_cursorBusy);
NotificationManager()->Register(this);
m_infoManDialogueTimer = 0;
m_bookAnimationTimer = 0;
m_unk0x1d4 = 0;
m_unk0x1d6 = 0;
m_playingMovieCounter = 0;
m_bigInfoBlinkTimer = 0;
}
// FUNCTION: LEGO1 0x1006ec80
@ -296,11 +296,11 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
action->GetObjectId() == InfomainScript::c_Pepper_All_Movie ||
action->GetObjectId() == InfomainScript::c_Nick_All_Movie ||
action->GetObjectId() == InfomainScript::c_Laura_All_Movie)) {
if (m_unk0x1d4) {
m_unk0x1d4--;
if (m_playingMovieCounter) {
m_playingMovieCounter--;
}
if (!m_unk0x1d4) {
if (!m_playingMovieCounter) {
PlayMusic(JukeboxScript::c_InformationCenter_Music);
GameState()->SetActor(m_selectedCharacter);
@ -336,7 +336,7 @@ MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
if (action->GetObjectId() == InfomainScript::c_iicx26in_RunAnim) {
ControlManager()->UpdateEnabledChild(InfomainScript::c_BigInfo_Ctl, action->GetAtomId().GetInternal(), 0);
m_unk0x1d6 = 0;
m_bigInfoBlinkTimer = 0;
}
switch (m_infocenterState->m_unk0x74) {
@ -441,8 +441,8 @@ void Infocenter::ReadyWorld()
{
m_infoManDialogueTimer = 0;
m_bookAnimationTimer = 0;
m_unk0x1d4 = 0;
m_unk0x1d6 = 0;
m_playingMovieCounter = 0;
m_bigInfoBlinkTimer = 0;
MxStillPresenter* bg = (MxStillPresenter*) Find("MxStillPresenter", "Background_Bitmap");
MxStillPresenter* bgRed = (MxStillPresenter*) Find("MxStillPresenter", "BackgroundRed_Bitmap");
@ -474,8 +474,8 @@ void Infocenter::ReadyWorld()
InfomainScript::Script script = m_infocenterState->GetNextReturnDialogue();
PlayAction(script);
if (script == InfomainScript::c_iicx26in_RunAnim) {
m_unk0x1d6 = 1;
if (script == InfomainScript::c_iicx26in_RunAnim) { // want to get back? Click on I!
m_bigInfoBlinkTimer = 1;
}
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
@ -631,37 +631,37 @@ void Infocenter::InitializeBitmaps()
m_glowInfo[0].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Info_A_Bitmap");
assert(m_glowInfo[0].m_destCtl);
m_glowInfo[0].m_area = MxRect<MxS32>(391, 182, 427, 230);
m_glowInfo[0].m_unk0x04 = 3;
m_glowInfo[0].m_target = InfocenterMapEntry::e_infocenter;
m_glowInfo[1].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Boat_A_Bitmap");
assert(m_glowInfo[1].m_destCtl);
m_glowInfo[1].m_area = MxRect<MxS32>(304, 225, 350, 268);
m_glowInfo[1].m_unk0x04 = 10;
m_glowInfo[1].m_target = InfocenterMapEntry::e_jetrace;
m_glowInfo[2].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Race_A_Bitmap");
assert(m_glowInfo[1].m_destCtl); // DECOMP: intentional typo
m_glowInfo[2].m_area = MxRect<MxS32>(301, 133, 347, 181);
m_glowInfo[2].m_unk0x04 = 11;
m_glowInfo[2].m_target = InfocenterMapEntry::e_carrace;
m_glowInfo[3].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Pizza_A_Bitmap");
assert(m_glowInfo[3].m_destCtl);
m_glowInfo[3].m_area = MxRect<MxS32>(289, 182, 335, 225);
m_glowInfo[3].m_unk0x04 = 12;
m_glowInfo[3].m_target = InfocenterMapEntry::e_pizzeria;
m_glowInfo[4].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Gas_A_Bitmap");
assert(m_glowInfo[4].m_destCtl);
m_glowInfo[4].m_area = MxRect<MxS32>(350, 161, 391, 209);
m_glowInfo[4].m_unk0x04 = 13;
m_glowInfo[4].m_target = InfocenterMapEntry::e_garage;
m_glowInfo[5].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Med_A_Bitmap");
assert(m_glowInfo[5].m_destCtl);
m_glowInfo[5].m_area = MxRect<MxS32>(392, 130, 438, 176);
m_glowInfo[5].m_unk0x04 = 14;
m_glowInfo[5].m_target = InfocenterMapEntry::e_hospital;
m_glowInfo[6].m_destCtl = (MxStillPresenter*) Find("MxStillPresenter", "Cop_A_Bitmap");
assert(m_glowInfo[6].m_destCtl);
m_glowInfo[6].m_area = MxRect<MxS32>(396, 229, 442, 272);
m_glowInfo[6].m_unk0x04 = 15;
m_glowInfo[6].m_target = InfocenterMapEntry::e_police;
m_frame = (MxStillPresenter*) Find("MxStillPresenter", "FrameHot_Bitmap");
assert(m_frame);
@ -687,7 +687,7 @@ MxU8 Infocenter::HandleMouseMove(MxS32 p_x, MxS32 p_y)
m_dragPresenter->SetPosition(p_x, p_y);
}
FUN_10070d10(p_x, p_y);
UpdateEnabledGlowControl(p_x, p_y);
return 1;
}
@ -776,7 +776,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
m_radio.Stop();
BackgroundAudioManager()->Stop();
PlayAction(InfomainScript::c_Pepper_All_Movie);
m_unk0x1d4++;
m_playingMovieCounter++;
}
break;
case InfomainScript::c_Mama_Ctl:
@ -784,7 +784,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
m_radio.Stop();
BackgroundAudioManager()->Stop();
PlayAction(InfomainScript::c_Mama_All_Movie);
m_unk0x1d4++;
m_playingMovieCounter++;
}
break;
case InfomainScript::c_Papa_Ctl:
@ -792,7 +792,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
m_radio.Stop();
BackgroundAudioManager()->Stop();
PlayAction(InfomainScript::c_Papa_All_Movie);
m_unk0x1d4++;
m_playingMovieCounter++;
}
break;
case InfomainScript::c_Nick_Ctl:
@ -800,7 +800,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
m_radio.Stop();
BackgroundAudioManager()->Stop();
PlayAction(InfomainScript::c_Nick_All_Movie);
m_unk0x1d4++;
m_playingMovieCounter++;
}
break;
case InfomainScript::c_Laura_Ctl:
@ -808,17 +808,17 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
m_radio.Stop();
BackgroundAudioManager()->Stop();
PlayAction(InfomainScript::c_Laura_All_Movie);
m_unk0x1d4++;
m_playingMovieCounter++;
}
break;
}
}
else {
if (m_unk0x1c8 != -1) {
if (m_enabledGlowControl != -1) {
m_infoManDialogueTimer = 0;
switch (m_glowInfo[m_unk0x1c8].m_unk0x04) {
case 3:
switch (m_glowInfo[m_enabledGlowControl].m_target) {
case InfocenterMapEntry::e_infocenter:
GameState()->SetActor(m_selectedCharacter);
switch (m_selectedCharacter) {
@ -839,37 +839,37 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
break;
}
break;
case 10:
case InfocenterMapEntry::e_jetrace:
if (m_selectedCharacter) {
m_destLocation = LegoGameState::e_jetraceExterior;
m_infocenterState->m_unk0x74 = 5;
}
break;
case 11:
case InfocenterMapEntry::e_carrace:
if (m_selectedCharacter) {
m_destLocation = LegoGameState::e_carraceExterior;
m_infocenterState->m_unk0x74 = 5;
}
break;
case 12:
case InfocenterMapEntry::e_pizzeria:
if (m_selectedCharacter) {
m_destLocation = LegoGameState::e_pizzeriaExterior;
m_infocenterState->m_unk0x74 = 5;
}
break;
case 13:
case InfocenterMapEntry::e_garage:
if (m_selectedCharacter) {
m_destLocation = LegoGameState::e_garageExterior;
m_infocenterState->m_unk0x74 = 5;
}
break;
case 14:
case InfocenterMapEntry::e_hospital:
if (m_selectedCharacter) {
m_destLocation = LegoGameState::e_hospitalExterior;
m_infocenterState->m_unk0x74 = 5;
}
break;
case 15:
case InfocenterMapEntry::e_police:
if (m_selectedCharacter) {
m_destLocation = LegoGameState::e_policeExterior;
m_infocenterState->m_unk0x74 = 5;
@ -931,7 +931,7 @@ MxU8 Infocenter::HandleButtonUp(MxS32 p_x, MxS32 p_y)
}
UpdateFrameHot(TRUE);
FUN_10070d10(0, 0);
UpdateEnabledGlowControl(0, 0);
}
return FALSE;
@ -1232,21 +1232,21 @@ MxResult Infocenter::Tickle()
m_bookAnimationTimer = 1;
}
if (m_unk0x1d6 != 0) {
m_unk0x1d6 += 100;
if (m_bigInfoBlinkTimer != 0) {
m_bigInfoBlinkTimer += 100;
if (m_unk0x1d6 > 3400 && m_unk0x1d6 < 3650) {
if (m_bigInfoBlinkTimer > 3400 && m_bigInfoBlinkTimer < 3650) {
ControlManager()->UpdateEnabledChild(InfomainScript::c_BigInfo_Ctl, m_atomId.GetInternal(), 1);
}
else if (m_unk0x1d6 > 3650 && m_unk0x1d6 < 3900) {
else if (m_bigInfoBlinkTimer > 3650 && m_bigInfoBlinkTimer < 3900) {
ControlManager()->UpdateEnabledChild(InfomainScript::c_BigInfo_Ctl, m_atomId.GetInternal(), 0);
}
else if (m_unk0x1d6 > 3900 && m_unk0x1d6 < 4150) {
else if (m_bigInfoBlinkTimer > 3900 && m_bigInfoBlinkTimer < 4150) {
ControlManager()->UpdateEnabledChild(InfomainScript::c_BigInfo_Ctl, m_atomId.GetInternal(), 1);
}
else if (m_unk0x1d6 > 4400) {
else if (m_bigInfoBlinkTimer > 4400) {
ControlManager()->UpdateEnabledChild(InfomainScript::c_BigInfo_Ctl, m_atomId.GetInternal(), 0);
m_unk0x1d6 = 0;
m_bigInfoBlinkTimer = 0;
}
}
@ -1295,7 +1295,7 @@ MxBool Infocenter::VTable0x5c()
// FUNCTION: LEGO1 0x10070d10
// FUNCTION: BETA10 0x100307d4
void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
void Infocenter::UpdateEnabledGlowControl(MxS32 p_x, MxS32 p_y)
{
MxS16 i;
for (i = 0; i < (MxS32) (sizeof(m_glowInfo) / sizeof(m_glowInfo[0])); i++) {
@ -1313,12 +1313,12 @@ void Infocenter::FUN_10070d10(MxS32 p_x, MxS32 p_y)
i = -1;
}
if (i != m_unk0x1c8) {
if (m_unk0x1c8 != -1) {
m_glowInfo[m_unk0x1c8].m_destCtl->Enable(FALSE);
if (i != m_enabledGlowControl) {
if (m_enabledGlowControl != -1) {
m_glowInfo[m_enabledGlowControl].m_destCtl->Enable(FALSE);
}
m_unk0x1c8 = i;
m_enabledGlowControl = i;
if (i != -1) {
m_glowInfo[i].m_destCtl->Enable(TRUE);
}