mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-26 17:36:12 -05:00
Implement Infocenter::HandleNotification0 (#514)
* Implement Infocenter::HandleNotification0 * Match * Match * Match * Match * Braces * Add enum constants
This commit is contained in:
parent
9e686e2a87
commit
17252b95f4
4 changed files with 91 additions and 13 deletions
|
@ -61,9 +61,17 @@ class Infocenter : public LegoWorld {
|
||||||
c_nickSelected = 33,
|
c_nickSelected = 33,
|
||||||
c_lauraSelected = 34,
|
c_lauraSelected = 34,
|
||||||
|
|
||||||
|
c_unk40 = 40,
|
||||||
|
c_unk41 = 41,
|
||||||
|
c_unk42 = 42,
|
||||||
|
c_unk43 = 43,
|
||||||
|
c_unk44 = 44,
|
||||||
|
|
||||||
c_goToRegBook = 70,
|
c_goToRegBook = 70,
|
||||||
c_goToRegBookRed = 71,
|
c_goToRegBookRed = 71,
|
||||||
|
|
||||||
|
c_unk499 = 499,
|
||||||
|
|
||||||
c_welcomeDialogue = 500,
|
c_welcomeDialogue = 500,
|
||||||
c_goodJobDialogue = 501,
|
c_goodJobDialogue = 501,
|
||||||
|
|
||||||
|
@ -127,6 +135,7 @@ class Infocenter : public LegoWorld {
|
||||||
|
|
||||||
c_gasCtlDescription = 555,
|
c_gasCtlDescription = 555,
|
||||||
c_medCtlDescription = 556,
|
c_medCtlDescription = 556,
|
||||||
|
c_unk557 = 557,
|
||||||
c_boatCtlDescription = 558,
|
c_boatCtlDescription = 558,
|
||||||
c_copCtlDescription = 559,
|
c_copCtlDescription = 559,
|
||||||
c_pizzaCtlDescription = 560,
|
c_pizzaCtlDescription = 560,
|
||||||
|
@ -182,8 +191,8 @@ class Infocenter : public LegoWorld {
|
||||||
MxU8 HandleMouseMove(MxS32 p_x, MxS32 p_y);
|
MxU8 HandleMouseMove(MxS32 p_x, MxS32 p_y);
|
||||||
MxU8 HandleButtonUp(MxS32 p_x, MxS32 p_y);
|
MxU8 HandleButtonUp(MxS32 p_x, MxS32 p_y);
|
||||||
MxU8 HandleClick(LegoControlManagerEvent& p_param);
|
MxU8 HandleClick(LegoControlManagerEvent& p_param);
|
||||||
MxLong HandleEndAction(MxParam& p_param);
|
MxLong HandleEndAction(MxEndActionNotificationParam& p_param);
|
||||||
MxLong HandleNotification0(MxParam&);
|
MxLong HandleNotification0(MxNotificationParam& p_param);
|
||||||
|
|
||||||
void UpdateFrameHot(MxBool p_display);
|
void UpdateFrameHot(MxBool p_display);
|
||||||
void FUN_10070e90();
|
void FUN_10070e90();
|
||||||
|
|
|
@ -30,6 +30,8 @@ class InfocenterState : public LegoState {
|
||||||
|
|
||||||
inline MxS16 GetInfocenterBufferSize() { return sizeof(m_buffer) / sizeof(m_buffer[0]); }
|
inline MxS16 GetInfocenterBufferSize() { return sizeof(m_buffer) / sizeof(m_buffer[0]); }
|
||||||
inline MxStillPresenter* GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
|
inline MxStillPresenter* GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; }
|
||||||
|
inline StateStruct& GetUnknown0x08() { return m_unk0x08; }
|
||||||
|
inline StateStruct& GetUnknown0x14() { return m_unk0x14; }
|
||||||
inline StateStruct& GetUnknown0x68() { return m_unk0x68; }
|
inline StateStruct& GetUnknown0x68() { return m_unk0x68; }
|
||||||
inline MxU32 GetUnknown0x74() { return m_unk0x74; }
|
inline MxU32 GetUnknown0x74() { return m_unk0x74; }
|
||||||
|
|
||||||
|
@ -39,7 +41,8 @@ class InfocenterState : public LegoState {
|
||||||
// InfocenterState::`scalar deleting destructor'
|
// InfocenterState::`scalar deleting destructor'
|
||||||
|
|
||||||
private:
|
private:
|
||||||
undefined m_unk0x08[0x18]; // 0x08
|
StateStruct m_unk0x08; // 0x08
|
||||||
|
StateStruct m_unk0x14; // 0x14
|
||||||
StateStruct m_unk0x20[3]; // 0x20
|
StateStruct m_unk0x20[3]; // 0x20
|
||||||
StateStruct m_unk0x44[3]; // 0x44
|
StateStruct m_unk0x44[3]; // 0x44
|
||||||
StateStruct m_unk0x68; // 0x68
|
StateStruct m_unk0x68; // 0x68
|
||||||
|
|
|
@ -32,6 +32,8 @@ class Radio : public MxCore {
|
||||||
void Play();
|
void Play();
|
||||||
void Stop();
|
void Stop();
|
||||||
|
|
||||||
|
inline RadioState* GetState() { return m_state; }
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x1002c970
|
// SYNTHETIC: LEGO1 0x1002c970
|
||||||
// Radio::`scalar deleting destructor'
|
// Radio::`scalar deleting destructor'
|
||||||
|
|
||||||
|
|
|
@ -106,10 +106,10 @@ MxLong Infocenter::Notify(MxParam& p_param)
|
||||||
if (m_worldStarted) {
|
if (m_worldStarted) {
|
||||||
switch (((MxNotificationParam&) p_param).GetNotification()) {
|
switch (((MxNotificationParam&) p_param).GetNotification()) {
|
||||||
case c_notificationType0:
|
case c_notificationType0:
|
||||||
result = HandleNotification0(p_param);
|
result = HandleNotification0((MxNotificationParam&) p_param);
|
||||||
break;
|
break;
|
||||||
case c_notificationEndAction:
|
case c_notificationEndAction:
|
||||||
result = HandleEndAction(p_param);
|
result = HandleEndAction((MxEndActionNotificationParam&) p_param);
|
||||||
break;
|
break;
|
||||||
case c_notificationKeyPress:
|
case c_notificationKeyPress:
|
||||||
result = HandleKeyPress(((LegoEventNotificationParam&) p_param).GetKey());
|
result = HandleKeyPress(((LegoEventNotificationParam&) p_param).GetKey());
|
||||||
|
@ -150,17 +150,17 @@ MxLong Infocenter::Notify(MxParam& p_param)
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x1006f080
|
// FUNCTION: LEGO1 0x1006f080
|
||||||
MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
MxLong Infocenter::HandleEndAction(MxEndActionNotificationParam& p_param)
|
||||||
{
|
{
|
||||||
MxDSAction* action = ((MxEndActionNotificationParam&) p_param).GetAction();
|
MxDSAction* action = p_param.GetAction();
|
||||||
if (action->GetAtomId() == *g_creditsScript && action->GetObjectId() == 499) {
|
if (action->GetAtomId() == *g_creditsScript && action->GetObjectId() == c_unk499) {
|
||||||
Lego()->CloseMainWindow();
|
Lego()->CloseMainWindow();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action->GetAtomId() == m_atom &&
|
if (action->GetAtomId() == m_atom &&
|
||||||
(action->GetObjectId() == 40 || action->GetObjectId() == 41 || action->GetObjectId() == 42 ||
|
(action->GetObjectId() == c_unk40 || action->GetObjectId() == c_unk41 || action->GetObjectId() == c_unk42 ||
|
||||||
action->GetObjectId() == 43 || action->GetObjectId() == 44)) {
|
action->GetObjectId() == c_unk43 || action->GetObjectId() == c_unk44)) {
|
||||||
if (m_unk0x1d4) {
|
if (m_unk0x1d4) {
|
||||||
m_unk0x1d4--;
|
m_unk0x1d4--;
|
||||||
}
|
}
|
||||||
|
@ -260,7 +260,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||||
BackgroundAudioManager()->RaiseVolume();
|
BackgroundAudioManager()->RaiseVolume();
|
||||||
return 1;
|
return 1;
|
||||||
case 4:
|
case 4:
|
||||||
if (action->GetObjectId() == 70 || action->GetObjectId() == 71) {
|
if (action->GetObjectId() == c_goToRegBook || action->GetObjectId() == c_goToRegBookRed) {
|
||||||
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE);
|
||||||
m_infocenterState->SetUnknown0x74(14);
|
m_infocenterState->SetUnknown0x74(14);
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -638,9 +638,73 @@ MxU8 Infocenter::HandleClick(LegoControlManagerEvent& p_param)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10070870
|
// FUNCTION: LEGO1 0x10070870
|
||||||
MxLong Infocenter::HandleNotification0(MxParam&)
|
MxLong Infocenter::HandleNotification0(MxNotificationParam& p_param)
|
||||||
{
|
{
|
||||||
|
// MxLong result
|
||||||
|
MxCore* sender = p_param.GetSender();
|
||||||
|
|
||||||
|
if (sender == NULL) {
|
||||||
|
if (m_infocenterState->GetUnknown0x74() == 8) {
|
||||||
|
m_infoManDialogueTimer = 0;
|
||||||
|
StopCutscene();
|
||||||
|
PlayAction(c_exitConfirmationDialogue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (sender->IsA("MxEntity") && m_infocenterState->GetUnknown0x74() != 5 && m_infocenterState->GetUnknown0x74() != 12) {
|
||||||
|
switch (((MxEntity*) sender)->GetEntityId()) {
|
||||||
|
case 5: {
|
||||||
|
m_infoManDialogueTimer = 0;
|
||||||
|
|
||||||
|
InfomainScript objectId;
|
||||||
|
if (GameState()->GetUnknown10()) {
|
||||||
|
objectId = (InfomainScript) m_infocenterState->GetUnknown0x14().FUN_10014d00();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
objectId = (InfomainScript) m_infocenterState->GetUnknown0x08().FUN_10014d00();
|
||||||
|
}
|
||||||
|
|
||||||
|
PlayAction(objectId);
|
||||||
|
FUN_10015860(g_object2x4red, 0);
|
||||||
|
FUN_10015860(g_object2x4grn, 0);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case 6:
|
||||||
|
if (m_infocenterState->GetUnknown0x74() == 8) {
|
||||||
|
StopCurrentAction();
|
||||||
|
FUN_10015860(g_object2x4red, 0);
|
||||||
|
FUN_10015860(g_object2x4grn, 0);
|
||||||
|
m_infocenterState->SetUnknown0x74(2);
|
||||||
|
PlayAction(c_infomanSneeze);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
case 7:
|
||||||
|
if (m_infocenterState->GetUnknown0x74() == 8) {
|
||||||
|
if (m_infocenterState->GetInfocenterBufferElement(0)) {
|
||||||
|
GameState()->Save(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_infocenterState->SetUnknown0x74(12);
|
||||||
|
PlayAction(c_exitGameDialogue);
|
||||||
|
InputManager()->DisableInputProcessing();
|
||||||
|
InputManager()->SetUnknown336(TRUE);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (sender->IsA("Radio") && m_radio.GetState()->IsActive()) {
|
||||||
|
if (m_currentInfomainScript == c_unk40 || m_currentInfomainScript == c_unk41 ||
|
||||||
|
m_currentInfomainScript == c_unk42 || m_currentInfomainScript == c_unk43 ||
|
||||||
|
m_currentInfomainScript == c_unk44 || m_currentInfomainScript == c_unk557 ||
|
||||||
|
m_currentInfomainScript == c_boatCtlDescription || m_currentInfomainScript == c_raceCtlDescription ||
|
||||||
|
m_currentInfomainScript == c_pizzaCtlDescription || m_currentInfomainScript == c_gasCtlDescription ||
|
||||||
|
m_currentInfomainScript == c_medCtlDescription || m_currentInfomainScript == c_copCtlDescription) {
|
||||||
|
StopCurrentAction();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue