From 216332e64d01f06313a3bb490c699d3b888a72be Mon Sep 17 00:00:00 2001 From: disinvite Date: Thu, 15 Jun 2023 10:56:07 -0400 Subject: [PATCH] Start on MxDirectDraw --- LEGO1/mxdirectdraw.cpp | 110 +++++++++++++++++++++++++++++++++++++++++ LEGO1/mxdirectdraw.h | 27 +++++++++- isle.mak | 44 ++++++++++++++--- isle.mdp | Bin 46592 -> 46080 bytes 4 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 LEGO1/mxdirectdraw.cpp diff --git a/LEGO1/mxdirectdraw.cpp b/LEGO1/mxdirectdraw.cpp new file mode 100644 index 00000000..2cd60b55 --- /dev/null +++ b/LEGO1/mxdirectdraw.cpp @@ -0,0 +1,110 @@ +#pragma comment(lib, "ddraw") + +#include "mxdirectdraw.h" + +HRESULT MxDirectDraw::SetEntries() +{ + HRESULT ret; + + if (m_unk848) { + if (m_ddpal) { + ret = m_ddpal->SetEntries(0, 0, 256, m_pal1); + if (ret != DD_OK) { + FUN_1009e830("SetEntries failed", ret); + return 0; + } + } + } + + return 1; +} + +HRESULT MxDirectDraw::FlipToGDISurface() +{ + HRESULT ret; + + if (m_ddraw) { + ret = m_ddraw->FlipToGDISurface(); + if (ret != DD_OK) { + FUN_1009e830("FlipToGDISurface failed", ret); + } + return !ret; + } + + return 1; +} + +void MxDirectDraw::FUN_1009e830(char *error_msg, HRESULT ret) +{ + if (!DAT_10100c70) { + DAT_10100c70 = 1; + vtable08(); + if (m_unk85c) { + m_unk85c(error_msg, ret, m_unk864); + } + } + + DAT_10100c70 = 0; +} + +int MxDirectDraw::GetPrimaryBitDepth() +{ + LPDIRECTDRAW pDDraw; + + DirectDrawCreate(NULL, &pDDraw, NULL); + + return 0; +} + +int MxDirectDraw::Pause(int param_1) +{ + if (param_1) { + m_unk86c++; + + if (m_unk86c > 1) { + return 1; + } + + if (!SetEntries()) { + return 0; + } + + if (m_unk84c) { + if (!FlipToGDISurface()) { + return 0; + } + + DrawMenuBar(hWindow); + RedrawWindow(hWindow, NULL, NULL, RDW_FRAME); + } + + return 1; + } else { + m_unk86c--; + if (m_unk86c > 0) { + return 1; + } else if (m_unk86c < 0) { + m_unk86c = 0; + } + FUN_1009e750(); + } + return 0; +} + + +HRESULT MxDirectDraw::FUN_1009e750() +{ + HRESULT ret; + + if (m_unk84c && m_unk848) { + if (m_ddpal) { + ret = m_ddpal->SetEntries(0, 0, 256, m_pal0); + if (ret != DD_OK) { + FUN_1009e830("SetEntries failed", ret); + return 0; + } + } + } + + return 1; +} diff --git a/LEGO1/mxdirectdraw.h b/LEGO1/mxdirectdraw.h index 04f73dde..4f69de01 100644 --- a/LEGO1/mxdirectdraw.h +++ b/LEGO1/mxdirectdraw.h @@ -1,12 +1,37 @@ #ifndef MXDIRECTDRAW_H #define MXDIRECTDRAW_H +#include +#include + class MxDirectDraw { public: - __declspec(dllexport) int FlipToGDISurface(); + HRESULT SetEntries(); + __declspec(dllexport) HRESULT FlipToGDISurface(); + void FUN_1009e830(char *, HRESULT); __declspec(dllexport) static int GetPrimaryBitDepth(); __declspec(dllexport) int Pause(int); + HRESULT FUN_1009e750(); + + virtual ~MxDirectDraw(); + virtual void vtable04(); + virtual void vtable08(); + +private: + IDirectDraw *m_ddraw; // +0xc + IDirectDrawPalette *m_ddpal; // +0x28 + PALETTEENTRY m_pal0[256]; // +0x2c + PALETTEENTRY m_pal1[256]; // +0x42c + HWND hWindow; // +0x83c + long m_unk848; + long m_unk84c; + void (*m_unk85c)(char *, HRESULT, long); // error handler or logger? + long m_unk864; + long m_unk86c; + }; +BOOL DAT_10100c70 = 0; + #endif // MXDIRECTDRAW_H diff --git a/isle.mak b/isle.mak index 22a99c81..e83884b7 100644 --- a/isle.mak +++ b/isle.mak @@ -59,6 +59,7 @@ CLEAN : -@erase "$(INTDIR)\legoomni.obj" -@erase "$(INTDIR)\mxcore.obj" -@erase "$(INTDIR)\mxcriticalsection.obj" + -@erase "$(INTDIR)\mxdirectdraw.obj" -@erase ".\Release\LEGO1.DLL" -@erase ".\Release\LEGO1.EXP" -@erase ".\Release\LEGO1.LIB" @@ -108,11 +109,11 @@ BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /pdb:"Release/LEGO1.PDB" /map:"Release/LEGO1.MAP" /machine:I386 /out:"Release/LEGO1.DLL" /implib:"Release/LEGO1.LIB" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /pdb:"Release/LEGO1.PDB" /map:"Release/LEGO1.MAP" /machine:I386 /out:"Release/LEGO1.DLL" /implib:"Release/LEGO1.LIB" # SUBTRACT LINK32 /pdb:none LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /dll /incremental:no\ + odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /incremental:no\ /pdb:"Release/LEGO1.PDB" /map:"Release/LEGO1.MAP" /machine:I386\ /out:"Release/LEGO1.DLL" /implib:"Release/LEGO1.LIB" LINK32_OBJS= \ @@ -120,7 +121,8 @@ LINK32_OBJS= \ "$(INTDIR)\legonavcontroller.obj" \ "$(INTDIR)\legoomni.obj" \ "$(INTDIR)\mxcore.obj" \ - "$(INTDIR)\mxcriticalsection.obj" + "$(INTDIR)\mxcriticalsection.obj" \ + "$(INTDIR)\mxdirectdraw.obj" ".\Release\LEGO1.DLL" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< @@ -150,6 +152,7 @@ CLEAN : -@erase "$(INTDIR)\legoomni.obj" -@erase "$(INTDIR)\mxcore.obj" -@erase "$(INTDIR)\mxcriticalsection.obj" + -@erase "$(INTDIR)\mxdirectdraw.obj" -@erase "$(INTDIR)\vc40.idb" -@erase "$(INTDIR)\vc40.pdb" -@erase "$(OUTDIR)\LEGO1.exp" @@ -203,11 +206,11 @@ BSC32_SBRS= \ LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /map /debug /machine:I386 /out:"Debug/LEGO1.DLL" +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /map /debug /machine:I386 /out:"Debug/LEGO1.DLL" # SUBTRACT LINK32 /pdb:none LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib\ advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib\ - odbccp32.lib /nologo /subsystem:windows /dll /incremental:yes\ + odbccp32.lib ddraw.lib /nologo /subsystem:windows /dll /incremental:yes\ /pdb:"$(OUTDIR)/LEGO1.pdb" /map:"$(INTDIR)/LEGO1.map" /debug /machine:I386\ /out:"Debug/LEGO1.DLL" /implib:"$(OUTDIR)/LEGO1.lib" LINK32_OBJS= \ @@ -215,7 +218,8 @@ LINK32_OBJS= \ "$(INTDIR)\legonavcontroller.obj" \ "$(INTDIR)\legoomni.obj" \ "$(INTDIR)\mxcore.obj" \ - "$(INTDIR)\mxcriticalsection.obj" + "$(INTDIR)\mxcriticalsection.obj" \ + "$(INTDIR)\mxdirectdraw.obj" ".\Debug\LEGO1.DLL" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @<< @@ -516,6 +520,34 @@ DEP_CPP_LEGON=\ $(CPP) $(CPP_PROJ) $(SOURCE) +# End Source File +################################################################################ +# Begin Source File + +SOURCE=.\LEGO1\mxdirectdraw.cpp + +!IF "$(CFG)" == "LEGO1 - Win32 Release" + +DEP_CPP_MXDIR=\ + ".\LEGO1\mxdirectdraw.h"\ + + +"$(INTDIR)\mxdirectdraw.obj" : $(SOURCE) $(DEP_CPP_MXDIR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ELSEIF "$(CFG)" == "LEGO1 - Win32 Debug" + +DEP_CPP_MXDIR=\ + ".\LEGO1\mxdirectdraw.h"\ + + +"$(INTDIR)\mxdirectdraw.obj" : $(SOURCE) $(DEP_CPP_MXDIR) "$(INTDIR)" + $(CPP) $(CPP_PROJ) $(SOURCE) + + +!ENDIF + # End Source File # End Target ################################################################################ diff --git a/isle.mdp b/isle.mdp index e90eca4dfadfa24959285422e1a107f6a76ad0c1..0f1727777cc40db00ffa8d0d4025118567494bfb 100644 GIT binary patch literal 46080 zcmeHQTXWM!6h2N!NWvxL#{Cj#%RPo9K!M)lgg_b!O=#10(wQojh}G!g$}*VgZ{daM z524R}?+blsU;7LC&>6bBwxpGJS1V>p0`YOii6{PcwfpI4_ndFFM+?jIm%CvHdmlP zGJp&q1IPd}fD9l5$N(~c3?Ku@05Y(h8F;Y=e!uy17d(e&@Vx%C%lBNvGuEx3SSdh1 zly2FMbtkmk-oDZ0<(Z{p#nr{R`FoSAjEF$J=@vHv2Se*^g}lkqW{GoqJQ9D zWB?gJ29N<{02x3AkO5=>89)Y*0b~Ff*j@~v{wIo@ouK~>!af*+VHkl?7=!(AV0)Q0 z_9l~oexm($w-CR5&q0|M$Tozquj$=_^xGZe-MeCh<;rCAVJiAC9eubG)pK`oVKMrQ ze~|%X02x3AkO5=>89)Y*0b~FfKn9QjWMJzVK>e>X^}j=K7>>YEI0nbz1dPMUtv5w% z!KN|L4@19f+QINZ$N(~c3?Ku@05X6KAOpw%GJp&q1IPd}u*D3Z{@0oM-#hRwya%V@ z44j2?a2_sfu^r;!H!Iyg#d5V;D4foQ(n7g_u3>vk;JNG?$!>qvlwwdW6s{|= z&5Q+ZgYNh*2Np>`KsNOo?i%T7^DtL6MQO4F!?Rr@w7L8US8|jRQX~{}6ymZZOy+>6 z6D3UNDAArPK}~a#?4g-1VJb)MZ5b2P29#9Jk|yNoYdUX2p1!uHPSEu=$)0dS(^t2# zW|TM91HbN>M%}cNd=C0!tl1>BMYUKtqd$i4J9%(rKOk8(CbadLc3_o5GcX<(D;MveHt5Dr0t^hVW~T;SeRCcefo-gjb3=dSxgyw@(y|u4fhFjcO~MEp z$KpA3)>^Bt^E0TPYj*9jDO6{6rsE{Dqwa*$X^UNItZF^o<$!QqHk=wUS9;CoDn<|D z8IL$aWW_FN&4wF@SP2+Txgr9MYP&*5MCGC-Gb}nH6}15+G@&CxujiDT-z0}PJLrgz z$N?RZDEy1;0v!>>1+(dn$QU~%u_Gc0=Ft_A4sC)fLN+`~yb-Fh0F`2|CgT> z@Rc-kp`;Mk8Fxla&DDw3Kc`=EP=|ko&Ka65Xa%Es)*P zrCFT1Y-+9XkKQWqGb1q26Ajo(f2 zBu%CrKA|}xRZShFFiwk7BZnz6EkminqZHh(K&jya6y6jJ)SwXxYSW$6=zfZB<>^#) zo^>g$HmNIQU1}Ga)bN2sV^V_-tK}tiq1|r7j1?O-j5Ht;Yt$fCm%m2GpDZgG;Wd|* zcciW~g>J>%YV-lVZiZ%>ZHCS6avQNOqpp|qKaylLpr#t5293&u7&V-5nrJX;7-?T5 zzooE;8EflO*rp|ZCm z&}dF5iU^D3ns1l8B~=WzQ1Oy`1}0ulkYGqW$BxD?v`b(olkUkD(-i$Y9+jf*xGdfg z@63tgJX%B&@rWhx@dK^E^UZqvz~pLHcq5)hPFRSR&SjU*zR0AKKwPYg14W^@2-=_2 zly(C}XslACgD(-tbs`DBL>Sk;DDD+OagI7ZM2a2eocP!s7x5>O{>v_D;tz{uVp%5@ zgo!wgha?Qsz@k7*gvCz*iDD~mDN@=@?tJmntynYH&LkWYVTTf`gn&#$#}5nPLNXB* z4|Iy4Of12*LI}%5G-uw)j4FR%2xn;tG{e$*moPz}4}YLCPR6$B#_j7(;h@IHWEdr#D#bZop0W06v6|;A8j%K84R<21+msb8rjh;WpfX1^65m z;VyhZ_Lt!6?PTB-kPYhO2YP=X&v^?|ohV%@UD%9lK(D$({N>AiWXF-!2xtBB1Iw*C zWH%zjy|o9zWyQazsQ?DkdD58C12jAAbcSM$N(~c3?Ku@05X6KAOpw% yGJp&q10Bjhd;Vu8#IbyAot%np`{#eT4`0F(EW-o%3ciLF_@+bczcaht5B~w_rxii~ literal 46592 zcmeI5TXWM!7=}L+k|u$YGn8|Ho&f_1g>o)9fs%$o6KH6g&Q!5Cv5F3^tbqAH{TuxS z{Q>P|uY1|v^rl01WlLIlwT{$bLdJeQlSJdZdwR6m{l3?-y|8@md>`$m?}&C09z93k z6&^iJ;E$djJqG`X&d|4XlHMV~VqfqZRCv^!auoxcWF9?7D2!H?xfB*=900@8p2!H?xfWQtQ0RL|XoP_P~!a+Jjhv^6% zrDJrQrs>4?cL6QFF#rvE2y_M5!Fyf{C7c6!BhW@o0Cn8l1b>!(8W zxKO&f`lQah`f91_nRVYZoYgt^g=4u!rM_y`Ew(DESgo*i(_zJOtyUh^0ni-7U zFnrfGE5+)atYGZMno)kX;klbm#n`NvahG$nx@PhzP%Bo?=V;Y+ty~4luE*!*rR*(K zOplfQif6niRxjo#RyWGxBFr%#?M9`(Zt~?R4}hE#SYBk-En}meWAe*og9WNsy_FqE z+TvE7&0fA{Sj-peN{$I7&fM%w&LZ_q%P&?lFF|&r?(;Rln|a*&mdr@kEfP5X>N6hZGYU zAzmWcYO+L#*UCLZ92JCk&15_Tf)FqDvO$O!x;EiN*#RNmRM3|w#7l9Z5ae;6t$D_D zK^`~r(m4(WHk)lcEAY>IEIsnvA9-+@E=_+{ydU__{@|^_{3tCR=TE0QiQ*qA(WiKN zU~qDI`OXsm9Kt1hV|YDob~HPA9Kf9iM|TsU7MuR9IG*>!kqHU5>G$5QOUg4UtEQ(s_86i_Tgy?(FIbK}nRUlyx+*@%!y-lASPE|f_(Q7@hp;&%T~FCP~2 zW;m%AO$bq20I63G33cEK>NUZTl0Kkb91N-5`P0jXW3NvyI;0Q%^o8~cJ1g|S^fKOo z(Dl-bg1X!_v50h z`cit)WSSGDmvg3ZV4|1t{&890Ht9uU!X--hOM2~4h-3UeDWa3n}#4eX`-R z#cWcXA$_%cHnkfm9p*-`NF;5O4(k5F$+?9UEc)7=42wSBMX>1m42!<7>h-G>7JdG@ zdM7}98Q)Qhev})CI5D|lXwsABW}!)O#)`_F6DjG%NJ|ynE73s{y;6~);R#h>;>-6# zq{vRh`A?dIq#5V2u#_N^mZGScTLNZElA@M4AUBf8KUD1@S=*k0sPZGST+Kn$0#SM@ z1{`J~s_d{_uabwTdOjuMB)^r3sH()^+H(_?^ATe-7Zmm~_aXH~R6u1UUsAg$5JCP?N>YMs&`;*3d^N&U+(N#v|1+C0@t zqe&&}qnt_AACJeMc1iOcN-Y!lDv7*F)kz%U%xMc*m^-PmXr_kgkn~DsYB#0xCFf6S z%~C((3`&(9j8Q2$l&X%dRw;{8RnbDH$)nT~QZJNDN>xkKJKinDwyH{{nG;Jp%(VVs zF)Hwni41MS*yC#XR#_6E)~$gZLZN|Rck3V+=G&IL>6Q6C2>O5u2H8u=QG`LJ-2SGY zIp2ZYjI1hTTMWjlp@_ zAHFS6N`(AOHd&&`Si)QjyNldAdL|G)ouh6S_o~=~KEwSLqsEryF#W zZqa9So9&~iN7EK0w4eaAOHd&00JNY0w4eaAkf_e@cG}}eSS5g`-+xmnI6*< T`kGegDSe~S;puK9Fhu_WTk_yK