From 13872ca16f38f11493cc942463dc3ede491fbb66 Mon Sep 17 00:00:00 2001 From: gho tik Date: Thu, 2 Feb 2017 11:50:00 -0500 Subject: [PATCH] v2_04_10_src Former-commit-id: cd11f26fc7bdf993e8fcb4cc61c310f6f928ade6 --- Include/dxwnd.h | 1 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 4 +- build/exports/Daytona USA Deluxe Edition.dxw | 36 +++ .../exports/Need for Speed Underground 2.dxw | 36 +++ build/exports/dxwnd.ini | 40 +-- build/exports/dxwnd.log | 5 +- build/exports/dxwnd.reg | 52 ---- build/readme-relnotes.txt | 11 + dll/d3dtexture.cpp | 67 ++++- dll/ddraw.cpp | 134 +++++++--- dll/ddtexture.cpp | 51 +++- dll/dxhelper.cpp | 12 + dll/dxhook.cpp | 121 +-------- dll/dxwcore.cpp | 5 + dll/dxwnd.aps | Bin 58232 -> 58232 bytes dll/dxwnd.cpp | 103 ++++++- dll/dxwnd.def | 1 + dll/dxwnd.vs2008.suo | Bin 709120 -> 733184 bytes dll/hd3d.cpp | 229 +++++++++------- dll/hd3d7.cpp | 4 + dll/hd3d8.cpp | 7 +- dll/hd3d9.cpp | 7 +- dll/user32.cpp | 5 + host/ViewFlagsDialog.cpp | 73 +++++ host/ViewFlagsDialog.h | 26 ++ host/dxwndhost.aps | Bin 260868 -> 261504 bytes host/dxwndhost.rc | Bin 150764 -> 151868 bytes host/dxwndhost.vs2008.suo | Bin 176640 -> 183808 bytes host/dxwndhost.vs2008.vcproj | 18 +- host/dxwndhostView.cpp | 27 ++ host/dxwndhostView.h | 1 + host/resource | Bin 53738 -> 54014 bytes proxy/wing32.cpp | 77 ++++++ proxy/wing32.def | 12 + proxy/wing32.sln | 20 ++ proxy/wing32.suo | Bin 0 -> 10752 bytes proxy/wing32.vcproj | 253 ++++++++++++++++++ wing/wing32.suo | Bin 28160 -> 0 bytes 39 files changed, 1090 insertions(+), 352 deletions(-) create mode 100644 build/exports/Daytona USA Deluxe Edition.dxw create mode 100644 build/exports/Need for Speed Underground 2.dxw delete mode 100644 build/exports/dxwnd.reg create mode 100644 host/ViewFlagsDialog.cpp create mode 100644 host/ViewFlagsDialog.h create mode 100644 proxy/wing32.cpp create mode 100644 proxy/wing32.def create mode 100644 proxy/wing32.sln create mode 100644 proxy/wing32.suo create mode 100644 proxy/wing32.vcproj delete mode 100644 wing/wing32.suo diff --git a/Include/dxwnd.h b/Include/dxwnd.h index bce14e7..54e7063 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -365,6 +365,7 @@ int GetHookStatus(DXWNDSTATUS *); DXWNDSTATUS *GetHookInfo(); void HookInit(TARGETMAP *, HWND); void ShowHint(int); +LPCSTR GetFlagCaption(int, int); char *GetDxWndPath(); void *SetHook(void *, void *); diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 52954a9..92f262f 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5fc4cf8ef5a8514260d213b7d89caebe950a9dcfc43e948b25bb835c57e2df28 -size 782848 +oid sha256:f56c6024dad175adc0c6a62555e71669b86c0f56e010de59375d88049230b5e3 +size 785920 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 96e20d7..47ac055 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0478367b7c87124f807b20c7a3f5e3c6337815e9f8d63619ae023702f0efd817 -size 673792 +oid sha256:0229b0055c3941f91b315ef934a7e335fdfc62799b6ef489883c3beecace2971 +size 675840 diff --git a/build/exports/Daytona USA Deluxe Edition.dxw b/build/exports/Daytona USA Deluxe Edition.dxw new file mode 100644 index 0000000..d236dfd --- /dev/null +++ b/build/exports/Daytona USA Deluxe Edition.dxw @@ -0,0 +1,36 @@ +[target] +title0=Daytona USA Deluxe Edition +path0=D:\Games\Daytona USA Deluxe Edition\DAYTONA USA Deluxe.exe +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=134217732 +flagj0=4224 +flagk0=65536 +flagl0=0 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/Need for Speed Underground 2.dxw b/build/exports/Need for Speed Underground 2.dxw new file mode 100644 index 0000000..8028d0b --- /dev/null +++ b/build/exports/Need for Speed Underground 2.dxw @@ -0,0 +1,36 @@ +[target] +title0=Need for Speed Underground 2 +path0=D:\Games\Need for Speed Underground 2\SPEED2.EXE +startfolder0= +launchpath0= +module0= +opengllib0= +notes0= +registry0= +ver0=0 +monitorid0=-1 +coord0=0 +flag0=673185826 +flagg0=1207959552 +flagh0=20 +flagi0=138412036 +flagj0=4224 +flagk0=65536 +flagl0=1081344 +flagm0=0 +tflag0=0 +dflag0=0 +posx0=50 +posy0=50 +sizx0=800 +sizy0=600 +maxfps0=0 +initts0=0 +winver0=0 +maxres0=0 +swapeffect0=0 +maxddinterface0=7 +slowratio0=2 +scanline0=0 +initresw0=800 +initresh0=600 diff --git a/build/exports/dxwnd.ini b/build/exports/dxwnd.ini index bec78ce..bafc6df 100644 --- a/build/exports/dxwnd.ini +++ b/build/exports/dxwnd.ini @@ -1,41 +1,5 @@ [window] -posx=1165 -posy=618 +posx=0 +posy=472 sizx=320 sizy=200 -[target] -title0=administrator -path0=administrator -startfolder0= -launchpath0= -module0= -opengllib0= -notes0= -registry0= -ver0=0 -monitorid0=-1 -coord0=0 -flag0=673185826 -flagg0=1207959552 -flagh0=20 -flagi0=134217732 -flagj0=4224 -flagk0=65536 -flagl0=0 -flagm0=0 -tflag0=0 -dflag0=0 -posx0=50 -posy0=50 -sizx0=800 -sizy0=600 -maxfps0=0 -initts0=0 -winver0=0 -maxres0=0 -swapeffect0=0 -maxddinterface0=7 -slowratio0=2 -scanline0=0 -initresw0=800 -initresh0=600 diff --git a/build/exports/dxwnd.log b/build/exports/dxwnd.log index 0f66b21..9273cd6 100644 --- a/build/exports/dxwnd.log +++ b/build/exports/dxwnd.log @@ -1,2 +1,5 @@ -OnRun idx=28 prog="D:\Games\ManTT\MANXTT.EXE" unhooked=0 +OnRun idx=36 prog="D:\Games\International Football 2000\MSIF2000.ICD" unhooked=0 +setwindowshook mode +OnRun idx=36 prog="D:\Games\International Football 2000\MSIF2000.ICD" unhooked=0 +self elevation setwindowshook mode diff --git a/build/exports/dxwnd.reg b/build/exports/dxwnd.reg deleted file mode 100644 index ee2d7f7..0000000 --- a/build/exports/dxwnd.reg +++ /dev/null @@ -1,52 +0,0 @@ - -[HKEY_LOCAL_MACHINE\SOFTWARE] - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape] - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB] -;"Options"="3,1,1,2,1,1,0,0" // High Quality, digital audio off -"Options"="3,1,1,2,1,1,1,1" // High Quality, digital audio on - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallDir] -@="\{path}" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\InstallOption] -@="Maximum" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\Language] -@="ENG" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\LocalDir] -@="\{path}\\FILE" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\RemoteDir] -@="\{path}\\REMOTE" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\SaveDir] -@="\{path}\\TEMP" - -[HKEY_LOCAL_MACHINE\SOFTWARE\Mindscape\WarHammerFB\UpdateDir] -@="C:\\GAMES\\WARFB\\Update" - -[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\SharedDLLs] -"C:\\WINDOWS\\SYSTEM32\\WING.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\WING32.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\WINGDE.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\WINGDIB.DRV"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\WINGPAL.WND"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RLDDF.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RLDDI.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTF.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFTI.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG16M.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG256.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRG64K.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM16M.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM256.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLFRM64K.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG16M.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG256.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRG64K.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM16M.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM256.DLL"=hex:01,00,00,00 -"C:\\WINDOWS\\SYSTEM32\\RL\\SOFT\\RLIRM64K.DLL"=hex:01,00,00,00 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 4b9799f..5126e9b 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -1494,3 +1494,14 @@ fix: version hooking for IDIrectDraw methods called by IDIrectDrawSurface method fix: capability registration passed in IDIrectDrawSurface::QueryInterface() calls: fixes settings for ZBUFFER surfaces fix: capsdb logging (developer's use only) fix: handling of WM_NCCALCSIZE & WM_NCPAINT messages in winproc hooker to align behaviour to comment. To be tested ... + +v2.04.10 +GUI: +add: view flags window (expert mode only) +DLL: +fix: prevent InvalidateRect on desktop, eliminates some flickering +fix: ZBUFFER capability management - fixes "Galapagos" in HW mode (but it may crash because of the intro movie...) +fix: logging of log flags +fix: D3D8/9 QueryInterface fully revisited +add: (very) preliminary texture transparency hack + diff --git a/dll/d3dtexture.cpp b/dll/d3dtexture.cpp index 7c7d0d6..08540cf 100644 --- a/dll/d3dtexture.cpp +++ b/dll/d3dtexture.cpp @@ -929,6 +929,69 @@ void D3DTextureHack(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) } } +void D3DTextureTransp(D3DSURFACE_DESC Desc, D3DLOCKED_RECT LockedRect) +{ + switch (Desc.Format){ + case D3DFMT_X8R8G8B8: + case D3DFMT_A8R8G8B8: + { + DWORD *p; + for(UINT y=0; y> 2); + for(UINT x=0; x> 1); + for(UINT x=0; xddpfPixelFormat.dwFourCC = 0; lpddsd->ddpfPixelFormat.dwFlags &= ~DDPF_FOURCC; } + + //// try + //if((lpddsd->dwFlags & DDSD_PIXELFORMAT) && (lpddsd->ddpfPixelFormat.dwRGBBitCount == 16)){ + // lpddsd->ddpfPixelFormat.dwRGBAlphaBitMask = 0x8000; + // lpddsd->ddpfPixelFormat.dwBBitMask = 0x001F; + // lpddsd->ddpfPixelFormat.dwGBitMask = 0x03E0; + // lpddsd->ddpfPixelFormat.dwRBitMask = 0x7C00; + //} + //// try return; } @@ -2335,8 +2378,6 @@ void FixSurfaceCaps(LPDDSURFACEDESC2 lpddsd, int dxversion) return; } - - // 3DDEVICE no TEXTURE: enforce PIXELFORMAT // v2.02.90: added for "Zoo Tycoon" textures // v2.03.48 - there are two situations @@ -4550,7 +4591,7 @@ static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttached } //else if (IsBack) { else { - // v2.02.13: emulate ZBUFFER attach to backbuffer: do nothing and return OK + // v2.02.13: emulate ZBUFFER attach to backbuffer/plain surface: do nothing and return OK // this trick makes at least "Nocturne" work also in emulated mode when hardware acceleration // is set in the game "Options" menu. if (sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) // DDSCAPS_BACKBUFFER for double buffering ??? @@ -4561,6 +4602,40 @@ static HRESULT WINAPI extAddAttachedSurface(AddAttachedSurface_Type pAddAttached } } } + else { + // AddAttachedSurface successful, manage CAPS propagation + if ((dxw.dwFlags1 & EMULATESURFACE) && (IsPrim || IsBack)){ + } + HRESULT sdres; + DDSURFACEDESC2 sd; + sd.dwSize=Set_dwSize_From_Surface(); + sdres=lpddsadd->GetSurfaceDesc((DDSURFACEDESC *)&sd); + if (sdres) + OutTraceE("AddAttachedSurface: GetSurfaceDesc ERROR res=%x at %d\n", sdres, __LINE__); + else + OutTraceDW("AddAttachedSurface: GetSurfaceDesc dwCaps=%x(%s)\n", + sd.ddsCaps.dwCaps, ExplainDDSCaps(sd.ddsCaps.dwCaps)); + if (IsPrim){ + if (sd.ddsCaps.dwCaps & DDSCAPS_BACKBUFFER) + OutTraceDW("AddAttachedSurface: registering BACKBUFFER attach on PRIMARY\n"); + dxwss.PushBackBufferSurface(lpddsadd, 1); + } + //else if (IsBack) or plain surface for ZBUFFER { + else { + // v2.02.13: emulate ZBUFFER attach to backbuffer/plain surface + if ((sd.ddsCaps.dwCaps & DDSCAPS_ZBUFFER) && (dxw.dwFlags1 & EMULATESURFACE)){ + DWORD dwCaps; + OutTraceDW("AddAttachedSurface: registering ZBUFFER attach on %s surface\n", IsBack ? "BACKBUFFER" : "PLAIN"); + dwCaps = dxwcdb.GetCaps(lpdds); + if(dwCaps){ + dwCaps &= ~(DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_BACKBUFFER|DDSCAPS_3DDEVICE|DDSCAPS_COMPLEX); + dwCaps |= DDSCAPS_ZBUFFER; + //if(dwCaps & DDSCAPS_VIDEOMEMORY) dwCaps|=DDSCAPS_LOCALVIDMEM; + dxwcdb.PushCaps(lpddsadd, dwCaps); + } + } + } + } if (res) OutTraceE("AddAttachedSurface: ERROR %x(%s)\n", res, ExplainDDError(res)); return res; } @@ -4644,33 +4719,18 @@ static HRESULT WINAPI extGetCapsS(int dxInterface, GetCapsS_Type pGetCapsS, LPDI while(TRUE){ // fake loop if (IsPrim) { IsFixed=TRUE; - caps->dwCaps |= DDSD_Prim.ddsCaps.dwCaps; - caps->dwCaps |= DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE; // primary surfaces must be this way - caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way - if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM; + caps->dwCaps = SetPrimaryCaps(caps->dwCaps); + break; } - if (IsBack) { IsFixed=TRUE; - // v2.03.11: added DDSCAPS_FLIP capability to backbuffer surface: "Ignition" checks for it before Flip-ping to primary - caps->dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM); // you never know.... - caps->dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way - if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= DDSCAPS_LOCALVIDMEM; - //if(caps->dwCaps & DDSCAPS_3DDEVICE) caps->dwCaps |= (DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX); + caps->dwCaps = SetBackBufferCaps(caps->dwCaps); + break; } - - // v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ... - // v2.03.90: "Galapagos" fix - if there's a DDSCAPS_SYSTEMMEMORY or DDSCAPS_VIDEOMEMORY spec, let it be. - // v2.03.97: "Galapagos" fix erased. if (IsZBuf) { - DWORD dwCaps = dxwcdb.GetCaps(lpdds); - // beware! the ZBUFFER surface could have never been registered! - // in this case better keep the original capabilities (or adapt to the primary/backbuffer ones?) - if(dwCaps) { - IsFixed=TRUE; - sLabel="(REG.ZBUFFER)"; - caps->dwCaps = dwCaps; - } + IsFixed=TRUE; + caps->dwCaps = SetZBufferCaps(dxwcdb.GetCaps(lpdds)); + break; } break; // inconditional break; } @@ -4738,36 +4798,22 @@ static HRESULT WINAPI extGetSurfaceDesc(int dxversion, GetSurfaceDesc_Type pGetS if (IsPrim) { IsFixed=TRUE; if (dxw.dwFlags1 & EMULATESURFACE) lpddsd->ddpfPixelFormat = dxw.VirtualPixelFormat; - lpddsd->ddsCaps.dwCaps |= DDSD_Prim.ddsCaps.dwCaps; - lpddsd->ddsCaps.dwCaps |= (DDSCAPS_PRIMARYSURFACE|DDSCAPS_FLIP|DDSCAPS_FRONTBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_VISIBLE); // primary surfaces must be this way - lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // primary surfaces can't be this way - if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM; + lpddsd->ddsCaps.dwCaps = SetPrimaryCaps(lpddsd->ddsCaps.dwCaps); lpddsd->dwBackBufferCount=DDSD_Prim.dwBackBufferCount; lpddsd->dwHeight=dxw.GetScreenHeight(); lpddsd->dwWidth=dxw.GetScreenWidth(); break; } - if (IsBack) { IsFixed=TRUE; - // flags that backbuffer surfaces must have set - lpddsd->ddsCaps.dwCaps |= (DDSCAPS_BACKBUFFER|DDSCAPS_VIDEOMEMORY|DDSCAPS_FLIP|DDSCAPS_LOCALVIDMEM);; - lpddsd->ddsCaps.dwCaps &= ~(DDSCAPS_SYSTEMMEMORY|DDSCAPS_OFFSCREENPLAIN); // backbuffer surfaces can't be this way - if(lpddsd->ddsCaps.dwCaps & DDSCAPS_3DDEVICE) lpddsd->ddsCaps.dwCaps |= DDSCAPS_LOCALVIDMEM; + lpddsd->ddsCaps.dwCaps = SetBackBufferCaps(lpddsd->ddsCaps.dwCaps); break; } - - // v2.03.82: fixed logic for ZBUFFER capabilities: "The Creed" may have two, in SYSTEMMEMORY or in VIDEOMEMORY ... - if(IsZBuf) { - DWORD dwCaps = dxwcdb.GetCaps(lpdds); - if(dwCaps) { - IsFixed=TRUE; - sLabel="(REG.ZBUFFER)"; - lpddsd->ddsCaps.dwCaps = dwCaps; - } + if (IsZBuf) { + IsFixed=TRUE; + lpddsd->ddsCaps.dwCaps = SetZBufferCaps(dxwcdb.GetCaps(lpdds)); break; } - break; // inconditional break } diff --git a/dll/ddtexture.cpp b/dll/ddtexture.cpp index c0c5d70..338edd9 100644 --- a/dll/ddtexture.cpp +++ b/dll/ddtexture.cpp @@ -503,6 +503,55 @@ static void TextureHack(LPDIRECTDRAWSURFACE s, int dxversion) if (res) OutTraceE("TextureHack: Unlock ERROR lpdds=%x res=%x(%s) at %d\n", s, res, ExplainDDError(res), __LINE__); } +void TextureTransp(LPDIRECTDRAWSURFACE s, int dxversion) +{ + DDSURFACEDESC2 ddsd; + int x, y, w, h; + HRESULT res; + + OutTraceB("TextureTransp(%d): lpdds=%x\n", dxversion, s); + + memset(&ddsd,0,sizeof(DDSURFACEDESC2)); + ddsd.dwSize = Set_dwSize_From_Surface(); + ddsd.dwFlags = DDSD_LPSURFACE | DDSD_PITCH; +// if(res=(*pLockMethod(lpddsHookedVersion()))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + if(res=(*pLockMethod(dxversion))(s, 0, (LPDDSURFACEDESC)&ddsd, DDLOCK_SURFACEMEMORYPTR|DDLOCK_WRITEONLY|DDLOCK_WAIT, 0)){ + OutTraceE("TextureTransp(%d): Lock ERROR res=%x(%s) at %d\n", dxversion, res, ExplainDDError(res), __LINE__); + return; + } + if((ddsd.ddsCaps.dwCaps & DDSCAPS_TEXTURE) && !dxwss.IsABackBufferSurface(s)) { + OutTrace("TextureTransp(%d): lpdds=%x BitCount=%d size=(%dx%d)\n", + dxversion, s, ddsd.ddpfPixelFormat.dwRGBBitCount, ddsd.dwWidth, ddsd.dwHeight); + w = ddsd.dwWidth; + h = ddsd.dwHeight; + switch (ddsd.ddpfPixelFormat.dwRGBBitCount){ + case 8: + // no way + break; + case 16: + { + WORD *p; + for(y=0; y> 1); + for(x=0; x> 2); + for(x=0; x>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag2Names[i]); - for(i=0, dword=dxw.dwFlags3; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag3Names[i]); - for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag4Names[i]); - for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag5Names[i]); - for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag6Names[i]); - for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag7Names[i]); - for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", Flag8Names[i]); - for(i=0, dword=dxw.dwTFlags; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", TFlagNames[i]); + for(i=0, dword=dxw.dwFlags1; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(0,i)); + for(i=0, dword=dxw.dwFlags2; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(1,i)); + for(i=0, dword=dxw.dwFlags3; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(2,i)); + for(i=0, dword=dxw.dwFlags4; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(3,i)); + for(i=0, dword=dxw.dwFlags5; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(4,i)); + for(i=0, dword=dxw.dwFlags6; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(5,i)); + for(i=0, dword=dxw.dwFlags7; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(6,i)); + for(i=0, dword=dxw.dwFlags8; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(7,i)); + for(i=0, dword=tflags ; i<32; i++, dword>>=1) if(dword & 0x1) fprintf(fp, "%s ", GetFlagCaption(8,i)); fprintf(fp, "***\n"); } @@ -259,7 +160,7 @@ void OutTrace(const char *format, ...) if (fp==NULL) return; // last chance: do not log... else - OutTraceHeader(fp); + OutTraceHeader(fp, tFlags); } va_start(al, format); //vfprintf(fp, format, al); diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index fb4c6c0..7e5b5c0 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -462,6 +462,11 @@ void dxwCore::SetClipCursor() Rect.right+=UpLeftCorner.x; Rect.top+=UpLeftCorner.y; Rect.bottom+=UpLeftCorner.y; + +// if(0) { +// if(GetMenu(hWnd)) Rect.top -= (*pGetSystemMetrics)(SM_CYMENU); +// } + (*pClipCursor)(NULL); if(!(*pClipCursor)(&Rect)) OutTraceE("SetClipCursor: ERROR err=%d at %d\n", GetLastError(), __LINE__); diff --git a/dll/dxwnd.aps b/dll/dxwnd.aps index f1007ebb106399950f6ab8f306e74705748cb483..07f36f0c9dcacc833481caea73ab9b2258e0456d 100644 GIT binary patch delta 82 zcmexyjQPhg<_YnPhLaCI5ZPFA;0~kVX4AVznIHm_`5)*)S%GlYWGKrKDkJ{T5W?CV I`%sz*05kX{5dZ)H delta 82 zcmexyjQPhg<_YnP29pmy5ZPFA;0~j~X4AVznIHm_`5)*)S%GlYWGKrKDkJ{T5W?CV I`%sz*05Yy62><{9 diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 932100f..266f3a0 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -27,7 +27,7 @@ along with this program. If not, see . #include "TlHelp32.h" -#define VERSION "2.04.09.fx1" +#define VERSION "2.04.10" #define DDTHREADLOCK 1 @@ -279,4 +279,105 @@ void InjectHook() } } } +} + +static char *FlagNames[9][32] ={{ + // Flags1 + "UNNOTIFY", "EMULATESURFACE", "CLIPCURSOR", "NEEDADMINCAPS", + "HOOKDI", "MODIFYMOUSE", "HANDLEEXCEPTIONS", "SAVELOAD", + "EMULATEBUFFER", "HOOKDI8", "BLITFROMBACKBUFFER", "SUPPRESSCLIPPING", + "AUTOREFRESH", "FIXWINFRAME", "HIDEHWCURSOR", "SLOWDOWN", + "DISABLECLIPPING", "LOCKWINSTYLE", "MAPGDITOPRIMARY", "FIXTEXTOUT", + "KEEPCURSORWITHIN", "USERGB565", "SUPPRESSDXERRORS", "PREVENTMAXIMIZE", + "LOCKEDSURFACE", "FIXPARENTWIN", "SWITCHVIDEOMEMORY", "CLIENTREMAPPING", + "HANDLEALTF4", "LOCKWINPOS", "HOOKCHILDWIN", "MESSAGEPROC" + },{ + // Flags2 + "RECOVERSCREENMODE", "REFRESHONRESIZE", "BACKBUFATTACH", "MODALSTYLE", + "KEEPASPECTRATIO", "INIT8BPP", "FORCEWINRESIZE", "INIT16BPP", + "KEEPCURSORFIXED", "DISABLEGAMMARAMP", "INDEPENDENTREFRESH", "FIXNCHITTEST", + "LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR", + "TIMESTRETCH", "HOOKOPENGL", "LOCKEDSIZE", "SHOWHWCURSOR", + "GDISTRETCHED", "SHOWFPSOVERLAY", "FAKEVERSION", "FULLRECTBLT", + "NOPALETTEUPDATE", "SUPPRESSIME", "NOBANNER", "WINDOWIZE", + "LIMITRESOURCES", "STARTDEBUG", "SETCOMPATIBILITY", "WIREFRAME", + },{ + // Flags3 + "FORCEHOOKOPENGL", "MARKBLIT", "HOOKDLLS", "SUPPRESSD3DEXT", + "HOOKENABLED", "FIXD3DFRAME", "FORCE16BPP", "BLACKWHITE", + "MARKLOCK", "SINGLEPROCAFFINITY", "EMULATEREGISTRY", "CDROMDRIVETYPE", + "NOWINDOWMOVE", "FORCECLIPPER", "LOCKSYSCOLORS", "GDIEMULATEDC", + "FULLSCREENONLY", "FONTBYPASS", "MINIMALCAPS", "DEFAULTMESSAGES", + "BUFFEREDIOFIX", "FILTERMESSAGES", "PEEKALLMESSAGES", "SURFACEWARN", + "ANALYTICMODE", "FORCESHEL", "CAPMASK", "COLORFIX", + "NODDRAWBLT", "NODDRAWFLIP", "NOGDIBLT", "NOPIXELFORMAT", + },{ + // Flags4 + "NOALPHACHANNEL", "SUPPRESSCHILD", "FIXREFCOUNTER", "SHOWTIMESTRETCH", + "ZBUFFERCLEAN", "ZBUFFER0CLEAN", "ZBUFFERALWAYS", "DISABLEFOGGING", + "NOPOWER2FIX", "NOPERFCOUNTER", "BILINEAR2XFILTER", "INTERCEPTRDTSC", + "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", + "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", + "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", + "RELEASEMOUSE", "ENABLETIMEFREEZE", "HOTPATCH", "ENABLEHOTKEYS", + "HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY", + },{ + // Flags5 + "DIABLOTWEAK", "CLEARTARGET", "NOWINPOSCHANGES", "ANSIWIDE", + "NOBLT", "USELASTCORE", "DOFASTBLT", "AEROBOOST", + "QUARTERBLT", "NOIMAGEHLP", "BILINEARFILTER", "REPLACEPRIVOPS", + "REMAPMCI", "TEXTUREHIGHLIGHT", "TEXTUREDUMP", "TEXTUREHACK", + "TEXTURETRANSP", "NORMALIZEPERFCOUNT", "HYBRIDMODE", "GDICOLORCONV", + "INJECTSON", "ENABLESONHOOK", "FREEZEINJECTEDSON", "GDIMODE", + "CENTERTOWIN", "STRESSRESOURCES", "MESSAGEPUMP", "TEXTUREFORMAT", + "DEINTERLACE", "LOCKRESERVEDPALETTE", "UNLOCKZORDER", "EASPORTSHACK", + },{ + // Flags6 + "FORCESWAPEFFECT", "LEGACYALLOC", "NODESTROYWINDOW", "NOMOVIES", + "SUPPRESSRELEASE", "FIXMOVIESCOLOR", "WOW64REGISTRY", "DISABLEMAXWINMODE", + "FIXPITCH", "POWER2WIDTH", "HIDETASKBAR", "ACTIVATEAPP", + "NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE", + "FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY", + "STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "---REUSEEMULATEDDC---", + "CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK", + "UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "EMULATERELMOUSE", + },{ + // Flags7 + "LIMITDDRAW", "DISABLEDISABLEALTTAB", "FIXCLIPPERAREA", "HOOKDIRECTSOUND", + "HOOKSMACKW32", "BLOCKPRIORITYCLASS", "CPUSLOWDOWN", "CPUMAXUSAGE", + "NOWINERRORS", "SUPPRESSOVERLAY", "INIT24BPP", "INIT32BPP", + "FIXGLOBALUNLOCK", "SHOWHINTS", "SKIPDEVTYPEHID", "INJECTSUSPENDED", + "SSUPPRESSDIERRORS", "HOOKNORUN", "FIXBINDTEXTURE", "ENUM16BITMODES", + "SHAREDKEYBOARD", "HOOKNOUPDATE", "HOOKGLUT32", "INITIALRES", + "MAXIMUMRES", "LOCKCOLORDEPTH", "FIXSMACKLOOP", "FIXFREELIBRARY", + "ANCHORED", "CLEARTEXTUREFOURCC", "NODDEXCLUSIVEMODE", "COPYNOSHIMS", + },{ + // Flags8 + "FORCEWAIT", "FORCENOWAIT", "FORCEVSYNC", "FORCENOVSYNC", + "VSYNCSCANLINES", "TRIMTEXTUREFORMATS", "NOHALDEVICE", "CLIPLOCK", + "PRETENDVISIBLE", "RAWFORMAT", "WININSULATION", "FIXMOUSEHOOK", + "DDSFORMAT", "HOOKWING32", "SEQUENCEDIAT", "D3D8BACK16", + "MARKWING32", "DYNAMICZCLEAN", "MARKGDI32", "DUMPDIBSECTION", + "DUMPDEVCONTEXT", "QUALITYFONTS", "ALLOWSYSMEMON3DDEV", "", + "", "", "", "", + "", "", "", "", + },{ + // TFlags + "OUTTRACE", "OUTDDRAWTRACE", "OUTWINMESSAGES", "OUTCURSORTRACE", + "OUTSEPARATED", "**", "ASSERTDIALOG", "OUTIMPORTTABLE", + "OUTDEBUG", "OUTREGISTRY", "TRACEHOOKS", "OUTD3DTRACE", + "OUTDXWINTRACE", "OUTWINGTRACE", "OUTOGLTRACE", "", + "", "", "", "", + "", "", "", "", + "", "", "", "ADDRELATIVETIME", + "**", "ADDTIMESTAMP", "OUTDEBUGSTRING", "ERASELOGFILE", + }}; + +LPCSTR GetFlagCaption(int flag, int bit) +{ + //if((flag<0) || (flag>(9*32))) return ""; + //return FlagNames[flag >> 5][flag & 0x1F]; + if((flag<0) || (flag>8)) return ""; + if((bit<0) || (bit>31)) return ""; + return FlagNames[flag][bit]; } \ No newline at end of file diff --git a/dll/dxwnd.def b/dll/dxwnd.def index a4d06bb..7818ba0 100644 --- a/dll/dxwnd.def +++ b/dll/dxwnd.def @@ -8,3 +8,4 @@ EXPORTS GetHookInfo @6 Inject @7 GetThreadStartAddress @8 + GetFlagCaption @9 diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index fee1db86b9720569fdbac6ca606f13c89f51741e..549918d64a306d8b32c8b9917395f05429c3fbc8 100644 GIT binary patch delta 23855 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 diff --git a/dll/hd3d.cpp b/dll/hd3d.cpp index 0003bba..1c10b9a 100644 --- a/dll/hd3d.cpp +++ b/dll/hd3d.cpp @@ -17,6 +17,7 @@ #define HOOKD3D10ANDLATER 1 #define TRACEALLMETHODS 1 +//#define DXWNDDISABLEDHOOKS 1 extern void D3D9TextureHandling(void *, int); extern void D3D8TextureHandling(void *, int); @@ -316,7 +317,6 @@ static HookEntryEx_Type d3d8Hooks[]={ {HOOK_IAT_CANDIDATE, 0, 0, NULL, 0, 0} // terminator }; - static HookEntryEx_Type d3d9Hooks[]={ {HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9, (FARPROC)extDirect3DCreate9}, {HOOK_HOT_CANDIDATE, 0, "Direct3DCreate9Ex", (FARPROC)NULL, (FARPROC *)&pDirect3DCreate9Ex, (FARPROC)extDirect3DCreate9Ex}, @@ -496,7 +496,7 @@ void HookD3DDevice8(void** ppD3Ddev8) SetHook((void *)(**(DWORD **)ppD3Ddev8 + 120), extGetFrontBuffer, (void **)&pGetFrontBuffer, "GetFrontBuffer(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 136), extBeginScene8, (void **)&pBeginScene8, "BeginScene(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 140), extEndScene8, (void **)&pEndScene8, "EndScene(D8)"); - if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){ + if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){ SetHook((void *)(**(DWORD **)ppD3Ddev8 + 200), extSetRenderState8, (void **)&pSetRenderState8, "SetRenderState(D8)"); SetHook((void *)(**(DWORD **)ppD3Ddev8 + 204), extGetRenderState8, (void **)&pGetRenderState8, "GetRenderState(D8)"); if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState8)((void *)*ppD3Ddev8, D3DRS_FILLMODE, D3DFILL_WIREFRAME); @@ -544,7 +544,7 @@ void HookD3DDevice9(void** ppD3Ddev9) SetHook((void *)(**(DWORD **)ppD3Ddev9 + 168), extEndScene9, (void **)&pEndScene9, "EndScene(D9)"); //SetHook((void *)(**(DWORD **)ppD3Ddev9 +188), extSetViewport, (void **)&pSetViewport, "SetViewport(D9)"); //SetHook((void *)(**(DWORD **)ppD3Ddev9 +192), extGetViewport, (void **)&pGetViewport, "GetViewport(D9)"); - if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS)){ + if((dxw.dwFlags2 & WIREFRAME) || (dxw.dwFlags4 & DISABLEFOGGING) || (dxw.dwFlags4 & ZBUFFERALWAYS) || (dxw.dwFlags5 & TEXTURETRANSP)){ SetHook((void *)(**(DWORD **)ppD3Ddev9 + 228), extSetRenderState9, (void **)&pSetRenderState9, "SetRenderState(D9)"); SetHook((void *)(**(DWORD **)ppD3Ddev9 + 232), extGetRenderState9, (void **)&pGetRenderState9, "GetRenderState(D9)"); if(dxw.dwFlags2 & WIREFRAME) (*pSetRenderState9)((void *)*ppD3Ddev9, D3DRS_FILLMODE, D3DFILL_WIREFRAME); @@ -588,6 +588,131 @@ void HookDirect3D8(void *lpd3d) SetHook((void *)(*(DWORD *)lpd3d + 60), extCreateDevice8, (void **)&pCreateDevice8, "CreateDevice(D8)"); } +void HookDirect3D9(void *lpd3d, BOOL ex) +{ + SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount9, (void **)&pGetAdapterModeCount9, "GetAdapterGetAdapterModeCount(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, "CheckDeviceType(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, "GetDeviceCaps(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, "GetAdapterMonitor(D9)"); + SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (void **)&pCreateDevice9, "CreateDevice(D9)"); + if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)"); +} + +typedef enum { + TYPE_OBJECT_UNKNOWN = 0, + TYPE_OBJECT_DIRECT3D, + TYPE_OBJECT_DIRECT3DDEVICE, + TYPE_OBJECT_GAMMARAMP, + TYPE_OBJECT_BASETEXTURE, + TYPE_OBJECT_TEXTURE, + TYPE_OBJECT_3DSURFACE, + TYPE_OBJECT_VIEWPORT }; + +static HRESULT WINAPI QueryInterfaceD3D(int d3dversion, QueryInterface_Type pQueryInterfaceD3D, void *obj, REFIID riid, void** ppvObj) +{ + HRESULT res; + int iObjectType; + int iObjectVersion; + BOOL bEx = FALSE; + + iObjectVersion = 0; + iObjectType = TYPE_OBJECT_UNKNOWN; + + OutTraceD3D("D3D::QueryInterface(%d): d3d=%x riid=%x(%s)\n", d3dversion, obj, riid.Data1, ExplainGUID((GUID *)&riid)); + + switch(riid.Data1){ + // DirectDraw + case 0x1dd9e8da: //IID_IDirect3D8 + iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=8; break; + case 0x81bdcbca: // IID_IDirect3D9 + iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; break; + case 0x02177241: // IID_IDirect3D9Ex + iObjectType=TYPE_OBJECT_DIRECT3D; iObjectVersion=9; bEx=TRUE; break; + case 0x7385e5df: // IID_IDirect3DDevice8 + iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=8; break; + case 0xd0223b96: // IID_IDirect3DDevice9 + iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; break; + case 0xb18b10ce: // IID_IDirect3DDevice9Ex + iObjectType=TYPE_OBJECT_DIRECT3DDEVICE; iObjectVersion=9; bEx=TRUE; break; // !!!! + case 0xb4211cfa: // IID_IDirect3DBaseTexture8 + iObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=8; break; + case 0xe4cdd575: // IID_IDirect3DTexture8 + iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=8; break; + case 0x580ca87e: // IID_IDirect3DBaseTexture9 + iObjectType=TYPE_OBJECT_BASETEXTURE; iObjectVersion=9; break; + case 0x85c31227: // IID_IDirect3DTexture9 + iObjectType=TYPE_OBJECT_TEXTURE; iObjectVersion=9; break; + case 0xb96eebca: // IID_IDirect3DSurface8 + iObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=8; break; + case 0x0cfbaf3a: // IID_IDirect3DSurface9 + iObjectType=TYPE_OBJECT_3DSURFACE; iObjectVersion=9; break; + } + +/* IID_IDirect3DDevice9Video */ +// {26DC4561-A1EE-4ae7-96DA-118A36C0EC95} +// DEFINE_GUID(IID_IDirect3DDevice9Video, 0x26dc4561, 0xa1ee, 0x4ae7, 0x96, 0xda, 0x11, 0x8a, 0x36, 0xc0, 0xec, 0x95); + + char *sLabel; + switch(iObjectType){ + case TYPE_OBJECT_DIRECT3D: sLabel = "IID_IDirect3D"; break; + case TYPE_OBJECT_DIRECT3DDEVICE: sLabel = "IID_IDirect3DDevice"; break; + case TYPE_OBJECT_BASETEXTURE: sLabel = "IID_IDirect3DBaseTexture"; break; + case TYPE_OBJECT_TEXTURE: sLabel = "IID_IDirect3DTexture"; break; + case TYPE_OBJECT_3DSURFACE: sLabel = "IID_IDirect3DSurface"; break; + case TYPE_OBJECT_UNKNOWN: + default: sLabel = "(unknown)"; break; + } + OutTraceDW("D3D::QueryInterface: Got interface for %s version %d\n", sLabel, iObjectVersion); + + res=pQueryInterfaceD3D(obj, riid, ppvObj); + if(res) { + OutTraceDW("D3D::QueryInterface ERROR: obj=%x REFIID=%x obp=%x ret=%x(%s)\n", + obj, riid.Data1, *ppvObj, res, ExplainDDError(res)); + return res; + } + + if (! *ppvObj) { + OutTraceDW("D3D::QueryInterface: Interface for object %x not found\n", riid.Data1); + return res; + } + + // added trace + OutTraceDW("D3D::QueryInterface: obj=%x REFIID=%x obp=%x obj=%s version=%d ret=0\n", + obj, riid.Data1, *ppvObj, sLabel, iObjectVersion); + + if(iObjectVersion == 8){ + switch(iObjectType){ + case TYPE_OBJECT_DIRECT3D: HookDirect3D8(ppvObj); break; + case TYPE_OBJECT_DIRECT3DDEVICE: HookD3DDevice8(ppvObj); break; + case TYPE_OBJECT_TEXTURE: HookD3DTexture8(ppvObj); break; + } + } + else{ // 9! + switch(iObjectType){ + case TYPE_OBJECT_DIRECT3D: HookDirect3D9(ppvObj, bEx); break; + case TYPE_OBJECT_DIRECT3DDEVICE: HookD3DDevice9(ppvObj); break; + case TYPE_OBJECT_TEXTURE: HookD3DTexture9(ppvObj); break; + } + } + + OutTraceD3D("D3D::QueryInterface: obp=%x\n", *ppvObj); + return res; +} + +HRESULT WINAPI extQueryInterfaceD3D8(void *obj, REFIID riid, void** ppvObj) +{ return QueryInterfaceD3D(8, pQueryInterfaceD3D8, obj, riid, ppvObj); } +HRESULT WINAPI extQueryInterfaceDev8(void *obj, REFIID riid, void** ppvObj) +{ return QueryInterfaceD3D(8, pQueryInterfaceDev8, obj, riid, ppvObj); } +HRESULT WINAPI extQueryInterfaceD3D9(void *obj, REFIID riid, void** ppvObj) +{ return QueryInterfaceD3D(9, pQueryInterfaceD3D9, obj, riid, ppvObj); } +HRESULT WINAPI extQueryInterfaceDev9(void *obj, REFIID riid, void** ppvObj) +{ return QueryInterfaceD3D(9, pQueryInterfaceDev9, obj, riid, ppvObj); } + BOOL WINAPI extDisableD3DSpy(void) { if(TRUE) return FALSE; @@ -611,21 +736,6 @@ void* WINAPI extDirect3DCreate8(UINT sdkversion) return lpd3d; } -void HookDirect3D9(void *lpd3d, BOOL ex) -{ - SetHook((void *)(*(DWORD *)lpd3d + 0), extQueryInterfaceD3D9, (void **)&pQueryInterfaceD3D9, "QueryInterface(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 16), extGetAdapterCount9, (void **)&pGetAdapterCount9, "GetAdapterCount(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 20), extGetAdapterIdentifier9, (void **)&pGetAdapterIdentifier9, "GetAdapterIdentifier(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 24), extGetAdapterModeCount9, (void **)&pGetAdapterModeCount9, "GetAdapterGetAdapterModeCount(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 28), extEnumAdapterModes9, (void **)&pEnumAdapterModes9, "EnumAdapterModes(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 32), extGetAdapterDisplayMode9, (void **)&pGetAdapterDisplayMode9, "GetAdapterDisplayMode(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 36), extCheckDeviceType9, (void **)&pCheckDeviceType9, "CheckDeviceType(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 56), extD3DGetDeviceCaps9, (void **)&pD3DGetDeviceCaps9, "GetDeviceCaps(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 60), extGetAdapterMonitor9, (void **)&pGetAdapterMonitor9, "GetAdapterMonitor(D9)"); - SetHook((void *)(*(DWORD *)lpd3d + 64), extCreateDevice9, (void **)&pCreateDevice9, "CreateDevice(D9)"); - if(ex) SetHook((void *)(*(DWORD *)lpd3d + 80), extCreateDeviceEx, (void **)&pCreateDeviceEx, "CreateDeviceEx(D9)"); -} - static char *ExplainD3DBehaviourFlags(DWORD c) { static char eb[256]; @@ -1373,6 +1483,10 @@ static HRESULT WINAPI extSetRenderState(SetRenderState_Type pSetRenderState, voi OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value); Value = FALSE; } + if((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRS_ALPHABLENDENABLE)){ + OutTraceD3D("SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\n", Value); + Value = TRUE; + } res=(*pSetRenderState)(pd3dd, State, Value); if(res) OutTraceE("SetRenderState: res=%x(%s)\n", res, ExplainDDError(res)); @@ -1697,76 +1811,6 @@ void WINAPI extRSSetViewports11(ID3D11DeviceContext *This, UINT NumViewports, D3 (*pRSSetViewports11)(This, NumViewports, pViewports); } -HRESULT WINAPI extQueryInterfaceD3D8(void *obj, REFIID riid, void** ppvObj) -{ - HRESULT res; - OutTraceD3D("D3D::QueryInterface(8): d3d=%x riid=%x\n", obj, riid.Data1); - res=pQueryInterfaceD3D8(obj, riid, ppvObj); - if(res) - OutTraceE("D3D::QueryInterface(8): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else - OutTraceD3D("D3D::QueryInterface(8): obp=%x\n", *ppvObj); - return res; -} - -HRESULT WINAPI extQueryInterfaceDev8(void *obj, REFIID riid, void** ppvObj) -{ - HRESULT res; - OutTraceD3D("Device::QueryInterface(8): d3d=%x riid=%x\n", obj, riid.Data1); - res=pQueryInterfaceDev8(obj, riid, ppvObj); - if(res){ - OutTraceE("Device::QueryInterface(8): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - return res; - } - OutTraceD3D("Device::QueryInterface(8): obp=%x\n", *ppvObj); - - switch(*(DWORD *)&riid){ - case 0x7385E5DF: // IID_IDirect3DDevice8 - HookD3DDevice8(ppvObj); - break; - case 0xD0223B96: // IID_IDirect3DDevice9 - HookD3DDevice9(ppvObj); - break; - } - return res; -} - -HRESULT WINAPI extQueryInterfaceD3D9(void *obj, REFIID riid, void** ppvObj) -{ - HRESULT res; - OutTraceD3D("D3D::QueryInterface(9): d3d=%x riid=%x\n", obj, riid.Data1); - res=pQueryInterfaceD3D9(obj, riid, ppvObj); - if(res) - OutTraceE("D3D::QueryInterface(9): ERROR ret=%x(%s)\n", res, ExplainDDError(res)); - else - OutTraceD3D("D3D::QueryInterface(9): obp=%x\n", *ppvObj); - return res; -} - -HRESULT WINAPI extQueryInterfaceDev9(void *obj, REFIID riid, void** ppvObj) -{ - HRESULT res; - - OutTraceD3D("Device::QueryInterface(9): d3d=%x riid=%x\n", obj, riid.Data1); - res=pQueryInterfaceDev9(obj, riid, ppvObj); - if(res){ - OutTraceD3D("Device::QueryInterface(9): ERROR ret=%x\n", res); - return res; - } - OutTraceD3D("Device::QueryInterface(9): ppvObj=%x\n", *ppvObj); - - switch(*(DWORD *)&riid){ - case 0x7385E5DF: // IID_IDirect3DDevice8 - HookD3DDevice8(ppvObj); - break; - case 0xD0223B96: // IID_IDirect3DDevice9 - HookD3DDevice9(ppvObj); - break; - } - - return res; -} - static ULONG WINAPI ReleaseDev(int d3dversion, ReleaseDev_Type pReleaseDev, void *lpdd) { ULONG ActualRef; @@ -1789,7 +1833,7 @@ HRESULT WINAPI extGetDirect3D8(void *lpdd3dd, void **ppD3D8) OutTraceE("Device::GetDirect3D ERROR: d3dd=%x ret=%x\n", lpdd3dd, res); else{ OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D8); - HookDirect3D8(*ppD3D8); + // HookDirect3D8(*ppD3D8); } return res; } @@ -1804,7 +1848,8 @@ HRESULT WINAPI extGetDirect3D9(void *lpdd3dd, void **ppD3D9) else{ OutTraceD3D("Device::GetDirect3D: d3dd=%x d3d=%x\n", lpdd3dd, *ppD3D9); // re-hook d3d session: neeeded for Need for Speed Underground - HookDirect3D9(*ppD3D9, FALSE); + // commented out: NFSU works also without it .... + // HookDirect3D9(*ppD3D9, FALSE); } return res; } @@ -1880,6 +1925,8 @@ ULONG WINAPI extBeginScene8(void *lpdd3dd) OutTraceB("Device::BeginScene(8): d3dd=%x\n", lpdd3dd); res=(*pBeginScene8)(lpdd3dd); if (res) OutTraceE("Device::BeginScene(8) ERROR: err=%x\n", res); + + //if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState8)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE); return res; } @@ -1889,6 +1936,8 @@ ULONG WINAPI extBeginScene9(void *lpdd3dd) OutTraceB("Device::BeginScene(9): d3dd=%x\n", lpdd3dd); res=(*pBeginScene9)(lpdd3dd); if (res) OutTraceE("Device::BeginScene(9) ERROR: err=%x\n", res); + + //if(dxw.dwFlags5 & TEXTURETRANSP) (*pSetRenderState9)(lpdd3dd, D3DRS_ALPHABLENDENABLE, TRUE); return res; } diff --git a/dll/hd3d7.cpp b/dll/hd3d7.cpp index d101f5d..843d58d 100644 --- a/dll/hd3d7.cpp +++ b/dll/hd3d7.cpp @@ -1175,6 +1175,10 @@ HRESULT WINAPI extSetRenderState(int version, SetRenderState3_Type pSetRenderSta OutTraceD3D("SetRenderState: FIXED State=FOGENABLE Value=%x->FALSE\n", Value); Value = FALSE; } + if((dxw.dwFlags5 & TEXTURETRANSP) && (State == D3DRENDERSTATE_ALPHABLENDENABLE)){ + OutTraceD3D("SetRenderState: FIXED State=ALPHABLENDENABLE Value=%x->TRUE\n", Value); + Value = TRUE; + } // beware!!! likely this code would work for interface version 3 only !!! if((State==D3DRENDERSTATE_ZWRITEENABLE) && (Value==TRUE) && (dxw.dwFlags8 & DYNAMICZCLEAN)){ diff --git a/dll/hd3d8.cpp b/dll/hd3d8.cpp index 17681b1..316a0a7 100644 --- a/dll/hd3d8.cpp +++ b/dll/hd3d8.cpp @@ -47,15 +47,20 @@ void D3D8TextureHandling(void *arg, int Level) return; } pSurfaceLevel->Release(); + OutTraceB("D3D8TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage); switch(Desc.Type){ case D3DRTYPE_SURFACE: case D3DRTYPE_TEXTURE: break; default: + OutTraceB("D3D88TextureHandling: SKIP type=%x\n", Desc.Type); return; break; } - if(Desc.Usage == D3DUSAGE_RENDERTARGET)return; + if(Desc.Usage == D3DUSAGE_RENDERTARGET){ + OutTraceB("D3D8TextureHandling: SKIP usage=%x\n", Desc.Usage); + return; + } //pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface); res=(*pLockRect8)(lpd3dtex, Level, &LockedRect, NULL, 0); OutTrace("D3D8TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n", diff --git a/dll/hd3d9.cpp b/dll/hd3d9.cpp index 4784c1e..0f20e19 100644 --- a/dll/hd3d9.cpp +++ b/dll/hd3d9.cpp @@ -39,15 +39,20 @@ void D3D9TextureHandling(void *arg, int Level) OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res)); return; } + OutTraceB("D3D9TextureHandling: level=%d type=%x usage=%x\n", Level, Desc.Type, Desc.Usage); switch(Desc.Type){ case D3DRTYPE_SURFACE: case D3DRTYPE_TEXTURE: break; default: + OutTraceB("D3D9TextureHandling: SKIP type=%x usage=%x\n", Desc.Type); return; break; } - if(Desc.Usage == D3DUSAGE_RENDERTARGET)return; + if(Desc.Usage == D3DUSAGE_RENDERTARGET){ + OutTraceB("D3D9TextureHandling: SKIP usage=%x\n", Desc.Usage); + return; + } //pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface); res=(*pLockRect9)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY); OutTrace("D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n", diff --git a/dll/user32.cpp b/dll/user32.cpp index cd678da..5095ff3 100644 --- a/dll/user32.cpp +++ b/dll/user32.cpp @@ -631,6 +631,10 @@ BOOL WINAPI extInvalidateRect(HWND hwnd, RECT *lpRect, BOOL bErase) OutTrace("InvalidateRect: hwnd=%x rect=%s erase=%x\n", hwnd, sRect, bErase); } + if(dxw.IsRealDesktop(hwnd)){ + hwnd = dxw.GethWnd(); + } + RECT ScaledRect; if(dxw.IsFullScreen()) { switch(dxw.GDIEmulationMode){ @@ -2513,6 +2517,7 @@ BOOL WINAPI extEndPaint(HWND hwnd, const PAINTSTRUCT *lpPaint) HWND WINAPI extCreateDialogIndirectParam(HINSTANCE hInstance, LPCDLGTEMPLATE lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM lParamInit) { HWND RetHWND; + OutTraceDW("CreateDialogIndirectParam: hInstance=%x lpTemplate=(style=%x extstyle=%x items=%d pos=(%d,%d) size=(%dx%d)) hWndParent=%x lpDialogFunc=%x lParamInit=%x\n", hInstance, lpTemplate->style, lpTemplate->dwExtendedStyle, lpTemplate->cdit, lpTemplate->x, lpTemplate->y, lpTemplate->cx, lpTemplate->cy, diff --git a/host/ViewFlagsDialog.cpp b/host/ViewFlagsDialog.cpp new file mode 100644 index 0000000..149af56 --- /dev/null +++ b/host/ViewFlagsDialog.cpp @@ -0,0 +1,73 @@ +// ViewFlagsDialog.cpp : implementation file +// + +#include "stdafx.h" +#include "dxwndhost.h" +#include "ViewFlagsDialog.h" + +// CViewFlagsDialog dialog + +IMPLEMENT_DYNAMIC(CViewFlagsDialog, CDialog) + +CViewFlagsDialog::CViewFlagsDialog(CWnd* pParent /*=NULL*/) + : CDialog(CViewFlagsDialog::IDD, pParent) +{ +} + +CViewFlagsDialog::~CViewFlagsDialog() +{ +} + +void CViewFlagsDialog::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +BEGIN_MESSAGE_MAP(CViewFlagsDialog, CDialog) +END_MESSAGE_MAP() + +// CViewFlagsDialog message handlers + +BOOL CViewFlagsDialog::OnInitDialog() +{ + CDialog::OnInitDialog(); + + // TODO: Add extra initialization here + CString sflags; + extern TARGETMAP *ViewTarget; // dirty !!!! + int i; + TARGETMAP *t; + DWORD dword; + t = ViewTarget; + sflags.Append("Flags1: "); + for(i=0, dword = t->flags ; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(0,i)); + sflags.Append("\nFlags2: "); + for(i=0, dword = t->flags2; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(1,i)); + sflags.Append("\nFlags3: "); + for(i=0, dword = t->flags3; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(2,i)); + sflags.Append("\nFlags4: "); + for(i=0, dword = t->flags4; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(3,i)); + sflags.Append("\nFlags5: "); + for(i=0, dword = t->flags5; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(4,i)); + sflags.Append("\nFlags6: "); + for(i=0, dword = t->flags6; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(5,i)); + sflags.Append("\nFlags7: "); + for(i=0, dword = t->flags7; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(6,i)); + sflags.Append("\nFlags8: "); + for(i=0, dword = t->flags8; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(7,i)); + sflags.Append("\nTFlags: "); + for(i=0, dword = t->tflags; i<32; i++, dword>>=1) if(dword & 0x1) sflags.AppendFormat("%s ", GetFlagCaption(8,i)); + + this->SetDlgItemTextA(IDC_DESKTOPINFO, sflags); + this->SetWindowTextA(t->path); + + return TRUE; // return TRUE unless you set the focus to a control + // EXCEPTION: OCX Property Pages should return FALSE +} + +void CViewFlagsDialog::OnOK() +{ + // TODO: Add your specialized code here and/or call the base class + + CDialog::OnOK(); +} diff --git a/host/ViewFlagsDialog.h b/host/ViewFlagsDialog.h new file mode 100644 index 0000000..31cd337 --- /dev/null +++ b/host/ViewFlagsDialog.h @@ -0,0 +1,26 @@ +#pragma once + + +// CViewFlagsDialog dialog + +class CViewFlagsDialog : public CDialog +{ + DECLARE_DYNAMIC(CViewFlagsDialog) + +public: + CViewFlagsDialog(CWnd* pParent = NULL); // standard constructor + virtual ~CViewFlagsDialog(); + + // Dialog Data + enum { IDD = IDD_VIEWFLAGS }; + +protected: + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + + DECLARE_MESSAGE_MAP() +public: +public: + virtual BOOL OnInitDialog(); +protected: + virtual void OnOK(); +}; diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 53e7361b6be7202fb7acb59247c183a9d26308a2..456d77d706dd563435f6231b219fb2c3697c00f3 100644 GIT binary patch delta 12817 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 F{{e%%YLNf{ delta 12011 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 SUwomnKznc3+E0u2ZT=q)rGO*= delta 175 zcmdn9i1W=%&J8ncC!f>d+N@v~P{M1>pu=DUggOkS3`Wx%gBfin@7k2Z4H7nHFaZfq zzSwC#Ib(AiP^lq8@$`es86~GrXk=8F%(EqiA0h|U!C)}Ga1o>Fy^pZkx|+ z$Y447`L@MCBOo?efQ+APctv!w!wjY7bKAF{+s?=&zx~1uMhWG~3U*xECH^w1ga80q Cdo(-% diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index d1b93ffaac138c7c4d7e70198fd595271def63cd..e82059fce105a47e0c7046b46d0e14c9c17c8352 100644 GIT binary patch delta 8512 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 + + + + - - + + diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 8b6acea..1c20a73 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -17,6 +17,7 @@ #include "PaletteDialog.h" #include "TimeSliderDialog.h" #include "ShimsDialog.h" +#include "ViewFlagsDialog.h" #include "CGlobalSettings.h" #ifdef _DEBUG @@ -153,6 +154,7 @@ BEGIN_MESSAGE_MAP(CDxwndhostView, CListView) ON_COMMAND(ID_MOVE_UP, OnMoveUp) ON_COMMAND(ID_MOVE_DOWN, OnMoveDown) ON_COMMAND(ID_MOVE_BOTTOM, OnMoveBottom) + ON_COMMAND(ID_VIEW_FLAGS, OnViewFlags) ON_WM_RBUTTONDOWN() ON_WM_HOTKEY() ON_WM_DROPFILES() @@ -293,6 +295,7 @@ void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) case 1: t->flags5 |= TEXTUREHIGHLIGHT; break; case 2: t->flags5 |= TEXTUREDUMP; break; case 3: t->flags5 |= TEXTUREHACK; break; + case 4: t->flags5 |= TEXTURETRANSP; break; } switch(dlg->m_SonProcessMode){ @@ -628,6 +631,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) if(t->flags5 & TEXTUREHIGHLIGHT) dlg->m_TextureHandling = 1; if(t->flags5 & TEXTUREDUMP) dlg->m_TextureHandling = 2; if(t->flags5 & TEXTUREHACK) dlg->m_TextureHandling = 3; + if(t->flags5 & TEXTURETRANSP) dlg->m_TextureHandling = 4; dlg->m_SonProcessMode = 0; if(t->flags4 & SUPPRESSCHILD) dlg->m_SonProcessMode = 1; @@ -2527,6 +2531,26 @@ void CDxwndhostView::OnViewShims() pDlg->ShowWindow(SW_SHOW); } +TARGETMAP *ViewTarget; // dirty !!!! + +void CDxwndhostView::OnViewFlags() +{ + int i; + CTargetDlg dlg; + POSITION pos; + CListCtrl& listctrl = GetListCtrl(); + + if(!listctrl.GetSelectedCount()) return; + pos = listctrl.GetFirstSelectedItemPosition(); + i = listctrl.GetNextSelectedItem(pos); + ViewTarget = &TargetMaps[i]; + + CViewFlagsDialog *pDlg = new CViewFlagsDialog(); + + BOOL ret = pDlg->Create(CViewFlagsDialog::IDD, this); + pDlg->ShowWindow(SW_SHOW); +} + void CDxwndhostView::OnViewDesktop() { CDesktopDialog *pDlg = new CDesktopDialog(); @@ -2680,6 +2704,9 @@ void CDxwndhostView::OnRButtonDown(UINT nFlags, CPoint point) case ID_MOVE_BOTTOM: OnMoveBottom(); break; + case ID_VIEW_FLAGS: + OnViewFlags(); + break; } CListView::OnRButtonDown(nFlags, point); } diff --git a/host/dxwndhostView.h b/host/dxwndhostView.h index 7fd0698..446bcfd 100644 --- a/host/dxwndhostView.h +++ b/host/dxwndhostView.h @@ -116,6 +116,7 @@ protected: afx_msg void OnMoveDown(); afx_msg void OnMoveBottom(); afx_msg void OnDropFiles(HDROP hDropInfo); + afx_msg void OnViewFlags(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; diff --git a/host/resource b/host/resource index bf16a1603106c75ecf612ddddcd958121a8ce6b9..61c6a3c6d351aae344d680820b671aff82e8f726 100644 GIT binary patch delta 122 zcmaF0nEBsQ<_%tAlQ(d&@P{#YGPp8?Gq^GMFgP-}Pj(d1oqWJaX>*X6N$+F@VV22y zacrC+3_(CiKZfAR7qhe{J1k_G9AY80xoz))$kIy&AKSypk1@V7wNSfYB6_ GOwzI?D;CcH diff --git a/proxy/wing32.cpp b/proxy/wing32.cpp new file mode 100644 index 0000000..5e3e866 --- /dev/null +++ b/proxy/wing32.cpp @@ -0,0 +1,77 @@ +//------------------------------------------------------------------------------ +// Tiny WinG32 Proxy DLL v1.0 [30.01.2017] +// Copyright 2010 Evgeny Vrublevsky , 2017 GHO +//------------------------------------------------------------------------------ +#define APP_NAME "Tiny WinG32 Proxy" +#define APP_VERSION "1.0 [28.05.2010]" + +#define WIN32_LEAN_AND_MEAN +#include +#include + +void InitDxWnd(void); +void DxWndEndHook(void); + +struct wing32_dll +{ + HMODULE dll; + FARPROC WinGCreateDC; + FARPROC WinGCreateBitmap; + FARPROC WinGBitBlt; + FARPROC WinGStretchBlt; + FARPROC WinGRecommendDIBFormat; + FARPROC WinGGetDIBPointer; + FARPROC WinGSetDIBColorTable; + FARPROC WinGGetDIBColorTable; + FARPROC WinGCreateHalftonePalette; + FARPROC WinGCreateHalftoneBrush; +} wing32; + +__declspec(naked) void FakeWinGCreateDC() { _asm { jmp [wing32.WinGCreateDC] } } +__declspec(naked) void FakeWinGCreateBitmap() { _asm { jmp [wing32.WinGCreateBitmap] } } +__declspec(naked) void FakeWinGBitBlt() { _asm { jmp [wing32.WinGBitBlt] } } +__declspec(naked) void FakeWinGStretchBlt() { _asm { jmp [wing32.WinGStretchBlt] } } +__declspec(naked) void FakeWinGRecommendDIBFormat() { _asm { jmp [wing32.WinGRecommendDIBFormat] } } +__declspec(naked) void FakeWinGGetDIBPointer() { _asm { jmp [wing32.WinGGetDIBPointer] } } +__declspec(naked) void FakeWinGSetDIBColorTable() { _asm { jmp [wing32.WinGSetDIBColorTable] } } +__declspec(naked) void FakeWinGGetDIBColorTable() { _asm { jmp [wing32.WinGGetDIBColorTable] } } +__declspec(naked) void FakeWinGCreateHalftonePalette() { _asm { jmp [wing32.WinGCreateHalftonePalette] } } +__declspec(naked) void FakeWinGCreateHalftoneBrush() { _asm { jmp [wing32.WinGCreateHalftoneBrush] } } + +BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) +{ + char path[MAX_PATH]; + switch (ul_reason_for_call) + { + case DLL_PROCESS_ATTACH: + { + CopyMemory(path+GetSystemDirectory(path,MAX_PATH-10), "\\wing32.dll",11); + wing32.dll = LoadLibrary(path); + if (wing32.dll == false) + { + MessageBox(0, "Cannot load original wing32.dll library", APP_NAME, MB_ICONERROR); + ExitProcess(0); + } + wing32.WinGCreateDC = GetProcAddress(wing32.dll, "WinGCreateDC"); + wing32.WinGCreateBitmap = GetProcAddress(wing32.dll, "WinGCreateBitmap"); + wing32.WinGBitBlt = GetProcAddress(wing32.dll, "WinGBitBlt"); + wing32.WinGStretchBlt = GetProcAddress(wing32.dll, "WinGStretchBlt"); + wing32.WinGRecommendDIBFormat = GetProcAddress(wing32.dll, "WinGRecommendDIBFormat"); + wing32.WinGGetDIBPointer = GetProcAddress(wing32.dll, "WinGGetDIBPointer"); + wing32.WinGSetDIBColorTable = GetProcAddress(wing32.dll, "WinGSetDIBColorTable"); + wing32.WinGGetDIBColorTable = GetProcAddress(wing32.dll, "WinGGetDIBColorTable"); + wing32.WinGCreateHalftonePalette = GetProcAddress(wing32.dll, "WinGCreateHalftonePalette"); + wing32.WinGCreateHalftoneBrush = GetProcAddress(wing32.dll, "WinGCreateHalftoneBrush"); + + InitDxWnd(); + break; + } + case DLL_PROCESS_DETACH: + { + DxWndEndHook(); + FreeLibrary(wing32.dll); + } + break; + } + return TRUE; +} diff --git a/proxy/wing32.def b/proxy/wing32.def new file mode 100644 index 0000000..634dc83 --- /dev/null +++ b/proxy/wing32.def @@ -0,0 +1,12 @@ +LIBRARY "wing32" +EXPORTS +WinGCreateDC = FakeWinGCreateDC @1 +WinGCreateBitmap = FakeWinGCreateBitmap @2 +WinGBitBlt = FakeWinGBitBlt @3 +WinGStretchBlt = FakeWinGStretchBlt @4 +WinGRecommendDIBFormat = FakeWinGRecommendDIBFormat @5 +WinGGetDIBPointer = FakeWinGGetDIBPointer @6 +WinGSetDIBColorTable = FakeWinGSetDIBColorTable @7 +WinGGetDIBColorTable = FakeWinGGetDIBColorTable @8 +WinGCreateHalftonePalette = FakeWinGCreateHalftonePalette @9 +WinGCreateHalftoneBrush = FakeWinGCreateHalftoneBrush @10 diff --git a/proxy/wing32.sln b/proxy/wing32.sln new file mode 100644 index 0000000..17badf0 --- /dev/null +++ b/proxy/wing32.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wing32", "wing32.vcproj", "{579E7FE7-2745-4100-A802-23511711FCDF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.ActiveCfg = Debug|Win32 + {579E7FE7-2745-4100-A802-23511711FCDF}.Debug|Win32.Build.0 = Debug|Win32 + {579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.ActiveCfg = Release|Win32 + {579E7FE7-2745-4100-A802-23511711FCDF}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/proxy/wing32.suo b/proxy/wing32.suo new file mode 100644 index 0000000000000000000000000000000000000000..d43424623bb58e5a548c4e8d4d211138e8067dec GIT binary patch literal 10752 zcmeI2U2I%O701U8H3=>K3~4bXEKQmgTD$&=KjPFh_S#9PgPpos{B$#%p=k zj-w<9AyHmhi8r2Tsg#05C7K{nB;Jw-B!o~<#RKB0mH3j72ygU(*!=!8bF%Z(qIBIq+)%<{@M(-3N}qb{^?zcKYx^m}<_ zWyLibL-h{aMjE(*te@~}co(JC`;*{Sa2t3J_$lyi@Y5j6Ztex|10Mt*0JZ)P`SLcJ z`W;cxzzZhJU*5#bpqZtdH)mPN=&-}wb#u?l2Fk&uJvaXN^K&26ZGq_9+a2X79JA)6 zISltSwL!B~ZiqE~JMco`gaXI%8(wFPt`G{GI?)rqz*@ea7Ig{qk8* za+D?Zo${G~@bwqrl{2TzFx+!+eTioZodoT<3Ipyo^>x~}+QU)#i&pzvpuHEmr$CL_Tk(b?|JZ95<8nYL_MG*ZyC^>mzXRK$ zZ#GH#=8$FiwKx7Dk+f^VplGBvS)eRZ_0RcI7OlEKR;NB$hb&7V>r&g8`PYD=+{Qtp z2%m}XOT?Fs%}zB>r500}>|A28ZM>ypytQR~GL@f5%*|()&L+;x%uctrL6R27hW)b( znT)J)rwJp=p0&}#gnAWY3f-tJpsC2c=dXjjd z3H)EmzL|$E%iB@>j|^Wqf=WqI3FNQjYXoC(SwN~Jd><0^K~EJx!xE=`2P>(XP{q#)xW5M5az6TY_jZ!&=Msa$p)g$IQ#L z<*s3ooY=8ZXrIkKqJ%+3!&-kU` zN$gL#gU$om1EnboJ@OUD{m)|l%KzjG=HMH}1MS&B{&x?&gZ!tMzg9|iANETH$=BB4 zU#I<~9TRo_id;hqQ9x<_XR(|~R=vCj+{paH{^!;#P+lX0oM~%+fgJ|FH)4;QA&--C zWBa3)^2oB1=u7)KW%sMIfm?lgQ(84l)V5;#JA!1Vu{xatkNLfjB{M7K1D^KrM`wYk z_Wv-nFM4UU-*wiSM>q0#1y32A3{&VVe={dgMicf(`{1waPrLinOEcGwTL zo}KuvNJZ`9_Ui0kJ0#7CO(zJgOdm5;+$e?yQ&&gZ-xY&6d|u!3-FnDYR_?F2X}Mav zzi~wwr-fL;)^Gj}+8?Pq$I-Ei06WNY$Ud7mhIDak*lU`2>fq8s?Et~Mg&y^`)7Q#h zmwgUlq;cN8V9pmEWfn0pchEUW->n^(4x@~)6PaQIouN$!uU8rUyg7#yEzF=5S@$AS zC$jciS$phE2JLK`m}@_Mno~P}ozV6$r#9Yb<4x5rpq|#Y_Kv-rsH5t(evNK-pj(aS zwAx`MlSI;OJKUu~Ni5wushjxK!mk!&>EStK{|2CzZui@?DTfvc&Z3X@%{4`**>0=J zZf4`K3B9!;q3prUqm^1We_gb?d1x*}w#8Xk9BOGcx=y)cD}u(`#$KJ>mpQ(K ztMtzXZoaGsfkb{(C+Oe3+wtJ_<$tb(+ciSCUH4DVsSya;-LLANy1h6;{K?oTdn`6cLCe_q7@o3S@){Ap&W zKl{KlLXLY94d|>Cocn_q|1z7V5vvGSlfWKrg&Y^ZPxU75e~DV=Ac@_!cEn4%`2+qyHJTVQv(Im**l zusWUY*0)WUor!j3Tpu61xva@NcpRG3c)Q#EtdhLa(G>nH2`C#JH7qt^3|Qg7k@bQvmfld-c#NCZj_BbkH!p|*sRneoH)9B=KmEhX{6B{ zvO7h&_&m2yg>=j5s}b!NZg1E2JF4T2SuF;JaT@$)TzHP9`U#8_#cjc zhwvv;miH{yltG#yq>=BH%|+s0r&L0DRMhwv=3nmnZyeczdxFA@SJ#ODRnNblAv%5h zEndB-aX*maQSuKBrSGm$=YJ4deOna--79|8o5GUAYqI`@iGto|Wj;KMLy0X04!F{$akyudR2h z5~iqB4=m{jgp#BZ{p$YB_LsdsdHsYq`sKFFb*gBhL2deO*zD^gzEr#Ff>Gb5JI15F zp7f>sj_QIpeVfjZZ~6Mg5S{9RcS3YO_VxEdbgBz3h3GE(`Y%FsstextZIbVozW%Ea fo$7)slUU@ew3D)DT_B-(Z)WClMb#?oN literal 0 HcmV?d00001 diff --git a/proxy/wing32.vcproj b/proxy/wing32.vcproj new file mode 100644 index 0000000..acc4257 --- /dev/null +++ b/proxy/wing32.vcproj @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wing/wing32.suo b/wing/wing32.suo deleted file mode 100644 index f1e9a6962fa46bdbda226ab7367de3067d171aca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28160 zcmeI52Ygjk*2PbPK_f^nf+8;oRS53KYXPeYV?Ur3Os8T6W6tEyRZx~QdAyIdc{OVW@%s^iL^uG!y1h5Y?^>fK?f*a!!Tn2oO>yOV=l*!{00%3)I)^ou@7viW_ zhC&0)0nVWuUrYm#UqAmn$aJINr?|fU{3oG2DNx0waO8ghf=ZJ==WLF7CU4Aoo^ybw zi<$#C{@I3%<#?m#{jUzI0psmGALd<)Wn??mfn5Zv3-iIkVBxR`SPZN_tO1PYHG*#m zyBKx}tO=|Y%)2Ii9DZ&Nix%fxL>?>O8omvzE$lL}_VAa(I>I`^I>Wlal3+YHUcNhg z59yxp39v-{jIdMAb>vI~5jO}n7&Zhp6vk^`Den*Z5BT`#xtu9Ow*1g-<%<~y8svV@ zCMs3>x(io{-!E}2{g%Y@*%#u_ONQZdiW`WTXtZkzOLdcAnHZJhacmO$*$5YfUdqoF z_#B0!Iha3&xycxwGRA<;z5ACqOqs z9a~{sHAZO@QR7t9V8=AhJtr$(6nxo2VCOod10A7NV!(2oW4=la8WcRX4l10~2RGI!2Z zrC)!%{S}K)Fn``D_P@T!dm`GRxHSOz2YJ^kY5mz=@mvIuxXN$^o&ZZjoqcE-u7neD z4>IvnU$BWN58J}$T4P*9q2CNZKO5#hGY5Wxzntv*x57%>1Aj{i*jF>r!_!cf{Bn3d z|EH8EP|DxGeb}>7&|bWssc5e=mDH6^y4-JJCtawRAIiF*AcTCzIR%@K9c40t@yL>w zw>|imN7Yt|@BcE(`Vy#vfBD(F`uRcAF{Q_%gLlPey#F&26MihF`xY(|pUu$mqo6ur z@{Ga}9*xGaX8059|BT0Z{4>Ml{<0uMBdRHujucENfsJl18vo2JHQu5V$b&hIN6xu! zIwqAU)Swy4+5*F|CCb{_U)I+CnsoKoCK7e+>{=E+|4hZW;*K=aYok;8)0zLc5ArTn zF#kmK%(2Lo&mjXf7mh=77Pba7!TiTPE1ykEI{)#xwVw*W`924EW@Bt{#>-zRy(g1Y z+`Jq#Bi8~(@-x3QZM6O|Zzf%~NY@NU7bqeQ*G<8Q9IGqaI`_u0321|&R-!26Umn*& zr!R5+t0Fd?qlSrnIvRgkqOY_@Z*7jMHb>8)nt|iZnn%a9z%IPHdnV-7z}RY#Keo=n z_zR3cgoerXZj7mN=)_lf{*ejhCCl%^gTh)E??oc&pXsk9SDR$q3$8iiop%SEYlpW{ zOl{G19Xj}#8>-yrP4=&H`S~Ux?;PZlpDUksPF=P@?_lgX{^yo6S+=&W!x^t_AM`Ws z1o_mPipip={^val$03^cUv{h#leF4V=i&*6&X_3^+sOGB?u2j%|N zJ94Vr`Ak^){a0;V>QgOHNtolVMi1m(x!@Qd;D6dYb-o_O^S9&kFZ*#x$A3M<-k=L~ zLG5`jCiwSVspyLZOQFC*9Ns_p#|FoAN%Ob!Z(zO&EFo!F5ZK<_{dY#WM&p|KW1t;= zI+MM-soDGHYOXIyIRY~PC#b+O9phi>xWsX>j>dGxC7DYg7wf<>7>S>v@KY38w>3Tk z3w0Mn_jUEk9q)9>{6BTy`tF98tF9SXF~L>%OYO{`LnD$F<<0rw6 z?-24^J`Oaymz>AENnVQUb1r5MZf(b- z)Z_d!YT)eyXY;_@hhf;~{Q7xs0@{BJ+S+@MG8$)d$H#XrE&WfNEM>u`mq1y$8*7UB zDo~2yxKimh*Ubufk8^TM1UA=R8`wPRVcy{z^f9OzcMz-xpP@P5H1n68yS>8GpqIIG zJN?AAj}0B^zd%Xvzs;>+>GOM^jVfGUi2lc|B%i2Cntvo>`EHlVd(ZB@fA5QX$vKFt z5O)Q|jXoi<>eqYjo4msgqJO$BiF0 zsriVgm=RIUMvO|$Ngg&iBP-qi5#1aSX*{*;Wmyw5f4>ob8T!e1v{sgDkEg%DC@THz zG6Q3@Bu@ameka@`?ne1mxC`DnrGs(b&u7nq`|A9CRa=L53x#f1PWL_Y$@A06Gc}6i zYGXCae}ib>0Q0C4USacHV{v8R9GQmwK{UMguFuQgo3qn#l&?CxnUc@s|E}4XYcqQw z=bX~#QP`V%uSO@=gYQ<0O8@TsFOR(CC+5#FY7?KI$V#98$tzw_^Iy>`SD-YU|2XgP zyTFppKYXgaToo!Re}1o5Ttfb(p8vbyqI^@$R8;=j;s*i?`Sj|~x-%6Lb`s_TMV3fW z`SZKX;u7=c^DKWaqon!syN@Yqf3MdUHja|0D-U}U^* z9E^!;9vOWP7*i%sMmpU+>u()@g|)vo$Ay*4-NW()?k!8tnUyWgJK+1xdv4wz@4ejV z?Ac59ZE0y%kkebsO8(95$@AaI-|C)xthjr_^~bqy@zp2q3)4|(?#O=>WA8rZ9mh72 zaTmjarO&R#XV20DR<7{^h}@-STkBjc`` zbz$-t$BXwAy$0HwB`?AN3UcjN03qd_;O9lK1mrXU`#kQ#xx4I#&#};aD&Z3zpJk`w zXd3=;w@)`!3I6nO8#-E=y7PHM5gjppUgT6=d^moC(m^!*FI^(Z#^ zPGkSk4p+_gx{tuc_6n1nyvnbVNZ+g z5aax}6Po?+SrhlX;$9GIfa8CaepS9c*f-GZ!{3VWI^RKa4*FiKD)dj#Ovg>!2{Hb9 z9_z;IRf6XAs)+G=RiSyk>SC;KUFit1cT%*AklT(n^fywuk1q zoy4#txYp8fCa$OAdYQO*=_};n+)(LJ@~rAu>1_FP!6rd7->G7p<8!2^$xi^wh30%c z!^B-LJzt)AER0R6c;bXvh6s>Omf~&_<9_32>3Jq@ zzT)l>V}HH}nr*sFjAdRTeV;s#TLsPXtubu9*h7YG6?@#UZDOw*_Kw(lhJ7aXxnYOI z4jXnHf*$5 zx?xv~jWsM=Y_eg~#AX{GGN4EsXtE5p7O`_ZtUq4|^>;>+(> zHK5tAE;KA0x(rxD!!Cwq+@(Hm-|#>G|FZ@1`%ZK9i58}xv=VD;SbMQ9hIJQ9GOQmo z_kSsdr9rdbWg9jLnsKuXyBV5s^9)-6&A8hQTLR6vdknh|n*Du^VGlwxZlf5S+bsQ* ze0i{^rJt3Db9Adc4y3Jd6q z<$1gbG|SvntTA+~bQ{AilWs51HM^s9XL%qO2hHpC6bps!6ZZRlXM6P0m%6fSLHsbO z5;WOp7`7e$y*t~JjO#z9KE3}6uyp(!0plKr_4ne~U#i0Reu9kq1-?~o0OKCWi{pN> zJ}g!Y&i{6i?bS}K8hl3>uh9v{bNRlZ1C050hI!ZP0?q5Qa%3z+cNkMYm>1XIPXd2a zgp6q@jQNg)dFPITX4z82*amEyFj%S>->Hm&@x4r@7~}ZPp(ZR#jK}#tBnmb`jBz=z zTCj;?)O?4+x=j+}xzk{5&*@@3Hy6fdni*o$Q(-*!S}~q`1C06JD8_SV!I;-3gV@p|`&vF^)ZtjGOgJa+|*^;ikxeWSh)#&aKlk+E)TVSGkf2P5OT55j80*2BoC z*T8u02AFs5CTP}Yvl!3a0>h(-+bYI>`Y?>=J|fl`{s~w#>`5`6`xK1j+$Ki-IE?3R z7h{=sz}QxQ6yv!&VT}J1jOC+#2F7!D!Mrj*2OS36BgS)|hq26m5##uH7RGa55MzIN z3C8-qBF1xH6?O!{#^NF!;VbGo7Bg6(nH-lyxEJl4L zG_Nb6Pjtd82iw*(DXCKm~XD)ZWd$vE`lBkf4hmh13C(9i5R528=7Ug zSB&Sbf##T9E5gNA3YzV=UaSiAL(t*y4~y~KP0;L1o5k49Pe60ddD6r^ z1>G2In^*(rN1&PhXySH??GfYgL(r_pF)^-L$Dvt|6JjhggYcs(BTsY=G|w$3wgkEY z0a7(F)}y*uxESw46KIZwNU?LFqoCP`q793I<~3r)IBqYMZX?g@wTJe>cM#+CIz#h% zT@B;kJmU3wh;jUMl1`8Za=oGPpX)EiF*Q(nh&3u14G@p^AU)BnxHy#*Z(_O@Z~K{Neb zjCvn5@h4&|*FgfLN@W85f!D4I&2*U<`*R2Bj`F-82Xq~e@thtw&PygJj%!aZ=_}+J z*H>`^#KOP^Ne?k`!xT4MjPvtI=@i4#q%-6>pJq!>lxJDSL6?K~7^IsC#xmciII=ln zw-`2GY>{D$#qKg}nb=ChHi+#sY>(JMG4|cn&`h6;vA=u)&Gqu1Vw^(`L31AZ+Qc0e z`$i0h-FMKe+fRm_5aX}Ba1LN91I@Uz4Let?iWujOTF{a3wZ&Mz3!o$5FBF4xKIj4P zVTLt;W*&_V>mrt9*fnA^4GTd=JhvRYSLVZF-xyXA69nUY@LpU)vDSvgL$m+)G_056 zdK)%KY=~i3i%l2feq#nS(@ZfG$=x7!j~I{N2hH-W6Jr_HLvuaaAjWeyLNh%o))#so zbR7IAVqCkQfaaLpFIEBi5H!=P=;&+%t}|~!vz)^bK*qQXe1yVh88%LAni!8?1#>d#3Q`9Yh>UA(XBH0WOH_u8eeEzSh7^oO zB4Y}HX8WBj)(HAM>6#|)0>wp$p)0wD&}^Dm!`g~+Ps5VL`WQA?Y?xuGVpkb< zjo3snj`RA`Q{{o&Ola2a1~DJ>ENHg0nR!n zN)ME;2R2xGm^_dh4$X3p6k{1jNvF$m43B|k9$AKEi{%(LMQplZ*NR__CvRT_ZZ{8((%LcWJjdGH|$60knlkNW8B%E_B>c6>AHr6 zNyo|~%(aFNhHopz>vfRsYFIbvM0uW@1RV_D$FM=M>^cFM$jBbO~kklX#manGt$J>lWr!D!!8<{dBlqG8MveL z74j_e2xvZkCX2D}_LEMP2Xg7qyk3SFw=YwnS@vtixQCex&2nBRMm-Ul?Q*>s&lxX0 zNB&~4Tcq!lM^|=Rq0xlyQ8Cv2F|jAbc)exPe=+Pu>38H2=01RCJw6oUT=FqA)0bk* z<16S6@ZX8~pnrfa1798!0q-SQ1!%HJ!!8v|5n~>y(4FAZ#30?(&@9UsG1hmi^h6W4 zPI2qS;M_*(P4YnQ5oliTF|o6tpM+-HZ!_#!u{~m(|DKTkP@dy)pY$PluGNR7E8!%z z0q=PY=pOL3#6qBJi`5b1J@iS}llOr&kiJ-+ZO}yeQhDal47xphv{(pqj95!CAlC=F zEBrvQ*3egq4L59r*hsPFh#Ldl5k6B4(oKeDn@$m9`KC$VAde<-v!oZw1Gz=eJok1n zj)l9RL*VZf`Aew4BHMJi}!F$djbhZ-L9=~ko47fOyT!11V)Mm#?oH45##%W?$EsF2_`N}apMh}B{tiz zHDc=w+bZ^mVKI2{Vp&?ivn*_bR?xghZN+@hvC{42Io>)#cZKgH2I;y&^Lp`O7&@-I zbb^UXQrs1W4Hp|J#&thK`Wh2AQE}77(6nxb^js4+PjU0bIA1N4zFnU6y%U=CT_zR| zy;S->6Sqon51P0Kq}R*iRQD(}+u(6Aw!seRXAOH^`ek{Jnb)A(!M`KMa=k0IPmE>W z4_y}iGqEPn2cd_<|5FUN*?lT~SRTlI3(fK!6^n%aLHf9SV=(@ci|i9+@PpS+L!fzX zbuomvn$mSmT!iAH#5fPdKywa=6$^!qhGsq5h%v4mG~+sog+jN5W?Uz+rqIo$JIe#P zIB1ryrx>5h5~X{~vtRX<9v~0o21E1Qkz#Oelytg0<1(NbH%5$Q9xHu=VY8&~mgoJw z7rGn#ePX=7%f(iR0l8Js%wvNX>+z8EBl28l9+TcK&%MCY(!1o@H+D-uFV9zVd!dL|{w%OD z(ERQqQ;hj0OOKW3oH!1eg{ zrf-zKMV@uLReGU3kXsC$0>4y@?eYLL(^@e+7Pxz)H^_6XeMow%Jnzv{&~fnF#MlOp zN^h6vJ>Mz)5BV^#&!vOW!0ZPs^D|&fWyGk^Z8zRQz3!qt#MPhvC zK2LGCnYhJ@TWZ)cvHQhXmQ~Vg0-pCR9M*~x3Q{LAye@VF#0HD;+C#*W4eKM8CdTshEWp?|rtA21 z@? z&(IwE&x!GRd&FK419E$z**9J`?0vDn8+K6a3&ReJ9Wm@Du^?pb-J`P5?AH~<*j80p zIHbB_9DWhfk@7s=9Gc~eF|4gvJ2B3QU7^`ux{Gl>=q#Ni&%WDNy1zW{ zbecT#m;=o`=8BENSWPj$lWz>oHi!{pAFn0d zLLSJ)Li78KR$^S^+d^}EUMA*)?jRi}&-p%H`f_=mn*dFpD8~NW3!3psVvz0%Xx3w( zVb_Vx6yy3g8@d<#O@`epHrKFu&~b>n)vyK7J-`-;LAqto%y+qAtHstBwn6M6!?uh4 z!LS`-I}O___L>-mn)@4cfB3gd+yTWMG%Qan2%9(W{)R%c%;gNLELKe{9LH-&*DCNY~qec|7hZlDekz5%aaa5VZD1^2AcOHM2vHBIq8Zfu8QKSiShnkAYIqQg()sV zjMu9t-NeMTR$K?e;-UF2sGDJzD=xvXkz%6^%M{Bt><+OdhAkIcVb~wUo-u5<*mH)x zC-#vT`_RYI2jn^b9F+c29@DD(TKZdg&N)Y=f0XCCa7_BRi3@5L_GS2I!D>s_k>|N}rNianTz%=r z@+|Wu(oN-gZZqi^c_7yTn&sU~ytBUn}XZCN5ENNn&i5?$W*GF$`Qk>0$CL z%LwTddG0~dq_gC?KNv5aEzfgvq$kS*xoOZGTe)JK!>*OS$;8c7+yXJ~EpCTC8-B52 zcZuC&*mAKIVm_R+NP4w=6|e`T*UNMN6|FwxvC3dg!I(BGj(P_)>+vVC3ebC@L*ZW$ zqka*Z>+q{$oFo1${hB@&l4jFb-?3iIeyrD=T@Ei-g-nn8G467X zVTLsnyF`p_-yE8InwBOmN^xz(_-yco%I7i8?L!rpt2p-4o5bdbagLZ(fUzDoi`}U> zo_oF6-C}*gmO*n5vR14L^m^$H^1Q#?Td|GE_;= z^%7uA17KvmVFO`IeB0u&VSa)q6EV(e$zqve-QigtrfXn4m%W8`Ve%MzU$&nF{x*kN ciT`T+DgGsP{6b;z{}Q*ZmhTcFe@id?7yT65Bme*a