diff --git a/LEGO1/lego/legoomni/include/infocenterstate.h b/LEGO1/lego/legoomni/include/infocenterstate.h index 9399f8f4..ed23acef 100644 --- a/LEGO1/lego/legoomni/include/infocenterstate.h +++ b/LEGO1/lego/legoomni/include/infocenterstate.h @@ -30,6 +30,7 @@ class InfocenterState : public LegoState { inline MxS16 GetInfocenterBufferSize() { return sizeof(m_buffer) / sizeof(m_buffer[0]); } inline MxStillPresenter* GetInfocenterBufferElement(MxS32 p_index) { return m_buffer[p_index]; } + inline StateStruct& GetUnknown0x68() { return m_unk0x68; } inline MxU32 GetUnknown0x74() { return m_unk0x74; } inline void SetUnknown0x74(MxU32 p_unk0x74) { m_unk0x74 = p_unk0x74; } @@ -38,35 +39,10 @@ class InfocenterState : public LegoState { // InfocenterState::`scalar deleting destructor' private: - // Members should be renamed with their offsets before use - /* - struct UnkStruct - { - undefined4 unk1; - undefined2 unk2; - undefined2 unk3; - undefined2 unk4; - }; - - undefined2 unk1; - undefined2 unk2; - undefined4 unk3; - undefined4 padding1; - void *unk4; - undefined2 unk5; - undefined2 unk6; - undefined2 unk7; - undefined2 padding2; - void *unk8; - undefined2 unk9; - undefined2 unk10; - undefined2 unk11; - undefined2 padding3; - UnkStruct unk12[6]; - undefined4 unk13; - */ - - undefined m_pad[0x6c]; + undefined m_unk0x08[0x18]; // 0x08 + StateStruct m_unk0x20[3]; // 0x20 + StateStruct m_unk0x44[3]; // 0x44 + StateStruct m_unk0x68; // 0x68 MxU32 m_unk0x74; // 0x74 MxStillPresenter* m_buffer[7]; // 0x78 }; diff --git a/LEGO1/lego/legoomni/include/legostate.h b/LEGO1/lego/legoomni/include/legostate.h index de66cdc6..fe10bbf7 100644 --- a/LEGO1/lego/legoomni/include/legostate.h +++ b/LEGO1/lego/legoomni/include/legostate.h @@ -51,7 +51,14 @@ class LegoState : public MxCore { undefined2 m_unk0x06; // 0x06 MxU16 m_unk0x08; // 0x08 - StateStruct(); + // FUNCTION: LEGO1 0x10017c00 + StateStruct() + { + m_unk0x04 = 0; + m_unk0x00 = NULL; + m_unk0x06 = 0; + m_unk0x08 = 0; + } MxU32 FUN_10014d00(); MxBool FUN_10014de0(MxU32 p_objectId); diff --git a/LEGO1/lego/legoomni/src/common/legostate.cpp b/LEGO1/lego/legoomni/src/common/legostate.cpp index 5d3bcf4e..96a08dbe 100644 --- a/LEGO1/lego/legoomni/src/common/legostate.cpp +++ b/LEGO1/lego/legoomni/src/common/legostate.cpp @@ -16,12 +16,3 @@ MxBool LegoState::StateStruct::FUN_10014de0(MxU32 p_objectId) // TODO return FALSE; } - -// FUNCTION: LEGO1 0x10017c00 -LegoState::StateStruct::StateStruct() -{ - m_unk0x04 = 0; - m_unk0x00 = 0; - m_unk0x06 = 0; - m_unk0x08 = 0; -} diff --git a/LEGO1/lego/legoomni/src/infocenter/elevatorbottom.cpp b/LEGO1/lego/legoomni/src/infocenter/elevatorbottom.cpp index 65875191..08f2cf50 100644 --- a/LEGO1/lego/legoomni/src/infocenter/elevatorbottom.cpp +++ b/LEGO1/lego/legoomni/src/infocenter/elevatorbottom.cpp @@ -82,6 +82,7 @@ void ElevatorBottom::ReadyWorld() MxLong ElevatorBottom::HandleClick(LegoControlManagerEvent& p_param) { MxLong result = 0; + if (p_param.GetUnknown0x28() == 1) { switch (p_param.GetClickedObjectId()) { case 1: @@ -97,9 +98,11 @@ MxLong ElevatorBottom::HandleClick(LegoControlManagerEvent& p_param) case 3: LegoGameState* gs = GameState(); Act1State* state = (Act1State*) gs->GetState("Act1State"); + if (state == NULL) { state = (Act1State*) gs->CreateState("Act1State"); } + state->SetUnknown1c(1); m_unk0xf8 = 6; TransitionManager()->StartTransition(MxTransitionManager::e_pixelation, 50, FALSE, FALSE); @@ -108,6 +111,7 @@ MxLong ElevatorBottom::HandleClick(LegoControlManagerEvent& p_param) break; } } + return result; } diff --git a/LEGO1/lego/legoomni/src/infocenter/infocenter.cpp b/LEGO1/lego/legoomni/src/infocenter/infocenter.cpp index 2ece91f5..8a918bff 100644 --- a/LEGO1/lego/legoomni/src/infocenter/infocenter.cpp +++ b/LEGO1/lego/legoomni/src/infocenter/infocenter.cpp @@ -457,6 +457,7 @@ MxU8 Infocenter::HandleMouseMove(MxS32 p_x, MxS32 p_y) FUN_10070d10(p_x, p_y); return 1; } + return 0; } @@ -518,10 +519,13 @@ MxU8 Infocenter::HandleClick(LegoControlManagerEvent& p_param) { if (p_param.GetUnknown0x28() == 1) { m_infoManDialogueTimer = 0; + InfomainScript actionToPlay = c_noInfomain; StopCurrentAction(); InfomainScript characterBitmap = c_noInfomain; + GameState(); + switch (p_param.GetClickedObjectId()) { case c_leftArrowCtl: m_infocenterState->SetUnknown0x74(14); @@ -532,8 +536,10 @@ MxU8 Infocenter::HandleClick(LegoControlManagerEvent& p_param) m_transitionDestination = 5; } else { - // todo + MxU32 objectId = m_infocenterState->GetUnknown0x68().FUN_10014d00(); + PlayAction((InfomainScript) objectId); } + break; case c_rightArrowCtl: m_infocenterState->SetUnknown0x74(14);