From 741188c0559f142421d30c95a178334d73c75475 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 13 Sep 2014 12:39:44 -0400 Subject: [PATCH] v2_02_91_src Former-commit-id: 373b6ccf0c8d7988d6332673f0563d46741b6487 --- Include/dxwnd.h | 5 + build/Resources_CN.dll | 2 +- build/Resources_EN.dll | 4 +- build/Resources_IT.dll | 4 +- build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/dxwnd.ini | 4 +- build/exports/Bard's Tale, the.dxw | 27 + build/exports/Bunnies must die.dxw | 27 + build/exports/Call Of Cthulhu DCotE.dxw | 27 + build/exports/Colin McRae Rally 2.0.dxw | 27 + build/exports/Croc - Legend of the Gobbos.dxw | 27 + build/exports/Croc 2.dxw | 27 + .../LEGO Star Wars - The Complete Saga.dxw | 27 + .../exports/Legacy of Kain Soul Reaver 2.dxw | 27 + build/exports/Madden NFL 08.dxw | 28 + build/exports/NHL 99.dxw | 28 + build/exports/Nocturne.dxw | 27 + build/exports/Quake (OpenGL 3DFX).dxw | 28 + build/exports/Quake (win).dxw | 28 + build/exports/Queen of Heart 98.dxw | 28 + build/exports/Tomb Raider Underworld.dxw | 27 + build/exports/readme-relnotes.txt | 595 ------------------ build/readme-relnotes.txt | 4 +- dll/ddraw.cpp | 88 ++- dll/dxemublt.cpp | 29 +- dll/dxhook.cpp | 4 +- dll/dxwcore.cpp | 1 + dll/dxwnd.aps | Bin 37664 -> 37664 bytes dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 259584 -> 259584 bytes dll/hddraw.h | 5 + host/Resource.h | Bin 29592 -> 30000 bytes host/TabDebug.cpp | 4 + host/TabDirectX.cpp | 6 +- host/TabWindow.cpp | 1 + host/TargetDlg.cpp | 9 +- host/TargetDlg.h | 5 + host/dxwndhost.aps | Bin 181328 -> 182232 bytes host/dxwndhost.cpp | 2 + host/dxwndhost.rc | Bin 85688 -> 87480 bytes host/dxwndhost.rc.txt | Bin 132448 -> 0 bytes host/dxwndhost.rc2.txt | Bin 80738 -> 0 bytes host/dxwndhost.vs2008.suo | Bin 82944 -> 98304 bytes host/dxwndhostView.cpp | 10 + locale/cn/Resources_Cn.ncb | Bin 27648 -> 35840 bytes locale/cn/Resources_Cn.rc | Bin 80356 -> 81074 bytes locale/cn/Resources_Cn.suo | Bin 0 -> 7168 bytes locale/en/Resources_EN.rc | Bin 85686 -> 87480 bytes locale/en/Resources_En.ncb | Bin 27648 -> 35840 bytes locale/en/Resources_En.suo | Bin 0 -> 7168 bytes locale/it/Resources_IT.rc | Bin 86968 -> 87382 bytes locale/it/Resources_It.ncb | Bin 27648 -> 35840 bytes locale/it/Resources_It.suo | Bin 0 -> 7168 bytes 54 files changed, 562 insertions(+), 640 deletions(-) create mode 100644 build/exports/Bard's Tale, the.dxw create mode 100644 build/exports/Bunnies must die.dxw create mode 100644 build/exports/Call Of Cthulhu DCotE.dxw create mode 100644 build/exports/Colin McRae Rally 2.0.dxw create mode 100644 build/exports/Croc - Legend of the Gobbos.dxw create mode 100644 build/exports/Croc 2.dxw create mode 100644 build/exports/LEGO Star Wars - The Complete Saga.dxw create mode 100644 build/exports/Legacy of Kain Soul Reaver 2.dxw create mode 100644 build/exports/Madden NFL 08.dxw create mode 100644 build/exports/NHL 99.dxw create mode 100644 build/exports/Nocturne.dxw create mode 100644 build/exports/Quake (OpenGL 3DFX).dxw create mode 100644 build/exports/Quake (win).dxw create mode 100644 build/exports/Queen of Heart 98.dxw create mode 100644 build/exports/Tomb Raider Underworld.dxw delete mode 100644 build/exports/readme-relnotes.txt delete mode 100644 host/dxwndhost.rc.txt delete mode 100644 host/dxwndhost.rc2.txt create mode 100644 locale/cn/Resources_Cn.suo create mode 100644 locale/en/Resources_En.suo create mode 100644 locale/it/Resources_It.suo diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 3750970..89a7e81 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -150,6 +150,11 @@ #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 SYSTEMMEMORY 0x00000008 // forces usage of DDSCAPS_SYSTEMMEMORY capability on front & backbuffer surfaces +#define NOBLT 0x00000010 // suppress blit to primary surface +#define DOSTRETCHBLT 0x00000020 // use StretchBlt to primary surface +#define DOFASTBLT 0x00000040 // use FastBlt to primary surface +#define AEROBOOST 0x00000080 // Optimize for AERO environment: set DOSTRETCHBLT + SYSTEMMEMORY // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/Resources_CN.dll b/build/Resources_CN.dll index 66e1a84..2a0a9b0 100644 --- a/build/Resources_CN.dll +++ b/build/Resources_CN.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f36243fc0a79cc06da0eabc3ad0dbbba323cab01cc95b70fa540816916dea6b1 +oid sha256:5d35410b205f27b7d0447ec515ce1e5206dd29e67c080744e352b15bfc3bd2bb size 132096 diff --git a/build/Resources_EN.dll b/build/Resources_EN.dll index 916db98..2662524 100644 --- a/build/Resources_EN.dll +++ b/build/Resources_EN.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f047139ee7bc1d209f9b2599241fe377c89f9989073e992d65e02f4bb9d5494 -size 137216 +oid sha256:5a0dc4ed7afe922e53af8aa3eb554e1dc91848b05b0d42ded1aff037f4ff38ad +size 137728 diff --git a/build/Resources_IT.dll b/build/Resources_IT.dll index 56e6b37..a0df481 100644 --- a/build/Resources_IT.dll +++ b/build/Resources_IT.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1baec6b508045a54e6151d95ca9ff4ffdeaecb2ea1343cf9991fbbeb29ab32a8 -size 138240 +oid sha256:775ca5f29d0af8b8b9fbf8592148248a64d371fd211475d6205b84801451b029 +size 138752 diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 4cbdc5d..2b107c0 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e1df66d52d976424de5364bad0b810090c3affd24cc462adbbeef4040b248dd -size 505344 +oid sha256:5c88b48ffa3289a31b2b1297c3d42d787145913b6224797d744ae7558a346ab6 +size 506368 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index aae76ff..c0a3a1e 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11ae95eda684d03d69c0855221d6b75795eae8bbc8e2384b0519880904198162 -size 557568 +oid sha256:3422d3b5f715371e64e4d5fa4db1455eb6418fbdf6ac97e717e6f68f4b26d6d2 +size 558080 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index d259038..6d3eed6 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -1,6 +1,6 @@ [window] -posx=50 -posy=50 +posx=1236 +posy=678 sizx=320 sizy=200 lang=automatic diff --git a/build/exports/Bard's Tale, the.dxw b/build/exports/Bard's Tale, the.dxw new file mode 100644 index 0000000..d125848 --- /dev/null +++ b/build/exports/Bard's Tale, the.dxw @@ -0,0 +1,27 @@ +[target] +title0=Bard's Tale, the +path0=D:\Games\The Bard's Tale\The Bard's Tale.exe +launchpath0= +module0= +opengllib0= +ver0=9 +coord0=0 +flag0=134218272 +flagg0=1207959552 +flagh0=16 +flagi0=138412036 +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 diff --git a/build/exports/Bunnies must die.dxw b/build/exports/Bunnies must die.dxw new file mode 100644 index 0000000..03f2589 --- /dev/null +++ b/build/exports/Bunnies must die.dxw @@ -0,0 +1,27 @@ +[target] +title0=Bunnies must die +path0=D:\Games\Bunnies must die\bmd.exe +launchpath0= +module0= +opengllib0= +ver0=1 +coord0=0 +flag0=150994976 +flagg0=134217728 +flagh0=20 +flagi0=205520900 +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 diff --git a/build/exports/Call Of Cthulhu DCotE.dxw b/build/exports/Call Of Cthulhu DCotE.dxw new file mode 100644 index 0000000..bae262e --- /dev/null +++ b/build/exports/Call Of Cthulhu DCotE.dxw @@ -0,0 +1,27 @@ +[target] +title0=Call Of Cthulhu DCotE +path0=D:\Games\Call Of Cthulhu\Engine\CoCMainWin32.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=134217728 +flagh0=20 +flagi0=4194304 +tflag0=6402 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=0 +maxy0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=-5 +winver0=0 +maxres0=-1 diff --git a/build/exports/Colin McRae Rally 2.0.dxw b/build/exports/Colin McRae Rally 2.0.dxw new file mode 100644 index 0000000..377decb --- /dev/null +++ b/build/exports/Colin McRae Rally 2.0.dxw @@ -0,0 +1,27 @@ +[target] +title0=Colin McRae Rally 2.0 +path0=D:\Games\MVM 2004 - Colin McRae Rally 2.0\CMR2.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134217760 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +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 diff --git a/build/exports/Croc - Legend of the Gobbos.dxw b/build/exports/Croc - Legend of the Gobbos.dxw new file mode 100644 index 0000000..752e1bd --- /dev/null +++ b/build/exports/Croc - Legend of the Gobbos.dxw @@ -0,0 +1,27 @@ +[target] +title0=Croc - Legend of the Gobbos +path0=D:\Games\Croc\croc.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +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 diff --git a/build/exports/Croc 2.dxw b/build/exports/Croc 2.dxw new file mode 100644 index 0000000..b23006d --- /dev/null +++ b/build/exports/Croc 2.dxw @@ -0,0 +1,27 @@ +[target] +title0=Croc 2 +path0=D:\Games\Croc 2\Croc2.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +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 diff --git a/build/exports/LEGO Star Wars - The Complete Saga.dxw b/build/exports/LEGO Star Wars - The Complete Saga.dxw new file mode 100644 index 0000000..968a7f4 --- /dev/null +++ b/build/exports/LEGO Star Wars - The Complete Saga.dxw @@ -0,0 +1,27 @@ +[target] +title0=LEGO Star Wars - The Complete Saga +path0=D:\Games\LEGO Star Wars - The Complete Saga\LEGOStarWarsSaga.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +tflag0=6402 +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 diff --git a/build/exports/Legacy of Kain Soul Reaver 2.dxw b/build/exports/Legacy of Kain Soul Reaver 2.dxw new file mode 100644 index 0000000..6580948 --- /dev/null +++ b/build/exports/Legacy of Kain Soul Reaver 2.dxw @@ -0,0 +1,27 @@ +[target] +title0=Legacy of Kain Soul Reaver 2 +path0=D:\Games\Legacy of Kain Soul Reaver 2\sr2.exe +launchpath0= +module0= +opengllib0= +ver0=8 +coord0=0 +flag0=134218288 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +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 diff --git a/build/exports/Madden NFL 08.dxw b/build/exports/Madden NFL 08.dxw new file mode 100644 index 0000000..f9a07f9 --- /dev/null +++ b/build/exports/Madden NFL 08.dxw @@ -0,0 +1,28 @@ +[target] +title0=Madden NFL 08 +path0=D:\Games\Madden NFL 08\mainapp.exe +launchpath0= +module0= +opengllib0= +ver0=9 +coord0=0 +flag0=134218272 +flagg0=1207959808 +flagh0=20 +flagi0=205520900 +flagj0=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 diff --git a/build/exports/NHL 99.dxw b/build/exports/NHL 99.dxw new file mode 100644 index 0000000..738b8c3 --- /dev/null +++ b/build/exports/NHL 99.dxw @@ -0,0 +1,28 @@ +[target] +title0=NHL 99 +path0=D:\Games\NHL99_RIP\nhl99.exe +launchpath0= +module0= +opengllib0= +ver0=1 +coord0=0 +flag0=134234656 +flagg0=1207959808 +flagh0=20 +flagi0=138412036 +flagj0=1 +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 diff --git a/build/exports/Nocturne.dxw b/build/exports/Nocturne.dxw new file mode 100644 index 0000000..c39b35b --- /dev/null +++ b/build/exports/Nocturne.dxw @@ -0,0 +1,27 @@ +[target] +title0=Nocturne +path0=D:\Games\nocturne\nocturne.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=1476395008 +flagh0=20 +flagi0=138412036 +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 diff --git a/build/exports/Quake (OpenGL 3DFX).dxw b/build/exports/Quake (OpenGL 3DFX).dxw new file mode 100644 index 0000000..5433bed --- /dev/null +++ b/build/exports/Quake (OpenGL 3DFX).dxw @@ -0,0 +1,28 @@ +[target] +title0=Quake (OpenGL 3DFX) +path0=D:\Games\Quake\GLQUAKE.EXE +launchpath0= +module0= +opengllib0= +ver0=9 +coord0=0 +flag0=134234656 +flagg0=1208090624 +flagh0=20 +flagi0=138412036 +flagj0=1 +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 diff --git a/build/exports/Quake (win).dxw b/build/exports/Quake (win).dxw new file mode 100644 index 0000000..63d391e --- /dev/null +++ b/build/exports/Quake (win).dxw @@ -0,0 +1,28 @@ +[target] +title0=Quake (win) +path0=D:\Games\Quake\WINQUAKE.EXE +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134234656 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=1 +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 diff --git a/build/exports/Queen of Heart 98.dxw b/build/exports/Queen of Heart 98.dxw new file mode 100644 index 0000000..6288126 --- /dev/null +++ b/build/exports/Queen of Heart 98.dxw @@ -0,0 +1,28 @@ +[target] +title0=Queen of Heart 98 +path0=D:\Games\qoh98\Qoh98.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=134218272 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=1 +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 diff --git a/build/exports/Tomb Raider Underworld.dxw b/build/exports/Tomb Raider Underworld.dxw new file mode 100644 index 0000000..3f9067d --- /dev/null +++ b/build/exports/Tomb Raider Underworld.dxw @@ -0,0 +1,27 @@ +[target] +title0=Tomb Raider - Underworld +path0=D:\Games\Tomb Raider - Underworld\tru.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=1 +flag0=142606848 +flagg0=1207959808 +flagh0=20 +flagi0=138412036 +tflag0=0 +initx0=0 +inity0=0 +minx0=0 +miny0=0 +maxx0=800 +maxy0=600 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=-1 diff --git a/build/exports/readme-relnotes.txt b/build/exports/readme-relnotes.txt deleted file mode 100644 index 39ba174..0000000 --- a/build/exports/readme-relnotes.txt +++ /dev/null @@ -1,595 +0,0 @@ -v2.2.00/01 -major code rewriting - introduced dxwCore class -preliminary FPS handling: Limit, Skip & Count with configurable delay -Hide Multi Monitor configuration flag - used for "Dream Acquarium" on multimonitor PC. - -v2.2.02 -preliminary time stretching: so far applies to GetTickCount() only, and is controlled by Alt-F5 / F6 keys. -Fixed bug in GDI BitBlt call: stretching must be made on screen DC only, or it's made twice. - -v2.02.03/04: -code cleanup - see syslib calls hooking -new configuration flags: Hook GDI and Hook OpenGL -OpenGL custom library field -API hooking fix with module specification -Time stretching by keyboard control (Alt F5/F6) and/or Time Slider dialog - -v2.02.05: -hooked winmm timeGetTime() API: makes time stretching work for Age of Empires series -changed time stretching grain: now it's not the coarse grained 2x, 4x,... series in 9 possible values but the fine grained series 1.5x, 2x, 3x,.... in 17 possible values -added status and time stretching view panels to tray icon menu - -v2.02.06: -preliminary FPS counter overlapped on game screen, Alt-F7 to toggle display on/off. -fixed buf on time stretch logging (and possible game crash). -revised GetDC handling with 8BPP paletized surfaces: avoided need to emulate reverse-blitting and got an impressive speed improvement for games such as Age of Empires I & II and Hyperblade. - -v2.02.07: -many fixes on the FPS and time control features. - -v2.02.08: -fixed some errors in the main directdraw palette descriptor. That gives better compatibility and less complicated source code. -added Fake Version feature: now Dungeon Keeper II (original version, not GOG hack) can detect a fake Win2000 / WinXP environment on Win7 and newer. Tested and working on Win7. Many thanks to Maxim for pushing me hard to win my lazyness and implement this new feature. - -v2.02.09: -Fixed some x,y window coordinates bugs -Fixed some proxy log messages (missing \n line terminator) -Fixed Trace "DirectX" flag. -improved GetDC handling in 8BPP palette mode: AddPalette called on demand, and on any surface (including backbuffers): makes Emergency work with no "Handle DC" flag set. Beware: this may affect the "Map GDI HDC on Primary DC" flag causing surface locks. -Fixed limit FPS timing issues: now the max possible FPS is 1000/delay. -Fixed EndPaint bug causing HDC lock in "Map GDI HDC to Primary DC" mode. - -v2.02.10: -Added "Full RECT Blit" mode: may be useful to handle problematic situations (e.g. "Urban Assault" intro movies) -Fixed ClientToScreen and ScreenToClient hookers to properly handle scaled windows. This makes "Postal" working. -Fixed global palette reference count (??) in DirectDraw::Release hook -Fixed Window messages handling for SWP_NOMOVE, SWP_NOSIZE modes. - -v2.02.11: -Added debug messages for GetSystemMetrics() modes, MapWindowPoints() points, DirectDrawEnumerate/Ex() devices. -ompiled with #define _WIN32_WINNT 0x0600 -> handles Vista modes -Added NOPALETTEUPDATE ("Palette update don't Blit" flag) to eliminate flickering when ddraw and GDI methods conflict -Hooked all LoadLibraryA/W and LoadLibraryExA/W calls -Hooked -extDirectDrawEnumerate/Ex ddraw calls to handle Hide multi-monitor option. -Detected directshow activation through CoCreateInstance and hooked quartz.dll segment: now Urban Assault movies don't require "Full RECT Blit" option to be set. -Updated DDSurface::Release hook - -v2.02.12 -GUI: Tabbed setup panel. More space for more future options. -DLL: (optional) splash screen -probably, some regression bugs.... - -v2.02.13 -Added decoding of WINDOWPOS.flags field in trace log -revised whole hooking procedures to use HMODULE handle instead of module name -Added WM_GETMINMAXINFO and WM_NCCALCSIZE handling in WinProcess hook -Attempt to handle double buffering through surface attach to backbuffer (???) -Fixed CHILD window positioning for BIG windows in CreateWindowExA hook -Added GlobalMemoryStatus hook to fix huge values when value exceeds DWORD range. Fixes Nocturne intro warning message. - -V2.02.14 -Started dll injection to handle startup code -Fixed directx CreateSurface hook to fix "Wargames" error in emulated mode -Fixed directx SetClipper hook to properly handle backbuffer clipping and fix "Wargames" clipping problems - -v2.02.15 -Fixed clipping handling of primary/backbuffer surfaces -Added option to set AERO compatibility for Vista/Win7/Win8 platforms. Need to call a undocumented ddraw API. Thanks to Vovchik that discovered it. Use at your own risk! - -v2.02.16 -DLL injection finally working! Quake 2 is supported. -Added Wireframe option for OpenGL games -Improved fix for clipper handling of primary/backbuffer surfaces - -v2.02.18 -Improved LoadLibrary family hook and other improvements to let DxWnd better retrieve OpenGL libs: now Homeworld 2 is working -Fixed a bug in backbuffer ZBUFFER attach emulation. Now Dungeon Keeper 2 crashes no more. -Moved "Remap client rect" option from directx tab to main program tab -Added the "Force Hook" in the OpenGL tab. Useless for now. -Preliminary work for d3d10/d3d11 wrapping. Unfinished and not working so far. -Added LoadLibraryEx flags explaination in log -Added support for mouse X,Y coordinates display in status window -OpenGL hooking: fixed bug to prevent hooking same call twice -OpenGL hooking: added hook for wglMakeCurrent call to keep track of rendered window -OpenGL hooking: fixed glViewport and extglScissor hook coordinates handling -D3D hooking: Added Wireframe option for D3D games -Added hooking of CLSID_DxDiagProvider through CoCreateInstance -Fixed (further simplified) clipping handling of primary/backbuffer surfaces -ChangeDisplaySettings hook: fixed x,y coordinate inversion in log message - -v2.02.19 -Saves GUI coordinates -Fixed "Remap client rect" option for Diablo's windows and Premier Manager 98 mouse movements -Added "Highlight blit to primary" option to draw a yellow bounding box around blits to primary surface -Fixed some exception conditions when closing the programs -Fixed CreateSurface handling to allow Premier Manager 98 start in emulated mode -Fixed ONEPIXELFIX handling -Fixed BIG WIN handling for Diablo's windows -Fixed FillRect hook to prevent filling outside virtual desktop -Disabled hooking of system libraries -Fixed a nasty bug that caused your desktop to freeze until shutdown !!! -Fixed GetWindowRect handling for windows not created by the task: Diablo queries the explorer window size! Now the retrieved RECT can't be larger than the virtual desktop - -v2.02.20 -Fixed an error in D3D10/11 preliminary code: AoE III working again -Added "Hook all DLLs" option to simplify congiguration: see new Diablo setup -Added screen coordinates to log -Some code rearrangement - -v2.02.21 -it's a w.i.p. release, wait 'till finished.... - -v2.02.22 -Major code rearrangement in API hooking. Expect some troubles... -Added desktop workarea and centered coordinate settings -Fixed imelib hooking -Added HOOKENABLED flag -Fixed ChangeDisplaySettings -GUI: added ListView icons -GUI: added pause command -GUI: updated commands layout - -v2.02.23/24 -Fixed "disable setting gamma ramp" flag to intercept both GDI and D3D calls -Fixed client workarea setting to occupy the whole client area even when preserving aspect ratio (it draws black rectangles to the left/right or top/bottom side) -Added DisableThreadLibraryCalls optimization -Added B&W screen simulation (for primary emulation only) -Improved the primary emulation capacity to handle 3D games -Added the "preserve surface capabilities" flag -Fixed an hooking bug for user32.dll - -v2.02.25 -CORE: -Added 'Single CPU Process Affinity' flag to let old games run on a single CPU core. -Fixed bug causing possible crash using 'preserve surface caps' flag -Switched lpDDSBack reference when backbuffer is upgraded through QueryInterface -Eliminated lpDDSBack clearing when refcount is zero - why is this working better? Needs further investigation -Added DDSCAPS_3DDEVICE capability when in EMULATED mode -GUI: -Added Kill process by name functionality (right click menu on program's list) -Fixed GUI initial position: now checks for desktop size to fit GUI within visible borders -Added single cpu process affinity checkbox in compatibility tab - -v2.02.26 -CORE: -Fixed Black&White mode for 16BPP color depth -Revised hooking code, now more compact and clear.... -Fixed DxWnd splash screen, for those who love it -Increased child win table - now 688 hunter killer works perfectly -GUI: -Added /debug flag to enable debugging options -Revised hooking code, now more compact and clear.... -Restored Hook child win option - -v2.02.27 -CORE: -fixed GetDC/ReleaseDC ddraw implementation to refresh GDI operation on primary surface. Warlords 3 text is now visible. -preliminary implementation of MapWindowPoints - to be tested -GUI: -Fixed log flags wrong initialization - -v2.02.28 -CORE: -eliminated experimental ICSendMessage and ICOpen hooks, preventing some games (Alien Nations) to work -added mciSendCommand hook to fix video playback -fixed MoveWindow bug - still, it's unknown the reason why some programs (Emergency) tries to MoveWindow upon the hWnd=0 desktop! -fixed MapWindowPoints hook (Alien Nations) -fixed desktop detections in some places, now correctly using dxw.IsDesktop() method -Now "Alien Nations" and "Emergency" working (almost) perfectly. -fixed d3d8/9 hook to Get/SetGammaRamp. This should make a great number of recent games playable again. - -v2.02.29 -CORE: -hooked DirectDrawSurface::Lock method to center primary surface memory updates centered into the window (in no emulated mode) - -v2.02.30 -CORE: -Some ddraw::GetDC log message fixes -added preliminary registry emulation - tested ok with "duckman" -added separate flag for preliminary registry operation trace -added CDROM drive type emulation - tested ok with "Fighting Forces" RIP -fixed FixCursorPos routine: cursor x,y compensation must always use pseudo-fullscreen window parameters - fixes Imperialism II mouse problems -fixed Desktop Workarea position mode for ddraw games -added CoCreateInstanceEx hook - "Final Fighter" seems to be using it, but who knows why...? -added "Don't move D3D Rendering Window" window option to make "Fable Lost Chapters" working -GUI: -updated default values on new entry creation to map most-likely-to-work parameters - -v2.02.31 -CORE: -disabled annoying compilation security warnings -improved advapi32.dll hooking and logging -handling of complex primary surfaces with backbuffer surface inherited from one directdraw session to the following and with different interfaces -fixed SetCooperativeLevel handling in case of WINDOWED mode against desktop hwnd==NULL -fixed GetGDISurface in EMULATED mode -hooked gdi32 API set for Imperialism I & II and 688 Hunter Killer:GetClipBox, Polyline, PolyBezierTo, PolylineTo, PolyDraw, MoveToEx, ArcTo, LineTo, StretchDIBits, SetDIBitsToDevice, SetPixel, Ellipse, Polygon, Arc, CreateEllipticRgn, CreateEllipticRgnIndirect, CreateRectRgn, CreateRectRgnIndirect, CreatePolygonRgn, DrawTextA, DrawTextExA. -fixed gdi32.dll hooking for TextOutA, TabbedTextOutA, Rectangle, BitBlt, PatBlt, StretchBlt, CreateFont, CreateFontIndirect -improved ddraw proxy logging -added / fixed user32.dll API FrameRect, TabbedTextOutA, CloseWindow, DestroyWindow, SendMessageW -opengl: fixed glCreateContext, wglMakeCurrent to make Descent III playable in opengl video mode. -fixed DeferWindowPos hook to make Imperialism II working -fixed SM_CXVIRTUALSCREEN, SM_CYVIRTUALSCREEN properties -fixed window class logging causing program crash -GUI: -added "GDI/Scale font parameters" & "DirectX/Disable HAL support" options - -v2.02.32 -CORE: -added new GDI handling mode, "Emulated devce context". Currently tested successfully on "G-Nome" only. -fixed "Prevent maximize" windows handling avoiding to disable topmost style for child windows -fixed handling of DDSCAPS_3DDEVICE surfaces in emulated mode: "Nightmare Ned" is working ok, "The Sims" works better (still crashing..) -fixed banner handling in case of device context remmapped coordinates -fixed memory leakage in SetDIBitsToDevice hooker -GUI -added radiobutton group to set the preferred GDI emulation mode - -v2.02.33 -CORE: -experimental attempt to emulate the ZBUFFER attach to the BACKBUFFER surface -improved log to detail all ddraw object properties -experimental emulation of RGB to YUV conversion to investigate "duckman" problems on Win7 -improved grayscale algorythm -fixed missing DDPF_ALPHAPIXELS property causing several blit incompabilities -fixed surface handling for "Submarine Titans" -fixed mousewheel handling -fixed hooking bug causing several problems (i.e. Age of Empires III) -Added FULLSCREENONLY option: fixes "Submarine Titans" intro movies -Added "Bypass font unsupported api" compatibility flag: makes "Stratego" working -fixed several d3d8/9 hooking problems -GUI -added controls for new core features -defaulted ddraw emulation mode to surface emulation - -v2.02.34 -CORE: -Much better surface description in log -Completely revised CreateSurface hook: emulated and direct code are merged as much as possible, and reference counter are kept accurate. Now most games can work both in emulated and direct mode. -Fixed surface capabilities for "Vangers", "The Sims" (now working in emulated mode again) -Updated "Fixed aspect ratio" option: now uses the x,y size declared in the configuration instead of the fixed 800 x 600 standard one. -Added virtual fullscreen "Desktop" mode. -Completely revised the Peek/GetMessage handling: now it uses the standard SetWindowHook API instead of the address redirection, making the handling more reliable and accurate: now "Age of Empires III" works at last! -GUI: -Added virtual fullscreen "Desktop" mode. -Added "Fix buffered IO after Win98" flag: this is meant to fix an incompatibility in the ReadFile kernel32 API that must read from block boundaries, where a block was smaller up to Win98 and bigger after it. -As a result, games like "Dylan Dog Horror Luna Park" show IO errors while reading data from the CD. Unfortunately, this is not the only problem of this game, so Dylan Dog fans will have to wait further. -Maybe some other programs suffer of this problem, and I will strongly appreciate if anyone finds some. - -v2.02.35 -fixed BACKBUFFER surface attributes in direct (not emulated) mode: Rayman 2 playable again -added FILTERMESSAGES flag ("filter offending messages") to eliminate some problems to games not developed to work windowized (Rayman 2, Mirror's Edge ...) -fixed bug crashing the program when "keep aspect ratio" is selected with window size set to 0 - -v2.02.36 -hooked GetAttachedSurface to non-PRIMARY surface to track ZBUFFER attach to BACKBUFFER. Useless, so far... -revised capability handling in CreateSurface -hook trace is now activated from a separate log flag to reduce debug log size -added "Peek all messages in queue" to avoid queue saturation and automatic task kill in Win7 (thank to P K help) -fixed message handling in the case messages are passed to a routine handle - -v2.02.37 -code reorganization -GUI: -removed useless flags and moved debug options in a hidden tab - -v2.02.38-40 -Fixed coordinate calculation for blit operations when keeping aspect ratio. -Fixed window coordinate placement in desktop / client area mode for programs with a visible menu bar. -Changed "Lock win coordinates" flag: now it allows window movement / resizing when driven by mouse input. -Fixed a bug in GDI "Map DC to primary surface"mode. -Added palette display window to GUI - -v2.02.41 -Added "suppress child process creation"flag. This flag is introduced to manage games such as "Heart of Iron 2" that start intro movie by means of a separate process. HoI2 is starting the binkplay.exe program in the game's avi subfolder. This way you don't get a windowed movie, but completely suppress it. - -v2.02.42 -added hook to kernel32.dll QueryPerformanceCounter API to enable time stretching to Rayman 2 -handled GetAttachedSurface emulation for FLIP capability on primary surface - that makes the intro movies of Empire Earth visible. -Some code cleaning -Cleared invisible debug flags ... - -v2.02.43 -Several changes for Empire Earth: -fix: restore 16BPP color mode after directdraw session termination -fix: recovered window destruction -fix: proper handling of MIPMAP and LOCALVIDMEM surfaces -fix: color depth handling - now when the program terminates the desktop is brought to the original color depth - -v2.02.44 -Improved debug logging for all palette operations -fixed a bugged log causing the crash of Empire Earth in debug mode -added show time stretching flag - preliminary version. Some code cleaning as well. -change in automatic screen refresh - should make the "palette update don't blit" flag obsolete..... -added a static definition for the default system palette -added interception for CoCreateInstance following cases: - case 0xe436ebb3: Module="quartz"; Class="CLSID_FilterGraph"; - case 0x4fd2a832: Module="ddrawex"; Class="CLSID_DirectDrawEx"; - case 0x49c47ce5: Module="amstream"; Class="CLSID_AMMultiMediaStream"; -preliminary (proxed) interception for "GetActiveWindow" and "GetForegroundWindow" - -v2.02.45 -A small fix for ddraw 7 games that makes Praetorians playable, though with some problems! - -v2.02.46 -Fixed handling of user32 CreateDialogIndirectParam call to avoid processing in non fullscreen mode - fix necessary to start "Crimson Skies". - -v2.02.47 -GUI: -Configuration tabs reorganization: now some tabs have merged making it easier to reach all options -core: -improved d3d wrapping and sdded ZBUFFER cleanup flags to fix some d3d games. In particular: -Clean ZBUFFER @1.0 fix: to fix "Star Wars Episode I Racer" -Clean ZBUFFER @0.0 fix: to fix "Crimson Skies" black blocks bug on ATI cards - -v2.02.48 -New options: "Disable fogging", "Textures not power of 2 fix" -A few fix to prevent game crashes - -v2.02.49 -Separated ddraw, d3d and dxwnd log messages -Hooked GetAvailableVidMem method to limit memory values -Hooked ChangeDisplaySettings call in both versions ANSI and WIDECHAR, to prevent messing up with the screen -Added HookWindowProc() subroutine, called at dxhook.c@1534 -Added "Add proxy libs" flag - so far to copy a d3d9.dll proxy lib to fix d3d9 games -Hooked d3d8/9 SetCursorPosition method -Hooked d3d8/9 AddRef / release methods (for logging) -Fixed D3DDevice8/9 hooking -Hooked QueryPerformanceFrequency -Fixed a bug in d3d7 hooking -GUI: added desktop color setting - -v2.02.50 -Added "Intercept RDTSC" option: so far, tested on Unreal Tournament only. -To implement RDTSC detection, I owe a big thank you to Olly who shared the disasm lib used to browse the assembly code. - -v2.02.51/52 -Hooked window timers: now "Ed Hunter" can be time stretched -added NOFILLRECT debug option -fixed WM_DISPLAYCHANGE handling (x,y swapped coordinates?) -fixed int64 arithmetic for performance counters -Added (untested !!!) handling for RDTSCP opcode with "Intercept RDTSC" option -Added "Limit screen resolution" option: seems necessary for "Sid Meyer's Civilization III" to work -Improved initial window coordinate & style handling -fixed virtual screen size showing into status panel -hooked SetPixelFormat, GetPixelFormat, ChoosePixelFormat and DescribePixelFormat to redirect desktop hwnd and make wglCreateContext work (needed for Civ III) -fixed log message for TextOut parameters -hooked DisableD3DSpy (invoked by The Bard's Tale) -fixed extglViewport coordinate remapping when invoked with CW_USEDEFAULT values (Civ III) -fixed bug in DirectDarawCreate/Ex hooking with wrong module handle - -v2.02.53 -Handling of ddraw screen color depth 15BPP - in "Hesperian Wars" -fixed IAT scanning: now function addresses for remapping are searched in possibly multiple instances of dll text segment - in "Aaron Hall's Dungeon Odissey" -hooked SystemParametersInfo call -fixed window size logic to check for window menu bar, considering also the WS_CHILD case. -fixed window move/resize when message processing is enabled: coordinates outside the child area or within ENTER/EXITSIZEMOVE must NOT be altered. -expanded timer processing to include user32 Set/KillTimer - in "Aaron Hall's Dungeon Odissey" -fixed possible recursion while hooking child window procedure identical to parent's one -fixed gdi emulation on top of ddraw surface, enough to play "Sid Meyer's Civilization III". - -v2.02.54 -fixed a bug in d3d GetAvailableVidMem that was causing too many troubles... -fixed a bug in Suppress IME option -fixed a bug in handled library list, possibly affecting d3d/d3d7 games -avoid fixing window style for non-desktop windows (fixed a Port Royale 2 bug) -eliminated "Disable HAL support", no longer necessary -some incomplete work on gdi game handling -added preliminary, incomplete (not working) glide handling - -v2.02.55 -added "Hide desktop background" video option - -v2.02.56 -hooked RegisterClassA API (useless so far...) -fixed bug in SendMessageW hooking: caused truncated text in window titles and form captions -fixed several d3d1-7 hooks: prevented some d3d games to properly work, i.e. "Thief the Dark Project" -fixed d3d GetDisplayMode to return virtual desktop size - fixed "Affari Tuoi", an italian game. -fixed some log messages - -v2.02.57 -fixed WS_NCCALCSIZE & WM_NCPAINT messages to ensure a proper window's border and size - fixed Black Thorn window problems -fixed "Hide desktop background" flag - -v2.02.58 -Added Automatic DirectX mode: not workink always, but should make it much easier to guess a proper surface setting. -Automatic mode allows dynamic mode change depending on the situation: it is necessary for Populous 3 D3D version. -fixed BltFast operation with SRC color key (often used to draw cursor from texures) directly to primary surface: this makes the cursor visible in Populous 3. -minor fixes on logging - -v2.02.59 -fixed IDIrectDraw reference counter for ddraw release 1 session: fixes "Warhammer 40K Rites Of War" first screen -fixed QueryPerformanceCounter handling: fixes "New York Racer" time stretching problems - -v2.02.60 -fixed time stretching to handle Total Soccer 2000 -fixed ZBUFFER surface creation to handle GOG Incoming troubles on some cards -fixed handling of special effects (wireframe, no fogging, zbuffer always) to be valid on all d3d versions - -v2.02.61 -added directx "Compensate Flip emulation" flag: used primarily to get rid of mouse artifacts due to emulated Flip rpocedure in windowed mode. Fixes Gruntz issues and some other games... - -v2.02.62 -fixed d3d7 CreateDevice hook and d3d7 rendering options (wireframe, disablefogging, zbufferalways) -fixed doublebuffer emulation - avoid returning the backbuffer when zbuffer is requested. Fixes rendering problems of many games! - -v2.02.63 -fixed d3d hooking for Reset and GetDirect3D methods: now Jumpgate works at any available resolution, and the "Add proxy libs" option is no longer necessary -fixed "Compensate Flip emulation" option for non emulated surface mode: fixes mouse artifacts for "Rogue Spear Black Thorn" -added preliminary handling for "Disable Textures" option - -v2.02.64 -GUI: implemented multiple file import -DLL: -fixed a ddraw session reference count error that prevented "Jet Moto" to start -fixed "Compensate Flip emulation" for ddraw7 games: now "Empire Earth" supports this flag. -fixed CloseWindow hook: now games that minimize/restore the main window on task switch can possibly recover (e.g. Hundred Swords) -fixed process hook: now it should be a little more robust and efficient. Hopefully should fix some Macromedia Flash problems. -fixed IDDrawSurface::Lock() prototype. Not gameplay improvements, though... -added DirectX "Return 0 ref counter" option as quick & dirty solution to many reference counter problems! -fixed DirectDrawCreateEx failing to register the main ddraw session handle -fixed palette problem in emulated mode: palette must be applied to backbuffer surface as well. Now "Duckman" and "Total Soccer 2000" show perfect colors. - -v2.02.65 -added "Fine time adjust" flag to finely set timeslider by 10% steps ranging from about :2 to x2 -fixed a bug in DWORD timers introduced in v2.02.60: now "Warcraft 2" timing works again -revised logit to calculate delays to emulate VSync timing - now should be more accurate and depending on actual screen refresh rate - -v2.02.66 -fixed palette bug: "Virtua Fighter PC" now shows correct colors. - -v2.02.67 -fixed log for D3D CreateDevice method, missing in some D3D interface versions -added wildcarded program path: now you needn't set the full pathname, but it is sufficient to specify the rightmost part, e.g. the executable filename. -added emulated mode color conversion from 32BPP to 16BPP. Despite the fact that the best way to run a 32BPP game is against a 32BPP desktop, now it is possible to downgrade 32BPP colors to 16BPP. This fixed the fact that 32BPP games run on a 16BPP desktop showed simply black screens (e.g. Baldur's Gate II) -fixed logic for EnumDisplayModes implementation: now screen resolutions and, for emulated mode only, also color depth, are generated by DxWnd and not derived directly from the real ones. This make it possible to fake support for very low screen resolutions (e.g. 320x200) on modern screens that support them no longer. This make "Genocide" running on both supported resolutions 320x200 and 320x240. - -v2.02.68 -added screen resolution choice: either a set of SVGA resolutions (mostly for 3:4 monitors), HDTV resolutions (mostly for 16:9 monitors) or the native set of resolutions offered by your monitor / video card. - -v2.02.69 -improved exception catching to intercept memory violation exceptions and to neutralize offending code. Thank again to olly didasm lib, now the assembly instruction length is automatically determined so that the opcode can be replaced by the correct number of NOP instructions. If this doesn't mean much for you, just consider that this makes playable the Win95 (patched) release of "Star Wars Tie Fighter". -fixed FillRect user32 call - brings some improvements to Imperialism (still far from being acceptable). - -v2.02.70 -GUI: -fixed saving wrong coordinates when dxwnd is terminated while minimized -added check for adminstrative capabilities on startup -DLL: -fix: moved DrawText/Ex api hooks into right library -fix: corrected child window procedure handling - fixes "Imperialism" child window closing -fixed FillRect coordinate handling - fixes "Imperialism" menus -fixed SetWindowPlacement handling - -v2.02.71 -fix: Set/GetWindowLongA/W are always hooked. -fix: added user32 GetDCEx hook for GDI Emulation & Directraw mode -fix: hooked "FrameRect", "TabbedTextOutA", "DrawTextA", "DrawTextExA", "FillRect" in scaled mode only -fix: FIXNCHITTEST mode -fix: when main win is closed, blit area is made null to avoid messing with a wrong screen area -added "Release mouse outside window" option. This option causes the get cursor position to detect a centered mouse position when the cursor is moved outside the window, allowing interaction with other windows without scrolling ot the windowed program. Mainly, this option is meant to help people with a physical disability to use other programs (e. g. the virtual keyboard) to play games. -added "Launch" field (optional) to start the program with arguments or a separate task - -v2.02.72 -fix: fixed Launch field used with "Use DLL injection" flag -fix: somehow improved "Use DLL injection" to avoid blocked tasks and allow exception handling - -v2.02.73 -Add: preliminary support for (unchecked) "Run in window" flag. Now if the flag is unchecked, DxWnd does NOT force the program to run in a window. Still, some rendering modes are not working perfectly. -add: support for Unicode DefWindowProcW API call -fixed some differences in D3D CreateDevice vs. CreateDeviceEx handling -added "Window frame compensation" input flag to set the cursor position properly in "Sub Commando" -fix: properly handled the case of NULL WindowProc routine in CreateDialog/Indirect API calls. Makes "LEGO Stunt Rally" working. -added support for Unicode SystemParametersInfoW API call - -v2.02.74 -Add: API hot patching, thank to aqrit precious support. Now Doom 3 is played in window. -hooked GetCursorInfo call -fix: recalculate vsync timers in case of time stretching -fix: log failure for CreateWindowExW wchar api -Add: configurable keyboard commands -Add: timestretch toggle command -Add: "Enable hotkeys" flag to enable/disable hotkeys -fix: eliminated dialogs with timer warning messages (to be investigated...) -fix: moved "no banner" flag to main tab again -fix: potential string violation, possible cause for flash crash? - -v2.02.75 -Hooked D3DDevice::ShowCursor method to apply force show/hide cursor (preliminary...) -fix: dynamic allocation for WndProc stack to eliminate predefined limit of 256 entries. Star Wars Rebellion uses more than 256. -added: "Suppress D3D8/9 Reset" flag -fix: improved show FPS and Time Stretch overlay so that the two overlays won't overlap each other -fix: bug in ddraw "Locked surface" mode preventing output on screen -fix: fixed bug in critical common portion of the code that was crashing even unhooked programs (namely, Flash Player, ...) - -v2.02.76 -fixed and enhanced several features about registry emulation: added flags "Emulate registry" (to add missing entries) and "Override registry" (to fake existing entries with different values). Fixed "Requiem Avenging Angel" DirectX bogus check bug. -fixed bug in emulate surface palette handling affecting "Requiem Avenging Angel" colors - -v2.02.77 -GUI: added program icon display -fix: some log messages -fix: handling of GetProcAddress D3D9 api -fix: handling of EMULATEBUFFER option - fixes "Star Trek Birth of the Federation" -fix: expanded hot patching scope - now can handle QueryPerformanceCounter and fix time stretching on obfuscated version of "Wind Fantasy SP" -added logging in D3DDevice9::GetAdapterIdentifier - -v2.02.78 -fix: hooked D3D8/9Device::BeginStateBlock -ddraw API hot swappable -log: helper for ChangeDisplaySettings() flags -fix: hot patch handling of loaded modules -log: fixed some messages with no line ending for GetObjectType() -d3d begin of code reorganization and cleaning -ole32, user32 API hot patched -handling of DWL_DLGPROC message - -v2.02.79 -fix: recovered capability to "pin" ddraw and d3d calls - -v2.02.80 -Preliminary multilanguage release, english and chinese, many thanks to gsky916 support -fixed Sleep bug for small delays and accelerated timeshift: fixes "Wind Fantasy SP" reported bug -added log for DirectInput::SetCooperativeLevel flags -fixed flip emulation mode when backbuffer is lost: fixes cursor problems in "HellCopter" -fixed Pitch setting in DirectDraw::EnumDisplayModes when in SVGA emulation mode. Let "Outlive" use this setting - -v2.02.81 -fix: hooked GetMonitorInfoA/W that is a possible way to get the screen resolution. The hooker sets the virtual screen size updating both rcWork & rcMonitor rects in the MONITORINFO structure. This fixes the mouse control in "Tomb Raider Underworld" and likely in other games with a similar engine. - -v2.02.82 -fix: completed chinese translation and language selection through dxwnd.ini file. -added very preliminary (and incomplete) italian translation for debugging. - -v2.02.83 -fix: small error in one coordinate scaling procedure -fix: completed translation in italian (just for testing....) -fix: added palette window activation in icon tray menu -fix: supppressed BackBuffer release within D3D7:CreateDevice: this makes "Tetris Worlds" fully playable -add: build-in check for compatibility modes set! - -v2.02.84 -fix: removed extra reference to ddraw session causing window movements on fullscreen game exit: fixes another "Wind Fantasy SP" reported bug - -v2.02.85 -fix: revised handling of d3d D3DFORMAT field: fixes "Call of Cthulhu DCotE" color problems -fix: added recovery for rounded child win coordinates: fixes blitting problems in Diablo when win size is not an exact multiple of native resolution. - -v2.02.86 -fix: thank to aqrit's research, hooked and hanlded user32.dll GetUpdateRgn API. This fixes refresh and crash problems in Diablo & Hellfire. -added bilinear filtering to directdraw palettized 8BPP emulated mode (where it is mostly needed!). A must try is "Genocide" ! - -v2.02.87 -attempt to fix Win8 missing support for earlier ddraw releases (Croc legend of the Gobbos, Project I.G.I., ...) -fix: optimized bilinear filtering with no horizontal / vertical sawtooth artifacts -added support for 16BPP and 32BPP desktop bilinear filtering -suppressed compatibility checking -fix: doubled default window size when bilinear filtering is active -added repositioning of control parent window when main win is moved -added debug messages about hooked window class and name -fix: ignore IME window when hooking main win, destroy it when requested -fix: ignore HWND_MESSAGE type windows -added "Diablo tweak" compatibility flag for Diablo proper screen update handling. It is a temporary tweak waiting to understand better how to properly manage it. - -v2.02.88 -fix: DIABLOTWEAK flag defaulted to FALSE -add: CLEARTARGET flag - forces a Clear CLEAR_TARGET operation on D3D BeginPaint: useful in combination with wireframe mode. -updated "Optimize CPU" behavior: now it emulates a VSync wait also on D3D8/D3D9. Fixes some "swimming" problem in "Soul Reaver 2", and saves CPU time by limiting the FPS to the refresh rate. -fixed positioning of FPS and time stretching indication on screen overlay -cleaned up GUI project: no more japanese and localized resources, no more unreferenced resources. -GUI: added Desktop status window -GUI: added pixel format descriptor to DxWnd status - -v2.02.89 -fix: added SVGA 512x384 video mode. Necessary for "Outcast" loading screen. -fix: using WINNLSEnableIME call to suppress IME window. -fix: improved some logging - -v2.02.90 -added: "Filter winposchange messages" flag - needed for "RollerCoaster Tycoon / Deluxe / II" games -fix: correct handling of texture surfaces for "Zoo Tycoon" in surface emulation mode. -fix: handling of GDI32.dll calls in GetProcAddress -fix: improved logging -fix: GetRgnBox hooking moved to normal window processing, to handle RollerCoaster Tycoon series. -added: GetTempFileName fix to handle Win95 differences. This makes "Powerslide" playable. - - diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 39ba174..d504b63 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -592,4 +592,6 @@ fix: improved logging fix: GetRgnBox hooking moved to normal window processing, to handle RollerCoaster Tycoon series. added: GetTempFileName fix to handle Win95 differences. This makes "Powerslide" playable. - +v2.02.91 +fix: bug in bilinear filtering mode causing possible game crashes when blitting partial rectangles (es. Age of Empires II cursor) +added: AERO friendly mode - brings AERO compatibility and incredible performance boost for ddraw games in surface emulation mode diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 9772ae5..2aa35b3 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -2381,7 +2381,7 @@ static void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) if((lpddsd->dwFlags & DDSD_CAPS) && (lpddsd->ddsCaps.dwCaps & DDSCAPS_TEXTURE)){ if (dxw.dwFlags3 & FORCESHEL) { lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + if(dxw.dwFlags5 & SYSTEMMEMORY) lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; } // no further changes... return; @@ -2452,7 +2452,8 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf ddsd.dwFlags |= (DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT|DDSD_PIXELFORMAT); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces - ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); + ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); @@ -2517,7 +2518,8 @@ static HRESULT BuildPrimaryEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf if(lpDDSEmu_Back==NULL){ ClearSurfaceDesc((void *)&ddsd, dxversion); ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; - ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); if(dxw.dwFlags4 & BILINEARFILTER){ @@ -2611,7 +2613,8 @@ static HRESULT BuildBackBufferEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_BACKBUFFER|DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX|DDSCAPS_VIDEOMEMORY|DDSCAPS_LOCALVIDMEM); // DDSCAPS_OFFSCREENPLAIN seems required to support the palette in memory surfaces - ddsd.ddsCaps.dwCaps |= (DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); + ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); GetPixFmt(&ddsd); @@ -2644,7 +2647,7 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS ddsd.dwFlags &= ~(DDSD_WIDTH|DDSD_HEIGHT|DDSD_BACKBUFFERCOUNT|DDSD_REFRESHRATE|DDSD_PIXELFORMAT); ddsd.dwFlags |= (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH); ddsd.ddsCaps.dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_COMPLEX); - //ddsd.ddsCaps.dwCaps|=DDSCAPS_SYSTEMMEMORY; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; if (dxversion >= 4) ddsd.ddsCaps.dwCaps |= DDSCAPS_OFFSCREENPLAIN; ddsd.dwWidth = dxw.GetScreenWidth(); ddsd.dwHeight = dxw.GetScreenHeight(); @@ -2665,8 +2668,8 @@ static HRESULT BuildBackBufferDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateS if(res) { if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){ OutTraceDW("CreateSurface: CreateSurface DDERR_OUTOFVIDEOMEMORY ERROR at %d, retry in SYSTEMMEMORY\n", __LINE__); - ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; // try ... - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; // try ... + ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, 0); } if(res){ @@ -2691,13 +2694,14 @@ static HRESULT BuildGenericEmu(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf memcpy(&ddsd, lpddsd, lpddsd->dwSize); // Copy over .... FixSurfaceCaps(&ddsd, dxversion); + if(!(dxw.dwFlags5 & SYSTEMMEMORY)) ddsd.ddsCaps.dwCaps &= ~DDSCAPS_SYSTEMMEMORY; DumpSurfaceAttributes((LPDDSURFACEDESC)&ddsd, "[Emu Generic]" , __LINE__); res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && (res==DDERR_OUTOFVIDEOMEMORY)){ OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); ddsd.ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res=(*pCreateSurface)(lpdd, &ddsd, lplpdds, pu); } if (res) { @@ -2736,7 +2740,7 @@ static HRESULT BuildGenericDir(LPDIRECTDRAW lpdd, CreateSurface_Type pCreateSurf if ((dxw.dwFlags1 & SWITCHVIDEOMEMORY) && ((res==DDERR_OUTOFVIDEOMEMORY)||(res==DDERR_UNSUPPORTED))){ OutTraceDW("CreateSurface ERROR: res=%x(%s) at %d, retry\n", res, ExplainDDError(res), __LINE__); lpddsd->ddsCaps.dwCaps &= ~DDSCAPS_VIDEOMEMORY; - lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + if(dxw.dwFlags5 & SYSTEMMEMORY) lpddsd->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; res = (*pCreateSurface)(lpdd, lpddsd, lplpdds, 0); } if(res){ @@ -3070,6 +3074,49 @@ static void BlitTrace(char *label, LPRECT lps, LPRECT lpd, int line) return; } +HRESULT WINAPI PrimaryBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +{ + return (*pBlt)(lpdds, lpdestrect, lpddssrc, lpsrcrect, DDBLT_WAIT, 0); +} + +HRESULT WINAPI PrimaryFastBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +{ + return (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddssrc, lpsrcrect, DDBLTFAST_WAIT); +} + +HRESULT WINAPI PrimaryStretchBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +{ + HRESULT res; + DDSURFACEDESC ddsd; + RECT TmpRect; + LPDIRECTDRAWSURFACE lpddsTmp; + memset(&ddsd, 0, sizeof(ddsd)); + ddsd.dwSize = sizeof(ddsd); + lpddssrc->GetSurfaceDesc(&ddsd); + TmpRect.left = TmpRect.top = 0; + TmpRect.bottom = ddsd.dwHeight = lpdestrect->bottom - lpdestrect->top; + TmpRect.right = ddsd.dwWidth = lpdestrect->right - lpdestrect->left; + ddsd.dwFlags = (DDSD_HEIGHT | DDSD_WIDTH | DDSD_CAPS); + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + if(dxw.dwFlags5 & SYSTEMMEMORY) ddsd.ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY; + res=(*pCreateSurface1)(lpPrimaryDD, &ddsd, &lpddsTmp, NULL); + if(res) OutTraceE("CreateSurface: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + // stretch-blit to target size on OFFSCREENPLAIN temp surface + res= (*pBlt)(lpddsTmp, &TmpRect, lpddssrc, lpsrcrect, DDBLT_WAIT, 0); + if(res) OutTraceE("Blt: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + // fast-blit to primary + res= (*pBltFast)(lpdds, lpdestrect->left, lpdestrect->top, lpddsTmp, &TmpRect, DDBLTFAST_WAIT); + if(res) OutTraceE("Blt: ERROR %x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + if (res) BlitError(res, lpsrcrect, lpdestrect, __LINE__); + (*pReleaseS)(lpddsTmp); + return res; +} + +HRESULT WINAPI PrimaryNoBlt(LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect) +{ + return DD_OK; +} + HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, LPDIRECTDRAWSURFACE lpddssrc, LPRECT lpsrcrect, DWORD dwflags, LPDDBLTFX lpddbltfx, BOOL isFlipping) { @@ -3077,6 +3124,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, POINT p = {0, 0}; HRESULT res; BOOL ToPrim, FromPrim, ToScreen, FromScreen; + extern PrimaryBlt_Type pPrimaryBlt; //CkArg arg; ToPrim=dxw.IsAPrimarySurface(lpdds); @@ -3219,21 +3267,30 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, return res; } + // ========================= // Blit to primary surface + // ========================= if(dxw.HandleFPS()) return DD_OK; + if(dxw.dwFlags5 & NOBLT) return DD_OK; destrect=dxw.MapWindowRect(lpdestrect); //OutTraceB("DESTRECT=(%d,%d)-(%d,%d)\n", destrect.left, destrect.top, destrect.right, destrect.bottom); + // ========================= + // Blit to primary direct surface + // ========================= + if(!(dxw.dwFlags1 & (EMULATESURFACE|EMULATEBUFFER))){ - res=0; + res=DD_OK; + // blit only when source and dest surface are different. Should make ScreenRefresh faster. if (lpdds != lpddssrc) { dxw.ShowOverlay(lpddssrc); if (IsDebug) BlitTrace("PRIM-NOEMU", lpsrcrect, &destrect, __LINE__); - res= (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); + //res= (*pBlt)(lpdds, &destrect, lpddssrc, lpsrcrect, dwflags, lpddbltfx); + res=(*pPrimaryBlt)(lpdds, &destrect, lpddssrc, lpsrcrect); } if(res){ BlitError(res, lpsrcrect, &destrect, __LINE__); @@ -3278,7 +3335,10 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, } // ... else blitting on emulated surface + + // ========================= // Blit/Flip to emulated primary surface + // ========================= if(!lpddssrc) { if (isFlipping){ @@ -3332,7 +3392,7 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, if (res) BlitError(res, lpsrcrect, &destrect, __LINE__); } - if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0; + if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; return res; } @@ -3357,10 +3417,10 @@ HRESULT WINAPI sBlt(char *api, LPDIRECTDRAWSURFACE lpdds, LPRECT lpdestrect, dxw.ShowOverlay(lpDDSSource); if (IsDebug) BlitTrace("BACK2PRIM", &emurect, &destrect, __LINE__); - res=(*pBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect, DDBLT_WAIT, 0); + res=(*pPrimaryBlt)(lpDDSEmu_Prim, &destrect, lpDDSSource, &emurect); if (res) BlitError(res, &emurect, &destrect, __LINE__); - if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=0; + if(dxw.dwFlags1 & SUPPRESSDXERRORS) res=DD_OK; if (IsDebug) OutTrace("%s: done ret=%x at %d\n", api, res, __LINE__); return res; } diff --git a/dll/dxemublt.cpp b/dll/dxemublt.cpp index f6fc420..91e00e4 100644 --- a/dll/dxemublt.cpp +++ b/dll/dxemublt.cpp @@ -23,9 +23,11 @@ extern int Set_dwSize_From_Surface(LPDIRECTDRAWSURFACE); #define DXWNDDIRECTBLITTING 1 #define MARKBLITCOLOR32 0x00FFFF00 #define MARKBLITCOLOR16 0x0FF0 -extern Blt_Type pBlt; EmuBlt_Type pEmuBlt; RevBlt_Type pRevBlt; +PrimaryBlt_Type pPrimaryBlt; + +extern Blt_Type pBlt; //--------------------------------------------------------------------------------------------// // Emulated blitting procedures: fills a 32BPP surface from the content of 8BPP or 16BPP ones. @@ -256,8 +258,8 @@ static HRESULT WINAPI BilinearBlt_8_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT l dest0 = dest; src8 = (BYTE *)lpsurface; - src8 += lpsrcrect->top*ddsd_src.lPitch; - src8 += lpsrcrect->left; + src8 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; + src8 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); @@ -432,8 +434,8 @@ static HRESULT WINAPI BilinearBlt_16_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT ddsd_src.lPitch >>= 1; src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); - src16 += lpsrcrect->top*ddsd_src.lPitch; - src16 += lpsrcrect->left; + src16 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; + src16 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; if (!Palette16BPP) SetPalette16BPP(); @@ -760,8 +762,8 @@ static HRESULT WINAPI BilinearBlt_8_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT l dest0 = dest; src8 = (BYTE *)lpsurface; - src8 += lpsrcrect->top*ddsd_src.lPitch; - src8 += lpsrcrect->left; + src8 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; + src8 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); @@ -877,8 +879,8 @@ static HRESULT WINAPI BilinearBlt_16_to_16(LPDIRECTDRAWSURFACE lpddsdst, LPRECT ddsd_src.lPitch >>= 1; src16 = (WORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); - src16 += lpsrcrect->top*ddsd_src.lPitch; - src16 += lpsrcrect->left; + src16 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; + src16 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); @@ -1122,8 +1124,8 @@ static HRESULT WINAPI BilinearBlt_32_to_32(LPDIRECTDRAWSURFACE lpddsdst, LPRECT ddsd_src.lPitch >>= 2; src32 = (DWORD *)(lpsurface ? lpsurface:ddsd_src.lpSurface); - src32 += lpsrcrect->top*ddsd_src.lPitch; - src32 += lpsrcrect->left; + src32 += (lpsrcrect->top >> 1)*ddsd_src.lPitch; + src32 += (lpsrcrect->left >> 1); srcpitch = ddsd_src.lPitch - w; // OutTraceDW("DEBUG: h=%d w=%d src=%x dst=%x spitch=%d dpitch=%d\n",h,w,src8,dest,srcpitch,destpitch); @@ -1583,5 +1585,10 @@ void SetBltTransformations() dxw.ActualPixelFormat.dwRGBBitCount); break; } + + pPrimaryBlt = PrimaryBlt; + if(dxw.dwFlags5 & DOFASTBLT) pPrimaryBlt = PrimaryFastBlt; + if(dxw.dwFlags5 & DOSTRETCHBLT) pPrimaryBlt = PrimaryStretchBlt; + if(dxw.dwFlags5 & NOBLT) pPrimaryBlt = PrimaryNoBlt; return; } diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 5d34b9c..5eaaa0e 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -93,8 +93,8 @@ static char *Flag4Names[32]={ }; static char *Flag5Names[32]={ - "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "", - "", "", "", "", + "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "SYSTEMMEMORY", + "NOBLT", "DOSTRETCHBLT", "DOFASTBLT", "AEROBOOST", "", "", "", "", "", "", "", "", "", "", "", "", diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index f196db6..606db15 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -82,6 +82,7 @@ void dxwCore::InitTarget(TARGETMAP *target) dwFlags4 = target->flags4; dwFlags5 = target->flags5; dwTFlags = target->tflags; + if(dwFlags5 & AEROBOOST) dwFlags5 |= (SYSTEMMEMORY|DOSTRETCHBLT); Windowize = (dwFlags2 & WINDOWIZE) ? TRUE : FALSE; if(dwFlags3 & FULLSCREENONLY) FullScreen=TRUE; gsModules = target->module; diff --git a/dll/dxwnd.aps b/dll/dxwnd.aps index 5d9cdb781b51729bd87a3ac439dcf9dd42f5f851..0da9e5a234329a16fc5e5f8aa7191ef3df67c28f 100644 GIT binary patch delta 44 zcmV+{0Mq}VrUIa*0+3h%F|k<{j{z~0Z;vwpM3YI7iIXgl905eLNsvkb0Wq_bk&FRn C)(@uu delta 48 zcmZ3mjA_9#rU?;@1{)(q`xy-;=l2^=_UmVx>^Grhvd#n<5PP%V1Xo5zgUwSW_Amkf Dzb+C6 diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index cd5dcd7..2160a09 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -24,7 +24,7 @@ along with this program. If not, see . #include "dxwnd.h" #include "dxwcore.hpp" -#define VERSION "2.02.90" +#define VERSION "2.02.91" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 4d557b286ca4b0b3e1819a2ea3153d8cc2cf8ed7..890f857da5b41102d4ecb51cfea41ef896699550 100644 GIT binary patch delta 6937 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 delta 20073 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 diff --git a/dll/hddraw.h b/dll/hddraw.h index 021a437..f2579da 100644 --- a/dll/hddraw.h +++ b/dll/hddraw.h @@ -10,10 +10,15 @@ typedef int (WINAPI *GDIReleaseDC_Type)(HWND, HDC); typedef HRESULT (WINAPI *EmuBlt_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT, DWORD, LPVOID); typedef HRESULT (WINAPI *RevBlt_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); +typedef HRESULT (WINAPI *PrimaryBlt_Type)(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); extern EmuBlt_Type pEmuBlt; extern RevBlt_Type pRevBlt; extern void SetBltTransformations(); +extern HRESULT WINAPI PrimaryBlt(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); +extern HRESULT WINAPI PrimaryNoBlt(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); +extern HRESULT WINAPI PrimaryStretchBlt(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); +extern HRESULT WINAPI PrimaryFastBlt(LPDIRECTDRAWSURFACE, LPRECT, LPDIRECTDRAWSURFACE, LPRECT); // COM generic types typedef HRESULT (WINAPI *QueryInterface_Type)(void *, REFIID, LPVOID *); diff --git a/host/Resource.h b/host/Resource.h index 8c63050d58e870fcc50b428fa01ee595b6663e2e..ff0c350f334eb3f0e70d4991621764059f03cc4c 100644 GIT binary patch delta 178 zcmbR7oN>b|#tk8XlRxmWCX9xm{aYCUXgW+UBJw;YG21kbA z$^Ay!lLZ(#Sb?GpmXiayr9oy)&hy}#JjqCdT>&Tx5}z0W7H9Tj@Si-lJ4K09q3$!TgaiOA$zC1C)wAqm_DXProxed); DDX_Check(pDX, IDC_ASSERT, cTarget->m_AssertDialog); DDX_Check(pDX, IDC_MARKBLIT, cTarget->m_MarkBlit); + DDX_Check(pDX, IDC_SYSTEMMEMORY, cTarget->m_SystemMemory); + DDX_Check(pDX, IDC_NOBLT, cTarget->m_NoBlt); + DDX_Check(pDX, IDC_STRETCHBLT, cTarget->m_StretchBlt); + DDX_Check(pDX, IDC_FASTBLT, cTarget->m_FastBlt); DDX_Check(pDX, IDC_ANALYTICMODE, cTarget->m_AnalyticMode); DDX_Check(pDX, IDC_SURFACEWARN, cTarget->m_SurfaceWarn); DDX_Check(pDX, IDC_CAPMASK, cTarget->m_CapMask); diff --git a/host/TabDirectX.cpp b/host/TabDirectX.cpp index 8ebe06d..3f45d68 100644 --- a/host/TabDirectX.cpp +++ b/host/TabDirectX.cpp @@ -36,10 +36,8 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_SUPPRESSDXERRORS, cTarget->m_SuppressDXErrors); DDX_Check(pDX, IDC_BACKBUFATTACH, cTarget->m_BackBufAttach); DDX_Check(pDX, IDC_NOPALETTEUPDATE, cTarget->m_NoPaletteUpdate); - DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility); - DDX_Check(pDX, IDC_DISABLEHAL, cTarget->m_DisableHAL); + //DDX_Check(pDX, IDC_DISABLEHAL, cTarget->m_DisableHAL); DDX_Check(pDX, IDC_FORCESHEL, cTarget->m_ForcesHEL); - DDX_Check(pDX, IDC_COLORFIX, cTarget->m_ColorFix); DDX_Check(pDX, IDC_NOPIXELFORMAT, cTarget->m_NoPixelFormat); DDX_Check(pDX, IDC_NOALPHACHANNEL, cTarget->m_NoAlphaChannel); DDX_Check(pDX, IDC_FIXREFCOUNTER, cTarget->m_FixRefCounter); @@ -47,6 +45,8 @@ void CTabDirectX::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NOD3DRESET, cTarget->m_NoD3DReset); DDX_Check(pDX, IDC_NOFLIPEMULATION, cTarget->m_NoFlipEmulation); DDX_Check(pDX, IDC_FULLRECTBLT, cTarget->m_FullRectBlt); + DDX_Check(pDX, IDC_SETCOMPATIBILITY, cTarget->m_SetCompatibility); + DDX_Check(pDX, IDC_AEROBOOST, cTarget->m_AEROBoost); } BEGIN_MESSAGE_MAP(CTabDirectX, CDialog) diff --git a/host/TabWindow.cpp b/host/TabWindow.cpp index a0aca8d..7307df5 100644 --- a/host/TabWindow.cpp +++ b/host/TabWindow.cpp @@ -54,6 +54,7 @@ void CTabWindow::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_BLACKWHITE, cTarget->m_BlackWhite); DDX_Check(pDX, IDC_USERGB565, cTarget->m_UseRGB565); DDX_Check(pDX, IDC_LOCKSYSCOLORS, cTarget->m_LockSysColors); + DDX_Check(pDX, IDC_COLORFIX, cTarget->m_ColorFix); // screen resolution management DDX_Check(pDX, IDC_LIMITSCREENRES, cTarget->m_LimitScreenRes); diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 3d62e15..f9164f5 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -39,14 +39,15 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_HandleExceptions = FALSE; m_SuppressIME = FALSE; m_SuppressD3DExt = FALSE; - m_SetCompatibility = TRUE; + m_SetCompatibility = TRUE; // default true !! + m_AEROBoost = TRUE; // default true !! m_DiabloTweak = FALSE; m_DisableHAL = FALSE; m_ForcesHEL = FALSE; m_ColorFix = FALSE; m_NoPixelFormat = FALSE; m_NoAlphaChannel = FALSE; - m_FixRefCounter = TRUE; + m_FixRefCounter = TRUE; // default true !! m_ReturnNullRef = FALSE; m_NoD3DReset = FALSE; m_SuppressChild = FALSE; @@ -104,6 +105,10 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_UseRGB565 = FALSE; m_SuppressDXErrors = FALSE; m_MarkBlit = FALSE; + m_SystemMemory = FALSE; + m_NoBlt = FALSE; + m_StretchBlt = FALSE; + m_FastBlt = FALSE; m_PreventMaximize = FALSE; m_ClientRemapping = TRUE; // default true !! m_LockWinPos = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index c35d80e..f0c36ee 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -83,6 +83,10 @@ public: BOOL m_UseRGB565; BOOL m_SuppressDXErrors; BOOL m_MarkBlit; + BOOL m_SystemMemory; + BOOL m_NoBlt; + BOOL m_StretchBlt; + BOOL m_FastBlt; BOOL m_PreventMaximize; BOOL m_ClientRemapping; BOOL m_LockWinPos; @@ -144,6 +148,7 @@ public: BOOL m_ClearTarget; BOOL m_SuppressIME; BOOL m_SetCompatibility; + BOOL m_AEROBoost; BOOL m_DiabloTweak; BOOL m_DisableHAL; BOOL m_ForcesHEL; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 6e2031aa1cb3476aa6431f845601927a31cc71a8..b327c050e38306ccb1b436570558773f35754c8c 100644 GIT binary patch delta 4991 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 delta 5443 zcmZu#3wTpS7M_{3r8ZqC($e?Cz9|Ap(?<#{kTz)>2~9Q$QlJ>uuYRJkQXV1*E_G$4 zAVT4?9-e|LYJEYm#UQPKfLI6db5NTi35y>Ws{EK%QB*mD94CJvkz_&$LAain$-`tC z`7?QdOd=1GG*U@S#D>>t3Zd2%6QFNWVT{SEzhg$MLNh(Ow!;>Vj{KplZN4@V!)YX7LF%j;s=x|efubj zQr)35$W|1ePqolJO8>Nxv{QK^Z9vPMyJ{n8y>fQIAez$Bd*I~omiD4>ZJ05XU;ub= z3rkowFpBmT>%KNDqNS*`lq$MDVJ%0>Uer8OQ|Ya#q!X8U8&1+pJ-b@t-5AMcN6+<) zvYV~tV~HWZxL8jv5MniZ%odx)Z4s_~a#6TUX0xyjYTpvl(^dTb1ZbXVjDLR7XHQV?MbmocCHSV{G;cp3_)N zt_h#psew}f0L1U64&@vtPFh1tFroN}wp;wiIPOiq){h5=lhTar(H@S~M> z`$*v}AU_H(cX(WGlhZBSh2%eQHl4+c|F1wXh=#UCyqx8Fe~xL%6YSU1Xz9 zPj33X0qlJ86Z|QI#l-(CV6iNRX|#)1+^8!gw+PJ5U`gy30&6o^tmRih<8$D%bdTn1 zGU`gmZQ(apn;Z_0rP|78Z`A7up}fy7)4dj64B^xh3O6%Y;shozbM=@iGcHPC2BHy8 z5#MZajda@`0w^FM0^k*wWjE@LBvg3CteqCu=uv8l5)uYeGFj}n9s;&jnJv{ioR-5b z%4*EllW>7J0(|-84%O%DsxjX{B7{fG#$m#}DmJSzzmRC*TqaAWkuW8T#X?dRi==;0 z$0PW-r#jv^orU$lLgbf_Ufh$O97PE(7)$50R#kY$n4DF3B}F;}59t~RSnOh=zjlHhDMOQp#`b67G>fz%w9MpI!# z4hByH55L?6f6c)er^D(TWM)7cXJ*0|9Ls_mhz-f^mO>sQo*x^N(+zYxO=HVVR+|6| zNG{lOF?c_i#4mZUAeSX;`cndDUu7|{J(qTSiB@mg%;tB_= zsBhDauCifxx5dmu6d1@5N<1cq%VRKm%IsBcr`_fvdSZgHdDxj!n3adkD}z;eEGY!< zerDK)BWm$}p2uDuPIWN*5mrcRVe=#G74@>fd*)GQW2yn(J&&kCf@dsClgQ!uj^*O}Fo_0T+)#emKC z6W2r8e3s{vu~#X)G@tbc-E5ZNJvg5olSc`)bm|=X&W>?&vGQz4xItmhtOxSAKMGA0P7=A7W=bz zz>&qcShcrwA4DzjTl=9Zz&Zen0<43uKfwAJ!W+AE&}#|Pf}@co`oglq47RUj39zma z4__@zc>yc0UCJ`#_^GArE;;@-U_4{)GYKUshmUeQBny^p7vD^z+B968@)G zvFVa(UhRjytNpXiS;Hns&ZldzyuQ#CYr8_z3*OsnnLb8CF7@%|x3Fg^T?6m6;!2Lf zm#tWgx8RpnmKa(ePKXhbx1i@Z{E=UbFaa-Y!!Tv>u!K}Um? z=GXd4_?2HLj)atVS!w!lJAVsi_+3f(2VWDqKDn4Ctya0`!Ne>LArmJ_=6b;hWL{!~ zG*4De)FqThBe-=cr}h-D*PN@15(@FFDUy&Y0@sMd+!+;!yLMrHdZRaLV?s(SpcDzj6m z`b4Ep?37e241NL=@Tj`8%D8h0Ied5n-$B*6Lcw<}>VG8Xjz3J%vqA`=)7IDl_*DBJ&PJ|C7S-mvMo4Xv{=o$;)&A z)a_!S42`RZfUb>&u(%CS)W%XGuWaD)BJoRSz0k&@HM&9iEsG$nmw;$N^V89vCxP&IFEmmIk#`bo6=5!;b^nB zF!9?+u0t|6)^VeeE8mvPG+2jBx)F}GvlPvljTE%aNYdftG-NY{{_mjW;MP&JZofkl zdNM-d-jVtYF-xtnRXQ?x>KJY07Vh9x2#2rQaUG5=6lT9GL)UpJtlla^o3~P!{GJ-R zVXKUkqlRwUCLOsVbmW{i89G8O@Xj_oBkeMD^!wPa?Y_|3OYcjv7S?@$HQFwt^;hd# zzk|Y?JLOE=JMo-+fL0W5>583Dw1c421`s8YuPY{5a9cf&zE^`u;-{o;xhn zt%oUm)hX4N4oh{hP-};NBGn17V>@oePq5!dqz6wi6iW6y9m>L!;>gSBBwtinvz>D$6M$xhEywI|#?WLrLQ) z+)t-5GQkI9`CYmG7qO7@`DVZ`7ME5zzH_}DDmDw_$t&l-^640GcN4}R%p`C zc&2{AqST@>@mHz5Ge~(4PVEX|aFQ{68uB_&zA<=<6NAXP7%VM}L9cKY|IlevP7Igi zgdp2$wBx+#9O=Y=peil@%tkf*dtl|q^mWAbVM-xC*v5xf!nt`@OSsuuJ7>e X;?zTdoP9wY*Kk6v)dh0)2XX!n0P*U> diff --git a/host/dxwndhost.cpp b/host/dxwndhost.cpp index bd07881..fe7e6ff 100644 --- a/host/dxwndhost.cpp +++ b/host/dxwndhost.cpp @@ -137,6 +137,8 @@ BOOL CDxwndhostApp::InitInstance() //CompatibilityMinLevel = GetPrivateProfileInt("window", "compatminlevel", 0, InitPath); + if(!gbDebug) gbDebug = GetPrivateProfileInt("window", "debug", 0, InitPath); // debug fleg set from config file + if(!LangSelected){ LANGID LangId; char LangString[20+1]; diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index e956704e4626a4ab708b5c3588cc5fbb1ca5d328..cd2bb8342e66bbc2950e9adade3c9aab58700c9d 100644 GIT binary patch delta 862 zcmah`T}V@L6hD7yhP}*+`U@P$Z%6<&NZ{;gET2Wu?Ro%W|}lHBBH0} z5&sWS4@G-v53?I8RA>=B1VMyFuZEF}2*C*HsdF!>_z-b8ADr_$-?Mj(vyY64mrZFd zC;}Ns;@cIQy4)1rZj{JTinVPI4HCF|v==Q0@$7y*e3oiOJabCR??SI;<#9UBP?fDeCw{hZ8M6 zCoT-$MAwrPT)LKn_E9^}Ol2n3KKFAkX7-D85ffH^7iy~^1Xa}O1nD!x&BUi@_~S&H zY@juoL8QU!pqh~Xz+j^iqHf!mgp2()Ow@|Faz{|zOE*k7|IL}v1Ow1XEBT<6ECtJx zg{eMjOU=?s+t1;daWd1*_F!0#` delta 731 zcmbVJ&r8#B7=FI4#aJmKtV@?|1W^ukKgek;_SLPjAKS>y41?9|P!w}(Kb+HGMF;7$ z^*~;VHjtnKTYMpR(L+KJc#tUQW>5zYUG@)D?{`H9jSlhh;eC03KF{ZAJU2ET8SAfO zic?#Q-QKGVur_OB=yDGqB*qOcxY`MJ6>&s5IDYTm@che0M^nE5{Y#NdIKEAM=4LH-xd6lK&{XKfSSK6I$a&w_uTe{U|;j7A+ z=3?S7Ke_iYbjhTZR=*!${e)dBf4yhcv)X!daKg}w-b#AE?V=DaU>ZsBSA}#2S@a0~ zNdaRQ`qpLTtkSJ4&yOm8rLx%R*4ZBy)^X^H#YLq^i+@zq3(AkgZVCJMX6N?isBBVY*Xe&;*fI1=o=9sXDkAN;#UE`?7m_jM)KAH6!3+QZ diff --git a/host/dxwndhost.rc.txt b/host/dxwndhost.rc.txt deleted file mode 100644 index 041693adbb1aed1a5db8c2e519cfa9f473f3cefa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132448 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 diff --git a/host/dxwndhost.rc2.txt b/host/dxwndhost.rc2.txt deleted file mode 100644 index 0a22beb4d4910906c48d611082fff1bd2ef9b5f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80738 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 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 74bffbc208238a5d9e5819128825dfdeb92cc36c..0ec01b13bf8587dd63536795aee5ec5a20858273 100644 GIT binary patch delta 16082 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 UZ!(*fBoNTOiin~`L4yVbKSNuS(xh1Mj^olW zf8t>^uGU-8uD_42R->HZyASk}=xy415DQ~xqxAzpemME6Pnth_F!0+T7ofF5X-)zO zb=mcENe0zUDvRPj)JE*`fd3WHftHL@-LU!t3$a_UVpUL~b_$J5R!4N(Nm~+(kAm`i z!I%0f7+o+a^8xo5hTQEp^lE34DOi0|?hn4G;f_dR0T|>S<7=Q}0W>32ouRdmCSY~g za?B1)Z=8M^FAE8}m1Nvz#z)h?;VSlkFysGICYSognjV z8eB&aNG9o{{*NRT)aM5$S1u|Re1TSR!$+4t#d68*5H~{XF-H2)3>L}Ou&wM>%ydRb zpV+`6b&3#q+_hRcV6sMq^Ppd#)jCOd97lr7aCK6xoc3bLF<*GKVc`;-5vwsw(*WP_OpcX zb6|EB=j97KXx<(YPJ+iaz(HqLx(asM=rNW=`qC%fAyuqr#48Qw7PaHGE+6TF4PtoI zjo5x88t=S$U(0jLPd#w#f2#aONNy; zXE+V(p#-5J6E(L?e6lR|tN|$`5mFj^mo_>0HfK*!sua?yn^Y(L*3tFSd6Yl?C&p)>)trRe{}GzVHU0t-z3?VqiLIS}dIHFKj1zSFvsEWwx2U zMEwzOc9;Vq+%J)j6>KNlLgW0n?IbJ6vY3^!9QHaZMrfHy>zQ%jN(EncQXZ|ii*1#i zU)2G+R$9<<&4`Cu^w`xVqS%l&^}z9Kz3%0upaPhtV#38OCNy-%tNJW2F=AA46dKyN zUnb>vh0wnAer(MP!OHKGhtXNE^Nc9<&w({)xE7E0ZkJ@QfoP7I*CyS?Z-CatE`&($*MJe4q;oY8C7rE-DN-N*X`BaUG&JYnz4J#!GKXs0HIw-%3}}@4%&jR0Ipc@gX!fgCDnfw00am;nVul+0B_b4ijV9`Sd3BYu zhSjh)D3g*{Hp^u;mP}6;W$q$oRjhF|lE_lY8b|hQvgS~a+ZK}K(nu1GrINOYglDVw zKnZxz2uP*(RHRufg>dE4-YJB~Mp!sD8*?bAtb~T6Po+88^l;4ljVu~ZQZPD(5&vtX zmhod+w=Waz#UTrZ;+jM8%BAZxi}ub|V(3sJm#U!6B}@qlS_kfK5hbeyEZB5wmt@ZY zSBFc4n*gPll~;g0YXc?SOlZB>S2Wl6C`IZ+l2+W99PZ0+0!1!tcEU*k%+kr3u%V+U z8vFt6)pj3BIQ;vg^fJ;`mOr^Jse5g?Cf$0y*XI=o6mPpCOqs0^F z@x-j#w}@(3*l=?GZ(I|{r#u|ams+DiHvw=tZ5Af;^O&#gds^w6#_OQF77mA)nZ^fA zA$AU5F?2PJT*A+ow_dPGrT!QX<`BfO)qAW59=V^68I^_!h`N{Y9tyWd{*S(Ec)UGb z!_PnF<7Tk8@t!?CW1wOE1jPC|Fg(^1-l0F@oI`)a{YOC_%jxmc((D2B;erVX^0r)4?H|Df B>NEfV diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 72a2cf3..646e3a1 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -184,6 +184,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_SuppressIME) t->flags2 |= SUPPRESSIME; if(dlg->m_SuppressD3DExt) t->flags3 |= SUPPRESSD3DEXT; if(dlg->m_SetCompatibility) t->flags2 |= SETCOMPATIBILITY; + if(dlg->m_AEROBoost) t->flags5 |= AEROBOOST; if(dlg->m_DiabloTweak) t->flags5 |= DIABLOTWEAK; if(dlg->m_DisableHAL) t->flags3 |= DISABLEHAL; if(dlg->m_ForcesHEL) t->flags3 |= FORCESHEL; @@ -221,6 +222,10 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_UseRGB565) t->flags |= USERGB565; if(dlg->m_SuppressDXErrors) t->flags |= SUPPRESSDXERRORS; if(dlg->m_MarkBlit) t->flags3 |= MARKBLIT; + if(dlg->m_SystemMemory) t->flags5 |= SYSTEMMEMORY; + if(dlg->m_NoBlt) t->flags5 |= NOBLT; + if(dlg->m_StretchBlt) t->flags5 |= DOSTRETCHBLT; + if(dlg->m_FastBlt) t->flags5 |= DOFASTBLT; if(dlg->m_PreventMaximize) t->flags |= PREVENTMAXIMIZE; if(dlg->m_ClientRemapping) t->flags |= CLIENTREMAPPING; if(dlg->m_LockWinPos) t->flags |= LOCKWINPOS; @@ -351,6 +356,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_SuppressIME = t->flags2 & SUPPRESSIME ? 1 : 0; dlg->m_SuppressD3DExt = t->flags3 & SUPPRESSD3DEXT ? 1 : 0; dlg->m_SetCompatibility = t->flags2 & SETCOMPATIBILITY ? 1 : 0; + dlg->m_AEROBoost = t->flags5 & AEROBOOST ? 1 : 0; dlg->m_DiabloTweak = t->flags5 & DIABLOTWEAK ? 1 : 0; dlg->m_DisableHAL = t->flags3 & DISABLEHAL ? 1 : 0; dlg->m_ForcesHEL = t->flags3 & FORCESHEL ? 1 : 0; @@ -401,6 +407,10 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_UseRGB565 = t->flags & USERGB565 ? 1 : 0; dlg->m_SuppressDXErrors = t->flags & SUPPRESSDXERRORS ? 1 : 0; dlg->m_MarkBlit = t->flags3 & MARKBLIT ? 1 : 0; + dlg->m_SystemMemory = t->flags5 & SYSTEMMEMORY ? 1 : 0; + dlg->m_NoBlt = t->flags5 & NOBLT ? 1 : 0; + dlg->m_StretchBlt = t->flags5 & DOSTRETCHBLT ? 1 : 0; + dlg->m_FastBlt = t->flags5 & DOFASTBLT ? 1 : 0; dlg->m_PreventMaximize = t->flags & PREVENTMAXIMIZE ? 1 : 0; dlg->m_ClientRemapping = t->flags & CLIENTREMAPPING ? 1 : 0; dlg->m_LockWinPos = t->flags & LOCKWINPOS ? 1 : 0; diff --git a/locale/cn/Resources_Cn.ncb b/locale/cn/Resources_Cn.ncb index 009dce876e620fcf35c9e3fd77fbd5bb9a9f1f38..edea34c0d21decc8da77f98ac3a6e8477f208ef3 100644 GIT binary patch literal 35840 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 Jac}=y{0x;(sBHiM delta 401 zcmdn=ljX^0mJP?^87(LGmMKo&=chEeAdF|SLoCN+g#-&$BL-szgUzuClldoKD4RAp zufS>YhaeU%4+cjD9|rwY#^lKt4oNWsxswn2s7_7@5Ht5<@Mj2NP+$mW2xf?92xIUB z(w+=XK;^DL(Hgjn3s}YxD&sQQv0Qy}!hVOzAMzU}+Y~xX+Eg<+Act)-PZ8JTjQtjq zHx%?RnoQof(|&SI;iSoKr9g#yStbV+O_XY13l`aKRwxc)oa~pw z!D`50!C(Rsn(VNcW%9m~4q%w_7uip4D{TXYqXC1(WWh4w$+u$VHYZh-SWaHHS#Gk= XZ?4TpHoa2ZJn!lnuFcOLorwehXnK0# diff --git a/locale/cn/Resources_Cn.suo b/locale/cn/Resources_Cn.suo new file mode 100644 index 0000000000000000000000000000000000000000..10bee84ad2c00b161d5fc35b7548883632cd5c1c GIT binary patch literal 7168 zcmeI0O>9(E6vt0N6r}PYh>BPTTChfGid3L9X!;2ztwma>CQVG~Ol#>-noe6w6isyD zMiUn%x-roNHZC-5Tx)l(#<+AP3uEF&7cN{#>+gTxyPfGUA8%$#kc2b2@4k8O-g`do zIsbF+`zgKs*RQVczF|4^qOG^3K%pnrg-J>NvzNZU+%kfuGZ4g0%Dy?dgTu)rC+#BbJO)@@VtGj^F>j!wI5!%ED{ zKZ?$Zj9Ma1haTUR3$cQRgm#Ayb6IU2MP zOWCCL+64Wqo#mQ9CjUHDV!;OZOCPBdmA^1ku_ZbOzd^SLNjp!!U;~c-Jo1ckSBmz* ze+z@Q(xUPgZY$#4+$u^Wle|3g|T-L0$ z8?0EWhBUu})@8?SnCpTKfkbic=k0lW!yQSncEHW&&Zyq|^V44jnF zGnvw#OcKP*Ec>Bcppm*}q&W_M@%0ogTeMrPziNp&bPiU|*7-C%Q`n$bCTb4(t45a$ zMHz=LchD;bh`QiWh`&DzbzvF#PCjaazhYhIgQ)zK`+eP`JSRl*ItF$gL+f##s($fr z@^Lp~|I5z5kFeBK2vGg__yrb6GOjRgN5r)OLp{6Pz&;?DrVn7wmvgtgwb{yv?NnYuJ3V z{n?LyICcG(uhToO4Q=hUEkEu~{=2EZ|C8kp|4A=i?be)L`+evBpTDiIKl$BnH?BN= z{-P2QG+@WZb}lY0*7aWfBL2;1b$_;&H$PaV^6RTHW4Ee3eaU93V131$;Rww*DC_+>{1Oi;A#4THVJ|&yG|m9YUpNuhg`LMsOa*qrR5KIj(nC=9-Jm- zlzEj6gK9zft~lxYm-2})H7fq>W9)pm>{;@uxQ@7*G`>rfk z1M)n`#=lc!nz-XVh0aN&=|LJ{hpce>`S-irmvohms-5vH%Xjf~CXf8tk39Yd+DFsB zfdzcso9n$%_ub2|rvm%$XL4h>fd9_wzrPNE2J%6DgHTmaY6mLOUwO`-zr7yS^xpPS N{jVBc`Q}!`|3Bag&@li2 literal 0 HcmV?d00001 diff --git a/locale/en/Resources_EN.rc b/locale/en/Resources_EN.rc index e38ae86eb4e8f0a9d984d9e09466ec7bc3b3a991..cd2bb8342e66bbc2950e9adade3c9aab58700c9d 100644 GIT binary patch delta 874 zcmaJ;T}V@L6hD9Oox0iP!mgk-n-?Lq4|nHqlRj`Wr<*oE<{)tqeqtc2=~!B{FnfsT zK|P~O4?#kTl+fhDEDVC4?c>2Bf*v9x*F*U1gLLi{g@WSnKj(1H@0{~H=bwJ4d;V0H zdL7c+;279}G``!kC>x>hKAl7X2R8Q3aT2(2DJUt{zE5Thq)k{DPvBzAgY#EYn2guq z{jm+M8ftK2{JY)(F6!l?lF~O$<>mEztUzt-q@V=5NgK}IaiTS2#>Y3NFfs1Icw#0` zB9vXjN!Z>mV4z3LaYF-iKr2d<$BQKDu#>MPPwnT@tOFZ*OL03|hFha4T>IdWr!0)e zQ(ja4AY6tKu)=Pei62Eqts!`zl_ZGI65UKfX;r|s2PMjxn^^)nmagHWnQSGQ?5{+V zw^EKcST=r+-$L_RE^{G!TcCjpUu~D6IV#dk49!+JOA>^7n$<@3BE2qpowUF?5>>a- zDqSEFbsu5t|AoQ!SP(bAS9Irq-2puhk zwV5g$$%L5`^V0&Zek_z1@|a0k|5ewGhAh+ah@bHcv$+L}k9zmOFkB)XA#UZg-cDp3 zDsY9H)cI(Z8|!(uQS+dM5N-(IG%x%WQTU_ybIUG2X=aN@)Z3k>QXd3}Y72zuY7Jln z15}ZyR(%q_U>4n39NcAtQR3nC)mr__cBbJjtUl$cn`vucBN4` o0Ymgff0oEeKP#5EjI3Pq{=c!j;%6(%k!IG!FpHa)hXc(28*+~8L;wH) delta 730 zcmbVJ-Ahw(7=DgxF;w1nrN|DYsa2CrQ-73qrk((I>t65MKbGi?Y(_lq}bhY(> z-V|*hK?Sxrpx)?3K@mtu6m(Zm7hZI;f1rBLiY_#|h#x=Rm-q8|-e={hb?Je%_9CvR z#>@E4-AWIu(`^i2?BZN<#NvjB^>LN=ueBQ9(N`_}{MyEE(@%Ii8)S5&dCzfZ7=#lU zh6rWST`GheZE!%eN= z_iMN$&xtf9Fa{k{;$O#ABn7n#ow7NIenF>+4I+xuf_VgI1*0J4^RdJK&7xjvvv$Ib zgX}Hz&J8Ly`;)B-&$5O48i&G`@?s<*H!o6Km4xhkMq4Lvwhp~90$-$-a zu;FI%06%*6GJL^i6xY7*W9^vBD1E(aH>1XSJ$$Zx0+)r=dEu*L5-G7)gmVU2bP4-W z!QvA3&SmA4(xEKR4k-bpywKt?$sZNc37CQskb;i<=VBc2nCm+hh^Bw$m9BJF=6u zlej_xafP_x18@o70BJ%(+#~T3xIx??tyf&GJg;M?A?ungD@(UNM|$IP?409se)emh z6F(=O_3SW+f=WZn>-kfswAqD%HkQrhjvhH-EGUFSN*%!BE!gLhMtHNe;3o-?z(Y>p zoVs;vlYsVKVahYw1aRD)lz( z3D{4tqp;s#&%h*Lkfc6@9fth~ll(8k9*2dnr(l1=j=|<&Qlgag80-_+5tsyR$%~p+ zRamD3G-qYtb|rgE1-#yIolq^Ef^n1X36uN zU@bCN&t`LzX5SgxJDij~riHfmm7SYfGz+MNyB36>;SgnW*)zGZ(J?hVSv0z;sJ*j( z?(DlA72T<&Rc~2!w;t;%WmxJqfR3S;Pfl3`;q)#S^|oMB)fOG&&>S zDqor_<}Vmih_+(|L+Mi=MYhss5u3iQ^eat_1gy%sbl3~^dAI6Xk!#K;-T0_HHJ7c+ z7@!cO+e{>!G_h)r=dyKYS?Q(I=(PvcUCWR0^uhb<;I_Needgy-00SWo1$OT` z75jetv3q5*BoZKjhl7B){vjE>Zxe>3XRx`s%@(dA0TOr=2<+tlk3##{1`;3v5+DH* zAOR8}0TLhq5+DH*Ab~9c@;d+n36Q}4B5+v*KzNqDt79=huM_yaUPn;j3wNtDZ$@r7 zT(|E!OH_9KEcEjttI;5<(IBhocAb{C1}7;zDwWrCqTMnC#*+0SyE%jP@(fbc^9&?F0uPSB zt(&)QiuO0||8o%V;J|ZFB(Mhvh|9-z_{PB@>VK*K#XrGpGl#IPTjo^2J4`0r1HRl( z6=L5{F9JycGH34t>7!#QKM%;9z3-8hxPKVJI&GD}uw$jTf+ z$t$y7C9lkaWgr0(7(4-Sed>P)e;il?5*P%5o&0|g_2E8AfCNZ@1W14cNPq-LfCNZ@ z1W14c{yzfpI{*U-kih;TK>hFSe;G#o@4fuJF!jGZ{+ycn-{g`ieGKY<_t*V}t=-!M zhM>yn)Z_2%+Ol>eKmxl-pws{P{*OVw|6@0gEXyK+-URsmpS|?{pWerd-ynhAB(NLr z{}FA!yaPzelDPog`hU^;%NziC<5fBb;B~|qNPq+eOW=*c?w)%m0TLhq5+DH*AOR8} Q0TLhq5+DH*cmM?c1+p^V4FCWD delta 658 zcmZpe!PIbrae@Y~Gy?-e1rURP@Mb}o)6C2d7(Q$kWO>g#S%HO*Q3A#k;AaFX0pk_( zo-&#;Oy-yP#i|MvcrlqzQbNQazPKnkCMQ2RF()-9H7|xi*E3~uzoqHqd`T`w5X*V; zUdd%(md)e^QY-jPc$p{fmr`Rim@Lb$IQb8s0+=;p zkqpbE5*F1Bdl^DN&R8sA%Q~xdvt#$|3HPS(UR@3p0t2uUfj+s;JV}H_lm#ee0hIw! z%s|Wvlzq<3$hKKfhr-Bm9|Lp7t{#Qr{fc>ff z3<8*{gI1zIUtYHY`Sk~wT+bsVSDc!jo?4JoP-1Lm#E@bYlTuNR?1c3^;#S4+sd;*N z$w>^{Kv(jDoQedhfP7GRfIvHt4T>&*AZ-fdvrlvso|MDF22#_`3=E5J%!?dAAuNF_ zgeS}JOaeM@Jx>W^@MINUGu|SgF(7NjftYP`dg)vyRT&_&4`wBhEeXV(KpV_~G$<}a ZfcV2^O^@r$j6&dW-Yih_fq!Cv006;CrCR_1 diff --git a/locale/en/Resources_En.suo b/locale/en/Resources_En.suo new file mode 100644 index 0000000000000000000000000000000000000000..d178f8649eb6f7a6db1ba65b79ec5934ed332a46 GIT binary patch literal 7168 zcmeI0O>9(E6vt0NkV@r4YE{HK(tEVVI9MGbKpEncR2Zym#+CANQR9 zIrm*%*m&)mE1R!d5xs0H?dD>$tuA=p#J!rM4Q4C2(f^x^i;KZSGj8wGJ!F9!$ofFI zhpXrxq-oEaX=`X}X%Eq~$1P!h52<%w)G8J@YG?RmEoS>|j{cloWS65;o2^=kdHF{r zx|VzG_tjSynpQICCpj2&1deCyl)Vb~6nFdWLhvHuwar#ENyS#itB*L%fGS=1CO#)=b6o2sABXkM z_w%&Q2ed$s09B`vcgjv%%npDik~YJA7dq~?o%S43A7*?K+{xKAKjGd4GqPy+jvMV) zFW<+&AK6eCAa5-{GXF++DZCaH^B+QnBr?p}S*$$ca#AG>?xG4+&Eg})En4LwTfH8R zDdw;IBiucU6=slN4x3e??eO=!qw25v%Hw}Af9;g~Zyeq^=WmsB0Q{T$dQthyUI&x} zAY~b4;0!H=&M`8QGGWg7cMLhQ+$WqZVm4qsM8qUxhPi5HmfpvO*{7^ns|PkBfqXTM zho_JwFNgpCe~~AUQW$Y}?IX{MV=wKekZZXpbfsICYvkE23sw13cs{K%wB+kX=Wk@y z!&o$pC(gKNnQ~E)13`RkYqpQmv}mvObA1my-c6kJ+AeaBe%&_6zkYYuPi*zlx*0R* zMs_n!Gj0RL38sxFO+f7-KSp#Z}BEIiM_Nf|w#DgEvx ziJ2_>p1;8BjhKMRdu8Tn2r>VdyvUFU z={SEnzB-FVVgh&@yRL(X4R zy$&%d0rx!e?ptnV&wf61 z<+tw^Hhnv>e$>|evN`>4bH~`{i=X_nFn@W!=8W2(t=oS6p`+vAkAGah^z6ygN<`4O z?M}7M-<)qBz5I3J`!C!78mMi4uuA>cH)6(aHG2Az%~ZkqiaEn+P2aP6uyCAg7<^+Y z_fo$s9A_m$rYl~v)x z$G9MoOdd#aKQ@a!up}mVM-Ck=M<9+k`edEwWp0bF>d`|o_i-GhH8)n) z%_yW-vG#2g2PS$C&eC<7BNyGKBqb<`m+8JPKb@gT3eqTB5F<~fP`G0jWX>hSpE-o+ z3+HmK!(i363VS|0J3pv*6v{q?y<#?cxuZ6!VP#bFbN@-LS`$quU3S1(--09Wz+Szo z$NG-G*1r7o8H_oKp{wyrKj_@u)YseM0RHS2u~8pvsXQ@G;}oVb@>7W8G+Tu2BG-I@ zN6QDf`UtsMfpd%<`#%P+Dp#>lbDPxX=XnUOKjjX;f(OI6idf_XLjj;T$f&jmtQXVO&B~ViaBIMYmLE{vi<^32h>53+&@! z-psjcEsBrza*+M`TU?qvL-nDV_Sy~BrW{--``J4AoYjJfFUu#DGo0@m6ztNFp)y08|gX%>a-HoDl_-9A_56mROPXGV_ diff --git a/locale/it/Resources_It.ncb b/locale/it/Resources_It.ncb index c22de01a05e240303fa276bd602b84cc48008b05..db924999077d978225896b47e1c15a2cbc79df96 100644 GIT binary patch delta 1408 zcmZp;!Pqc^X@Ul?G6Mrc4G@EX{ANLc)66VC{xdRcX5{$8%*?>>2gvx#Jc);sjbk?> zlRoogex6^fQj81?D<<>tN{AT77Z)YRP;yC4Dovlf*Fszf%!-Kt38z4XUs=d7dQN7yv;_Lt(NYu~q@ZACXIE0t^;A%T z1okz{onRS<5KIT6MU{05x)0D4FaQ;#RForoalMQ5WGjpJlBLC|MY;vaSXGEy6~||m z=;b9RF>nLJi3J$^$N-df^nqfaSTY6TL%^7o2L`A*5OZvFEM}f$!@>p;*vu&Njd_s+ z%On9-E}%+Aj@>-;Pl1yJM8t3=BRN(fpu;ed5HO{TrXWyhFep;cBoUevA##SYptuKO oP#OT0EaE^6N-9!7EDgjGKnyBoM1fcgh-E;<3!@ycF!|390PEmi!~g&Q delta 659 zcmZpe!PIbrae@Y~Gy?-e1rURP@Mb}Q)6C2d7(Q$kWO>g#S%HO*Q3A#kn8d@$wqV|G zMpK5#{5-!{RT&u=UQFiWl@KwAFD^=s$;nSn%t?*OEQw*z^-P)EZ)rL?pO=df#B!dz zmv57T$^PTo-+eEn;C2V^H2WE&%T+*Tz(9j5A_l_=1A z*R4RF`~fD{i%7{8r>3W;7UUF^7@HX}q*%qIRFoq-VZDgBRdIY~iC$iE5(78XbN(Rb zLO~UfZ3<+A;s+EYyg+_CRGxjJqwpjL7B-NYcA%eSzA-OyVVNYtB7rM#C(DRT0y=NK zNC{)qW);x~OlmSfGy6aWLxCia?gW}=4x~Y0E&{|Km?vxb$gv6nnF5o2CBy}Jppu+G ZnhS{eH#&ARGYWx2eX~H#2mXlx0sz3%q1gZc diff --git a/locale/it/Resources_It.suo b/locale/it/Resources_It.suo new file mode 100644 index 0000000000000000000000000000000000000000..6631d6fc355e1e8c2b5b99a41017ef94c3921d05 GIT binary patch literal 7168 zcmeI0O-x)>6vq#(t;J$LETUq?vCxW92v}^Pq$;0n6OdYH(S*cMWk7%7XtqN@4d?m12glO!PF+4$$j_Dd*|MB?z!ju z&$;i;(&683-mbiB8T7L4ww2XV+ne^hgnKoQ4w>!ZM*mk`<$FOLRn*b+8j zJvL6Cw98y$=;WR!@=RER{72zY+=P`c%v5ZNt{`u~+k?1WrC+dqPyRgmjBuBaj)B65 zVLC_)D_^*+m=`Io)0_6t{g;l~CdI#SK=J=D?Ep>kWJB>j67+6d1^*wTJx+UqR!Mu3 zc9ixMt%@ez2>mm`eRa^gIn?jae{X@W-W-V^`l9UI#~;+3UaTtXU>mkXe{}?byrogw z$E;W?hBUsN)@f&Ki0gt4f<#g7=j}y%%No3Ei#2ke02fAh6DLkbz>PTZIYgW$xfV(; z4htRc#%Z4SY5qEVR2@U#VVkswb)%)UO>ke!8k_BuJ%`r4@W;TNIUD0A+#6&>lGVNK zal6^G_Yv?lX$GvD7_M&1A1aY;k*;!80qE>6-`Yw3fOq?{>X>yN#b=JneChx9^*lM8F z!PDk(*1@L{CyBo{GSN%qq$aMX>;~}|wRbY)_Ic=)E>+csKu?$C~|_)7N|vnF(x=D-$&!-^mV(|3^?xIY88j zjBN7VS*R1s$aglQ`oR7=BZQT&-0$ih2&^-T5du5wvthYL-6ME#B(Vm>&D1{P-{5S683=;rF{Yp1nG$LUPz|1@FK81WxU%a6dZ>nO;MeF?%Z)jwe`87haPP=vIpx6_Vn&%)+0d^R zl<#tr@JHW+1gBx~=NP>6!L*mjr;?ZoBKf?Z7mS4jJuI|nB z-mv@bbU0do{NoI+4JL5kS>5;7e$YTZsBaLe3i9nhA?sJ3bLVfjj$(SZ_v(w8r_iy* G$p06iZqE7u literal 0 HcmV?d00001