diff --git a/LEGO1/lego/legoomni/include/historybook.h b/LEGO1/lego/legoomni/include/historybook.h index 862be059..3bdc4acf 100644 --- a/LEGO1/lego/legoomni/include/historybook.h +++ b/LEGO1/lego/legoomni/include/historybook.h @@ -1,6 +1,8 @@ #ifndef HISTORYBOOK_H #define HISTORYBOOK_H +#include "decomp.h" +#include "legogamestate.h" #include "legoworld.h" // VTABLE: LEGO1 0x100da328 @@ -31,6 +33,12 @@ class HistoryBook : public LegoWorld { // SYNTHETIC: LEGO1 0x100824b0 // HistoryBook::`scalar deleting destructor' + +private: + LegoGameState::Area m_transitionDestination; // 0xf8 + undefined m_unk0xfc[104]; // 0xfc + undefined m_unk0x164[560]; // 0x164 + undefined m_unk0x394[80]; // 0x394 }; #endif // HISTORYBOOK_H diff --git a/LEGO1/lego/legoomni/src/isle/historybook.cpp b/LEGO1/lego/legoomni/src/isle/historybook.cpp index 4681ce1c..3699c2a2 100644 --- a/LEGO1/lego/legoomni/src/isle/historybook.cpp +++ b/LEGO1/lego/legoomni/src/isle/historybook.cpp @@ -1,9 +1,21 @@ #include "historybook.h" -// STUB: LEGO1 0x100822f0 +#include "legocontrolmanager.h" +#include "legoinputmanager.h" +#include "legoomni.h" +#include "mxnotificationmanager.h" +#include "mxomni.h" +#include "mxtransitionmanager.h" + +DECOMP_SIZE_ASSERT(HistoryBook, 0x3e4) + +// FUNCTION: LEGO1 0x100822f0 HistoryBook::HistoryBook() { - // TODO + memset(m_unk0xfc, NULL, sizeof(m_unk0xfc)); + memset(m_unk0x164, NULL, sizeof(m_unk0x164)); + memset(m_unk0x394, NULL, sizeof(m_unk0x394)); + NotificationManager()->Register(this); } // STUB: LEGO1 0x100824d0 @@ -12,17 +24,38 @@ HistoryBook::~HistoryBook() // TODO } -// STUB: LEGO1 0x10082610 +// FUNCTION: LEGO1 0x10082610 MxResult HistoryBook::Create(MxDSAction& p_dsAction) { - // TODO - return SUCCESS; + MxResult result = LegoWorld::Create(p_dsAction); + if (result == SUCCESS) { + InputManager()->SetWorld(this); + ControlManager()->Register(this); + } + + InputManager()->SetCamera(NULL); + InputManager()->Register(this); + + GameState()->SetCurrentArea(LegoGameState::Area::e_histbook); + GameState()->StopArea(LegoGameState::Area::e_previousArea); + return result; } -// STUB: LEGO1 0x10082680 +// FUNCTION: LEGO1 0x10082680 MxLong HistoryBook::Notify(MxParam& p_param) { - // TODO + LegoWorld::Notify(p_param); + if (m_worldStarted) { + switch (((MxNotificationParam&) p_param).GetNotification()) { + case c_notificationButtonUp: + m_transitionDestination = LegoGameState::Area::e_infoscor; + TransitionManager()->StartTransition(MxTransitionManager::TransitionType::e_pixelation, 50, FALSE, FALSE); + break; + case c_notificationTransitioned: + GameState()->SwitchArea(m_transitionDestination); + break; + } + } return 0; } @@ -33,9 +66,9 @@ void HistoryBook::ReadyWorld() // TODO } -// STUB: LEGO1 0x10082a10 +// FUNCTION: LEGO1 0x10082a10 MxBool HistoryBook::VTable0x64() { - // TODO - return FALSE; + m_transitionDestination = LegoGameState::Area::e_infomain; + return TRUE; }