Fixes/match

This commit is contained in:
Christian Semmler 2024-03-03 19:55:40 -05:00
parent 2fc7410e1d
commit dc73e2dc9d
12 changed files with 58 additions and 50 deletions

View File

@ -7,7 +7,10 @@
// SIZE 0x50 // SIZE 0x50
class LegoActorPresenter : public LegoEntityPresenter { class LegoActorPresenter : public LegoEntityPresenter {
public: public:
~LegoActorPresenter() override{}; // LegoActorPresenter() {}
// FUNCTION: LEGO1 0x100679c0
~LegoActorPresenter() override {}
// FUNCTION: LEGO1 0x1000cb10 // FUNCTION: LEGO1 0x1000cb10
inline const char* ClassName() const override // vtable+0x0c inline const char* ClassName() const override // vtable+0x0c

View File

@ -35,7 +35,7 @@ class LegoEntityPresenter : public MxCompositePresenter {
void SetEntityLocation(Vector3& p_location, Vector3& p_direction, Vector3& p_up); 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; } inline void SetInternalEntity(LegoEntity* p_entity) { m_entity = p_entity; }
// SYNTHETIC: LEGO1 0x100535a0 // SYNTHETIC: LEGO1 0x100535a0

View File

@ -12,7 +12,9 @@ class MxDSChunk;
// SIZE 0x6c (discovered through inline constructor at 0x10009ae6) // SIZE 0x6c (discovered through inline constructor at 0x10009ae6)
class LegoModelPresenter : public MxVideoPresenter { class LegoModelPresenter : public MxVideoPresenter {
public: public:
// inline in scalar dtor LegoModelPresenter() { Reset(); }
// FUNCTION: LEGO1 0x10067a10
~LegoModelPresenter() override { Destroy(TRUE); } ~LegoModelPresenter() override { Destroy(TRUE); }
static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig); static void configureLegoModelPresenter(MxS32 p_modelPresenterConfig);
@ -34,9 +36,9 @@ class LegoModelPresenter : public MxVideoPresenter {
void ParseExtra() override; // vtable+0x30 void ParseExtra() override; // vtable+0x30
void Destroy() override; // vtable+0x38 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_roi = NULL;
m_addedToView = FALSE; m_addedToView = FALSE;

View File

@ -36,7 +36,7 @@ class LegoPartPresenter : public MxMediaPresenter {
inline void Reset() { m_partData = NULL; } inline void Reset() { m_partData = NULL; }
MxResult ParsePart(MxDSChunk& p_chunk); MxResult Read(MxDSChunk& p_chunk);
void FUN_1007df20(); void FUN_1007df20();
private: private:

View File

@ -30,7 +30,7 @@ class LegoTexturePresenter : public MxMediaPresenter {
// SYNTHETIC: LEGO1 0x1000cf40 // SYNTHETIC: LEGO1 0x1000cf40
// LegoTexturePresenter::`scalar deleting destructor' // LegoTexturePresenter::`scalar deleting destructor'
MxResult ParseTexture(MxDSChunk& p_chunk); MxResult Read(MxDSChunk& p_chunk);
void FUN_1004f290(); void FUN_1004f290();
private: private:

View File

@ -226,7 +226,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
chunk.SetData(buff); chunk.SetData(buff);
LegoTexturePresenter texturePresenter; LegoTexturePresenter texturePresenter;
if (texturePresenter.ParseTexture(chunk) == SUCCESS) { if (texturePresenter.Read(chunk) == SUCCESS) {
texturePresenter.FUN_1004f290(); texturePresenter.FUN_1004f290();
} }
@ -245,7 +245,7 @@ MxResult LegoWorldPresenter::LoadWorld(char* p_worldName, LegoWorld* p_world)
chunk.SetData(buff); chunk.SetData(buff);
LegoPartPresenter partPresenter; LegoPartPresenter partPresenter;
if (partPresenter.ParsePart(chunk) == SUCCESS) { if (partPresenter.Read(chunk) == SUCCESS) {
partPresenter.FUN_1007df20(); partPresenter.FUN_1007df20();
} }
@ -321,6 +321,7 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
{ {
MxResult result; MxResult result;
MxU8* buffer = new MxU8[p_part.m_partDataLength]; MxU8* buffer = new MxU8[p_part.m_partDataLength];
fseek(p_wdbFile, p_part.m_partDataOffset, 0); fseek(p_wdbFile, p_part.m_partDataOffset, 0);
if (fread(buffer, p_part.m_partDataLength, 1, p_wdbFile) != 1) { if (fread(buffer, p_part.m_partDataLength, 1, p_wdbFile) != 1) {
return FAILURE; return FAILURE;
@ -331,7 +332,8 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
chunk.SetData(buffer); chunk.SetData(buffer);
LegoPartPresenter part; LegoPartPresenter part;
result = part.ParsePart(chunk); result = part.Read(chunk);
if (result == SUCCESS) { if (result == SUCCESS) {
part.FUN_1007df20(); part.FUN_1007df20();
} }
@ -343,47 +345,51 @@ MxResult LegoWorldPresenter::FUN_10067360(ModelDbPart& p_part, FILE* p_wdbFile)
// FUNCTION: LEGO1 0x100674b0 // FUNCTION: LEGO1 0x100674b0
MxResult LegoWorldPresenter::FUN_100674b0(ModelDbModel& p_model, FILE* p_wdbFile, LegoWorld* p_world) 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); 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; return FAILURE;
} }
MxDSChunk chunk; MxDSChunk chunk;
chunk.SetLength(p_model.m_unk0x04); chunk.SetLength(p_model.m_unk0x04);
chunk.SetData(buffer); chunk.SetData(buff);
MxDSAction action; MxDSAction action;
MxAtomId atom;
action.SetLocation(Vector3(p_model.m_location)); action.SetLocation(Vector3(p_model.m_location));
action.SetDirection(Vector3(p_model.m_direction)); action.SetDirection(Vector3(p_model.m_direction));
Vector3 up = Vector3(Vector3(p_model.m_direction)); action.SetUp(Vector3(p_model.m_direction));
action.SetUp(up);
action.SetObjectId(m_unk0x50); MxU32 objectId = m_unk0x50;
m_unk0x50++; m_unk0x50++;
action.SetAtomId(MxAtomId()); action.SetObjectId(objectId);
LegoEntity* createdEntity; action.SetAtomId(atom);
if (strcmp(p_model.m_presenterName, "LegoActorPresenter") == 0) { LegoEntity* createdEntity = NULL;
LegoActorPresenter actor;
LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoActor"); if (!strcmp(p_model.m_presenterName, "LegoActorPresenter")) {
actor.SetInternalEntity(entity); LegoActorPresenter presenter;
createdEntity = entity; presenter.SetAction(&action);
actor.SetEntityLocation(Vector3(), Vector3(), Vector3()); 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); entity->Create(action);
} }
else if (strcmp(p_model.m_presenterName, "LegoEntityPresenter") == 0) { else if (!strcmp(p_model.m_presenterName, "LegoEntityPresenter")) {
LegoActorPresenter actor; LegoEntityPresenter presenter;
LegoEntity* entity = (LegoEntity*) actor.CreateEntity("LegoEntity"); presenter.SetAction(&action);
actor.SetInternalEntity(entity); createdEntity = (LegoEntity*) presenter.CreateEntity("LegoEntity");
createdEntity = entity; presenter.SetInternalEntity(createdEntity);
actor.SetEntityLocation(Vector3(), Vector3(), Vector3()); presenter
entity->Create(action); .SetEntityLocation(Vector3(p_model.m_location), Vector3(p_model.m_direction), Vector3(p_model.m_direction));
createdEntity->Create(action);
} }
LegoModelPresenter modelPresenter; LegoModelPresenter modelPresenter;
modelPresenter.Clear();
if (createdEntity != NULL) { if (createdEntity != NULL) {
action.SetLocation(Mx3DPointFloat(0.0, 0.0, 0.0)); 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.SetAction(&action);
modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world); modelPresenter.FUN_1007ff70(chunk, createdEntity, p_model.m_unk0x34, p_world);
delete buffer; delete[] buff;
return SUCCESS; return SUCCESS;
} }

View File

@ -204,9 +204,9 @@ MxResult LegoModelPresenter::CreateROI(MxStreamChunk* p_chunk)
// STUB: LEGO1 0x1007ff70 // STUB: LEGO1 0x1007ff70
void LegoModelPresenter::FUN_1007ff70( void LegoModelPresenter::FUN_1007ff70(
MxDSChunk p_chunk, MxDSChunk& p_chunk,
LegoEntity* p_entity, LegoEntity* p_entity,
undefined4 p_modelUnknown0x34, undefined p_modelUnknown0x34,
LegoWorld* p_world LegoWorld* p_world
) )
{ {
@ -224,13 +224,13 @@ void LegoModelPresenter::ReadyTickle()
if (m_roi != NULL) { if (m_roi != NULL) {
if (m_compositePresenter && m_compositePresenter->IsA("LegoEntityPresenter")) { 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) ((LegoEntityPresenter*) m_compositePresenter)
->GetEntity() ->GetInternalEntity()
->SetFlags( ->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(); ParseExtra();
@ -250,11 +250,12 @@ void LegoModelPresenter::ReadyTickle()
VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_roi); VideoManager()->Get3DManager()->GetLego3DView()->Moved(*m_roi);
if (m_compositePresenter != NULL && m_compositePresenter->IsA("LegoEntityPresenter")) { 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) ((LegoEntityPresenter*) m_compositePresenter)
->GetEntity() ->GetInternalEntity()
->SetFlags( ->SetFlags(
((LegoEntityPresenter*) m_compositePresenter)->GetEntity()->GetFlags() & ~LegoEntity::c_bit2 ((LegoEntityPresenter*) m_compositePresenter)->GetInternalEntity()->GetFlags() &
~LegoEntity::c_bit2
); );
} }

View File

@ -36,7 +36,7 @@ void LegoPartPresenter::Destroy(MxBool p_fromDestructor)
} }
// STUB: LEGO1 0x1007ca30 // STUB: LEGO1 0x1007ca30
MxResult LegoPartPresenter::ParsePart(MxDSChunk& p_chunk) MxResult LegoPartPresenter::Read(MxDSChunk& p_chunk)
{ {
// TODO // TODO
return SUCCESS; return SUCCESS;

View File

@ -20,7 +20,7 @@ MxResult LegoTexturePresenter::AddToManager()
} }
// STUB: LEGO1 0x1004ebd0 // STUB: LEGO1 0x1004ebd0
MxResult LegoTexturePresenter::ParseTexture(MxDSChunk& p_chunk) MxResult LegoTexturePresenter::Read(MxDSChunk& p_chunk)
{ {
// TODO // TODO
return SUCCESS; return SUCCESS;

View File

@ -15,7 +15,7 @@ class MxEntity : public MxCore {
MxEntity() { this->m_mxEntityId = -1; } MxEntity() { this->m_mxEntityId = -1; }
// FUNCTION: LEGO1 0x1000c110 // FUNCTION: LEGO1 0x1000c110
~MxEntity() override{}; ~MxEntity() override {}
// FUNCTION: LEGO1 0x1000c180 // FUNCTION: LEGO1 0x1000c180
inline const char* ClassName() const override // vtable+0x0c inline const char* ClassName() const override // vtable+0x0c

View File

@ -29,7 +29,7 @@ class MxPresenter : public MxCore {
MxPresenter() { Init(); } MxPresenter() { Init(); }
// FUNCTION: LEGO1 0x1000bf00 // FUNCTION: LEGO1 0x1000bf00
~MxPresenter() override{}; // vtable+0x00 ~MxPresenter() override {} // vtable+0x00
MxResult Tickle() override; // vtable+0x08 MxResult Tickle() override; // vtable+0x08

View File

@ -13,8 +13,6 @@ class Vector2 {
// FUNCTION: LEGO1 0x1000c0f0 // FUNCTION: LEGO1 0x1000c0f0
inline Vector2(float* p_data) { SetData(p_data); } inline Vector2(float* p_data) { SetData(p_data); }
inline Vector2() {}
// Note: virtual function overloads appear in the virtual table // Note: virtual function overloads appear in the virtual table
// in reverse order of appearance. // in reverse order of appearance.
@ -157,8 +155,6 @@ class Vector3 : public Vector2 {
// FUNCTION: LEGO1 0x1001d150 // FUNCTION: LEGO1 0x1001d150
inline Vector3(float* p_data) : Vector2(p_data) {} inline Vector3(float* p_data) : Vector2(p_data) {}
inline Vector3() {}
// Hack: Some code initializes a Vector3 from a (most likely) const float* source. // Hack: Some code initializes a Vector3 from a (most likely) const float* source.
// Example: LegoCameraController::GetWorldUp // Example: LegoCameraController::GetWorldUp
// Vector3 however is a class that can mutate its underlying source, making // Vector3 however is a class that can mutate its underlying source, making