mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 23:48:12 -05:00
Implement various methods in InfoCenter folder (#465)
* push changes * Fix return type of Infocenter::Tickle * Fixes/matches * Code clarity * Move assert --------- Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
parent
9000f731ac
commit
9a3df8d9f8
9 changed files with 123 additions and 35 deletions
|
@ -40,6 +40,8 @@ class ElevatorBottom : public LegoWorld {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
undefined4 m_unk0xf8; // 0xf8
|
undefined4 m_unk0xf8; // 0xf8
|
||||||
|
|
||||||
|
MxLong HandleNotification17(MxParam& p_param);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // ELEVATORBOTTOM_H
|
#endif // ELEVATORBOTTOM_H
|
||||||
|
|
|
@ -170,10 +170,10 @@ class Infocenter : public LegoWorld {
|
||||||
InfocenterUnkDataEntry m_entries[7]; // 0x120
|
InfocenterUnkDataEntry m_entries[7]; // 0x120
|
||||||
MxS16 m_unk0x1c8; // 0x1c8
|
MxS16 m_unk0x1c8; // 0x1c8
|
||||||
undefined4 m_unk0x1cc; // 0x1cc
|
undefined4 m_unk0x1cc; // 0x1cc
|
||||||
MxU16 m_unk0x1d0; // 0x1d0
|
MxS16 m_infoManDialogueTimer; // 0x1d0
|
||||||
MxU16 m_unk0x1d2; // 0x1d2
|
MxS16 m_bookAnimationTimer; // 0x1d2
|
||||||
MxU16 m_unk0x1d4; // 0x1d4
|
MxU16 m_unk0x1d4; // 0x1d4
|
||||||
MxU16 m_unk0x1d6; // 0x1d6
|
MxS16 m_unk0x1d6; // 0x1d6
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INFOCENTER_H
|
#endif // INFOCENTER_H
|
||||||
|
|
|
@ -36,6 +36,9 @@ class InfocenterDoor : public LegoWorld {
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x100378d0
|
// SYNTHETIC: LEGO1 0x100378d0
|
||||||
// InfocenterDoor::`scalar deleting destructor'
|
// InfocenterDoor::`scalar deleting destructor'
|
||||||
|
|
||||||
|
private:
|
||||||
|
MxS32 m_unk0xf8; // 0xf8
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // INFOCENTERDOOR_H
|
#endif // INFOCENTERDOOR_H
|
||||||
|
|
|
@ -28,7 +28,7 @@ class LegoControlManager : public MxCore {
|
||||||
void FUN_10028df0(MxPresenterList* p_presenterList);
|
void FUN_10028df0(MxPresenterList* p_presenterList);
|
||||||
void Register(MxCore* p_listener);
|
void Register(MxCore* p_listener);
|
||||||
void Unregister(MxCore* p_listener);
|
void Unregister(MxCore* p_listener);
|
||||||
void FUN_100293c0(undefined4, const MxAtomId&, undefined2);
|
void FUN_100293c0(undefined4, const char*, undefined2);
|
||||||
|
|
||||||
// SYNTHETIC: LEGO1 0x10028d40
|
// SYNTHETIC: LEGO1 0x10028d40
|
||||||
// LegoControlManager::`scalar deleting destructor'
|
// LegoControlManager::`scalar deleting destructor'
|
||||||
|
|
|
@ -31,7 +31,7 @@ void LegoControlManager::Unregister(MxCore* p_listener)
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100293c0
|
// STUB: LEGO1 0x100293c0
|
||||||
void LegoControlManager::FUN_100293c0(undefined4, const MxAtomId&, undefined2)
|
void LegoControlManager::FUN_100293c0(undefined4, const char*, undefined2)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
#include "elevatorbottom.h"
|
#include "elevatorbottom.h"
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
|
||||||
|
|
||||||
#include "legocontrolmanager.h"
|
#include "legocontrolmanager.h"
|
||||||
#include "legogamestate.h"
|
#include "legogamestate.h"
|
||||||
#include "legoinputmanager.h"
|
#include "legoinputmanager.h"
|
||||||
|
@ -9,6 +7,8 @@ DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
||||||
#include "mxnotificationmanager.h"
|
#include "mxnotificationmanager.h"
|
||||||
#include "mxomni.h"
|
#include "mxomni.h"
|
||||||
|
|
||||||
|
DECOMP_SIZE_ASSERT(ElevatorBottom, 0xfc)
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10017e90
|
// FUNCTION: LEGO1 0x10017e90
|
||||||
ElevatorBottom::ElevatorBottom()
|
ElevatorBottom::ElevatorBottom()
|
||||||
{
|
{
|
||||||
|
@ -43,11 +43,24 @@ MxResult ElevatorBottom::Create(MxDSAction& p_dsAction)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10018150
|
// FUNCTION: LEGO1 0x10018150
|
||||||
MxLong ElevatorBottom::Notify(MxParam& p_param)
|
MxLong ElevatorBottom::Notify(MxParam& p_param)
|
||||||
{
|
{
|
||||||
// TODO
|
MxLong ret = 0;
|
||||||
return LegoWorld::Notify(p_param);
|
LegoWorld::Notify(p_param);
|
||||||
|
|
||||||
|
if (m_worldStarted) {
|
||||||
|
switch (((MxNotificationParam&) p_param).GetType()) {
|
||||||
|
case c_notificationType17:
|
||||||
|
ret = HandleNotification17(p_param);
|
||||||
|
break;
|
||||||
|
case c_notificationTransitioned:
|
||||||
|
GameState()->HandleAction(m_unk0xf8);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100181b0
|
// FUNCTION: LEGO1 0x100181b0
|
||||||
|
@ -58,6 +71,12 @@ void ElevatorBottom::VTable0x50()
|
||||||
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
FUN_10015820(FALSE, LegoOmni::c_disableInput | LegoOmni::c_disable3d | LegoOmni::c_clearScreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// STUB: LEGO1 0x100181d0
|
||||||
|
MxLong ElevatorBottom::HandleNotification17(MxParam& p_param)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100182c0
|
// FUNCTION: LEGO1 0x100182c0
|
||||||
void ElevatorBottom::VTable0x68(MxBool p_add)
|
void ElevatorBottom::VTable0x68(MxBool p_add)
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,14 +35,14 @@ Infocenter::Infocenter()
|
||||||
m_currentInfomainScript = c_noInfomain;
|
m_currentInfomainScript = c_noInfomain;
|
||||||
m_currentCutscene = e_noIntro;
|
m_currentCutscene = e_noIntro;
|
||||||
|
|
||||||
memset(&m_entries, 0, sizeof(InfocenterUnkDataEntry) * 7);
|
memset(&m_entries, 0, sizeof(m_entries));
|
||||||
|
|
||||||
m_unk0x1c8 = -1;
|
m_unk0x1c8 = -1;
|
||||||
SetAppCursor(1);
|
SetAppCursor(1);
|
||||||
NotificationManager()->Register(this);
|
NotificationManager()->Register(this);
|
||||||
|
|
||||||
m_unk0x1d0 = 0;
|
m_infoManDialogueTimer = 0;
|
||||||
m_unk0x1d2 = 0;
|
m_bookAnimationTimer = 0;
|
||||||
m_unk0x1d4 = 0;
|
m_unk0x1d4 = 0;
|
||||||
m_unk0x1d6 = 0;
|
m_unk0x1d6 = 0;
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ MxLong Infocenter::Notify(MxParam& p_param)
|
||||||
break;
|
break;
|
||||||
case c_notificationTransitioned:
|
case c_notificationTransitioned:
|
||||||
StopBookAnimation();
|
StopBookAnimation();
|
||||||
m_unk0x1d2 = 0;
|
m_bookAnimationTimer = 0;
|
||||||
|
|
||||||
if (m_infocenterState->GetUnknown0x74() == 0xc) {
|
if (m_infocenterState->GetUnknown0x74() == 0xc) {
|
||||||
StartCredits();
|
StartCredits();
|
||||||
|
@ -198,7 +198,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
if (action->GetObjectId() == c_returnBackGuidanceDialogue2) {
|
if (action->GetObjectId() == c_returnBackGuidanceDialogue2) {
|
||||||
ControlManager()->FUN_100293c0(0x10, action->GetAtomId(), 0);
|
ControlManager()->FUN_100293c0(0x10, action->GetAtomId().GetInternal(), 0);
|
||||||
m_unk0x1d6 = 0;
|
m_unk0x1d6 = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,7 +232,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||||
m_currentCutscene = e_noIntro;
|
m_currentCutscene = e_noIntro;
|
||||||
|
|
||||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||||
m_unk0x1d2 = 1;
|
m_bookAnimationTimer = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -278,7 +278,7 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0 && m_currentInfomainScript != 40 &&
|
if (m_infocenterState->GetInfocenterBufferElement(0) == 0 && m_currentInfomainScript != 40 &&
|
||||||
m_currentInfomainScript != 41 && m_currentInfomainScript != 42 && m_currentInfomainScript != 43 &&
|
m_currentInfomainScript != 41 && m_currentInfomainScript != 42 && m_currentInfomainScript != 43 &&
|
||||||
m_currentInfomainScript != 44) {
|
m_currentInfomainScript != 44) {
|
||||||
m_unk0x1d0 = 1;
|
m_infoManDialogueTimer = 1;
|
||||||
PlayMusic(11);
|
PlayMusic(11);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,8 +299,8 @@ MxLong Infocenter::HandleEndAction(MxParam& p_param)
|
||||||
// STUB: LEGO1 0x1006f4e0
|
// STUB: LEGO1 0x1006f4e0
|
||||||
void Infocenter::VTable0x50()
|
void Infocenter::VTable0x50()
|
||||||
{
|
{
|
||||||
m_unk0x1d0 = 0;
|
m_infoManDialogueTimer = 0;
|
||||||
m_unk0x1d2 = 0;
|
m_bookAnimationTimer = 0;
|
||||||
m_unk0x1d4 = 0;
|
m_unk0x1d4 = 0;
|
||||||
m_unk0x1d6 = 0;
|
m_unk0x1d6 = 0;
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ void Infocenter::VTable0x50()
|
||||||
case 4:
|
case 4:
|
||||||
m_infocenterState->SetUnknown0x74(2);
|
m_infocenterState->SetUnknown0x74(2);
|
||||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||||
m_unk0x1d2 = 1;
|
m_bookAnimationTimer = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayAction(c_letsGetStartedDialogue);
|
PlayAction(c_letsGetStartedDialogue);
|
||||||
|
@ -337,7 +337,7 @@ void Infocenter::VTable0x50()
|
||||||
return;
|
return;
|
||||||
case 0xf:
|
case 0xf:
|
||||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||||
m_unk0x1d2 = 1;
|
m_bookAnimationTimer = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayAction(c_clickOnInfomanDialogue);
|
PlayAction(c_clickOnInfomanDialogue);
|
||||||
|
@ -383,7 +383,7 @@ MxLong Infocenter::HandleKeyPress(MxS8 p_key)
|
||||||
m_infocenterState->SetUnknown0x74(1);
|
m_infocenterState->SetUnknown0x74(1);
|
||||||
|
|
||||||
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
if (m_infocenterState->GetInfocenterBufferElement(0) == 0) {
|
||||||
m_unk0x1d2 = 1;
|
m_bookAnimationTimer = 1;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -452,11 +452,43 @@ void Infocenter::VTable0x68(MxBool p_add)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10070af0
|
// FUNCTION: LEGO1 0x10070af0
|
||||||
MxResult Infocenter::Tickle()
|
MxResult Infocenter::Tickle()
|
||||||
{
|
{
|
||||||
// TODO
|
if (m_worldStarted == FALSE) {
|
||||||
return LegoWorld::Tickle();
|
LegoWorld::Tickle();
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_infoManDialogueTimer != 0 && (m_infoManDialogueTimer += 100) > 25000) {
|
||||||
|
PlayAction(c_clickOnInfomanDialogue);
|
||||||
|
m_infoManDialogueTimer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_bookAnimationTimer != 0 && (m_bookAnimationTimer += 100) > 3000) {
|
||||||
|
PlayBookAnimation();
|
||||||
|
m_bookAnimationTimer = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_unk0x1d6 != 0) {
|
||||||
|
m_unk0x1d6 += 100;
|
||||||
|
|
||||||
|
if (m_unk0x1d6 > 3400 && m_unk0x1d6 < 3650) {
|
||||||
|
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 1);
|
||||||
|
}
|
||||||
|
else if (m_unk0x1d6 > 3650 && m_unk0x1d6 < 3900) {
|
||||||
|
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 0);
|
||||||
|
}
|
||||||
|
else if (m_unk0x1d6 > 3900 && m_unk0x1d6 < 4150) {
|
||||||
|
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 1);
|
||||||
|
}
|
||||||
|
else if (m_unk0x1d6 > 4400) {
|
||||||
|
ControlManager()->FUN_100293c0(0x10, m_atom.GetInternal(), 0);
|
||||||
|
m_unk0x1d6 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x10070c20
|
// FUNCTION: LEGO1 0x10070c20
|
||||||
|
|
|
@ -1,24 +1,47 @@
|
||||||
#include "infocenterdoor.h"
|
#include "infocenterdoor.h"
|
||||||
|
|
||||||
|
#include "legocontrolmanager.h"
|
||||||
|
#include "legogamestate.h"
|
||||||
#include "legoinputmanager.h"
|
#include "legoinputmanager.h"
|
||||||
#include "legoomni.h"
|
#include "legoomni.h"
|
||||||
|
#include "mxnotificationmanager.h"
|
||||||
|
|
||||||
// STUB: LEGO1 0x10037730
|
DECOMP_SIZE_ASSERT(InfocenterDoor, 0xfc)
|
||||||
|
|
||||||
|
// FUNCTION: LEGO1 0x10037730
|
||||||
InfocenterDoor::InfocenterDoor()
|
InfocenterDoor::InfocenterDoor()
|
||||||
{
|
{
|
||||||
// TODO
|
m_unk0xf8 = 0;
|
||||||
|
|
||||||
|
NotificationManager()->Register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100378f0
|
// FUNCTION: LEGO1 0x100378f0
|
||||||
InfocenterDoor::~InfocenterDoor()
|
InfocenterDoor::~InfocenterDoor()
|
||||||
{
|
{
|
||||||
// TODO
|
if (InputManager()->GetWorld() == this) {
|
||||||
|
InputManager()->ClearWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
ControlManager()->Unregister(this);
|
||||||
|
NotificationManager()->Unregister(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10037980
|
// FUNCTION: LEGO1 0x10037980
|
||||||
MxResult InfocenterDoor::Create(MxDSAction& p_dsAction)
|
MxResult InfocenterDoor::Create(MxDSAction& p_dsAction)
|
||||||
{
|
{
|
||||||
return SUCCESS;
|
MxResult result = LegoWorld::Create(p_dsAction);
|
||||||
|
if (result == SUCCESS) {
|
||||||
|
InputManager()->SetWorld(this);
|
||||||
|
ControlManager()->Register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetIsWorldActive(FALSE);
|
||||||
|
|
||||||
|
GameState()->SetUnknown424(3);
|
||||||
|
GameState()->FUN_1003a720(0);
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x100379e0
|
// STUB: LEGO1 0x100379e0
|
||||||
|
@ -52,8 +75,10 @@ void InfocenterDoor::VTable0x68(MxBool p_add)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10037cd0
|
// FUNCTION: LEGO1 0x10037cd0
|
||||||
MxBool InfocenterDoor::VTable0x64()
|
MxBool InfocenterDoor::VTable0x64()
|
||||||
{
|
{
|
||||||
|
DeleteObjects(&m_atom, 500, 510);
|
||||||
|
m_unk0xf8 = 2;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,15 +2,22 @@
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(InfocenterState, 0x94);
|
DECOMP_SIZE_ASSERT(InfocenterState, 0x94);
|
||||||
|
|
||||||
// STUB: LEGO1 0x10071600
|
// FUNCTION: LEGO1 0x10071600
|
||||||
InfocenterState::InfocenterState()
|
InfocenterState::InfocenterState()
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
memset(m_buffer, 0, sizeof(m_buffer));
|
memset(m_buffer, 0, sizeof(m_buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
// STUB: LEGO1 0x10071920
|
// FUNCTION: LEGO1 0x10071920
|
||||||
InfocenterState::~InfocenterState()
|
InfocenterState::~InfocenterState()
|
||||||
{
|
{
|
||||||
// TODO
|
MxS16 i = 0;
|
||||||
|
do {
|
||||||
|
if (GetInfocenterBufferElement(i) != NULL) {
|
||||||
|
delete GetInfocenterBufferElement(i)->GetAction();
|
||||||
|
delete GetInfocenterBufferElement(i);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
} while (i < GetInfocenterBufferSize());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue