From c095fc7c57f2df20031af9c724d0fcc705e70566 Mon Sep 17 00:00:00 2001 From: gho tik Date: Fri, 3 Jun 2016 12:45:08 -0400 Subject: [PATCH] v2_03_54_src_fix2 Former-commit-id: 14102b5daf581632f28c9ab056624dda6c7d31ac --- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/dxwnd.ini | 176 ++++++++++++++++++++++++++++++++++++++ build/dxwnd.reg | 52 +++++++++++ build/readme-relnotes.txt | 5 +- dll/ddraw.cpp | 47 +++++++--- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 257024 -> 270336 bytes dll/gdi32.cpp | 3 + dll/hd3d7.cpp | 96 +++++++++++++++++---- host/dxwndhost.vs2008.suo | Bin 80384 -> 80384 bytes host/dxwndhostView.cpp | 5 +- 12 files changed, 359 insertions(+), 33 deletions(-) create mode 100644 build/dxwnd.ini create mode 100644 build/dxwnd.reg diff --git a/build/dxwnd.dll b/build/dxwnd.dll index db4fbd5..3b22216 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9f75f7b545dbfc03a38bf99d8260cbbe4dee01c82b7955c61769a126c643b82 -size 622080 +oid sha256:6ca8e1fa67ffd8ece8ce4dd729b0eec753da49cad2b29f93f9560f96a1105d18 +size 620544 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index a1deeb2..85753ec 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91dd24684d705c58f1e0bb5870715a997c93b285d02075571f0f8ef87068adec +oid sha256:4ee938187a007d36fb26816ecd7ce09990a0990c9c071881fa1a95dc2c4da831 size 548352 diff --git a/build/dxwnd.ini b/build/dxwnd.ini new file mode 100644 index 0000000..ce40365 --- /dev/null +++ b/build/dxwnd.ini @@ -0,0 +1,176 @@ +[window] +exepath=D:\Games\Dark Earth\ +exportpath=D:\DxWnd\exports\ +posx=1087 +posy=286 +sizx=320 +sizy=200 +[target] +title0=Warlords Battlecry 3 (GOG) +path0=D:\Games\Warlords Battlecry 3 (GOG)\Battlecry III.exe +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +coord0=2 +flag0=136314914 +flagg0=1207959568 +flagh0=20 +flagi0=138543108 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 +maxddinterface0=7 +title1=Galapagos +path1=D:\Games\Galapagos\GALA.EXE +launchpath1= +module1= +opengllib1= +notes1= +registry1= +ver1=7 +coord1=0 +flag1=681623718 +flagg1=1207959556 +flagh1=20 +flagi1=203423748 +flagj1=128 +flagk1=65536 +flagl1=0 +flagm1=0 +tflag1=-2147477245 +posx1=50 +posy1=50 +sizx1=800 +sizy1=600 +maxfps1=0 +initts1=0 +winver1=0 +maxres1=-1 +swapeffect1=0 +maxddinterface1=7 +title2=Warlords Battlecry III +path2=D:\Games\Warlords Battlecry III\Battlecry III.exe +launchpath2= +module2= +opengllib2= +notes2= +registry2= +ver2=0 +coord2=0 +flag2=136314914 +flagg2=1207959568 +flagh2=20 +flagi2=-2009071612 +flagj2=4224 +flagk2=65536 +flagl2=0 +flagm2=0 +tflag2=-2147477245 +posx2=50 +posy2=50 +sizx2=880 +sizy2=660 +maxfps2=0 +initts2=0 +winver2=0 +maxres2=-1 +swapeffect2=0 +maxddinterface2=7 +title3=Close Combat 2: a bridge too far +path3=D:\Games\Close Combat 2\CC2.EXE +launchpath3= +module3= +opengllib3= +notes3= +registry3=[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n[HKEY_LOCAL_MACHINE\SOFTWARE]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat]\n[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00]\n"PID"="00000-000-0000000-00000"\n"InstalledTo"="C:\\GAMES\\CC2"\n"ScreenX"="800"\n"ScreenY"="600"\n"Version"="2.0"\n"IType"=hex:01,00,00,00\n"GameSpeed"=hex:01,00,00,00\n"ShowDSAlert"=hex:01,00,00,00\n"ShowQuickHelp"=hex:01,00,00,00\n"PlaySounds"=hex:01,00,00,00\n"PlayMusic"=hex:01,00,00,00\n"PlayVideos"=hex:00,00,00,00\n"FCopy"=hex:00,00,00,00\n"SMethod"=hex:00,00,00,00\n"Save"=hex:00,00,00,00\n"ShowTrees"=hex:01,00,00,00\n"StaticFPS"=hex:0a,00,00,00\n"InstalledFrom"=".\\"\n"Launched"="1"\n"VersionType"="RetailVersion"\n\n +ver3=0 +coord3=0 +flag3=134225952 +flagg3=1744830464 +flagh3=1044 +flagi3=1279262724 +flagj3=8392832 +flagk3=0 +flagl3=0 +flagm3=0 +tflag3=0 +posx3=50 +posy3=50 +sizx3=0 +sizy3=0 +maxfps3=0 +initts3=0 +winver3=0 +maxres3=-1 +swapeffect3=0 +maxddinterface3=7 +title4=CyberStrike 2 +path4=D:\Games\CyberStrike 2\CS2OG.FUN +launchpath4= +module4= +opengllib4= +notes4= +registry4= +ver4=0 +coord4=0 +flag4=136314978 +flagg4=1476395008 +flagh4=20 +flagi4=136314884 +flagj4=1054848 +flagk4=65536 +flagl4=0 +flagm4=0 +tflag4=-2147477245 +posx4=50 +posy4=50 +sizx4=800 +sizy4=600 +maxfps4=0 +initts4=0 +winver4=0 +maxres4=-1 +swapeffect4=0 +maxddinterface4=7 +title5=Dark Earth +path5=D:\Games\Dark Earth\dkev.exe +launchpath5= +module5= +opengllib5= +notes5= +registry5= +ver5=0 +coord5=0 +flag5=136331362 +flagg5=1476395008 +flagh5=20 +flagi5=138936324 +flagj5=4224 +flagk5=65536 +flagl5=0 +flagm5=0 +tflag5=-2147477245 +posx5=50 +posy5=50 +sizx5=800 +sizy5=600 +maxfps5=0 +initts5=0 +winver5=0 +maxres5=-1 +swapeffect5=0 +maxddinterface5=7 diff --git a/build/dxwnd.reg b/build/dxwnd.reg new file mode 100644 index 0000000..3b510dd --- /dev/null +++ b/build/dxwnd.reg @@ -0,0 +1,52 @@ +[HKEY_LOCAL_MACHINE\SOFTWARE] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat] +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Games\Close Combat\2.00] +"PID"="00000-000-0000000-00000" +"InstalledTo"="C:\\GAMES\\CC2" +"ScreenX"="800" +"ScreenY"="600" +"Version"="2.0" +"IType"=hex:01,00,00,00 +"GameSpeed"=hex:01,00,00,00 +"ShowDSAlert"=hex:01,00,00,00 +"ShowQuickHelp"=hex:01,00,00,00 +"PlaySounds"=hex:01,00,00,00 +"PlayMusic"=hex:01,00,00,00 +"PlayVideos"=hex:00,00,00,00 +"FCopy"=hex:00,00,00,00 +"SMethod"=hex:00,00,00,00 +"Save"=hex:00,00,00,00 +"ShowTrees"=hex:01,00,00,00 +"StaticFPS"=hex:0a,00,00,00 +"InstalledFrom"=".\\" +"Launched"="1" +"VersionType"="RetailVersion" + +[HKEY_LOCAL_MACHINE\SOFTWARE] +[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft] +[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games] +[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat] +[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Microsoft Games\Close Combat\2.00] +"PID"="00000-000-0000000-00000" +"InstalledTo"="C:\\GAMES\\CC2" +"ScreenX"="800" +"ScreenY"="600" +"Version"="2.0" +"IType"=hex:01,00,00,00 +"GameSpeed"=hex:01,00,00,00 +"ShowDSAlert"=hex:01,00,00,00 +"ShowQuickHelp"=hex:01,00,00,00 +"PlaySounds"=hex:01,00,00,00 +"PlayMusic"=hex:01,00,00,00 +"PlayVideos"=hex:00,00,00,00 +"FCopy"=hex:00,00,00,00 +"SMethod"=hex:00,00,00,00 +"Save"=hex:00,00,00,00 +"ShowTrees"=hex:01,00,00,00 +"StaticFPS"=hex:0a,00,00,00 +"InstalledFrom"=".\\" +"Launched"="1" +"VersionType"="RetailVersion" + diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 4614622..fdad1e6 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1025,8 +1025,9 @@ fix: changed SetHook so that it can get function pointers without necessarily re add: option "Limit ddraw interface" to exclude support for IDirectDrawInterface greater than limit (range 1-7) v2.03.53(skipped) -v2.03.54 +v2.03.54 (fix1+2) add: syslib shared dc mode preliminary implementation, thank to Narzoul's ideas. Works for "MS Golf 98" and "Deadlock II rel. 1.2" fix: handling of cursor hide/show for programs that don't go through the message window ("Deadlock II rel. 1.2") add: /R:n command line option to automatically start DxWnd in icon tray, run the n-th program in configuration and terminate. -add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Mae it posssible to use Alt-Tab key on "Dungeon Kepper II". \ No newline at end of file +add: option to disable the disabling of Alt-Tab key through SetWindowHooks through WH_KEYBOARD_LL event. Make it posssible to use Alt-Tab key on "Dungeon Kepper II". +fix: palette object reference count decremented from extra references and zeroed by the "Return 0 refcount" flag: make it possible to run "Dark Earth" that makes a check on the palette reerence counter before starting the game. \ No newline at end of file diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 81d3510..5197bd2 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -295,6 +295,7 @@ LPDIRECTDRAWSURFACE lpDDZBuffer=NULL; LPDIRECTDRAW lpPrimaryDD=NULL; int iBakBufferVersion; LPDIRECTDRAWPALETTE lpDDP=NULL; +int iDDPExtraRefCounter=0; // v2.02.37: globals to store requested main surface capabilities DDSURFACEDESC2 DDSD_Prim; DWORD DDZBufferCaps; @@ -2392,7 +2393,10 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf } // this must be done after hooking - who knows why? res=(*pSetPalette)(*lplpdds, lpDDP); - if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; } // set a global capability value for surfaces that have to blit to primary @@ -2469,7 +2473,10 @@ static HRESULT BuildPrimaryFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea } // this must be done after hooking - who knows why? res=(*pSetPalette)(*lplpdds, lpDDP); - if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; } // set a global capability value for surfaces that have to blit to primary @@ -2590,7 +2597,10 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS } // this must be done after hooking - who knows why? res=(*pSetPalette)(*lplpdds, lpDDP); - if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; } // V2.1.85/V2.2.34: tricky !!!! @@ -2646,7 +2656,10 @@ static HRESULT BuildBackBufferFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pC } // this must be done after hooking - who knows why? res=(*pSetPalette)(*lplpdds, lpDDP); - if(res) OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + if(res) { + OutTraceE("CreateSurface: SetPalette ERROR err=%x at %d\n", res, __LINE__); + } + else iDDPExtraRefCounter++; } return DD_OK; @@ -2798,8 +2811,10 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf res=(*pSetPalette)(*lplpdds, lpDDP); if(res) OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); - else + else { OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); + iDDPExtraRefCounter++; + } } // diagnostic hooks .... @@ -2849,8 +2864,10 @@ static HRESULT BuildGenericFlippable(LPDIRECTDRAW lpdd, CreateSurface_Type pCrea res=(*pSetPalette)(*lplpdds, lpDDP); if(res) OutTraceE("SetPalette: ERROR on lpdds=%x(Emu_Generic) res=%x(%s) at %d\n", *lplpdds, res, ExplainDDError(res), __LINE__); - else + else { OutTraceDW("CreateSurface: applied lpddp=%x to lpdds=%x\n", lpDDP, *lplpdds); + iDDPExtraRefCounter++; + } } // diagnostic hooks .... @@ -3815,6 +3832,7 @@ HRESULT WINAPI extGetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE *lpl OutTraceDW("GetPalette: retrieve PRIMARY palette for emulated surface lpDDP=%x\n", lpDDP); *lplpddp = lpDDP; lpDDP->AddRef(); + iDDPExtraRefCounter++; res=DD_OK; } @@ -4267,6 +4285,7 @@ HRESULT WINAPI extGetDC(LPDIRECTDRAWSURFACE lpdds, HDC FAR *pHDC) OutTraceE("GetDC: SetPalette ERROR res=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); return res; } + iDDPExtraRefCounter++; // retry .... res=(*pGetDC)(lpdds, pHDC); } @@ -4878,6 +4897,7 @@ ULONG WINAPI extReleaseD(int dxversion, ReleaseD_Type pReleaseD, LPDIRECTDRAW lp lpDDSEmu_Prim=NULL; lpDDSEmu_Back=NULL; lpDDP=NULL; + iDDPExtraRefCounter = 0; lpPrimaryDD=NULL; // v2.02.31 } } @@ -5136,12 +5156,19 @@ HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette) ULONG ref; ref = (*pReleaseP)(lpddPalette); - OutTraceDDRAW("Release(P): lpddPalette=%x ref=%x\n", lpddPalette, ref); - if(lpddPalette==lpDDP && ref==0){ - OutTraceDW("Release(P): clearing lpDDP=%x->NULL\n", lpDDP); - lpDDP=NULL; + + if (lpddPalette == lpDDP) { + OutTraceDW("Release(P): lpDDP extrarefcount=%d\n", iDDPExtraRefCounter); + ref -= iDDPExtraRefCounter; + if (ref <= 0) { + ref = 0; + OutTraceDW("Release(P): clearing lpDDP=%x->NULL\n", lpDDP); + lpDDP=NULL; + } + if(dxw.dwFlags4 & RETURNNULLREF) ref = 0; } + return ref; } diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 56f8f1e..ffd5170 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.03.54" +#define VERSION "2.03.54.fix2" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 997cf29d751888641a9a1db8770fea1679cbc0ad..bcb2651a7db2ff744b794dfbfb9df9ccabcc310e 100644 GIT binary patch delta 16549 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 BR+In$ delta 2416 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 diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 0fa70e1..18b8d47 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -2166,7 +2166,10 @@ void CDxwndhostView::OnRun() if(i<0) i=0; } else { - if(!listctrl.GetSelectedCount()) return; + if(!listctrl.GetSelectedCount()) { + IsLocked = FALSE; + return; + } pos = listctrl.GetFirstSelectedItemPosition(); i = listctrl.GetNextSelectedItem(pos); }