From 73d2782c5ee5df06755f43af8a7a42f204ab4ded Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Sun, 18 Jun 2023 20:02:49 +0200 Subject: [PATCH] add WIP MxDSObject stuff --- ISLE/isle.cpp | 3 +-- LEGO1/mxatomid.cpp | 6 ++++++ LEGO1/mxatomid.h | 7 ++++++- LEGO1/mxdsobject.cpp | 22 ++++++++++++++++++++++ LEGO1/mxdsobject.h | 8 ++++++-- isle.mak | 38 ++++++++++++++++++++++++++++++++++---- isle.mdp | Bin 48640 -> 49152 bytes 7 files changed, 75 insertions(+), 9 deletions(-) create mode 100755 LEGO1/mxatomid.cpp 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 492da89e209f501b79d9792948c4d46586a06c38..33674c1f5202e896e55de35a4776bd2abd389b3b 100644 GIT binary patch delta 476 zcmZqp!_?5g%;Od8ZotgI!jQngz_eMA>kH!|CKiEE1|5cY1|y{= z4sJ#e>kH#1E)D^K|I7@3Y&J17RBYeKx*&Wb>*iINFBmt;a0ua$F~BL~f>S19CD-Ib zaoRkICHc9TDSF8T1&oZ79~Oyj-j~$OJlQl^lOwkRBDdK(Z5aoK+RYF1W}&GoEox$( zY+uUF2GKV;u~=gB_tG#CK@q(eA6IvO!x)&6AgRgUOI0RYOw8DvP}ak=S$+~T)8^Q! zWsH;gCQd>KO^&VlJ-L5^=H#{0H6}+?>r7r-tp`-WHu?7S?*hE+3|#g*m>CW*Okl`J z2L_WM*9ZPdEBqKkHVUq1WYpOFe`Oe>WI6)_gBB3OXdn{|^d~pQDs7&yx`GdTs0xNL Zgfm1iL^4D%L^H%N#4^Nf7L<9<2mm$XrVIc8 delta 381 zcmZo@U~c%s#N!q0ZotgI!Vu5Ez_eMA>kH!|CKiDZ1|5bt1|y{= z4sONekpu3_H%rz}il@}Dx5&GWnU*(cZ4t8SVa%QV?`qRQmhn&!!G zCa6yCnXW!LcDnxLyVW|Ab!!YZ7u4}FPVVjvn(SZCI+?#uYx3P*-N_GnSSR!J_)LCK zqcM3yE!*UR7PiU!Ge2%r&|?%(VPa6z|I5O#W8Eg!7qd690>kA4@1#|J8-+G7GOBO> zzdDRjGL?Y=7(fgRFdE1N1O3U2(n^~rtgYbNd?EG+qhKgQ7(+Ni1Vbc46hkya3`6W@ IL7DfA0Fyq02><{9