From 7d8c57fc9cf57bed801c5a6e7f6dcaf3e9a2bc45 Mon Sep 17 00:00:00 2001 From: Nathan M Gilbert Date: Wed, 25 Oct 2023 16:51:59 -0400 Subject: [PATCH] Rename some functions and members (#246) * Rename some functions and members * Match LegoWorld::Notify to 100% * Match MxOmni::Destroy to 100% * Fix parameter prefix * Fix another parameter * Fix CR at EOF * Fix CR at EOF --------- Co-authored-by: Christian Semmler --- CMakeLists.txt | 2 +- LEGO1/legoentity.cpp | 74 ++++++++++++++-------------- LEGO1/legoentity.h | 45 ++++++++--------- LEGO1/legoeventnotificationparam.cpp | 5 ++ LEGO1/legoeventnotificationparam.h | 22 +++++++++ LEGO1/legoinputmanager.cpp | 8 +-- LEGO1/legoinputmanager.h | 5 +- LEGO1/legoworld.cpp | 36 ++++++++++++-- LEGO1/legoworld.h | 4 ++ LEGO1/mxactionnotificationparam.cpp | 2 +- LEGO1/mxappnotificationparam.cpp | 3 -- LEGO1/mxappnotificationparam.h | 20 -------- LEGO1/mxnotificationmanager.cpp | 5 +- LEGO1/mxnotificationmanager.h | 1 + LEGO1/mxnotificationparam.h | 23 +++++---- LEGO1/mxomni.cpp | 28 ++++++----- LEGO1/mxomni.h | 3 +- LEGO1/mxpresenter.cpp | 6 +-- LEGO1/mxstreamer.cpp | 2 +- LEGO1/score.cpp | 8 +-- LEGO1/score.h | 5 +- 21 files changed, 180 insertions(+), 127 deletions(-) create mode 100644 LEGO1/legoeventnotificationparam.cpp create mode 100644 LEGO1/legoeventnotificationparam.h delete mode 100644 LEGO1/mxappnotificationparam.cpp delete mode 100644 LEGO1/mxappnotificationparam.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 624f1f07..fa2d061e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -65,6 +65,7 @@ add_library(lego1 SHARED LEGO1/legocontrolmanager.cpp LEGO1/legoentity.cpp LEGO1/legoentitypresenter.cpp + LEGO1/legoeventnotificationparam.cpp LEGO1/legoflctexturepresenter.cpp LEGO1/legofullscreenmovie.cpp LEGO1/legogamestate.cpp @@ -99,7 +100,6 @@ add_library(lego1 SHARED LEGO1/legoworldpresenter.cpp LEGO1/motorcycle.cpp LEGO1/mxactionnotificationparam.cpp - LEGO1/mxappnotificationparam.cpp LEGO1/mxatomid.cpp LEGO1/mxatomidcounter.cpp LEGO1/mxaudiomanager.cpp diff --git a/LEGO1/legoentity.cpp b/LEGO1/legoentity.cpp index 004befc8..19820154 100644 --- a/LEGO1/legoentity.cpp +++ b/LEGO1/legoentity.cpp @@ -12,22 +12,14 @@ LegoEntity::~LegoEntity() Destroy(TRUE); } -// OFFSET: LEGO1 0x100114f0 STUB -MxLong LegoEntity::Notify(MxParam& p) -{ - // TODO - - return 0; -} - // OFFSET: LEGO1 0x100105f0 -void LegoEntity::Reset() +void LegoEntity::Init() { - m_vec1.Fill(0); - m_vec2.Fill(0); - m_unk50 = 0; - m_unk54 = 0; - m_unk58 = 0; + m_worldLocation.Fill(0); + m_worldDirection.Fill(0); + m_worldSpeed = 0; + m_roi = NULL; + m_cameraFlag = 0; m_actionArgString = NULL; m_unk10 = 0; m_unk11 = 0; @@ -36,35 +28,53 @@ void LegoEntity::Reset() m_unk59 = 4; } +// OFFSET: LEGO1 0x10010650 STUB +void LegoEntity::ResetWorldTransform(MxBool p_inVehicle) +{ + // TODO +} + +// OFFSET: LEGO1 0x10010790 STUB +void LegoEntity::SetWorldTransform(MxVector3& p_loc, MxVector3& p_dir, MxVector3& p_up) +{ + // TODO +} + // OFFSET: LEGO1 0x100107e0 MxResult LegoEntity::InitFromMxDSObject(MxDSObject& p_dsObject) { m_mxEntityId = p_dsObject.GetObjectId(); m_atom = p_dsObject.GetAtomId(); - AddToCurrentWorld(); + Init(); return SUCCESS; } // OFFSET: LEGO1 0x10010810 STUB void LegoEntity::Destroy(MxBool p_fromDestructor) { - if (m_unk54) { + if (m_roi) { // TODO } delete[] m_actionArgString; - Reset(); + Init(); } // OFFSET: LEGO1 0x10010880 STUB -void LegoEntity::AddToCurrentWorld() +void LegoEntity::SetWorld() { LegoWorld* world = GetCurrentWorld(); if (world != NULL && world != (LegoWorld*) this) { - // TODO: world->vtable58(this); + // TODO: world->AddEntity(this); } } +// OFFSET: LEGO1 0x100108a0 STUB +void LegoEntity::SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2) +{ + // TODO +} + // OFFSET: LEGO1 0x10010e10 void LegoEntity::ParseAction(char* p_extra) { @@ -88,24 +98,6 @@ void LegoEntity::ParseAction(char* p_extra) } } -// OFFSET: LEGO1 0x100108a0 STUB -void LegoEntity::VTable0x24() -{ - // TODO -} - -// OFFSET: LEGO1 0x10010790 STUB -void LegoEntity::VTable0x28() -{ - // TODO -} - -// OFFSET: LEGO1 0x10010650 STUB -void LegoEntity::VTable0x2c() -{ - // TODO -} - // OFFSET: LEGO1 0x10010f10 STUB void LegoEntity::VTable0x34() { @@ -147,3 +139,11 @@ void LegoEntity::VTable0x4c() { // TODO } + +// OFFSET: LEGO1 0x100114f0 STUB +MxLong LegoEntity::Notify(MxParam& p) +{ + // TODO + + return 0; +} diff --git a/LEGO1/legoentity.h b/LEGO1/legoentity.h index a77b65a0..1da99f3b 100644 --- a/LEGO1/legoentity.h +++ b/LEGO1/legoentity.h @@ -3,6 +3,7 @@ #include "decomp.h" #include "extra.h" +#include "legoroi.h" #include "mxdsobject.h" #include "mxentity.h" #include "mxvector.h" @@ -34,34 +35,34 @@ class LegoEntity : public MxEntity { return !strcmp(name, LegoEntity::ClassName()) || MxEntity::IsA(name); } - virtual MxResult InitFromMxDSObject(MxDSObject& p_dsObject); // vtable+0x18 - virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c - virtual void ParseAction(char*); // vtable+0x20 - virtual void VTable0x24(); // vtable+0x24 - virtual void VTable0x28(); // vtable+0x28 - virtual void VTable0x2c(); // vtable+0x2c + virtual MxResult InitFromMxDSObject(MxDSObject& p_dsObject); // vtable+0x18 + virtual void Destroy(MxBool p_fromDestructor); // vtable+0x1c + virtual void ParseAction(char*); // vtable+0x20 + virtual void SetROI(LegoROI* p_roi, MxBool p_bool1, MxBool p_bool2); // vtable+0x24 + virtual void SetWorldTransform(MxVector3& p_loc, MxVector3& p_dir, MxVector3& p_up); // vtable+0x28 + virtual void ResetWorldTransform(MxBool p_inVehicle); // vtable+0x2c // OFFSET: LEGO1 0x10001090 - virtual void VTable0x30(undefined4 p_unk50) { m_unk50 = p_unk50; } // vtable+0x30 - virtual void VTable0x34(); // vtable+0x34 - virtual void VTable0x38(); // vtable+0x38 - virtual void VTable0x3c(); // vtable+0x3c - virtual void VTable0x40(); // vtable+0x40 - virtual void VTable0x44(); // vtable+0x44 - virtual void VTable0x48(); // vtable+0x48 - virtual void VTable0x4c(); // vtable+0x4c + virtual void SetWorldSpeed(MxFloat p_worldSpeed) { m_worldSpeed = p_worldSpeed; } // vtable+0x30 + virtual void VTable0x34(); // vtable+0x34 + virtual void VTable0x38(); // vtable+0x38 + virtual void VTable0x3c(); // vtable+0x3c + virtual void VTable0x40(); // vtable+0x40 + virtual void VTable0x44(); // vtable+0x44 + virtual void VTable0x48(); // vtable+0x48 + virtual void VTable0x4c(); // vtable+0x4c protected: - void Reset(); - void AddToCurrentWorld(); + void Init(); + void SetWorld(); undefined m_unk10; undefined m_unk11; - MxVector3Data m_vec1; // 0x14 - MxVector3Data m_vec2; // 0x28 - MxVector3Data m_vec3; // 0x3c - undefined4 m_unk50; - undefined4 m_unk54; - undefined m_unk58; + MxVector3Data m_worldLocation; // 0x14 + MxVector3Data m_worldDirection; // 0x28 + MxVector3Data m_worldUp; // 0x3c + MxFloat m_worldSpeed; // 0x50 + LegoROI* m_roi; // 0x54 + MxBool m_cameraFlag; // 0x58 undefined m_unk59; // For tokens from the extra string that look like this: // "Action:openram;\lego\scripts\Race\CarRaceR;0" diff --git a/LEGO1/legoeventnotificationparam.cpp b/LEGO1/legoeventnotificationparam.cpp new file mode 100644 index 00000000..70e0de00 --- /dev/null +++ b/LEGO1/legoeventnotificationparam.cpp @@ -0,0 +1,5 @@ +#include "legoeventnotificationparam.h" + +#include "decomp.h" + +DECOMP_SIZE_ASSERT(LegoEventNotificationParam, 0x1c); diff --git a/LEGO1/legoeventnotificationparam.h b/LEGO1/legoeventnotificationparam.h new file mode 100644 index 00000000..f53fb822 --- /dev/null +++ b/LEGO1/legoeventnotificationparam.h @@ -0,0 +1,22 @@ +#ifndef LEGOEVENTNOTIFICATIONPARAM_H +#define LEGOEVENTNOTIFICATIONPARAM_H + +#include "mxnotificationparam.h" +#include "mxtypes.h" + +// VTABLE 0x100d6aa0 +class LegoEventNotificationParam : public MxNotificationParam { +public: + inline LegoEventNotificationParam() : MxNotificationParam((MxParamType) 0, NULL) {} + + virtual ~LegoEventNotificationParam() override {} // vtable+0x0 (scalar deleting destructor) + inline MxU8 GetKey() { return m_key; } + +protected: + MxU8 m_modifier; // 0x0c + MxS32 m_x; // 0x10 + MxS32 m_y; // 0x14 + MxU8 m_key; // 0x18 +}; + +#endif // LEGOEVENTNOTIFICATIONPARAM_H diff --git a/LEGO1/legoinputmanager.cpp b/LEGO1/legoinputmanager.cpp index f8f3be73..0fd1d22d 100644 --- a/LEGO1/legoinputmanager.cpp +++ b/LEGO1/legoinputmanager.cpp @@ -9,7 +9,7 @@ DECOMP_SIZE_ASSERT(LegoInputManager, 0x338); // OFFSET: LEGO1 0x1005b790 LegoInputManager::LegoInputManager() { - m_unk0x5c = NULL; + m_eventQueue = NULL; m_world = NULL; m_camera = NULL; m_unk0x68 = NULL; @@ -51,9 +51,9 @@ void LegoInputManager::Destroy() { ReleaseDX(); - if (m_unk0x5c) - delete m_unk0x5c; - m_unk0x5c = NULL; + if (m_eventQueue) + delete m_eventQueue; + m_eventQueue = NULL; if (m_unk0x68) delete m_unk0x68; diff --git a/LEGO1/legoinputmanager.h b/LEGO1/legoinputmanager.h index 807e03d6..d0059605 100644 --- a/LEGO1/legoinputmanager.h +++ b/LEGO1/legoinputmanager.h @@ -2,6 +2,7 @@ #define LEGOINPUTMANAGER_H #include "decomp.h" +#include "legoeventnotificationparam.h" #include "legoworld.h" #include "mxlist.h" #include "mxpresenter.h" @@ -18,6 +19,8 @@ enum NotificationId { }; class LegoControlManager; +// TODO Really a MxQueue, but we don't have one of those +class LegoEventQueue : public MxList {}; // VTABLE 0x100d8760 // SIZE 0x338 @@ -52,7 +55,7 @@ class LegoInputManager : public MxPresenter { // private: MxCriticalSection m_criticalSection; - MxList* m_unk0x5c; // list or hash table + LegoEventQueue* m_eventQueue; // list or hash table LegoCameraController* m_camera; LegoWorld* m_world; MxList* m_unk0x68; // list or hash table diff --git a/LEGO1/legoworld.cpp b/LEGO1/legoworld.cpp index 45fddf98..e4a2e6b4 100644 --- a/LEGO1/legoworld.cpp +++ b/LEGO1/legoworld.cpp @@ -2,12 +2,20 @@ #include "legoinputmanager.h" #include "legoomni.h" +#include "mxactionnotificationparam.h" +#include "mxnotificationparam.h" +#include "mxomni.h" #include "mxticklemanager.h" DECOMP_SIZE_ASSERT(LegoWorld, 0xf8); MxBool g_isWorldActive; +// OFFSET: LEGO1 0x100010a0 +void LegoWorld::VTable0x60() +{ +} + // OFFSET: LEGO1 0x1001ca40 STUB LegoWorld::LegoWorld() { @@ -26,12 +34,35 @@ void LegoWorld::Stop() TickleManager()->UnregisterClient(this); } +// OFFSET: LEGO1 0x1001f5e0 +MxLong LegoWorld::Notify(MxParam& p_param) +{ + MxLong ret = 0; + switch (((MxNotificationParam&) p_param).GetNotification()) { + case c_notificationEndAction: { + MxPresenter* presenter = (MxPresenter*) ((MxEndActionNotificationParam&) p_param).GetSender(); + EndAction(presenter); + ret = 1; + break; + } + case c_notificationNewPresenter: + TickleManager()->RegisterClient(this, 100); + break; + } + return ret; +} + // OFFSET: LEGO1 0x1001f630 STUB void LegoWorld::VTable0x54() { // TODO } +// OFFSET: LEGO1 0x10020f10 STUB +void LegoWorld::EndAction(MxPresenter* p_presenter) +{ +} + // OFFSET: LEGO1 0x10020220 STUB void LegoWorld::VTable0x58(MxCore* p_object) { @@ -44,11 +75,6 @@ MxBool LegoWorld::VTable0x5c() return FALSE; } -// OFFSET: LEGO1 0x100010a0 -void LegoWorld::VTable0x60() -{ -} - // OFFSET: LEGO1 0x1001d680 MxBool LegoWorld::VTable0x64() { diff --git a/LEGO1/legoworld.h b/LEGO1/legoworld.h index 31e5e593..b2ad8793 100644 --- a/LEGO1/legoworld.h +++ b/LEGO1/legoworld.h @@ -3,6 +3,7 @@ #include "legocameracontroller.h" #include "legoentity.h" +#include "mxpresenter.h" // VTABLE 0x100d6280 // SIZE 0xf8 @@ -11,6 +12,8 @@ class LegoWorld : public LegoEntity { __declspec(dllexport) LegoWorld(); __declspec(dllexport) virtual ~LegoWorld(); // vtable+0x0 + virtual MxLong Notify(MxParam& p) override; // vtable+0x4 + // OFFSET: LEGO1 0x1001d690 inline virtual const char* ClassName() const override // vtable+0x0c { @@ -33,6 +36,7 @@ class LegoWorld : public LegoEntity { virtual void VTable0x68(MxBool p_add); // vtable+68 MxResult SetAsCurrentWorld(MxDSObject& p_dsObject); + void EndAction(MxPresenter* p_presenter); protected: undefined m_unk68[0x30]; diff --git a/LEGO1/mxactionnotificationparam.cpp b/LEGO1/mxactionnotificationparam.cpp index 7c144394..58ff8506 100644 --- a/LEGO1/mxactionnotificationparam.cpp +++ b/LEGO1/mxactionnotificationparam.cpp @@ -12,5 +12,5 @@ MxNotificationParam* MxActionNotificationParam::Clone() // OFFSET: LEGO1 0x10051270 MxNotificationParam* MxEndActionNotificationParam::Clone() { - return new MxEndActionNotificationParam(MXSTREAMER_UNKNOWN, this->m_sender, this->m_action, this->m_realloc); + return new MxEndActionNotificationParam(c_notificationEndAction, this->m_sender, this->m_action, this->m_realloc); } diff --git a/LEGO1/mxappnotificationparam.cpp b/LEGO1/mxappnotificationparam.cpp deleted file mode 100644 index 8138a6cf..00000000 --- a/LEGO1/mxappnotificationparam.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "mxappnotificationparam.h" - -DECOMP_SIZE_ASSERT(MxAppNotificationParam, 0x1c) diff --git a/LEGO1/mxappnotificationparam.h b/LEGO1/mxappnotificationparam.h deleted file mode 100644 index ba144c31..00000000 --- a/LEGO1/mxappnotificationparam.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef MXAPPNOTIFICATIONPARAM_H -#define MXAPPNOTIFICATIONPARAM_H - -#include "decomp.h" -#include "mxnotificationparam.h" - -// VTABLE 0x100d6aa0 -class MxAppNotificationParam : public MxNotificationParam { -public: - inline MxAppNotificationParam() : MxNotificationParam((MxParamType) 0, NULL) {} - - virtual ~MxAppNotificationParam() override {} // vtable+0x0 (scalar deleting destructor) - inline MxU8 GetUnknown18() { return m_unk18; } - -protected: - undefined m_unkc[0xc]; - MxU8 m_unk18; -}; - -#endif // MXAPPNOTIFICATIONPARAM_H diff --git a/LEGO1/mxnotificationmanager.cpp b/LEGO1/mxnotificationmanager.cpp index a54d185d..a548f530 100644 --- a/LEGO1/mxnotificationmanager.cpp +++ b/LEGO1/mxnotificationmanager.cpp @@ -54,7 +54,10 @@ MxResult MxNotificationManager::Tickle() else { { MxAutoLocker lock(&m_lock); - swap(m_queue, m_sendList); + MxNotificationPtrList* temp1 = m_queue; + MxNotificationPtrList* temp2 = m_sendList; + m_queue = temp2; + m_sendList = temp1; } while (m_sendList->size() != 0) { diff --git a/LEGO1/mxnotificationmanager.h b/LEGO1/mxnotificationmanager.h index 96d40c7b..1dcfb49a 100644 --- a/LEGO1/mxnotificationmanager.h +++ b/LEGO1/mxnotificationmanager.h @@ -46,6 +46,7 @@ class MxNotificationManager : public MxCore { MxResult Send(MxCore* p_listener, MxNotificationParam* p_param); inline MxNotificationPtrList* GetQueue() { return m_queue; } + inline void SetActive(MxBool p_active) { m_active = p_active; } private: void FlushPending(MxCore* p_listener); diff --git a/LEGO1/mxnotificationparam.h b/LEGO1/mxnotificationparam.h index 79e4d4cb..e5654243 100644 --- a/LEGO1/mxnotificationparam.h +++ b/LEGO1/mxnotificationparam.h @@ -9,22 +9,25 @@ class MxCore; enum MxParamType { PARAM_NONE = 0, - PAINT = 1, // 100dc210:100d8350 - MXSTREAMER_UNKNOWN = 2, // 100d8358:100d8350 - TYPE4 = 4, // 100dc208:100d8350 + PAINT = 1, // 100dc210:100d8350 + c_notificationEndAction = 2, // 100d8358:100d8350 + TYPE4 = 4, // 100dc208:100d8350 MXPRESENTER_NOTIFICATION = 5, MXSTREAMER_DELETE_NOTIFY = 6, // 100dc760 - APP_MESSAGE = 7, // 100d6aa0 - MOUSE_RELEASE = 8, // 100d6aa0 - MOUSE_PRESS = 9, // 100d6aa0 - MOUSE_MOVE = 10, // 100d6aa0 + c_notificationKeyPress = 7, // 100d6aa0 + c_notificationButtonUp = 8, // 100d6aa0 + c_notificationButtonDown = 9, // 100d6aa0 + c_notificationMouseMove = 10, // 100d6aa0 TYPE11 = 11, // 100d6aa0 - PARAM_TIMER = 15, // 100d6aa0 + c_notificationDragEnd = 12, + c_notificationDragStart = 13, + c_notificationDrag = 14, + c_notificationTimer = 15, // 100d6aa0 TYPE17 = 17, TYPE18 = 18, // 100d7e80 TYPE19 = 19, // 100d6230 TYPE20 = 20, - TYPE21 = 21, + c_notificationNewPresenter = 21, TYPE22 = 22, TYPE23 = 23, MXTRANSITIONMANAGER_TRANSITIONENDED = 24 @@ -38,7 +41,7 @@ class MxNotificationParam : public MxParam { virtual ~MxNotificationParam() override {} // vtable+0x0 (scalar deleting destructor) virtual MxNotificationParam* Clone(); // vtable+0x4 - inline MxParamType GetType() const { return m_type; } + inline MxParamType GetNotification() const { return m_type; } inline MxCore* GetSender() const { return m_sender; } protected: diff --git a/LEGO1/mxomni.cpp b/LEGO1/mxomni.cpp index e1013ce1..edd71d99 100644 --- a/LEGO1/mxomni.cpp +++ b/LEGO1/mxomni.cpp @@ -278,18 +278,23 @@ MxResult MxOmni::Create(MxOmniCreateParam& p) // OFFSET: LEGO1 0x100afe90 void MxOmni::Destroy() { - // FIXME: Stub - - /* - // TODO: private members - if (m_notificationManager) { - while (m_notificationManager->m_queue->size()) { - m_notificationManager->Tickle(); - } + { + MxDSAction action; + action.SetObjectId(-1); + action.SetUnknown24(-2); + DeleteObject(action); } - m_notificationManager->m_active = 0; - */ + // TODO: private members + if (m_notificationManager) { + while (m_notificationManager->GetQueue()) { + if (m_notificationManager->GetQueue()->size() == 0) + break; + m_notificationManager->Tickle(); + } + + m_notificationManager->SetActive(FALSE); + } delete m_eventManager; delete m_soundManager; @@ -313,6 +318,7 @@ void MxOmni::Destroy() } delete m_atomIdCounterSet; } + Init(); } // OFFSET: LEGO1 0x100b07f0 @@ -320,7 +326,7 @@ MxLong MxOmni::Notify(MxParam& p) { MxAutoLocker lock(&this->m_criticalsection); - if (((MxNotificationParam&) p).GetType() != MXSTREAMER_UNKNOWN) + if (((MxNotificationParam&) p).GetNotification() != c_notificationEndAction) return 0; return HandleNotificationType2(p); diff --git a/LEGO1/mxomni.h b/LEGO1/mxomni.h index baf72ff7..40fad828 100644 --- a/LEGO1/mxomni.h +++ b/LEGO1/mxomni.h @@ -69,7 +69,7 @@ class MxOmni : public MxCore { static MxOmni* g_instance; MxString m_mediaPath; // 0x8 - HWND m_windowHandle; // 0x18; + HWND m_windowHandle; // 0x18 MxObjectFactory* m_objectFactory; // 0x1C MxVariableTable* m_variableTable; // 0x20 MxTickleManager* m_tickleManager; // 0x24 @@ -96,7 +96,6 @@ __declspec(dllexport) MxMusicManager* MusicManager(); __declspec(dllexport) MxEventManager* EventManager(); __declspec(dllexport) MxNotificationManager* NotificationManager(); -MxResult DeleteObject(MxDSAction& p_dsAction); MxVideoManager* MVideoManager(); MxAtomIdCounterSet* AtomIdCounterSet(); MxObjectFactory* ObjectFactory(); diff --git a/LEGO1/mxpresenter.cpp b/LEGO1/mxpresenter.cpp index 4f0b335a..13df6a60 100644 --- a/LEGO1/mxpresenter.cpp +++ b/LEGO1/mxpresenter.cpp @@ -30,11 +30,11 @@ void MxPresenter::Init() void MxPresenter::ParseExtra() { MxAutoLocker lock(&m_criticalSection); - MxU32 len = m_action->GetExtraLength(); + MxU16 len = m_action->GetExtraLength(); char* extraData = m_action->GetExtraData(); if (len) { - len &= MAXWORD; + // len &= MAXWORD; char extraCopy[512]; memcpy(extraCopy, extraData, len); extraCopy[len] = '\0'; @@ -141,7 +141,7 @@ void MxPresenter::EndAction() MxAutoLocker lock(&this->m_criticalSection); if (!this->m_unkPresenter) { MxOmni::GetInstance()->NotifyCurrentEntity( - &MxEndActionNotificationParam(MXSTREAMER_UNKNOWN, NULL, this->m_action, TRUE) + &MxEndActionNotificationParam(c_notificationEndAction, NULL, this->m_action, TRUE) ); } diff --git a/LEGO1/mxstreamer.cpp b/LEGO1/mxstreamer.cpp index b08be4bd..ee492e0d 100644 --- a/LEGO1/mxstreamer.cpp +++ b/LEGO1/mxstreamer.cpp @@ -156,7 +156,7 @@ MxBool MxStreamer::FUN_100b9b30(MxDSObject& p_dsObject) // OFFSET: LEGO1 0x100b9b60 MxLong MxStreamer::Notify(MxParam& p) { - if (((MxNotificationParam&) p).GetType() == MXSTREAMER_DELETE_NOTIFY) { + if (((MxNotificationParam&) p).GetNotification() == MXSTREAMER_DELETE_NOTIFY) { MxDSAction ds; ds.SetUnknown24(-2); diff --git a/LEGO1/score.cpp b/LEGO1/score.cpp index 5aa31bee..e58d7f32 100644 --- a/LEGO1/score.cpp +++ b/LEGO1/score.cpp @@ -40,16 +40,16 @@ MxLong Score::Notify(MxParam& p) MxLong ret = 0; LegoWorld::Notify(p); if (m_unkf6) { - switch (((MxNotificationParam&) p).GetType()) { + switch (((MxNotificationParam&) p).GetNotification()) { case PAINT: ret = 1; Paint(); break; - case MXSTREAMER_UNKNOWN: + case c_notificationEndAction: ret = FUN_10001510((MxEndActionNotificationParam&) p); break; - case APP_MESSAGE: - if (((MxAppNotificationParam&) p).GetUnknown18() == 0x20) + case c_notificationKeyPress: + if (((LegoEventNotificationParam&) p).GetKey() == 0x20) DeleteScript(); // Shutting down ret = 1; break; diff --git a/LEGO1/score.h b/LEGO1/score.h index 801816f3..612bba4c 100644 --- a/LEGO1/score.h +++ b/LEGO1/score.h @@ -1,9 +1,9 @@ #ifndef SCORE_H #define SCORE_H +#include "legoeventnotificationparam.h" #include "legoworld.h" #include "mxactionnotificationparam.h" -#include "mxappnotificationparam.h" #include "mxtype17notificationparam.h" #include "scorestate.h" @@ -28,6 +28,9 @@ class Score : public LegoWorld { return !strcmp(name, Score::ClassName()) || LegoWorld::IsA(name); } + // OFFSET: LEGO1 0x100011e0 TEMPLATE + // Helicopter::`scalar deleting destructor' + virtual MxResult InitFromMxDSObject(MxDSObject& p_dsObject) override; // vtable+18 virtual void Stop() override; // vtable+50 virtual MxBool VTable0x5c() override; // vtable+5c