diff --git a/ISLE/isle.cpp b/ISLE/isle.cpp index f8d9711b..600c0fd8 100644 --- a/ISLE/isle.cpp +++ b/ISLE/isle.cpp @@ -87,8 +87,7 @@ void Isle::close() VideoManager()->Get3DManager()->GetLego3DView()->GetViewManager()->RemoveAll(NULL); - long local_88 = 0; - Lego()->RemoveWorld(ds.GetAtomId(), local_88); + Lego()->RemoveWorld(ds.GetAtomId(), ds.GetUnknown1c()); Lego()->vtable24(ds); TransitionManager()->SetWaitIndicator(NULL); Lego()->vtable3c(); diff --git a/LEGO1/mxatomid.cpp b/LEGO1/mxatomid.cpp new file mode 100755 index 00000000..c4413f28 --- /dev/null +++ b/LEGO1/mxatomid.cpp @@ -0,0 +1,6 @@ +#include "mxatomid.h" + +MxAtomId::~MxAtomId() +{ + // TODO +} \ No newline at end of file diff --git a/LEGO1/mxatomid.h b/LEGO1/mxatomid.h index 3e3ce24b..4c0983c9 100644 --- a/LEGO1/mxatomid.h +++ b/LEGO1/mxatomid.h @@ -10,8 +10,13 @@ class MxAtomId __declspec(dllexport) MxAtomId &operator=(const MxAtomId &id); __declspec(dllexport) ~MxAtomId(); - char *m_internal; + MxAtomId() + { + this->m_internal = 0; + }; +private: + char *m_internal; }; #endif // MXATOMID_H diff --git a/LEGO1/mxdsobject.cpp b/LEGO1/mxdsobject.cpp index 13aa78ff..93c0febb 100644 --- a/LEGO1/mxdsobject.cpp +++ b/LEGO1/mxdsobject.cpp @@ -3,6 +3,28 @@ #include #include +MxDSObject::MxDSObject() +{ + // The following code yields 100% matching assembly if m_unk24 is declared as (signed) short. + // However, in other areas m_unk24 (notably, ISLE.EXE) is treated as unsigned short. + // this->m_unk0c = 0; + // this->m_unk10 = 0; + // this->m_unk14 = 0; + // this->m_name = NULL; + // this->m_unk24 = -1; + // this->m_unk1c = -1; + // this->m_unk28 = 0; + + // Assembly not matching but m_unk24 is unsigned short (probably correct) + this->m_unk0c = 0; + this->m_unk10 = 0; + this->m_unk14 = 0; + this->m_name = NULL; + this->m_unk24 = 0xFFFF; + this->m_unk1c = -1; + this->m_unk28 = 0; +} + void MxDSObject::SetObjectName(const char *p_name) { // TODO: instead of the expected CMP EAX,ESI we get CMP ESI,EAX diff --git a/LEGO1/mxdsobject.h b/LEGO1/mxdsobject.h index c1c71643..31320808 100644 --- a/LEGO1/mxdsobject.h +++ b/LEGO1/mxdsobject.h @@ -9,15 +9,19 @@ class MxDSObject : public MxCore public: __declspec(dllexport) void SetObjectName(const char *); + MxDSObject(); + inline const MxAtomId& GetAtomId() { return this->m_atomId; } + inline int GetUnknown1c() { return this->m_unk1c; } + inline void SetAtomId(MxAtomId p_atomId) { this->m_atomId = p_atomId; } inline void SetUnkown1c(int p_unk1c) { this->m_unk1c = p_unk1c; } inline void SetUnknown24(unsigned short p_unk24) { this->m_unk24 = p_unk24; } private: int m_unk08; - int m_unk0c; - int m_unk10; + short m_unk0c; + char* m_unk10; int m_unk14; char *m_name; int m_unk1c; diff --git a/isle.mak b/isle.mak index 357edcc9..de1f256e 100644 --- a/isle.mak +++ b/isle.mak @@ -57,6 +57,7 @@ CLEAN : -@erase "$(INTDIR)\dllmain.obj" -@erase "$(INTDIR)\legonavcontroller.obj" -@erase "$(INTDIR)\legoomni.obj" + -@erase "$(INTDIR)\mxatomid.obj" -@erase "$(INTDIR)\mxautolocker.obj" -@erase "$(INTDIR)\mxcore.obj" -@erase "$(INTDIR)\mxcriticalsection.obj" @@ -129,6 +130,7 @@ LINK32_OBJS= \ "$(INTDIR)\dllmain.obj" \ "$(INTDIR)\legonavcontroller.obj" \ "$(INTDIR)\legoomni.obj" \ + "$(INTDIR)\mxatomid.obj" \ "$(INTDIR)\mxautolocker.obj" \ "$(INTDIR)\mxcore.obj" \ "$(INTDIR)\mxcriticalsection.obj" \ @@ -168,6 +170,7 @@ CLEAN : -@erase "$(INTDIR)\dllmain.obj" -@erase "$(INTDIR)\legonavcontroller.obj" -@erase "$(INTDIR)\legoomni.obj" + -@erase "$(INTDIR)\mxatomid.obj" -@erase "$(INTDIR)\mxautolocker.obj" -@erase "$(INTDIR)\mxcore.obj" -@erase "$(INTDIR)\mxcriticalsection.obj" @@ -244,6 +247,7 @@ LINK32_OBJS= \ "$(INTDIR)\dllmain.obj" \ "$(INTDIR)\legonavcontroller.obj" \ "$(INTDIR)\legoomni.obj" \ + "$(INTDIR)\mxatomid.obj" \ "$(INTDIR)\mxautolocker.obj" \ "$(INTDIR)\mxcore.obj" \ "$(INTDIR)\mxcriticalsection.obj" \ @@ -284,6 +288,7 @@ CLEAN : -@erase "$(INTDIR)\isle.obj" -@erase "$(INTDIR)\isle.res" -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\mxatomid.obj" -@erase "$(INTDIR)\mxomnicreateparambase.obj" -@erase ".\Release\ISLE.EXE" @@ -344,6 +349,7 @@ LINK32_OBJS= \ "$(INTDIR)\isle.obj" \ "$(INTDIR)\isle.res" \ "$(INTDIR)\main.obj" \ + "$(INTDIR)\mxatomid.obj" \ "$(INTDIR)\mxomnicreateparambase.obj" \ ".\Release\LEGO1.LIB" @@ -374,6 +380,7 @@ CLEAN : -@erase "$(INTDIR)\isle.obj" -@erase "$(INTDIR)\isle.res" -@erase "$(INTDIR)\main.obj" + -@erase "$(INTDIR)\mxatomid.obj" -@erase "$(INTDIR)\mxomnicreateparambase.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" @@ -438,6 +445,7 @@ LINK32_OBJS= \ "$(INTDIR)\isle.obj" \ "$(INTDIR)\isle.res" \ "$(INTDIR)\main.obj" \ + "$(INTDIR)\mxatomid.obj" \ "$(INTDIR)\mxomnicreateparambase.obj" \ ".\LEGO1\Debug\LEGO1.lib" @@ -736,6 +744,19 @@ DEP_CPP_MXDSO=\ $(CPP) $(CPP_PROJ) $(SOURCE) +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\LEGO1\mxatomid.cpp +DEP_CPP_MXATO=\ + ".\LEGO1\mxatomid.h"\ + + +"$(INTDIR)\mxatomid.obj" : $(SOURCE) $(DEP_CPP_MXATO) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + # End Source File # End Target ################################################################################ @@ -858,9 +879,7 @@ DEP_CPP_ISLE_=\ ".\LEGO1\mxticklemanager.h"\ ".\LEGO1\mxtimer.h"\ ".\LEGO1\mxtransitionmanager.h"\ - ".\LEGO1\mxvariabletable.h"\ ".\LEGO1\mxvideoparam.h"\ - ".\LEGO1\mxvideoparamflags.h"\ ".\LEGO1\viewmanager.h"\ @@ -960,9 +979,7 @@ DEP_CPP_MAIN_=\ ".\LEGO1\mxticklemanager.h"\ ".\LEGO1\mxtimer.h"\ ".\LEGO1\mxtransitionmanager.h"\ - ".\LEGO1\mxvariabletable.h"\ ".\LEGO1\mxvideoparam.h"\ - ".\LEGO1\mxvideoparamflags.h"\ ".\LEGO1\viewmanager.h"\ @@ -1445,6 +1462,19 @@ SOURCE=.\LEGO1\mxvideoparamflags.h !ENDIF # End Project Dependency +################################################################################ +# Begin Source File + +SOURCE=.\LEGO1\mxatomid.cpp +DEP_CPP_MXATO=\ + ".\LEGO1\mxatomid.h"\ + + +"$(INTDIR)\mxatomid.obj" : $(SOURCE) $(DEP_CPP_MXATO) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +# End Source File # End Target # End Project ################################################################################ diff --git a/isle.mdp b/isle.mdp index 492da89e..33674c1f 100644 Binary files a/isle.mdp and b/isle.mdp differ