mirror of
https://github.com/isledecomp/isle-portable.git
synced 2024-11-22 15:37:55 -05:00
lego1: implement MxDSObject (#55)
* Implement MxDSObject * use discovered names * Update LEGO1/mxdsobject.cpp Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com> * Update mxdsobject.cpp * Update mxdsobject.h --------- Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
This commit is contained in:
parent
6761345c8c
commit
6558a78848
2 changed files with 111 additions and 24 deletions
|
@ -7,9 +7,9 @@
|
||||||
MxDSObject::MxDSObject()
|
MxDSObject::MxDSObject()
|
||||||
{
|
{
|
||||||
this->m_unk0c = 0;
|
this->m_unk0c = 0;
|
||||||
this->m_unk10 = 0;
|
this->m_sourceName = NULL;
|
||||||
this->m_unk14 = 0;
|
this->m_unk14 = 0;
|
||||||
this->m_name = NULL;
|
this->m_objectName = NULL;
|
||||||
this->m_unk24 = -1;
|
this->m_unk24 = -1;
|
||||||
this->m_unk1c = -1;
|
this->m_unk1c = -1;
|
||||||
this->m_unk28 = 0;
|
this->m_unk28 = 0;
|
||||||
|
@ -18,25 +18,110 @@ MxDSObject::MxDSObject()
|
||||||
// OFFSET: LEGO1 0x100bf7e0
|
// OFFSET: LEGO1 0x100bf7e0
|
||||||
MxDSObject::~MxDSObject()
|
MxDSObject::~MxDSObject()
|
||||||
{
|
{
|
||||||
// TODO
|
delete[] m_objectName;
|
||||||
|
delete[] m_sourceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100bf870
|
||||||
|
void MxDSObject::CopyFrom(MxDSObject &p_dsObject)
|
||||||
|
{
|
||||||
|
this->SetSourceName(p_dsObject.m_sourceName);
|
||||||
|
this->m_unk14 = p_dsObject.m_unk14;
|
||||||
|
this->SetObjectName(p_dsObject.m_objectName);
|
||||||
|
this->m_unk1c = p_dsObject.m_unk1c;
|
||||||
|
this->m_unk24 = p_dsObject.m_unk24;
|
||||||
|
this->m_atomId = p_dsObject.m_atomId;
|
||||||
|
this->m_unk28 = p_dsObject.m_unk28;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100bf8c0
|
||||||
|
MxDSObject &MxDSObject::operator=(MxDSObject &p_dsObject)
|
||||||
|
{
|
||||||
|
if (this == &p_dsObject)
|
||||||
|
return *this;
|
||||||
|
|
||||||
|
this->CopyFrom(p_dsObject);
|
||||||
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100bf8e0
|
// OFFSET: LEGO1 0x100bf8e0
|
||||||
void MxDSObject::SetObjectName(const char *p_name)
|
void MxDSObject::SetObjectName(const char *p_name)
|
||||||
{
|
{
|
||||||
if (p_name != this->m_name)
|
if (p_name != this->m_objectName) {
|
||||||
{
|
delete[] this->m_objectName;
|
||||||
free(this->m_name);
|
|
||||||
|
|
||||||
if (p_name) {
|
if (p_name) {
|
||||||
this->m_name = (char *)malloc(strlen(p_name) + 1);
|
this->m_objectName = new char[strlen(p_name) + 1];
|
||||||
|
|
||||||
if (this->m_name) {
|
if (this->m_objectName) {
|
||||||
strcpy(this->m_name, p_name);
|
strcpy(this->m_objectName, p_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this->m_name = NULL;
|
this->m_objectName = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100bf950
|
||||||
|
void MxDSObject::SetSourceName(const char *p_sourceName)
|
||||||
|
{
|
||||||
|
if (p_sourceName != this->m_sourceName) {
|
||||||
|
delete[] this->m_sourceName;
|
||||||
|
|
||||||
|
if (p_sourceName) {
|
||||||
|
this->m_sourceName = new char[strlen(p_sourceName) + 1];
|
||||||
|
|
||||||
|
if (this->m_sourceName) {
|
||||||
|
strcpy(this->m_sourceName, p_sourceName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this->m_sourceName = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100bf9c0
|
||||||
|
int MxDSObject::unk14()
|
||||||
|
{
|
||||||
|
return 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100bf9d0
|
||||||
|
unsigned int MxDSObject::CalculateUnk08()
|
||||||
|
{
|
||||||
|
unsigned int unk08;
|
||||||
|
|
||||||
|
if (this->m_sourceName)
|
||||||
|
unk08 = strlen(this->m_sourceName) + 3;
|
||||||
|
else
|
||||||
|
unk08 = 3;
|
||||||
|
|
||||||
|
unk08 += 4;
|
||||||
|
|
||||||
|
if (this->m_objectName)
|
||||||
|
unk08 += strlen(this->m_objectName) + 1;
|
||||||
|
else
|
||||||
|
unk08++;
|
||||||
|
|
||||||
|
unk08 += 4;
|
||||||
|
this->m_unk08 = unk08;
|
||||||
|
return unk08;
|
||||||
|
}
|
||||||
|
|
||||||
|
// OFFSET: LEGO1 0x100bfa20
|
||||||
|
void MxDSObject::Parse(char **p_source, unsigned short p_unk24)
|
||||||
|
{
|
||||||
|
this->SetSourceName(*p_source);
|
||||||
|
*p_source += strlen(this->m_sourceName) + 1;
|
||||||
|
this->m_unk14 = *(int*) *p_source;
|
||||||
|
*p_source += 4;
|
||||||
|
|
||||||
|
this->SetObjectName(*p_source);
|
||||||
|
*p_source += strlen(this->m_objectName) + 1;
|
||||||
|
this->m_unk1c = *(int*) *p_source;
|
||||||
|
*p_source += 4;
|
||||||
|
|
||||||
|
this->m_unk24 = p_unk24;
|
||||||
|
}
|
||||||
|
|
|
@ -9,23 +9,25 @@
|
||||||
class MxDSObject : public MxCore
|
class MxDSObject : public MxCore
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
__declspec(dllexport) void SetObjectName(const char *);
|
__declspec(dllexport) void SetObjectName(const char *p_objectName);
|
||||||
|
|
||||||
MxDSObject();
|
MxDSObject();
|
||||||
virtual ~MxDSObject() override;
|
virtual ~MxDSObject() override;
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100bf730
|
MxDSObject &operator=(MxDSObject &p_dsObject);
|
||||||
inline virtual const char *ClassName() const override // vtable+0x0c
|
void CopyFrom(MxDSObject &p_dsObject);
|
||||||
{
|
|
||||||
// 0x10101400
|
// OFFSET: LEGO1 0x100bf730
|
||||||
return "MxDSObject";
|
inline virtual const char *ClassName() const override { return "MxDSObject"; }; // vtable+0c
|
||||||
}
|
|
||||||
|
|
||||||
// OFFSET: LEGO1 0x100bf740
|
// OFFSET: LEGO1 0x100bf740
|
||||||
inline virtual MxBool IsA(const char *name) const override // vtable+0x10
|
inline virtual MxBool IsA(const char *name) const override { return !strcmp(name, MxDSObject::ClassName()) || MxCore::IsA(name); }; // vtable+10;
|
||||||
{
|
|
||||||
return !strcmp(name, MxDSObject::ClassName()) || MxCore::IsA(name);
|
virtual int unk14(); // vtable+14;
|
||||||
}
|
virtual unsigned int CalculateUnk08(); // vtable+18;
|
||||||
|
virtual void Parse(char **p_source, unsigned short p_unk24); // vtable+1c;
|
||||||
|
|
||||||
|
void SetSourceName(const char *p_sourceName);
|
||||||
|
|
||||||
inline const MxAtomId& GetAtomId() { return this->m_atomId; }
|
inline const MxAtomId& GetAtomId() { return this->m_atomId; }
|
||||||
inline int GetUnknown1c() { return this->m_unk1c; }
|
inline int GetUnknown1c() { return this->m_unk1c; }
|
||||||
|
@ -38,11 +40,11 @@ class MxDSObject : public MxCore
|
||||||
inline void SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; }
|
inline void SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_unk08;
|
unsigned int m_unk08;
|
||||||
short m_unk0c;
|
short m_unk0c;
|
||||||
char* m_unk10;
|
char* m_sourceName;
|
||||||
int m_unk14;
|
int m_unk14;
|
||||||
char *m_name;
|
char *m_objectName;
|
||||||
int m_unk1c;
|
int m_unk1c;
|
||||||
MxAtomId m_atomId;
|
MxAtomId m_atomId;
|
||||||
short m_unk24;
|
short m_unk24;
|
||||||
|
|
Loading…
Reference in a new issue