From dc73e2dc9d7ea593d9e7c82217848ffdc3db3fdd Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sun, 3 Mar 2024 19:55:40 -0500 Subject: [PATCH] Fixes/match --- .../legoomni/include/legoactorpresenter.h | 5 +- .../legoomni/include/legoentitypresenter.h | 2 +- .../legoomni/include/legomodelpresenter.h | 8 ++- .../lego/legoomni/include/legopartpresenter.h | 2 +- .../legoomni/include/legotexturepresenter.h | 2 +- .../src/entity/legoworldpresenter.cpp | 58 ++++++++++--------- .../legoomni/src/video/legomodelpresenter.cpp | 19 +++--- .../legoomni/src/video/legopartpresenter.cpp | 2 +- .../src/video/legotexturepresenter.cpp | 2 +- LEGO1/omni/include/mxentity.h | 2 +- LEGO1/omni/include/mxpresenter.h | 2 +- LEGO1/realtime/vector.h | 4 -- 12 files changed, 58 insertions(+), 50 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legoactorpresenter.h b/LEGO1/lego/legoomni/include/legoactorpresenter.h index 9c3b35bf..aea15b64 100644 --- a/LEGO1/lego/legoomni/include/legoactorpresenter.h +++ b/LEGO1/lego/legoomni/include/legoactorpresenter.h @@ -7,7 +7,10 @@ // SIZE 0x50 class LegoActorPresenter : public LegoEntityPresenter { public: - ~LegoActorPresenter() override{}; + // LegoActorPresenter() {} + + // FUNCTION: LEGO1 0x100679c0 + ~LegoActorPresenter() override {} // FUNCTION: LEGO1 0x1000cb10 inline const char* ClassName() const override // vtable+0x0c diff --git a/LEGO1/lego/legoomni/include/legoentitypresenter.h b/LEGO1/lego/legoomni/include/legoentitypresenter.h index cf0bd60a..2ff162ec 100644 --- a/LEGO1/lego/legoomni/include/legoentitypresenter.h +++ b/LEGO1/lego/legoomni/include/legoentitypresenter.h @@ -35,7 +35,7 @@ class LegoEntityPresenter : public MxCompositePresenter { void SetEntityLocation(Vector3& p_location, Vector3& p_direction, Vector3& p_up); - inline LegoEntity* GetEntity() { return m_entity; } + inline LegoEntity* GetInternalEntity() { return m_entity; } inline void SetInternalEntity(LegoEntity* p_entity) { m_entity = p_entity; } // SYNTHETIC: LEGO1 0x100535a0 diff --git a/LEGO1/lego/legoomni/include/legomodelpresenter.h b/LEGO1/lego/legoomni/include/legomodelpresenter.h index b8954253..bde10f31 100644 --- a/LEGO1/lego/legoomni/include/legomodelpresenter.h +++ b/LEGO1/lego/legoomni/include/legomodelpresenter.h @@ -12,7 +12,9 @@ class MxDSChunk; // SIZE 0x6c (discovered through inline constructor at 0x10009ae6) class LegoModelPresenter : public MxVideoPresenter { public: - // inline in scalar dtor + LegoModelPresenter() { Reset(); } + + // FUNCTION: LEGO1 0x10067a10 ~LegoModelPresenter() override { Destroy(TRUE); } static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig); @@ -34,9 +36,9 @@ class LegoModelPresenter : public MxVideoPresenter { void ParseExtra() override; // vtable+0x30 void Destroy() override; // vtable+0x38 - void FUN_1007ff70(MxDSChunk p_chunk, LegoEntity* p_entity, undefined4 p_modelUnknown0x34, LegoWorld* p_world); + void FUN_1007ff70(MxDSChunk& p_chunk, LegoEntity* p_entity, undefined p_modelUnknown0x34, LegoWorld* p_world); - inline void Clear() + inline void Reset() { m_roi = NULL; m_addedToView = FALSE; diff --git a/LEGO1/lego/legoomni/include/legopartpresenter.h b/LEGO1/lego/legoomni/include/legopartpresenter.h index 90cc2ddc..8f3cda07 100644 --- a/LEGO1/lego/legoomni/include/legopartpresenter.h +++ b/LEGO1/lego/legoomni/include/legopartpresenter.h @@ -36,7 +36,7 @@ class LegoPartPresenter : public MxMediaPresenter { inline void Reset() { m_partData = NULL; } - MxResult ParsePart(MxDSChunk& p_chunk); + MxResult Read(MxDSChunk& p_chunk); void FUN_1007df20(); private: diff --git a/LEGO1/lego/legoomni/include/legotexturepresenter.h b/LEGO1/lego/legoomni/include/legotexturepresenter.h index 657d3a52..98471be4 100644 --- a/LEGO1/lego/legoomni/include/legotexturepresenter.h +++ b/LEGO1/lego/legoomni/include/legotexturepresenter.h @@ -30,7 +30,7 @@ class LegoTexturePresenter : public MxMediaPresenter { // SYNTHETIC: LEGO1 0x1000cf40 // LegoTexturePresenter::`scalar deleting destructor' - MxResult ParseTexture(MxDSChunk& p_chunk); + MxResult Read(MxDSChunk& p_chunk); void FUN_1004f290(); private: diff --git a/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp b/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp index ce3e2ba3..409f8b2d 100644 --- a/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp +++ b/LEGO1/lego/legoomni/src/entity/legoworldpresenter.cpp @@ -226,7 +226,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world) chunk.SetData(buff); LegoTexturePresenter texturePresenter; - if (texturePresenter.ParseTexture(chunk) == SUCCESS) { + if (texturePresenter.Read(chunk) == SUCCESS) { texturePresenter.FUN_1004f290(); } @@ -245,7 +245,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world) chunk.SetData(buff); LegoPartPresenter partPresenter; - if (partPresenter.ParsePart(chunk) == SUCCESS) { + if (partPresenter.Read(chunk) == SUCCESS) { partPresenter.FUN_1007df20(); } @@ -321,6 +321,7 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile) { MxResult result; MxU8* buffer = new MxU8[p_part.m_partDataLength]; + fseek(p_wdbFile, p_part.m_partDataOffset, 0); if (fread(buffer, p_part.m_partDataLength, 1, p_wdbFile) != 1) { return FAILURE; @@ -331,7 +332,8 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile) chunk.SetData(buffer); LegoPartPresenter part; - result = part.ParsePart(chunk); + result = part.Read(chunk); + if (result == SUCCESS) { part.FUN_1007df20(); } @@ -343,47 +345,51 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile) // FUNCTION: LEGO1 0x100674b0 MxResult LegoWorldPresenter::FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile, LegoWorld* p_world) { - MxU8* buffer = new MxU8[p_model.m_unk0x04]; + MxU8* buff = new MxU8[p_model.m_unk0x04]; + fseek(p_wdbFile, p_model.m_unk0x08, 0); - if (fread(buffer, p_model.m_unk0x04, 1, p_wdbFile) != 1) { + if (fread(buff, p_model.m_unk0x04, 1, p_wdbFile) != 1) { return FAILURE; } MxDSChunk chunk; chunk.SetLength(p_model.m_unk0x04); - chunk.SetData(buffer); + chunk.SetData(buff); MxDSAction action; + MxAtomId atom; action.SetLocation(Vector3(p_model.m_location)); action.SetDirection(Vector3(p_model.m_direction)); - Vector3 up = Vector3(Vector3(p_model.m_direction)); - action.SetUp(up); + action.SetUp(Vector3(p_model.m_direction)); - action.SetObjectId(m_unk0x50); + MxU32 objectId = m_unk0x50; m_unk0x50++; - action.SetAtomId(MxAtomId()); + action.SetObjectId(objectId); - LegoEntity* createdEntity; + action.SetAtomId(atom); - if (strcmp(p_model.m_presenterName, "LegoActorPresenter") == 0) { - LegoActorPresenter actor; - LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoActor"); - actor.SetInternalEntity(entity); - createdEntity = entity; - actor.SetEntityLocation(Vector3(), Vector3(), Vector3()); + LegoEntity* createdEntity = NULL; + + if (!strcmp(p_model.m_presenterName, "LegoActorPresenter")) { + LegoActorPresenter presenter; + presenter.SetAction(&action); + LegoEntity* entity = (LegoEntity*) presenter.CreateEntity("LegoActor"); + presenter.SetInternalEntity(entity); + presenter + .SetEntityLocation(Vector3(p_model.m_location), Vector3(p_model.m_direction), Vector3(p_model.m_direction)); entity->Create(action); } - else if (strcmp(p_model.m_presenterName, "LegoEntityPresenter") == 0) { - LegoActorPresenter actor; - LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoEntity"); - actor.SetInternalEntity(entity); - createdEntity = entity; - actor.SetEntityLocation(Vector3(), Vector3(), Vector3()); - entity->Create(action); + else if (!strcmp(p_model.m_presenterName, "LegoEntityPresenter")) { + LegoEntityPresenter presenter; + presenter.SetAction(&action); + createdEntity = (LegoEntity*) presenter.CreateEntity("LegoEntity"); + presenter.SetInternalEntity(createdEntity); + presenter + .SetEntityLocation(Vector3(p_model.m_location), Vector3(p_model.m_direction), Vector3(p_model.m_direction)); + createdEntity->Create(action); } LegoModelPresenter modelPresenter; - modelPresenter.Clear(); if (createdEntity != NULL) { action.SetLocation(Mx3DPointFloat(0.0, 0.0, 0.0)); @@ -393,7 +399,7 @@ MxResult LegoWorldPresenter::FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile modelPresenter.SetAction(&action); modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world); - delete buffer; + delete[] buff; return SUCCESS; } diff --git a/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp b/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp index a9e0111d..36433c4a 100644 --- a/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legomodelpresenter.cpp @@ -204,9 +204,9 @@ MxResult LegoModelPresenter::CreateROI(MxStreamChunk* p_chunk) // STUB: LEGO1 0x1007ff70 void LegoModelPresenter::FUN_1007ff70( - MxDSChunk p_chunk, + MxDSChunk& p_chunk, LegoEntity* p_entity, - undefined4 p_modelUnknown0x34, + undefined p_modelUnknown0x34, LegoWorld* p_world ) { @@ -224,13 +224,13 @@ void LegoModelPresenter::ReadyTickle() if (m_roi != NULL) { if (m_compositePresenter && m_compositePresenter->IsA("LegoEntityPresenter")) { - ((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->SetROI(m_roi, m_addedToView, TRUE); + ((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->SetROI(m_roi, m_addedToView, TRUE); ((LegoEntityPresenter*) m_compositePresenter) - ->GetEntity() + ->GetInternalEntity() ->SetFlags( - ((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2 + ((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->GetFlags() & ~LegoEntity::c_bit2 ); - ((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->FUN_100114e0(0); + ((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->FUN_100114e0(0); } ParseExtra(); @@ -250,11 +250,12 @@ void LegoModelPresenter::ReadyTickle() VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_roi); if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoEntityPresenter")) { - ((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->SetROI(m_roi, TRUE, TRUE); + ((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->SetROI(m_roi, TRUE, TRUE); ((LegoEntityPresenter*) m_compositePresenter) - ->GetEntity() + ->GetInternalEntity() ->SetFlags( - ((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2 + ((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->GetFlags() & + ~LegoEntity::c_bit2 ); } diff --git a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp index b792f202..e121e475 100644 --- a/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legopartpresenter.cpp @@ -36,7 +36,7 @@ void LegoPartPresenter::Destroy(MxBool p_fromDestructor) } // STUB: LEGO1 0x1007ca30 -MxResult LegoPartPresenter::ParsePart(MxDSChunk& p_chunk) +MxResult LegoPartPresenter::Read(MxDSChunk& p_chunk) { // TODO return SUCCESS; diff --git a/LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp b/LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp index b101b2c9..619ca81d 100644 --- a/LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp +++ b/LEGO1/lego/legoomni/src/video/legotexturepresenter.cpp @@ -20,7 +20,7 @@ MxResult LegoTexturePresenter::AddToManager() } // STUB: LEGO1 0x1004ebd0 -MxResult LegoTexturePresenter::ParseTexture(MxDSChunk& p_chunk) +MxResult LegoTexturePresenter::Read(MxDSChunk& p_chunk) { // TODO return SUCCESS; diff --git a/LEGO1/omni/include/mxentity.h b/LEGO1/omni/include/mxentity.h index ed75d148..217fa397 100644 --- a/LEGO1/omni/include/mxentity.h +++ b/LEGO1/omni/include/mxentity.h @@ -15,7 +15,7 @@ class MxEntity : public MxCore { MxEntity() { this->m_mxEntityId = -1; } // FUNCTION: LEGO1 0x1000c110 - ~MxEntity() override{}; + ~MxEntity() override {} // FUNCTION: LEGO1 0x1000c180 inline const char* ClassName() const override // vtable+0x0c diff --git a/LEGO1/omni/include/mxpresenter.h b/LEGO1/omni/include/mxpresenter.h index 3ce4879a..f0c3e1b8 100644 --- a/LEGO1/omni/include/mxpresenter.h +++ b/LEGO1/omni/include/mxpresenter.h @@ -29,7 +29,7 @@ class MxPresenter : public MxCore { MxPresenter() { Init(); } // FUNCTION: LEGO1 0x1000bf00 - ~MxPresenter() override{}; // vtable+0x00 + ~MxPresenter() override {} // vtable+0x00 MxResult Tickle() override; // vtable+0x08 diff --git a/LEGO1/realtime/vector.h b/LEGO1/realtime/vector.h index f42e1f89..8b41cc13 100644 --- a/LEGO1/realtime/vector.h +++ b/LEGO1/realtime/vector.h @@ -13,8 +13,6 @@ class Vector2 { // FUNCTION: LEGO1 0x1000c0f0 inline Vector2(float* p_data) { SetData(p_data); } - inline Vector2() {} - // Note: virtual function overloads appear in the virtual table // in reverse order of appearance. @@ -157,8 +155,6 @@ class Vector3 : public Vector2 { // FUNCTION: LEGO1 0x1001d150 inline Vector3(float* p_data) : Vector2(p_data) {} - inline Vector3() {} - // Hack: Some code initializes a Vector3 from a (most likely) const float* source. // Example: LegoCameraController::GetWorldUp // Vector3 however is a class that can mutate its underlying source, making