diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 96310b8..db28c81 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -150,9 +150,9 @@ #define DIABLOTWEAK 0x00000001 // ... ??? ... #define CLEARTARGET 0x00000002 // forces a D3D clean on target surface upon each BeginScene invocation #define NOWINPOSCHANGES 0x00000004 // suppress WM_WINDOWPOSCHANGING/CHANGED messages (RollerCoaster Tycoon...) -#define NOSYSTEMMEMORY 0x00000008 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on surfaces +//#define NOSYSTEMMEMORY 0x00000008 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on surfaces #define NOBLT 0x00000010 // suppress blit to primary surface -#define NOSYSTEMEMULATED 0x00000020 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated front & backbuffer surfaces +//#define NOSYSTEMEMULATED 0x00000020 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated front & backbuffer surfaces #define DOFASTBLT 0x00000040 // use FastBlt to primary surface #define AEROBOOST 0x00000080 // Optimize for AERO environment: does all stretching in sysmemory surfaces #define QUARTERBLT 0x00000100 // Consider a screen update (to count or limit FPS) only blt operations bigger than a quarter of the whole primary surface @@ -193,6 +193,8 @@ #define POWER2WIDTH 0x00000200 // Fixes ..... #define HIDETASKBAR 0x00000400 // Hides taskbar & start menu during game execution #define ACTIVATEAPP 0x00000800 // sends WM_ACTIVATEAPP message after every WM_WINPOSCHANGED message +#define NOSYSMEMPRIMARY 0x00001000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated primary surface +#define NOSYSMEMBACKBUF 0x00002000 // forces suppression of DDSCAPS_SYSTEMMEMORY capability on emulated backbuffer surface // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 8208155..252a75e 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:84e59408df785c15d6c06b28a9c1af651f16cfc666ceedb196b4d960aa0e4e00 -size 578560 +oid sha256:549536858a03ba659d55078a89d987c435aed391c5444cfe6421f23cf4c76cc6 +size 578048 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 6ec8511..7eaa09e 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5de557160daabc9b2605f05b2c0988c129df7a8a03f8505db3a9c60269e9ee92 +oid sha256:ec489528e5cb8f0bdcdd15b49650a55d6367c38520bc1724834cebef642c9d73 size 541696 diff --git a/build/exports/Adrenix 3D.dxw b/build/exports/Adrenix 3D.dxw index e84b1e1..8c6b0c0 100644 --- a/build/exports/Adrenix 3D.dxw +++ b/build/exports/Adrenix 3D.dxw @@ -8,10 +8,10 @@ notes0= ver0=0 coord0=0 flag0=134234150 -flagg0=1207959552 +flagg0=1208025088 flagh0=20 flagi0=138412036 -flagj0=4224 +flagj0=5248 tflag0=0 initx0=0 inity0=0 @@ -27,3 +27,5 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +flagk0=0 +swapeffect0=0 diff --git a/build/exports/Adrenix.dxw b/build/exports/Adrenix.dxw new file mode 100644 index 0000000..ba6f623 --- /dev/null +++ b/build/exports/Adrenix.dxw @@ -0,0 +1,31 @@ +[target] +title0=Adrenix +path0=D:\Games\Adrenix\Adrenix.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=136314918 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Dark Disciples 1.dxw b/build/exports/Dark Disciples 1.dxw new file mode 100644 index 0000000..abaea97 --- /dev/null +++ b/build/exports/Dark Disciples 1.dxw @@ -0,0 +1,31 @@ +[target] +title0=Dark Disciples 1 +path0=D:\Games\Dark Disciples 1\DarkDisciples.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Dark Disciples 2.dxw b/build/exports/Dark Disciples 2.dxw new file mode 100644 index 0000000..e4102c2 --- /dev/null +++ b/build/exports/Dark Disciples 2.dxw @@ -0,0 +1,31 @@ +[target] +title0=Dark Disciples 2 +path0=D:\Games\Dark Disciples 2\DarkDisciples2.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Evil Dead Hail to the King.dxw b/build/exports/Evil Dead Hail to the King.dxw index 226a75f..12a5eab 100644 --- a/build/exports/Evil Dead Hail to the King.dxw +++ b/build/exports/Evil Dead Hail to the King.dxw @@ -10,7 +10,7 @@ flag0=134217762 flagg0=1207959552 flagh0=20 flagi0=138412036 -flagj0=168 +flagj0=128 tflag0=0 initx0=0 inity0=0 @@ -26,3 +26,6 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +notes0= +flagk0=0 +swapeffect0=0 diff --git a/build/exports/Galapagos.dxw b/build/exports/Galapagos.dxw index 7bddc2e..481edbe 100644 --- a/build/exports/Galapagos.dxw +++ b/build/exports/Galapagos.dxw @@ -7,12 +7,12 @@ opengllib0= notes0= ver0=7 coord0=0 -flag0=746602528 -flagg0=1209008128 +flag0=681590816 +flagg0=1207959552 flagh0=16 flagi0=138412036 -flagj0=142610600 -tflag0=6402 +flagj0=142606464 +tflag0=0 initx0=0 inity0=0 minx0=0 diff --git a/build/exports/Ground Control.dxw b/build/exports/Ground Control.dxw new file mode 100644 index 0000000..1748f77 --- /dev/null +++ b/build/exports/Ground Control.dxw @@ -0,0 +1,31 @@ +[target] +title0=Ground Control +path0=D:\Games\GC\gc.exe +launchpath0= +module0= +opengllib0= +notes0= +ver0=0 +coord0=0 +flag0=681574434 +flagg0=1744830464 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=0 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Microsoft Motocross Madness 2 (emu).dxw b/build/exports/Microsoft Motocross Madness 2 (emu).dxw new file mode 100644 index 0000000..eb34a34 --- /dev/null +++ b/build/exports/Microsoft Motocross Madness 2 (emu).dxw @@ -0,0 +1,31 @@ +[target] +title0=Microsoft Motocross Madness 2 (emu) +path0=D:\Games\Motocross Madness 2\mcm2.exe +launchpath0= +module0= +opengllib0= +notes0=Run the game in emulation mode\nDoesn't work on all video cards, and works only chosing the accelerated video card, \nnot the software mode.\nIn case of troubles, it may be necessary to delete the registry entries to force a \nnew clean configuration. +ver0=0 +coord0=0 +flag0=136314914 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=8192 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 +swapeffect0=0 diff --git a/build/exports/Panzer General 3 Scorched Earth.dxw b/build/exports/Panzer General 3 Scorched Earth.dxw index 8a17e47..b86a2e7 100644 --- a/build/exports/Panzer General 3 Scorched Earth.dxw +++ b/build/exports/Panzer General 3 Scorched Earth.dxw @@ -10,7 +10,7 @@ flag0=671088674 flagg0=1207975936 flagh0=2097172 flagi0=138412036 -flagj0=8328 +flagj0=8320 tflag0=0 initx0=0 inity0=0 @@ -26,3 +26,6 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +notes0= +flagk0=0 +swapeffect0=0 diff --git a/build/exports/Star Wars Episode I Racer (emulated).dxw b/build/exports/Star Wars Episode I Racer (emulated).dxw index ca8f2fd..f78a696 100644 --- a/build/exports/Star Wars Episode I Racer (emulated).dxw +++ b/build/exports/Star Wars Episode I Racer (emulated).dxw @@ -8,9 +8,9 @@ ver0=0 coord0=0 flag0=679493671 flagg0=1210056720 -flagh0=8212 +flagh0=20 flagi0=2097172 -flagj0=136 +flagj0=128 tflag0=0 initx0=0 inity0=0 @@ -26,3 +26,6 @@ maxfps0=0 initts0=0 winver0=0 maxres0=0 +notes0= +flagk0=0 +swapeffect0=0 diff --git a/build/exports/Syberia.dxw b/build/exports/Syberia.dxw index b27650c..a2c00c4 100644 --- a/build/exports/Syberia.dxw +++ b/build/exports/Syberia.dxw @@ -1,15 +1,15 @@ [target] title0=Syberia path0=D:\Games\Syberia\Syberia.exe -module0=Syberia ck2_3d ck2 +module0= opengllib0= ver0=0 -coord0=2 -flag0=1610694673 -flagg0=1207959576 +coord0=0 +flag0=1610694675 +flagg0=1207959552 flagh0=20 -flagi0=4 -tflag0=6418 +flagi0=4194308 +tflag0=0 initx0=300 inity0=300 minx0=0 @@ -24,3 +24,8 @@ maxfps0=0 initts0=0 winver0=0 maxres0=-1 +launchpath0= +notes0= +flagj0=128 +flagk0=4096 +swapeffect0=0 diff --git a/build/exports/Talis Gear.dxw b/build/exports/Talis Gear.dxw index bc14a14..9050248 100644 --- a/build/exports/Talis Gear.dxw +++ b/build/exports/Talis Gear.dxw @@ -5,10 +5,10 @@ module0= opengllib0= ver0=0 coord0=0 -flag0=134217760 +flag0=134217762 flagg0=1207959552 flagh0=20 -flagi0=0 +flagi0=4194304 tflag0=0 initx0=0 inity0=0 @@ -22,3 +22,10 @@ sizx0=800 sizy0=600 maxfps0=0 initts0=0 +launchpath0= +notes0= +flagj0=128 +flagk0=0 +winver0=0 +maxres0=0 +swapeffect0=0 diff --git a/build/exports/Thorgal.dxw b/build/exports/Thorgal.dxw index b6d50cd..9201a0e 100644 --- a/build/exports/Thorgal.dxw +++ b/build/exports/Thorgal.dxw @@ -10,7 +10,7 @@ flag0=136314915 flagg0=1242038528 flagh0=65552 flagi0=136314885 -flagj0=136 +flagj0=128 tflag0=0 initx0=0 inity0=0 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 39d593b..7abdb11 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -855,4 +855,9 @@ add: "hide taskbar" option. A little experimental, so far. If the game crashes, v2.03.30: fix: reset for flipped DC retrieved from ddraw interface after ddraw creation. Fixes "Powerslide". add: added "Send WM_ACTIVATEAPP message" flag: fixes "Championship Manager 03 04" mouse and "Thorgal" lock -fix: FillRect hooker. Good for "Premier Manager 98" and "Premier Manager 97". \ No newline at end of file +fix: FillRect hooker. Good for "Premier Manager 98" and "Premier Manager 97". +fix: revised the DDSCAPS_SYSTEMMEMORY suppression, now separated for primary & backbuffer surfaces + +v2.03.31: +fix: handling of "No SYSTEMMEMORY on BackBuffer" flag for no-emulation mode: necessary to run "Microsoft Motocross Madness 2" in this mode. +fix: allowing hot patching to GetCursorPos() user32.dll call. This allows correct mouse control with obfuscated exes, like the chinese RPG "Paladin 3". diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index e20ff63..16daaf0 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -2203,7 +2203,7 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces ddsd.ddsCaps.dwCaps |= (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - if(dxw.dwFlags5 & NOSYSTEMEMULATED) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + if(dxw.dwFlags6 & NOSYSMEMPRIMARY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; extern BOOL bInCreateDevice; //if (bInCreateDevice) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; @@ -2249,7 +2249,7 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf dwBackBufferCaps = (DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY); // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... // this is important to avoid that certain D3D operations will abort - see "Forsaken" problem - if(dxw.dwFlags5 & NOSYSTEMEMULATED) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) dwBackBufferCaps = DDSCAPS_OFFSCREENPLAIN; if(dxw.dwFlags5 & GDIMODE) return DD_OK; @@ -2393,7 +2393,7 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); if(ddsd.ddsCaps.dwCaps & DDSCAPS_3DDEVICE) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; // necessary: Martian Gotic crashes otherwise // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - if(dxw.dwFlags5 & NOSYSTEMMEMORY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); GetPixFmt(&ddsd); @@ -2431,6 +2431,7 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS else ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; + if(dxw.dwFlags6 & NOSYSMEMBACKBUF) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); if (dxw.dwFlags2 & BACKBUFATTACH) { @@ -2480,8 +2481,6 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf // with the same type, so that assuming an identical lPitch and memcopy-ing from one buffer to the // other is a legitimate operation. if(ddsd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; // v2.03.03 !! - // on WinXP Fifa 99 doesn't like DDSCAPS_SYSTEMMEMORY cap, so better to leave a way to unset it.... - if(dxw.dwFlags5 & NOSYSTEMMEMORY) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; if(dxw.dwFlags6 & POWER2WIDTH){ // v2.03.28: POWER2WIDTH to fix "Midtown Madness" in surface emulation mode if(((ddsd.dwFlags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) == (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH)) && @@ -3184,7 +3183,6 @@ HRESULT WINAPI extFlip(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWSURFACE lpddssrc, if (res) OutTraceDW("Flip: GetSurfaceDesc res=%x at %d\n",res, __LINE__); // replace these CAPS (good for seven kingdoms II) with same as lpdds surface - //ddsc.dwCaps=DDSCAPS_OFFSCREENPLAIN+DDSCAPS_SYSTEMMEMORY; ddsc.dwCaps=sd.ddsCaps.dwCaps; res=lpdds->GetAttachedSurface(&ddsc, &lpddsAttached); diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index d7b0546..3fe7131 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -94,8 +94,8 @@ static char *Flag4Names[32]={ }; static char *Flag5Names[32]={ - "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "NOSYSTEMMEMORY", - "NOBLT", "NOSYSTEMEMULATED", "DOFASTBLT", "AEROBOOST", + "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "--NOSYSTEMMEMORY--", + "NOBLT", "--NOSYSTEMEMULATED--", "DOFASTBLT", "AEROBOOST", "QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS", "REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK", "TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV", @@ -108,7 +108,7 @@ static char *Flag6Names[32]={ "FORCESWAPEFFECT", "LEGACYALLOC", "NODESTROYWINDOW", "NOMOVIES", "SUPPRESSRELEASE", "FIXMOVIESCOLOR", "WOW64REGISTRY", "DISABLEMAXWINMODE", "FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP", - "", "", "", "", + "NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "", "", "", "", "", "", "", "", "", "", "", "", "", "", diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index e49ca7a..3a6005b 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.30" +#define VERSION "2.03.31" #define DDTHREADLOCK 1 //#define LOCKTHREADS diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 264850a..1846877 100644 Binary files a/dll/dxwnd.vs2008.suo and b/dll/dxwnd.vs2008.suo differ diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index 2d42224..a403671 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -904,15 +904,15 @@ HRESULT WINAPI extCreateDevice2(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE if(!(dxw.dwFlags1 & EMULATESURFACE)) break; // no more tricks .... if(!(dxw.dwFlags1 & AUTOMATIC)) break; - OutTraceD3D("CreateDevice(D3D2): SYSMEMORY OFF\n"); - dxw.dwFlags5 |= NOSYSTEMEMULATED; - res=(*pCreateDevice2)(lpd3d, Guid, lpdds, lplpd3dd); - if(res==DD_OK) break; - OutTraceE("CreateDevice(D3D2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(!(dxw.dwFlags1 & AUTOMATIC)) break; + //OutTraceD3D("CreateDevice(D3D2): SYSMEMORY OFF\n"); + //dxw.dwFlags6 |= NOSYSMEMPRIMARY; + //res=(*pCreateDevice2)(lpd3d, Guid, lpdds, lplpd3dd); + //if(res==DD_OK) break; + //OutTraceE("CreateDevice(D3D2) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + //if(!(dxw.dwFlags1 & AUTOMATIC)) break; OutTraceD3D("CreateDevice(D3D2): Emulation OFF\n"); - dxw.dwFlags5 &= ~NOSYSTEMEMULATED; + //dxw.dwFlags5 &= ~NOSYSTEMEMULATED; dxw.dwFlags1 &= ~EMULATESURFACE; dxw.dwFlags1 |= LOCKEDSURFACE; res=(*pCreateDevice2)(lpd3d, Guid, lpdds, lplpd3dd); @@ -943,15 +943,15 @@ HRESULT WINAPI extCreateDevice3(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE4 if(!(dxw.dwFlags1 & EMULATESURFACE)) break; // no more tricks .... if(!(dxw.dwFlags1 & AUTOMATIC)) break; - OutTraceD3D("CreateDevice(D3D3): SYSMEMORY OFF\n"); - dxw.dwFlags5 |= NOSYSTEMEMULATED; - res=(*pCreateDevice3)(lpd3d, Guid, lpdds, lplpd3dd, unk); - if(res==DD_OK) break; - OutTraceE("CreateDevice(D3D3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(!(dxw.dwFlags1 & AUTOMATIC)) break; + //OutTraceD3D("CreateDevice(D3D3): SYSMEMORY OFF\n"); + //dxw.dwFlags5 |= NOSYSTEMEMULATED; + //res=(*pCreateDevice3)(lpd3d, Guid, lpdds, lplpd3dd, unk); + //if(res==DD_OK) break; + //OutTraceE("CreateDevice(D3D3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + //if(!(dxw.dwFlags1 & AUTOMATIC)) break; OutTraceD3D("CreateDevice(D3D3): Emulation OFF\n"); - dxw.dwFlags5 &= ~NOSYSTEMEMULATED; + //dxw.dwFlags5 &= ~NOSYSTEMEMULATED; dxw.dwFlags1 &= ~EMULATESURFACE; dxw.dwFlags1 |= LOCKEDSURFACE; res=(*pCreateDevice3)(lpd3d, Guid, lpdds, lplpd3dd, unk); @@ -986,15 +986,15 @@ HRESULT WINAPI extCreateDevice7(void *lpd3d, REFCLSID Guid, LPDIRECTDRAWSURFACE7 if(!(dxw.dwFlags1 & EMULATESURFACE)) break; // no more tricks .... if(!(dxw.dwFlags1 & AUTOMATIC)) break; - OutTraceD3D("CreateDevice(D3D7): SYSMEMORY OFF\n"); - dxw.dwFlags5 |= NOSYSTEMEMULATED; - res=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd); - if(res==DD_OK) break; - OutTraceE("CreateDevice(D3D7) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); - if(!(dxw.dwFlags1 & AUTOMATIC)) break; + //OutTraceD3D("CreateDevice(D3D7): SYSMEMORY OFF\n"); + //dxw.dwFlags5 |= NOSYSTEMEMULATED; + //res=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd); + //if(res==DD_OK) break; + //OutTraceE("CreateDevice(D3D7) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + //if(!(dxw.dwFlags1 & AUTOMATIC)) break; OutTraceD3D("CreateDevice(D3D7): Emulation OFF\n"); - dxw.dwFlags5 &= ~NOSYSTEMEMULATED; + //dxw.dwFlags5 &= ~NOSYSTEMEMULATED; dxw.dwFlags1 &= ~EMULATESURFACE; dxw.dwFlags1 |= LOCKEDSURFACE; res=(*pCreateDevice7)(lpd3d, Guid, lpdds, lplpd3dd); @@ -1599,7 +1599,7 @@ HRESULT WINAPI extEnumZBufferFormats(void *lpd3d, REFCLSID riidDevice, LPD3DENUM // Beware: using service surfaces with DDSCAPS_SYSTEMMEMORY capability may lead to crashes in D3D operations // like Vievport::Clear() in "Forsaken" set in emulation AERO-friendly mode. To avoid the problem, you can -// suppress the offending cap by use of the NOSYSTEMEMULATED flag +// suppress the offending cap by use of the NOSYSMEMPRIMARY or NOSYSMEMBACKBUF flags HRESULT WINAPI extViewportClear(void *lpd3dvp, DWORD p1, LPD3DRECT lpRect, DWORD p2) { diff --git a/dll/user32.cpp b/dll/user32.cpp index fd7152c..af8ed17 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -205,7 +205,7 @@ static HookEntry_Type PeekAllHooks[]={ }; static HookEntry_Type MouseHooks[]={ - {HOOK_IAT_CANDIDATE, "GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos}, + {HOOK_HOT_CANDIDATE, "GetCursorPos", (FARPROC)GetCursorPos, (FARPROC *)&pGetCursorPos, (FARPROC)extGetCursorPos}, {HOOK_IAT_CANDIDATE, "GetCursorInfo", (FARPROC)GetCursorInfo, (FARPROC *)&pGetCursorInfo, (FARPROC)extGetCursorInfo}, {HOOK_IAT_CANDIDATE, "SetCursor", (FARPROC)SetCursor, (FARPROC *)&pSetCursor, (FARPROC)extSetCursor}, {HOOK_IAT_CANDIDATE, "SendMessageA", (FARPROC)SendMessageA, (FARPROC *)&pSendMessageA, (FARPROC)extSendMessageA}, diff --git a/host/TabDebug.cpp b/host/TabDebug.cpp index 160dc1a..040271f 100644 --- a/host/TabDebug.cpp +++ b/host/TabDebug.cpp @@ -47,7 +47,7 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_HOTPATCHALWAYS, cTarget->m_HotPatchAlways); DDX_Check(pDX, IDC_FREEZEINJECTEDSON, cTarget->m_FreezeInjectedSon); DDX_Check(pDX, IDC_STRESSRESOURCES, cTarget->m_StressResources); - DDX_Check(pDX, IDC_NOSYSTEMMEMORY, cTarget->m_NoSystemMemory); +// DDX_Check(pDX, IDC_NOSYSTEMMEMORY, cTarget->m_NoSystemMemory); } BEGIN_MESSAGE_MAP(CTabDebug, CDialog) diff --git a/host/TabDirect3D.cpp b/host/TabDirect3D.cpp index 21b065d..04ea1d5 100644 --- a/host/TabDirect3D.cpp +++ b/host/TabDirect3D.cpp @@ -36,7 +36,8 @@ void CTabDirect3D::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_FORCESHEL, cTarget->m_ForcesHEL); // Ddraw tweaks - DDX_Check(pDX, IDC_NOSYSTEMEMULATED, cTarget->m_NoSystemEmulated); + DDX_Check(pDX, IDC_NOSYSMEMPRIMARY, cTarget->m_NoSysMemPrimary); + DDX_Check(pDX, IDC_NOSYSMEMBACKBUF, cTarget->m_NoSysMemBackBuf); DDX_Check(pDX, IDC_FIXPITCH, cTarget->m_FixPitch); DDX_Check(pDX, IDC_POWER2WIDTH, cTarget->m_Power2Width); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 22ab330..aae62de 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -124,8 +124,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_SuppressDXErrors = FALSE; m_MarkBlit = FALSE; m_MarkLock = FALSE; - m_NoSystemMemory = FALSE; - m_NoSystemEmulated = FALSE; + m_NoSysMemPrimary = FALSE; + m_NoSysMemBackBuf = FALSE; m_NoBlt = FALSE; m_BilinearBlt = FALSE; m_FastBlt = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index e9fe0f8..7265f25 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -97,8 +97,8 @@ public: BOOL m_SuppressDXErrors; BOOL m_MarkBlit; BOOL m_MarkLock; - BOOL m_NoSystemMemory; - BOOL m_NoSystemEmulated; + BOOL m_NoSysMemPrimary; + BOOL m_NoSysMemBackBuf; BOOL m_NoBlt; BOOL m_BilinearBlt; BOOL m_FastBlt; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 1abddd1..680e5fa 100644 Binary files a/host/dxwndhost.aps and b/host/dxwndhost.aps differ diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index ff1b8a7..1708027 100644 Binary files a/host/dxwndhost.rc and b/host/dxwndhost.rc differ diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index bee13bc..20d91db 100644 Binary files a/host/dxwndhost.vs2008.suo and b/host/dxwndhost.vs2008.suo differ diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 9991291..3e1c5d9 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -325,8 +325,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_SuppressDXErrors) t->flags |= SUPPRESSDXERRORS; if(dlg->m_MarkBlit) t->flags3 |= MARKBLIT; if(dlg->m_MarkLock) t->flags3 |= MARKLOCK; - if(dlg->m_NoSystemMemory) t->flags5 |= NOSYSTEMMEMORY; - if(dlg->m_NoSystemEmulated) t->flags5 |= NOSYSTEMEMULATED; + if(dlg->m_NoSysMemPrimary) t->flags6 |= NOSYSMEMPRIMARY; + if(dlg->m_NoSysMemBackBuf) t->flags6 |= NOSYSMEMBACKBUF; if(dlg->m_NoBlt) t->flags5 |= NOBLT; if(dlg->m_FastBlt) t->flags5 |= DOFASTBLT; if(dlg->m_GDIColorConv) t->flags5 |= GDICOLORCONV; @@ -551,8 +551,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_SuppressDXErrors = t->flags & SUPPRESSDXERRORS ? 1 : 0; dlg->m_MarkBlit = t->flags3 & MARKBLIT ? 1 : 0; dlg->m_MarkLock = t->flags3 & MARKLOCK ? 1 : 0; - dlg->m_NoSystemMemory = t->flags5 & NOSYSTEMMEMORY ? 1 : 0; - dlg->m_NoSystemEmulated = t->flags5 & NOSYSTEMEMULATED ? 1 : 0; + dlg->m_NoSysMemPrimary = t->flags6 & NOSYSMEMPRIMARY ? 1 : 0; + dlg->m_NoSysMemBackBuf = t->flags6 & NOSYSMEMBACKBUF ? 1 : 0; dlg->m_NoBlt = t->flags5 & NOBLT ? 1 : 0; dlg->m_FastBlt = t->flags5 & DOFASTBLT ? 1 : 0; dlg->m_GDIColorConv = t->flags5 & GDICOLORCONV ? 1 : 0; diff --git a/host/resource b/host/resource index de92742..b7282e9 100644 Binary files a/host/resource and b/host/resource differ