diff --git a/LEGO1/modeldb/modeldb.cpp b/LEGO1/modeldb/modeldb.cpp index e472e7e7..2a492e10 100644 --- a/LEGO1/modeldb/modeldb.cpp +++ b/LEGO1/modeldb/modeldb.cpp @@ -1,21 +1,74 @@ #include "modeldb.h" +#include "windows.h" + DECOMP_SIZE_ASSERT(ModelDbWorld, 0x18) DECOMP_SIZE_ASSERT(ModelDbPart, 0x18) DECOMP_SIZE_ASSERT(ModelDbModel, 0x38) DECOMP_SIZE_ASSERT(ModelDbPartList, 0x1c) DECOMP_SIZE_ASSERT(ModelDbPartListCursor, 0x10) -// STUB: LEGO1 0x100276b0 +// FUNCTION: LEGO1 0x100276b0 MxResult ModelDbModel::Read(FILE* p_file) { - return SUCCESS; + MxU32 charSize; + + if (fread(&charSize, sizeof(MxU32), 1, p_file) != 1) { + return FAILURE; + } + m_modelName = new char[charSize]; + + if (fread(m_modelName, charSize, 1, p_file) != 1) { + return FAILURE; + } + + if (fread(&m_unk0x04, sizeof(undefined4), 1, p_file) != 1) { + return FAILURE; + } + if (fread(&m_unk0x08, sizeof(undefined4), 1, p_file) != 1) { + return FAILURE; + } + + if (fread(&charSize, sizeof(MxU32), 1, p_file) != 1) { + return FAILURE; + } + + m_presenter = new char[charSize]; + if (fread(m_presenter, charSize, 1, p_file) != 1) { + return FAILURE; + } + + if (fread(&m_unk0x10, sizeof(undefined4), 3, p_file) != 3) { + return FAILURE; + } + if (fread(&m_unk0x1c, sizeof(undefined4), 3, p_file) != 3) { + return FAILURE; + } + if (fread(&m_unk0x28, sizeof(undefined4), 3, p_file) != 3) { + return FAILURE; + } + + return fread(&m_unk0x34, sizeof(undefined), 1, p_file) == 1 ? SUCCESS : FAILURE; } -// STUB: LEGO1 0x10027850 +// FUNCTION: LEGO1 0x10027850 MxResult ModelDbPart::Read(FILE* p_file) { - return SUCCESS; + MxU32 size; + char roiNameBuffer[128]; + if (fread(&size, sizeof(MxU32), 1, p_file) != 1) { + return FAILURE; + } + if (fread(roiNameBuffer, size, 1, p_file) != 1) { + return FAILURE; + } + m_roiName = roiNameBuffer; + + if (fread(&m_unk0x10, sizeof(undefined4), 1, p_file) != 1) { + return FAILURE; + } + + return fread(&m_unk0x14, sizeof(undefined4), 1, p_file) == 1 ? SUCCESS : FAILURE; } // FUNCTION: LEGO1 0x10027910 diff --git a/LEGO1/modeldb/modeldb.h b/LEGO1/modeldb/modeldb.h index ad60e677..33a97ba8 100644 --- a/LEGO1/modeldb/modeldb.h +++ b/LEGO1/modeldb/modeldb.h @@ -93,8 +93,14 @@ class ModelDbPartListCursor : public MxListCursor { struct ModelDbModel { MxResult Read(FILE* p_file); - char* m_modelName; // 0x00 - undefined m_unk0x04[0x34]; // 0x04 + char* m_modelName; // 0x00 + undefined4 m_unk0x04; // 0x04 + undefined4 m_unk0x08; // 0x08 + char* m_presenter; // 0x0c + undefined4 m_unk0x10[3]; // 0x10 + undefined4 m_unk0x1c[3]; // 0x1c + undefined4 m_unk0x28[3]; // 0x28 + undefined m_unk0x34; // 0x34 }; // SIZE 0x18