From f8ee9807cd7b8b84914749dfc91f9c9a9dedff76 Mon Sep 17 00:00:00 2001 From: gho tik Date: Mon, 2 Jun 2014 12:38:47 -0400 Subject: [PATCH] v2_02_57_src Former-commit-id: a455e9f9a90a738277d36b455a790466f0fadc48 --- Include/dxwnd.h | 2 +- build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/dxwnd.ini | 66 +++++++++++++++++++++++++-- build/exports/Black Thorn.dxw | 26 +++++++++++ build/exports/Empire of the Ants.dxw | 26 +++++++++++ build/readme-relnotes.txt | 5 ++ dll/ddraw.cpp | 2 +- dll/dxhook.cpp | 37 ++------------- dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 122368 -> 108032 bytes dll/hd3d7.cpp | 39 ++++++++++++++-- host/dxwndhost.vs2008.suo | Bin 100352 -> 100352 bytes 13 files changed, 165 insertions(+), 46 deletions(-) create mode 100644 build/exports/Black Thorn.dxw create mode 100644 build/exports/Empire of the Ants.dxw diff --git a/Include/dxwnd.h b/Include/dxwnd.h index f2f5a61..aaa14c2 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -128,7 +128,7 @@ #define LIMITSCREENRES 0x00001000 // Limit available screen resolution up to defined maximum #define NOFILLRECT 0x00002000 // Suppress FillRect calls #define HOOKGLIDE 0x00004000 // Hook glide calls -#define HIDEDESKTOP 0x00004000 // Hide desktop background +#define HIDEDESKTOP 0x00008000 // Hide desktop background // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 1357954..f81ec13 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ab0518cd95cd490131b9ba49cc94686af2bdc129622f112e8499bc5c386cc42 -size 458240 +oid sha256:4afdf78c8226b629ed5e70a1fe3d1e79ac6e8293bc1e2ac74b2257d59d10f6d7 +size 457728 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 304b212..7aea3db 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a63a5100db9d65c9b66846c79b6cb41578fccabd9de5bb4ba788b371bb72b25f +oid sha256:8f349082b6ce4e630b509e9dc5903c05b296b7fa6b071c1885241ea5c4cf2ed7 size 535040 diff --git a/build/dxwnd.ini b/build/dxwnd.ini index 5e2a67d..c84dc60 100644 --- a/build/dxwnd.ini +++ b/build/dxwnd.ini @@ -2528,11 +2528,11 @@ title101=Syberia path101=D:\Games\Syberia\Syberia.exe module101= opengllib101= -ver101=0 +ver101=7 coord101=0 -flag101=822116385 +flag101=956334113 flagg101=1242562576 -flagh101=20 +flagh101=65556 flagi101=4 tflag101=6170 initx101=150 @@ -3074,8 +3074,64 @@ maxfps122=0 initts122=0 winver122=0 maxres122=0 +title123=Black Thorn +path123=D:\Games\Black Thorn\BlackThorn.exe +module123= +opengllib123= +ver123=0 +coord123=0 +flag123=692076580 +flagg123=1207959552 +flagh123=20 +flagi123=4 +tflag123=6211 +initx123=0 +inity123=0 +minx123=0 +miny123=0 +maxx123=0 +maxy123=0 +posx123=50 +posy123=50 +sizx123=800 +sizy123=600 +maxfps123=0 +initts123=0 +winver123=0 +maxres123=-1 +title124=Empire of the Ants +path124=D:\Games\Empire of the Ants\Game.exe +module124= +opengllib124= +ver124=0 +coord124=0 +flag124=1023426596 +flagg124=134217744 +flagh124=20 +flagi124=4 +tflag124=6466 +initx124=0 +inity124=0 +minx124=0 +miny124=0 +maxx124=0 +maxy124=0 +posx124=50 +posy124=50 +sizx124=800 +sizy124=600 +maxfps124=0 +initts124=0 +winver124=0 +maxres124=-1 +title125=Red Storm: Rogue Spear +module125= +opengllib125= +title126=Black Thorn +module126= +opengllib126= [window] -posx=1035 -posy=288 +posx=1129 +posy=466 sizx=638 sizy=448 diff --git a/build/exports/Black Thorn.dxw b/build/exports/Black Thorn.dxw new file mode 100644 index 0000000..6792413 --- /dev/null +++ b/build/exports/Black Thorn.dxw @@ -0,0 +1,26 @@ +[target] +title0=Black Thorn +path0=D:\Games\Red Storm Entertainment\Rogue Spear\BlackThorn.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=939540517 +flagg0=134217728 +flagh0=20 +flagi0=36 +tflag0=6470 +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/Empire of the Ants.dxw b/build/exports/Empire of the Ants.dxw new file mode 100644 index 0000000..183ef48 --- /dev/null +++ b/build/exports/Empire of the Ants.dxw @@ -0,0 +1,26 @@ +[target] +title0=Empire of the Ants +path0=D:\Games\Empire of the Ants\Game.exe +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=402669604 +flagg0=134217728 +flagh0=20 +flagi0=4 +tflag0=64 +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/readme-relnotes.txt b/build/readme-relnotes.txt index e08a50c..2ee4534 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -386,4 +386,9 @@ fixed several d3d1-7 hooks: prevented some d3d games to properly work, i.e. "Thi 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 + + diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index dcb6398..6221b0f 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -453,7 +453,7 @@ static void DescribeSurface(LPDIRECTDRAWSURFACE lpdds, int dxversion, char *labe break; } if(res)return; - OutTrace("Surface %s: ddsd=%x dxversion=%d ", label, lpdds, dxversion); + OutTraceDW("Surface %s: ddsd=%x dxversion=%d ", label, lpdds, dxversion); LogSurfaceAttributes((LPDDSURFACEDESC)&ddsd, label, line); } diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index ed7df5f..737a64b 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -71,7 +71,7 @@ static char *Flag4Names[32]={ "NOALPHACHANNEL", "SUPPRESSCHILD", "FIXREFCOUNTER", "SHOWTIMESTRETCH", "ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING", "NOPOWER2FIX", "NOPERFCOUNTER", "ADDPROXYLIBS", "INTERCEPTRDTSC", - "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "", + "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", "", "", "", "", "", "", "", "", "", "", "", "", @@ -814,37 +814,10 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp } break; case WM_NCCALCSIZE: - if((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd())){ // v2.02.30: don't alter child and other windows.... - OutTraceDW("WindowProc: WS_NCCALCSIZE wparam=%x\n", wparam); - if(wparam){ - // nothing so far .... - if (IsDebug){ - NCCALCSIZE_PARAMS *ncp; - ncp = (NCCALCSIZE_PARAMS *) lparam; - OutTraceDW("WindowProc: WS_NCCALCSIZE rect[0]=(%d,%d)-(%d,%d)\n", - ncp->rgrc[0].left, ncp->rgrc[0].top, ncp->rgrc[0].right, ncp->rgrc[0].bottom); - OutTraceDW("WindowProc: WS_NCCALCSIZE rect[1]=(%d,%d)-(%d,%d)\n", - ncp->rgrc[1].left, ncp->rgrc[1].top, ncp->rgrc[1].right, ncp->rgrc[1].bottom); - OutTraceDW("WindowProc: WS_NCCALCSIZE rect[2]=(%d,%d)-(%d,%d)\n", - ncp->rgrc[2].left, ncp->rgrc[2].top, ncp->rgrc[2].right, ncp->rgrc[2].bottom); - OutTraceDW("WindowProc: WS_NCCALCSIZE winrect=(%d,%d)-(%d,%d)\n", - ncp->lppos->x, ncp->lppos->y, ncp->lppos->cx, ncp->lppos->cy); - } - } - else { - // enforce win coordinates and return 0xF0 = WVR_ALIGNTOP|WVR_ALIGNLEFT|WVR_ALIGNBOTTOM|WVR_ALIGNRIGHT; - LPRECT rect; - rect=(LPRECT)lparam; - OutTraceB("WindowProc: WS_NCCALCSIZE proposed rect=(%d,%d)-(%d,%d)\n", - rect->left, rect->top, rect->right, rect->bottom); - rect->left=dxw.iPosX; - rect->top=dxw.iPosY; - rect->right=dxw.iPosX+dxw.iSizX; - rect->bottom=dxw.iPosY+dxw.iSizY; - OutTraceB("WindowProc: WS_NCCALCSIZE fixed rect=(%d,%d)-(%d,%d)\n", - rect->left, rect->top, rect->right, rect->bottom); - return WVR_ALIGNTOP|WVR_ALIGNLEFT|WVR_ALIGNBOTTOM|WVR_ALIGNRIGHT; - } + case WM_NCPAINT: + if((dxw.dwFlags1 & LOCKWINPOS) && (hwnd == dxw.GethWnd()) && dxw.IsFullScreen()){ // v2.02.30: don't alter child and other windows.... + OutTraceDW("WindowProc: %s wparam=%x\n", ExplainWinMessage(message), wparam); + return (*pDefWindowProc)(hwnd, message, wparam, lparam); } break; case WM_NCCREATE: diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 9516796..8039986 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.55" +#define VERSION "2.02.57" #define DDTHREADLOCK 1 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 547bfedc0001378e3ad61509fa75ae807d781782..ad61a0914a82d739a8655fed5cca03c19be6fce6 100644 GIT binary patch delta 12311 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 T;`-V?Ee)Ag3V%iaFTno+4?*I_ diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index 50d38aa..f8e9bf9 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -618,6 +618,17 @@ HRESULT WINAPI extCreateViewport3(void *lpd3d, LPDIRECT3DVIEWPORT3 *lpViewport, if(res) OutTraceE("CreateViewport(3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("CreateViewport(3): Viewport=%x\n", *lpViewport); HookViewport((LPDIRECT3DVIEWPORT *)lpViewport, 3); + if(IsDebug){ + HRESULT res2; + D3DVIEWPORT2 vpdesc; + vpdesc.dwSize = sizeof(D3DVIEWPORT2); + res2=(*pGetViewport2_3)(*lpViewport, &vpdesc); + if(res) + OutTraceE("CreateViewport(3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else + OutTraceD3D("CreateViewport(3): size=%d pos=(%d,%d) dim=(%dx%d)\n", + vpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight); + } return res; } @@ -1115,17 +1126,39 @@ HRESULT WINAPI extGetCurrentViewport3(void *d3dd, LPDIRECT3DVIEWPORT3 *lpd3dvp) return res; } HookViewport((LPDIRECT3DVIEWPORT *)lpd3dvp, 3); + if(IsDebug){ + HRESULT res2; + D3DVIEWPORT2 vpdesc; + vpdesc.dwSize = sizeof(D3DVIEWPORT2); + res2=(*pGetViewport2_3)(lpd3dvp, &vpdesc); + if(res) + OutTraceE("GetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else + OutTraceD3D("GetCurrentViewport(D3DD3): size=%d pos=(%d,%d) dim=(%dx%d)\n", + vpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight); + } return res; } -HRESULT WINAPI extSetCurrentViewport3(void *lpvp, LPDIRECT3DVIEWPORT3 vpd) +HRESULT WINAPI extSetCurrentViewport3(void *lpvp, LPDIRECT3DVIEWPORT3 lpd3dvp) { HRESULT res; - OutTraceD3D("SetCurrentViewport(D3DD3): viewport=%x\n", lpvp, vpd); - res=(*pSetCurrentViewport3)(lpvp, vpd); + OutTraceD3D("SetCurrentViewport(D3DD3): viewport=%x\n", lpvp, lpd3dvp); + res=(*pSetCurrentViewport3)(lpvp, lpd3dvp); if(res) OutTraceE("SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); else OutTraceD3D("SetCurrentViewport(D3DD3): OK\n"); + if(IsDebug){ + HRESULT res2; + D3DVIEWPORT2 vpdesc; + vpdesc.dwSize = sizeof(D3DVIEWPORT2); + res2=(*pGetViewport2_3)(lpd3dvp, &vpdesc); + if(res) + OutTraceE("SetCurrentViewport(D3DD3) ERROR: err=%x(%s) at %d\n", res, ExplainDDError(res), __LINE__); + else + OutTraceD3D("SetCurrentViewport(D3DD3): size=%d pos=(%d,%d) dim=(%dx%d)\n", + vpdesc.dwSize, vpdesc.dwX, vpdesc.dwY, vpdesc.dwWidth, vpdesc.dwHeight); + } return res; } diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 70653fa58bf5882ecea0d08631402b837a78f2dd..a74b1529f9dd51ae0c39036199520346dedbafe0 100644 GIT binary patch delta 11173 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�bk*q}J>I@N#7K6=M{Fo;6sy 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 Ee;*Wt0RR91