From 46fe2cb28f8d723e28657cd929344c32e5380f32 Mon Sep 17 00:00:00 2001 From: gho tik Date: Sat, 24 May 2014 12:39:16 -0400 Subject: [PATCH] v2_02_76_src Former-commit-id: e638d38fb9407ba82b1423e5596ccadd84aaecd3 --- Include/dxwnd.h | 1 + build/dxwnd.dll | 2 +- build/dxwnd.exe | 2 +- build/dxwnd.reg | 10 ++ .../Requiem Avenging Angel (software).dxw | 27 +++++ build/readme-relnotes.txt | 4 + dll/advapi.cpp | 98 ++++++++++++------ dll/ddraw.cpp | 2 +- dll/dxhook.cpp | 7 +- dll/dxwcore.cpp | 1 - dll/dxwcore.hpp | 2 +- dll/dxwnd.cpp | 7 +- dll/dxwnd.vs2008.suo | Bin 74656 -> 92672 bytes dll/dxwnd.vs2008.vcproj.User-PC.User.user | 65 ++++++++++++ dll/wndproc.cpp | 1 - host/Resource.h | 1 + host/TabCompat.cpp | 4 + host/TabDebug.cpp | 1 - host/TargetDlg.cpp | 1 + host/TargetDlg.h | 1 + host/dib.cpp | 2 +- host/dxwndhost.rc | 13 ++- host/dxwndhost.vs2008.suo | Bin 175104 -> 175104 bytes host/dxwndhostView.cpp | 2 + 24 files changed, 202 insertions(+), 52 deletions(-) create mode 100644 build/dxwnd.reg create mode 100644 build/exports/Requiem Avenging Angel (software).dxw create mode 100644 dll/dxwnd.vs2008.vcproj.User-PC.User.user diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 5b35bf2..32d12bf 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -143,6 +143,7 @@ #define ENABLEHOTKEYS 0x08000000 // Enables hot keys #define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call #define NOD3DRESET 0x20000000 // Disables D3D8/9 D3DDevice::Reset method +#define OVERRIDEREGISTRY 0x40000000 // same as EMULATEREGISTRY, but fake keys takeprecedence // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general diff --git a/build/dxwnd.dll b/build/dxwnd.dll index ef61201..33179d4 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0abd5d664eea54b2046da9cf7c3b556569a5bbd8c65eb87e1b088dff67641ef1 +oid sha256:cb95d0f4d937aa39bf29f2fdcc106f4999dff564dbb4b323be38fd9e106184fd size 483840 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index b44d478..259f680 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11f3d90b87b33ec400bd96219a0786300f2dbd21935e72a2b859317f887696e0 +oid sha256:14c815ffe23493c0f2ea72905d50b6972fcf35e78b827e243865b327d2ce7ac8 size 540160 diff --git a/build/dxwnd.reg b/build/dxwnd.reg new file mode 100644 index 0000000..71b12c0 --- /dev/null +++ b/build/dxwnd.reg @@ -0,0 +1,10 @@ +# Requiem Avenging Angel: DirectX version patch + +[HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\DirectX] +"Version"="4.07.00.0704" + +[HKEY_LOCAL_MACHINE\Software\Microsoft\DirectX] +"Version"="4.07.00.0704" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DirectX] +"Version"="4.07.00.0704" diff --git a/build/exports/Requiem Avenging Angel (software).dxw b/build/exports/Requiem Avenging Angel (software).dxw new file mode 100644 index 0000000..0b0b99a --- /dev/null +++ b/build/exports/Requiem Avenging Angel (software).dxw @@ -0,0 +1,27 @@ +[target] +title0=Requiem Avenging Angel (software) +path0=D:\Games\Requiem Avenging Angel\Software.exe +launchpath0= +module0= +opengllib0= +ver0=0 +coord0=0 +flag0=-1199570906 +flagg0=1207959552 +flagh0=20 +flagi0=1212153860 +tflag0=6914 +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 a107f21..e52629a 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -500,3 +500,7 @@ 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 \ No newline at end of file diff --git a/dll/advapi.cpp b/dll/advapi.cpp index 4937dec..66c7656 100644 --- a/dll/advapi.cpp +++ b/dll/advapi.cpp @@ -49,8 +49,56 @@ static char *hKey2String(HKEY hKey) return skey; } +static FILE *OpenFakeRegistry() +{ + DWORD dwAttrib; + char sSourcePath[MAX_PATH+1]; + char *p; + dwAttrib = GetFileAttributes("dxwnd.dll"); + if (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY)) return NULL; + GetModuleFileName(GetModuleHandle("dxwnd"), sSourcePath, MAX_PATH); + p=&sSourcePath[strlen(sSourcePath)-strlen("dxwnd.dll")]; + strcpy(p, "dxwnd.reg"); + return fopen(sSourcePath,"r"); +} + // --------------------------------------------------------------------------------- +static LONG myRegOpenKeyEx( + HKEY hKey, + LPCTSTR lpSubKey, + PHKEY phkResult) +{ + FILE *regf; + char sKey[MAX_PATH+1]; + char RegBuf[MAX_PATH+1]; + + sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey); + OutTraceDW("RegOpenKeyEx: searching for key=\"%s\"\n", sKey); + + regf=OpenFakeRegistry(); + if(regf!=NULL){ + if(phkResult) *phkResult=HKEY_FAKE; + fgets(RegBuf, 256, regf); + while (!feof(regf)){ + if(RegBuf[0]=='['){ + if((!strncmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){ + OutTrace("RegOpenKeyEx: found fake Key=\"%s\" hkResult=%x\n", sKey, phkResult ? *phkResult : 0); + fclose(regf); + return ERROR_SUCCESS; + } + else { + if(phkResult) (*phkResult)--; + } + } + fgets(RegBuf, 256, regf); + } + fclose(regf); + } + return ERROR_FILE_NOT_FOUND; +} + + LONG WINAPI extRegOpenKeyEx( HKEY hKey, LPCTSTR lpSubKey, @@ -59,36 +107,21 @@ LONG WINAPI extRegOpenKeyEx( PHKEY phkResult) { LONG res; - char RegBuf[256+1]; OutTraceR("RegOpenKeyEx: hKey=%x(%s) SubKey=\"%s\" Options=%x\n", hKey, hKey2String(hKey), lpSubKey, ulOptions); - res=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult); - OutTraceR("RegOpenKeyEx: res=%x\n", res); - if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY)) return res; - - if(phkResult) *phkResult=HKEY_FAKE; - FILE *regf; - char sKey[256+1]; - sprintf(sKey,"%s\\%s", hKey2String(hKey), lpSubKey); - OutTraceDW("RegOpenKeyEx: searching for key=\"%s\"\n", sKey); - regf=fopen("dxwnd.reg","r"); - if(regf==NULL) return ERROR_FILE_NOT_FOUND; - fgets(RegBuf, 256, regf); - while (!feof(regf)){ - if(RegBuf[0]=='['){ - if((!strncmp(&RegBuf[1],sKey,strlen(sKey))) && (RegBuf[strlen(sKey)+1]==']')){ - OutTrace("RegOpenKeyEx: found fake Key=\"%s\" hkResult=%x\n", sKey, *phkResult); - fclose(regf); - return ERROR_SUCCESS; - } - else (*phkResult)--; - } - fgets(RegBuf, 256, regf); + if(dxw.dwFlags4 & OVERRIDEREGISTRY){ + res = myRegOpenKeyEx(hKey, lpSubKey, phkResult); + if(res == ERROR_SUCCESS) return res; } - fclose(regf); - return ERROR_FILE_NOT_FOUND; + + res=(*pRegOpenKeyEx)(hKey, lpSubKey, ulOptions, samDesired, phkResult); + OutTraceR("RegOpenKeyEx: res=%x phkResult=%x\n", res, phkResult ? *phkResult : 0); + + if((res==ERROR_SUCCESS) || !(dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwFlags4 & OVERRIDEREGISTRY)) return res; + + return myRegOpenKeyEx(hKey, lpSubKey, phkResult); } LONG WINAPI extRegQueryValueEx( @@ -132,14 +165,12 @@ LONG WINAPI extRegQueryValueEx( return res; } - //if(!(dxw.dwFlags3 & EMULATEREGISTRY)) return res; - // try emulated registry FILE *regf; - char RegBuf[256+1]; + char RegBuf[MAX_PATH+1]; char *pData; HKEY hCurKey=HKEY_FAKE+1; - regf=fopen("dxwnd.reg","r"); + regf=OpenFakeRegistry(); if(regf==NULL) return ERROR_FILE_NOT_FOUND; if(!lpValueName)lpValueName=""; fgets(RegBuf, 256, regf); @@ -159,17 +190,16 @@ LONG WINAPI extRegQueryValueEx( res=ERROR_FILE_NOT_FOUND; pData=&RegBuf[strlen(lpValueName)+3]; if(*pData=='"'){ // string value - //strcpy((char *)lpData, &RegBuf[strlen(lpValueName)+4]); - //lpData[strlen((char *)lpData)-2]=0; // eliminates " and \n - //if(lpType) *lpType=REG_SZ; - //*lpcbData=strlen((char *)lpData)+1; + LPBYTE lpb; + lpb = lpData; *lpcbData=0; pData++; while(*pData && (*pData != '"')){ if(*pData=='\\') pData++; - *lpData++=*pData++; + *lpb++=*pData++; *lpcbData++; } + *lpb = 0; // string terminator if(lpType) *lpType=REG_SZ; // OutTraceDW("RegQueryValueEx: Data=\"%s\" type=REG_SZ\n", lpData); diff --git a/dll/ddraw.cpp b/dll/ddraw.cpp index 1f3e0f9..1c2adc5 100644 --- a/dll/ddraw.cpp +++ b/dll/ddraw.cpp @@ -3565,7 +3565,7 @@ HRESULT WINAPI extSetPalette(LPDIRECTDRAWSURFACE lpdds, LPDIRECTDRAWPALETTE lpdd lpentries = (LPPALETTEENTRY)PaletteEntries; res2=lpddp->GetEntries(0, 0, 256, lpentries); if(res2) OutTraceE("SetPalette: GetEntries ERROR res=%x(%s)\n", res2, ExplainDDError(res2)); - //mySetPalette(0, 256, lpentries); + mySetPalette(0, 256, lpentries); // v2.02.76: necessary for "Requiem Avenging Angel" in SURFACEEMULATION mode } // Apply palette to backbuffer surface. This is necessary on some games: "Duckman private dick", "Total Soccer 2000", ... if (lpDDSBack) { diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 0528e20..4e24f68 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -87,7 +87,7 @@ static char *Flag4Names[32]={ "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", "RELEASEMOUSE", "FRAMECOMPENSATION", "HOTPATCH", "ENABLEHOTKEYS", - "HOTPATCHALWAYS", "", "", "", + "HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "", }; static char *TFlagNames[32]={ @@ -1222,7 +1222,9 @@ void HookModule(HMODULE base, int dxversion) HookDirect3D7(base, dxversion); if(dxw.dwFlags2 & HOOKOPENGL) HookOpenGLLibs(base, dxw.CustomOpenGLLib); if(dxw.dwFlags4 & HOOKGLIDE) HookGlideLibs(base); - if((dxw.dwFlags3 & EMULATEREGISTRY) || (dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base); + if( (dxw.dwFlags3 & EMULATEREGISTRY) || + (dxw.dwFlags4 & OVERRIDEREGISTRY) || + (dxw.dwTFlags & OUTREGISTRY)) HookAdvApi32(base); HookMSV4WLibs(base); // -- used by Aliens & Amazons demo: what for? } @@ -1428,6 +1430,7 @@ void HookInit(TARGETMAP *target, HWND hwnd) dxw.hChildWnd=hwnd; // v2.02.31: set main win either this one or the parent! dxw.SethWnd((dxw.dwFlags1 & FIXPARENTWIN) ? GetParent(hwnd) : hwnd); + if(dxw.dwFlags4 & ENABLEHOTKEYS) dxw.MapKeysInit(); } if(IsTraceDW){ diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index c7b7d6c..0797684 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -102,7 +102,6 @@ void dxwCore::InitTarget(TARGETMAP *target) pTimeShifter = TimeShifterCoarse; pTimeShifter64 = TimeShifter64Coarse; } - if(dwFlags4 & ENABLEHOTKEYS) MapKeysInit(); } void dxwCore::SetScreenSize(void) diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 48b4dd7..3656f2c 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -117,6 +117,7 @@ public: // methods BOOL CheckScreenResolution(unsigned int, unsigned int); LARGE_INTEGER StretchLargeCounter(LARGE_INTEGER); UINT MapKeysConfig(UINT, LPARAM, WPARAM); + void MapKeysInit(); public: // simple data variables BOOL Windowize; @@ -170,7 +171,6 @@ private: void ShowFPS(HDC); void ShowTimeStretching(HDC); TimerEvent_Type TimerEvent; - void MapKeysInit(); }; extern dxwCore dxw; diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 580a036..af8a9e2 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.75" +#define VERSION "2.02.76" #define DDTHREADLOCK 1 @@ -224,8 +224,9 @@ void InjectHook() for(i = 0; pMapping[i].path[0]; i ++){ if(!strncmp(name, pMapping[i].path, strlen(name))){ if (pMapping[i].flags2 & STARTDEBUG){ - OutTrace("InjectHook: task[%d]=\"%s\" hooked\n", i, pMapping[i].path); - HookInit(&pMapping[i],NULL); + HookInit(&pMapping[i],NULL); + // beware: logging is possible only AFTER HookInit execution + OutTrace("InjectHook: task[%d]=\"%s\" hooked\n", i, pMapping[i].path); } break; } diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index 0518d098e3029ccf92ac8c35f8c03237924f8029..06f1b8b0b7d49cf2d29558d5af6f96d2d3fdfcc9 100644 GIT binary patch delta 15416 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 N2L5o6jQ5st{|2_MfI0vG delta 1675 zcma)+du-EH6vxl~^|7{;y{MyturbP9#5m)tzl5nEY#9QYpr8a26A30H#>A+9pfQV~es9+yk3aO+e17-z zoO{px{l33*?tyE%@I~!tk-SaS!PkRa?<^mBKXg;%EtpVNE@k|c2FO+ zQW?f>YKOgvYmcnt=E0nVLChE+ccjQI*saTBfAJQ*up(6&U(K_d{jheL<}!1#t3hs8 zN^{%k$v{F7y=@?R7buu^`MrYF-|qezmHzjWh$3L^L;gbi_mFzlwN;2OImNw5c|mZN zJ6~MkdiQDT1%xkxOP~sAzQPz&#Zl@I+tm8f%L?A!%3-gKeHF{aGCo+*#D@Zzc%S85 zLjM6 z@!!5=HoCU*x$%Y2%o_Bzb8p#Fb*iyQ!{7RH__)`^ja3G2Xl-P_FB5Alq2?Ts#=i_? z1p^iy8L$R#dbnmF3$K+p|4iy^>(@rHSbiGy&aO5w+ya5#1ofZ;YzHp_FK7f!pc#w- zA7}+_pdAE(6t)xN4$uX5f^M)2>;`*457-NOK_55?_5rNr8+%g5+N|Tx3%#oEnKdch z-|_25JJ@lgJSJAyYrtFTr4mM>$LK)9XBrdVimb52YY5WbyZ%qf<_%|tn(ac*CysbR z?_`M-S&&_iCNqfvDyDptd?~G?0^FVSG`VOUp8J6!J)J;w6)b(o|Gkdr50LYqpMUVB z&W`wMEu|8g~7Ikf?a#6fF9cs;$h$eD9MXT&M32&ex8 DET`Kb diff --git a/dll/dxwnd.vs2008.vcproj.User-PC.User.user b/dll/dxwnd.vs2008.vcproj.User-PC.User.user new file mode 100644 index 0000000..facf31e --- /dev/null +++ b/dll/dxwnd.vs2008.vcproj.User-PC.User.user @@ -0,0 +1,65 @@ + + + + + + + + + + + diff --git a/dll/wndproc.cpp b/dll/wndproc.cpp index 98a1a86..1da6c7d 100644 --- a/dll/wndproc.cpp +++ b/dll/wndproc.cpp @@ -36,7 +36,6 @@ void WhndStackPush(HWND hwnd, WNDPROC wndproc) if(WhndTOS == WhndSize){ WhndSize += MAXWNDHSTACK; WhndStack = (wndstack_entry *)realloc(WhndStack, WhndSize * sizeof(wndstack_entry)); - //OutTraceDW("DEBUG: WNDPROC STACK new size=%d\n", WhndSize); } // wndproc values of 0xFFFFxxxx type seems to be error codes rather than valid callback addresses .... // v2.02.36 using CallWindowProc you can pass WinProc handles, so you don't need to eliminate them! diff --git a/host/Resource.h b/host/Resource.h index 3febda2..27d4268 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -152,6 +152,7 @@ #define IDC_HOOKDI 1112 #define IDC_EMULATEREGISTRY 1113 #define IDC_CDROMDRIVETYPE 1114 +#define IDC_OVERRIDEREGISTRY 1115 #define IDC_NOWINDOWMOVE 1116 #define IDC_DISABLEHAL 1117 #define IDC_LOCKSYSCOLORS 1118 diff --git a/host/TabCompat.cpp b/host/TabCompat.cpp index 7515921..759ce05 100644 --- a/host/TabCompat.cpp +++ b/host/TabCompat.cpp @@ -46,6 +46,10 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NOTEXTURES, cTarget->m_NoTextures); DDX_Check(pDX, IDC_WIREFRAME, cTarget->m_WireFrame); DDX_Check(pDX, IDC_DISABLEFOGGING, cTarget->m_DisableFogging); + + // Registry management + DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); + DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry); } BEGIN_MESSAGE_MAP(CTabCompat, CDialog) diff --git a/host/TabDebug.cpp b/host/TabDebug.cpp index 4c6ece2..00036bd 100644 --- a/host/TabDebug.cpp +++ b/host/TabDebug.cpp @@ -40,7 +40,6 @@ void CTabDebug::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_NODDRAWFLIP, cTarget->m_NoDDRAWFlip); DDX_Check(pDX, IDC_NOGDIBLT, cTarget->m_NoGDIBlt); DDX_Check(pDX, IDC_NOFILLRECT, cTarget->m_NoFillRect); - DDX_Check(pDX, IDC_EMULATEREGISTRY, cTarget->m_EmulateRegistry); DDX_Check(pDX, IDC_ZBUFFERALWAYS, cTarget->m_ZBufferAlways); DDX_Check(pDX, IDC_HOTPATCHALWAYS, cTarget->m_HotPatchAlways); } diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index 7a08af9..4595f1f 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -72,6 +72,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_HookDLLs = TRUE; // default true !! m_HookEnabled = TRUE; // default true !! m_EmulateRegistry = FALSE; + m_OverrideRegistry = FALSE; m_FullScreenOnly = FALSE; m_FilterMessages = FALSE; m_PeekAllMessages = FALSE; diff --git a/host/TargetDlg.h b/host/TargetDlg.h index 6c3078b..f0e2818 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -49,6 +49,7 @@ public: BOOL m_HotPatch; BOOL m_HookDLLs; BOOL m_EmulateRegistry; + BOOL m_OverrideRegistry; BOOL m_FullScreenOnly; BOOL m_FilterMessages; BOOL m_PeekAllMessages; diff --git a/host/dib.cpp b/host/dib.cpp index 5b4a13c..a7a9134 100644 --- a/host/dib.cpp +++ b/host/dib.cpp @@ -319,7 +319,7 @@ DWORD CDib::Save(CFile& file) const DWORD CDib::Read(CFile& file, BOOL bFromResource) { DWORD dwReadBytes = 0; - DWORD dwLength = file.GetLength(); + DWORD dwLength = (DWORD)file.GetLength(); // Ensures no memory leaks will occur Free(); diff --git a/host/dxwndhost.rc b/host/dxwndhost.rc index 24a16db..a3d43d1 100644 --- a/host/dxwndhost.rc +++ b/host/dxwndhost.rc @@ -466,7 +466,10 @@ IDD_TAB_COMPAT DIALOGEX 0, 0, 300, 240 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - GROUPBOX "Fake Version",IDC_STATIC,7,3,139,64 + GROUPBOX "Fake Version",IDC_STATIC,6,3,140,64 + GROUPBOX "3D effects",IDC_STATIC,149,3,144,64 + GROUPBOX "Registry",IDC_STATIC,149,69,144,64 + GROUPBOX "Tweaks",IDC_STATIC,6,69,140,164 CONTROL "",IDC_FAKEVERSION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,26,12,10 LISTBOX IDC_LISTFAKE,39,15,98,43,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP CONTROL "Handle Exceptions",IDC_HANDLEEXCEPTIONS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,200,109,12 @@ -482,10 +485,11 @@ BEGIN CONTROL "Clean ZBUFFER @0.0 fix",IDC_ZBUFFER0CLEAN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,104,109,12 CONTROL "Textures not power of 2 fix",IDC_NOPOWER2FIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,92,109,12 CONTROL "Disable performance counter",IDC_NOPERFCOUNTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,80,109,12 - CONTROL "3D Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,34,96,10 - GROUPBOX "3D effects",IDC_STATIC,149,3,144,64 - CONTROL "Disable Fogging",IDC_DISABLEFOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,46,96,10 + CONTROL "3D Wireframe",IDC_WIREFRAME,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,34,96,10 + CONTROL "Disable Fogging",IDC_DISABLEFOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,46,96,10 CONTROL "Disable Textures",IDC_NOTEXTURES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,22,96,10 + CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,84,110,10 + CONTROL "Override Registry",IDC_OVERRIDEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,96,110,10 END IDD_TAB_SYSLIBS DIALOGEX 0, 0, 300, 240 @@ -526,7 +530,6 @@ BEGIN CONTROL "Suppress ddraw Flip",IDC_NODDRAWFLIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,36,127,10 CONTROL "Suppress GDI Blt",IDC_NOGDIBLT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,48,127,10 GROUPBOX "Visual flags",IDC_STATIC,153,7,140,139 - CONTROL "Emulate Registry",IDC_EMULATEREGISTRY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,84,124,10 CONTROL "Force D3DCMP_ALWAYS setting ",IDC_ZBUFFERALWAYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,164,127,10 CONTROL "Suppress FillRect",IDC_NOFILLRECT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,60,127,10 CONTROL "Force hot patching",IDC_HOTPATCHALWAYS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,159,176,127,10 diff --git a/host/dxwndhost.vs2008.suo b/host/dxwndhost.vs2008.suo index 20709080bb7dd7447f7256a793596ac97caaac9a..b966f863435d63e3cc4f8a04205d4cd8ee55dead 100644 GIT binary patch delta 10679 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 TrE1)U8BehHb^DoZ=nDNe6tM;= delta 10744 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 EH|A{YO8@`> diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index 86fe6f7..39bba94 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -116,6 +116,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg) if(dlg->m_Windowize) t->flags2 |= WINDOWIZE; if(dlg->m_HookDLLs) t->flags3 |= HOOKDLLS; if(dlg->m_EmulateRegistry) t->flags3 |= EMULATEREGISTRY; + if(dlg->m_OverrideRegistry) t->flags4 |= OVERRIDEREGISTRY; if(dlg->m_HookEnabled) t->flags3 |= HOOKENABLED; if(dlg->m_NoBanner) t->flags2 |= NOBANNER; if(dlg->m_StartDebug) t->flags2 |= STARTDEBUG; @@ -293,6 +294,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg) dlg->m_HotPatch = t->flags4 & HOTPATCH ? 1 : 0; dlg->m_HookDLLs = t->flags3 & HOOKDLLS ? 1 : 0; dlg->m_EmulateRegistry = t->flags3 & EMULATEREGISTRY ? 1 : 0; + dlg->m_OverrideRegistry = t->flags4 & OVERRIDEREGISTRY ? 1 : 0; dlg->m_HookEnabled = t->flags3 & HOOKENABLED ? 1 : 0; dlg->m_NoBanner = t->flags2 & NOBANNER ? 1 : 0; dlg->m_StartDebug = t->flags2 & STARTDEBUG ? 1 : 0;