From 6c0296c0e41f4da4f78fcfa2c20395d42598f57b Mon Sep 17 00:00:00 2001 From: gho tik Date: Sun, 27 Jan 2013 11:17:04 -0500 Subject: [PATCH] v2_02_08_src Former-commit-id: ef29e4900bd82c0b51234bf0f5d138c6a932c270 --- Include/dxwnd.h | 2 + build/dxwnd.dll | 4 +- build/dxwnd.exe | 2 +- build/readme-relnotes.txt | 6 ++- debug/dxwnd.ini | 36 ++++++++++++---- dll/dxhook.cpp | 10 ++++- dll/dxwcore.cpp | 1 + dll/dxwcore.hpp | 1 + dll/dxwnd.cpp | 2 +- dll/dxwnd.vs2008.suo | Bin 34304 -> 37376 bytes dll/hddraw.cpp | 25 ++++++----- dll/syslibs.cpp | 85 ++++++++++++++++++++++++++++++++++++++ dll/syslibs.h | 6 +++ host/Resource.h | 2 + host/TargetDlg.cpp | 28 ++++++++++--- host/TargetDlg.h | 2 + host/dxwndhost.aps | Bin 141880 -> 142180 bytes host/dxwndhost.rc | 23 ++++++----- host/dxwndhost.vs2008.suo | Bin 73728 -> 73728 bytes host/dxwndhostView.cpp | 6 +++ 20 files changed, 198 insertions(+), 43 deletions(-) diff --git a/Include/dxwnd.h b/Include/dxwnd.h index 6885161..4314890 100644 --- a/Include/dxwnd.h +++ b/Include/dxwnd.h @@ -66,6 +66,7 @@ #define SHOWHWCURSOR 0x00080000 // mouse events are discarded (good for screensaver-like) #define HOOKGDI 0x00100000 // Hook GDI functions #define SHOWFPSOVERLAY 0x00200000 // shows FPS value to status win / log / screen overlay +#define FAKEVERSION 0x00400000 // pretends the platvorm is a given window version / subversion // logging Tflags DWORD: #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general @@ -103,6 +104,7 @@ typedef struct TARGETMAP short sizy; short MaxFPS; short InitTS; + short FakeVersionId; }TARGETMAP; typedef struct diff --git a/build/dxwnd.dll b/build/dxwnd.dll index 9c149ac..715d1f8 100644 --- a/build/dxwnd.dll +++ b/build/dxwnd.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b0ffe0f3143b439d28c1b4d7f195991b383f36ed919ba89aab0abf2de7c9481e -size 271360 +oid sha256:42bf1dd1c3802f28d8bf51d0612a2a5df8e070e0218e2c15912e038ece52c5aa +size 272384 diff --git a/build/dxwnd.exe b/build/dxwnd.exe index 537cac2..68baad2 100644 --- a/build/dxwnd.exe +++ b/build/dxwnd.exe @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d43f746689ac5abcadcfbbb0dbd302cc3d4186ce2df7aa8bd9c24eb1b8694d4 +oid sha256:cb6552a857a81cef451a0851137395257ef958b967bc307ded9978abeb09b517 size 488960 diff --git a/build/readme-relnotes.txt b/build/readme-relnotes.txt index 4a6d2b2..4e43665 100644 --- a/build/readme-relnotes.txt +++ b/build/readme-relnotes.txt @@ -25,4 +25,8 @@ fixed buf on time stretch logging (and possible game crash). revised GetDC handling with 8BPP paletized surfaces: avoided need to emulate reverse-blitting and got an impressive speed improvement for games such as Age of Empires I & II and Hyperblade. v2.02.07: -many fixes on the FPS and time control features. \ No newline at end of file +many fixes on the FPS and time control features. + +v2.02.08: +fixed some errors in the main directdraw palette descriptor. That gives better compatibility and less complicated source code. +added Fake Version feature: now Dungeon Keeper II (original version, not GOG hack) can detect a fake Win2000 / WinXP environment on Win7 and newer. Tested and working on Win7. Many thanks to Maxim for pushing me hard to win my lazyness and implement this new feature. diff --git a/debug/dxwnd.ini b/debug/dxwnd.ini index abdbcd2..744202e 100644 --- a/debug/dxwnd.ini +++ b/debug/dxwnd.ini @@ -277,7 +277,7 @@ module16= ver16=0 flag16=142606370 flagg16=1048576 -tflag16=3 +tflag16=259 initx16=0 inity16=0 minx16=0 @@ -1007,7 +1007,7 @@ path59=D:\Games\Dungeon Keeper 2 GOG release\DKII.EXE module59= ver59=0 flag59=134217762 -flagg59=81920 +flagg59=4276224 tflag59=0 initx59=0 inity59=0 @@ -2945,8 +2945,8 @@ path173=D:\Games\TR2 Golden Mask\T2GOLD.EXE module173= ver173=0 flag173=570688034 -flagg173=0 -tflag173=258 +flagg173=2179072 +tflag173=387 initx173=0 inity173=0 minx173=0 @@ -3063,9 +3063,9 @@ title180=Urban Assault path180=D:\Games\Urban Assault\UA.EXE module180= ver180=0 -flag180=-1610465246 +flag180=671236130 flagg180=256 -tflag180=3 +tflag180=259 initx180=0 inity180=0 minx180=0 @@ -3745,9 +3745,9 @@ initts170=0 opengllib171= initts171=0 opengllib172= -initts172=0 +initts172=8 opengllib173= -initts173=0 +initts173=8 opengllib174= initts174=0 opengllib175= @@ -3960,3 +3960,23 @@ sizx197=800 sizy197=600 maxfps197=0 initts197=0 +title198=Doom 95 +path198=D:\Games\Doom95\DOOM95.EXE +module198= +opengllib198= +ver198=0 +flag198=134217762 +flagg198=65536 +tflag198=3 +initx198=0 +inity198=0 +minx198=0 +miny198=0 +maxx198=0 +maxy198=0 +posx198=50 +posy198=50 +sizx198=800 +sizy198=600 +maxfps198=0 +initts198=-9 diff --git a/dll/dxhook.cpp b/dll/dxhook.cpp index 2b96283..aeb2a7b 100644 --- a/dll/dxhook.cpp +++ b/dll/dxhook.cpp @@ -39,7 +39,7 @@ static char *Flag2Names[32]={ "KEEPCURSORFIXED", "DISABLEGAMMARAMP", "DIFFERENTIALMOUSE", "FIXNCHITTEST", "LIMITFPS", "SKIPFPS", "SHOWFPS", "HIDEMULTIMONITOR", "TIMESTRETCH", "HOOKOPENGL", "WALLPAPERMODE", "SHOWHWCURSOR", - "HOOKGDI", "", "", "", + "HOOKGDI", "SHOWFPSOVERLAY", "FAKEVERSION", "", "", "", "", "", "", "", "", "", }; @@ -1035,6 +1035,14 @@ void HookSysLibs(char *module) tmp = HookAPI(module, "winmm.dll", NULL, "timeGetTime", exttimeGetTime); if(tmp) ptimeGetTime = (timeGetTime_Type)tmp; } + + if(dxw.dwFlags2 & FAKEVERSION){ + tmp = HookAPI(module, "kernel32.dll", GetVersion, "GetVersion", extGetVersion); + if(tmp) pGetVersion = (GetVersion_Type)tmp; + tmp = HookAPI(module, "kernel32.dll", GetVersionEx, "GetVersionEx", extGetVersionEx); + if(tmp) pGetVersionEx = (GetVersionEx_Type)tmp; + } + return; } diff --git a/dll/dxwcore.cpp b/dll/dxwcore.cpp index 2cda394..1847209 100644 --- a/dll/dxwcore.cpp +++ b/dll/dxwcore.cpp @@ -54,6 +54,7 @@ void dxwCore::InitTarget(TARGETMAP *target) TimeShift = target->InitTS; if(TimeShift < -8) TimeShift = -8; if(TimeShift > 8) TimeShift = 8; + FakeVersionId = target->FakeVersionId; } /* ------------------------------------------------------------------ */ diff --git a/dll/dxwcore.hpp b/dll/dxwcore.hpp index 1e31358..b53882f 100644 --- a/dll/dxwcore.hpp +++ b/dll/dxwcore.hpp @@ -77,6 +77,7 @@ public: // simple data variables WORD palVersion; WORD palNumEntries; PALETTEENTRY palPalEntry[256]; + short FakeVersionId; // Implementation protected: diff --git a/dll/dxwnd.cpp b/dll/dxwnd.cpp index 13d227a..1028aa2 100644 --- a/dll/dxwnd.cpp +++ b/dll/dxwnd.cpp @@ -23,7 +23,7 @@ along with this program. If not, see . #include #include "dxwnd.h" -#define VERSION "2.02.06" +#define VERSION "2.02.08" LRESULT CALLBACK HookProc(int ncode, WPARAM wparam, LPARAM lparam); diff --git a/dll/dxwnd.vs2008.suo b/dll/dxwnd.vs2008.suo index d0414af9a258b7958ca01499e2dce21d8be2a2cb..a03763a8d1cc372db11bea696f09c3a026555614 100644 GIT binary patch literal 37376 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 zQI?Y;)-jBJD;Release()); lpDDSEmu_Back=NULL; } - //if (lpDDSHDC) { - // OutTraceD("Release(D): released lpDDSHDC=%x\n", lpDDSHDC); - // while(lpDDSHDC->Release()); - // lpDDSHDC=NULL; - //} + if (lpDDP) { + OutTraceD("Release(D): released lpDDP=%x\n", lpDDP); + while(lpDDP->Release()); + lpDDP=NULL; + } lpServiceDD = NULL; // v2.1.87 ref=0; // it should be .... } @@ -3613,9 +3613,9 @@ ULONG WINAPI extReleaseD(LPDIRECTDRAW lpdd) OutTraceD("Release(D): RefCount=0 - service object RESET condition\n"); lpDDSEmu_Prim=NULL; lpDDSEmu_Back=NULL; - //lpDDSHDC=NULL; lpDDC=NULL; lpDDSBack=NULL; + lpDDP=NULL; } } } @@ -3756,15 +3756,14 @@ HRESULT WINAPI extReleaseP(LPDIRECTDRAWPALETTE lpddPalette) // current palette (ref=0!) causing a game crash. The fix pretends that the palette // was released when attempting the operation to the last object reference (LastRefCount==1) // returning a ref 0 without actually releasing the object. + //v2.02.08: Better fix: to avoid the problem, just remember to NULL-ify the global main + // palette pointer lpDDP ULONG ref; - static int LastRefCount=-1; - OutTraceD("Release(P): lpddPalette=%x\n", lpddPalette); - if(LastRefCount==1) { - OutTraceD("Release(P): ASSERT lpddPalette=%x Release FIX returning 0\n", lpddPalette); - return 0; - } ref=(*pReleaseP)(lpddPalette); - LastRefCount=ref; OutTraceD("Release(P): lpddPalette=%x ref=%x\n", lpddPalette, ref); + if(lpddPalette==lpDDP && ref==0){ + OutTraceD("Release(P): clearing lpDDP=%x->NULL\n", lpDDP); + lpDDP=NULL; + } return ref; } diff --git a/dll/syslibs.cpp b/dll/syslibs.cpp index e3f130c..e1001d6 100644 --- a/dll/syslibs.cpp +++ b/dll/syslibs.cpp @@ -2594,4 +2594,89 @@ int WINAPI extShowCursor(BOOL bShow) ret=(*pShowCursor)(bShow); OutTraceD("ShowCursor: ret=%x\n", ret); return ret; +} + +/* +From MSDN: +Operating system Version number dwMajorVersion dwMinorVersion Other +Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION +Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION +Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION +Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION +Windows Server 2008 6.0 6 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION +Windows Vista 6.0 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION +Windows Server 2003 R2 5.2 5 2 GetSystemMetrics(SM_SERVERR2) != 0 +Windows Home Server 5.2 5 2 OSVERSIONINFOEX.wSuiteMask & VER_SUITE_WH_SERVER +Windows Server 2003 5.2 5 2 GetSystemMetrics(SM_SERVERR2) == 0 +Windows XP Pro x64 Ed. 5.2 5 2 (OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION) && (SYSTEM_INFO.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64) +Windows XP 5.1 5 1 Not applicable +Windows 2000 5.0 5 0 Not applicable +*/ + +static struct {char bMajor; char bMinor; char *sName;} WinVersions[6]= +{ + {5, 0, "Windows 2000"}, + {5, 1, "Windows XP"}, + {5, 2, "Windows Server 2003"}, + {6, 0, "Windows Vista"}, + {6, 1, "Windows 7"}, + {6, 2, "Windows 8"} +}; + +BOOL WINAPI extGetVersionEx(LPOSVERSIONINFO lpVersionInfo) +{ + BOOL ret; + + ret=(*pGetVersionEx)(lpVersionInfo); + if(!ret) { + OutTraceE("GetVersionEx: ERROR err=%d\n", GetLastError()); + return ret; + } + + OutTraceD("GetVersionEx: version=%d.%d build=(%d)\n", + lpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwBuildNumber); + + if(dxw.dwFlags2 & FAKEVERSION) { + // fake Win XP build 0 + lpVersionInfo->dwMajorVersion = WinVersions[dxw.FakeVersionId].bMajor; + lpVersionInfo->dwMinorVersion = WinVersions[dxw.FakeVersionId].bMinor; + lpVersionInfo->dwBuildNumber = 0; + OutTraceD("GetVersionEx: FIXED version=%d.%d build=(%d) os=\"%s\"\n", + lpVersionInfo->dwMajorVersion, lpVersionInfo->dwMinorVersion, lpVersionInfo->dwBuildNumber, + WinVersions[dxw.FakeVersionId].sName); + } + return TRUE; +} + +DWORD WINAPI extGetVersion(void) +{ + DWORD dwVersion; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuild = 0; + + dwVersion = (*pGetVersion)(); + + // Get the Windows version. + + dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); + + // Get the build number. + + if (dwVersion < 0x80000000) + dwBuild = (DWORD)(HIWORD(dwVersion)); + + OutTraceD("GetVersion: version=%d.%d build=(%d)\n", dwMajorVersion, dwMinorVersion, dwBuild); + + if(dxw.dwFlags2 & FAKEVERSION) { + dwVersion = WinVersions[dxw.FakeVersionId].bMajor | (WinVersions[dxw.FakeVersionId].bMinor << 8); + dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion))); + dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion))); + dwBuild = (DWORD)(HIWORD(dwVersion)); + OutTraceD("GetVersion: FIXED version=%d.%d build=(%d) os=\"%s\"\n", + dwMajorVersion, dwMinorVersion, dwBuild, WinVersions[dxw.FakeVersionId].sName); + } + + return dwVersion; } \ No newline at end of file diff --git a/dll/syslibs.h b/dll/syslibs.h index 64efc04..c81dd3a 100644 --- a/dll/syslibs.h +++ b/dll/syslibs.h @@ -45,6 +45,8 @@ typedef FARPROC (WINAPI *GetProcAddress_Type)(HMODULE, LPCSTR); typedef void (WINAPI *GetSystemTime_Type)(LPSYSTEMTIME); typedef void (WINAPI *GetSystemTimeAsFileTime_Type)(LPFILETIME); typedef DWORD (WINAPI *GetTickCount_Type)(void); +typedef DWORD (WINAPI *GetVersion_Type)(void); +typedef BOOL (WINAPI *GetVersionEx_Type)(LPOSVERSIONINFO); typedef HMODULE (WINAPI *LoadLibraryA_Type)(LPCTSTR); typedef HMODULE (WINAPI *LoadLibraryExA_Type)(LPCTSTR, HANDLE, DWORD); typedef LPTOP_LEVEL_EXCEPTION_FILTER @@ -145,6 +147,8 @@ DXWEXTERN GetProcAddress_Type pGetProcAddress DXWINITIALIZED; DXWEXTERN GetSystemTime_Type pGetSystemTime DXWINITIALIZED; DXWEXTERN GetSystemTimeAsFileTime_Type pGetSystemTimeAsFileTime DXWINITIALIZED; DXWEXTERN GetTickCount_Type pGetTickCount DXWINITIALIZED; +DXWEXTERN GetVersion_Type pGetVersion DXWINITIALIZED; +DXWEXTERN GetVersionEx_Type pGetVersionEx DXWINITIALIZED; DXWEXTERN LoadLibraryA_Type pLoadLibraryA DXWINITIALIZED; DXWEXTERN LoadLibraryExA_Type pLoadLibraryExA DXWINITIALIZED; DXWEXTERN SetUnhandledExceptionFilter_Type pSetUnhandledExceptionFilter DXWINITIALIZED; @@ -238,6 +242,8 @@ extern FARPROC WINAPI extGetProcAddress(HMODULE, LPCSTR); extern void WINAPI extGetSystemTime(LPSYSTEMTIME); extern void WINAPI extGetSystemTimeAsFileTime(LPFILETIME); extern DWORD WINAPI extGetTickCount(void); +extern DWORD WINAPI extGetVersion(void); +extern BOOL WINAPI extGetVersionEx(LPOSVERSIONINFO); extern HMODULE WINAPI extLoadLibraryA(LPCTSTR); extern HMODULE WINAPI extLoadLibraryExA(LPCTSTR, HANDLE, DWORD); extern LPTOP_LEVEL_EXCEPTION_FILTER WINAPI extSetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER); diff --git a/host/Resource.h b/host/Resource.h index 4199552..039bc38 100644 --- a/host/Resource.h +++ b/host/Resource.h @@ -120,9 +120,11 @@ #define IDC_WALLPAPERMODE 1081 #define IDC_HOOKGDI 1082 #define IDC_SHOWFPSOVERLAY 1083 +#define IDC_FAKEVERSION 1084 #define IDC_COMBOTS 1085 #define IDC_LIST2 1088 #define IDC_LISTTS 1088 +#define IDC_LISTFAKE 1089 #define ID_MODIFY 32771 #define ID_DELETE 32772 #define ID_ADD 32773 diff --git a/host/TargetDlg.cpp b/host/TargetDlg.cpp index d0e25d7..50133be 100644 --- a/host/TargetDlg.cpp +++ b/host/TargetDlg.cpp @@ -82,6 +82,7 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) m_ShowFPSOverlay = FALSE; m_TimeStretch = FALSE; m_HookOpenGL = FALSE; + m_FakeVersion = FALSE; m_InitX = 0; m_InitY = 0; m_MaxX = 0; @@ -114,18 +115,31 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/) // pEdit->SetReadOnly(!bEnable); //} +static struct {char bMajor; char bMinor; char *sName;} WinVersions[6]= +{ + {5, 0, "Windows 2000"}, + {5, 1, "Windows XP"}, + {5, 2, "Windows Server 2003"}, + {6, 0, "Windows Vista"}, + {6, 1, "Windows 7"}, + {6, 2, "Windows 8"} +}; + BOOL CTargetDlg::OnInitDialog() { - CListBox *TSList; + CListBox *List; CDialog::OnInitDialog(); int i; extern char *GetTSCaption(int); - //MessageBoxEx(0, "Init Dialog", "Warning", MB_OK | MB_ICONEXCLAMATION, NULL); - TSList=(CListBox *)this->GetDlgItem(IDC_LISTTS); - TSList->ResetContent(); - for(i=-8; i<=8; i++) TSList->AddString(GetTSCaption(i)); - TSList->SetCurSel(m_InitTS); + List=(CListBox *)this->GetDlgItem(IDC_LISTTS); + List->ResetContent(); + for(i=-8; i<=8; i++) List->AddString(GetTSCaption(i)); + List->SetCurSel(m_InitTS); + List=(CListBox *)this->GetDlgItem(IDC_LISTFAKE); + List->ResetContent(); + for(i=0; i<6; i++) List->AddString(WinVersions[i].sName); + List->SetCurSel(m_FakeVersion); return TRUE; } @@ -199,6 +213,7 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX, IDC_SHOWFPSOVERLAY, m_ShowFPSOverlay); DDX_Check(pDX, IDC_TIMESTRETCH, m_TimeStretch); DDX_Check(pDX, IDC_HOOKOPENGL, m_HookOpenGL); + DDX_Check(pDX, IDC_FAKEVERSION, m_FakeVersion); DDX_Text(pDX, IDC_INITX, m_InitX); DDX_Text(pDX, IDC_INITY, m_InitY); DDX_Text(pDX, IDC_MAXX, m_MaxX); @@ -212,6 +227,7 @@ void CTargetDlg::DoDataExchange(CDataExchange* pDX) DDX_Text(pDX, IDC_MAXFPS, m_MaxFPS); //DDX_Text(pDX, IDC_INITTS, m_InitTS); DDX_LBIndex(pDX, IDC_LISTTS, m_InitTS); + DDX_LBIndex(pDX, IDC_LISTFAKE, m_FakeVersionId); //}}AFX_DATA_MAP } diff --git a/host/TargetDlg.h b/host/TargetDlg.h index c027c2d..5a9a234 100644 --- a/host/TargetDlg.h +++ b/host/TargetDlg.h @@ -87,6 +87,7 @@ public: BOOL m_ShowFPSOverlay; BOOL m_TimeStretch; BOOL m_HookOpenGL; + BOOL m_FakeVersion; int m_InitX; int m_InitY; int m_MaxX; @@ -99,6 +100,7 @@ public: int m_SizY; int m_MaxFPS; int m_InitTS; + int m_FakeVersionId; //}}AFX_DATA diff --git a/host/dxwndhost.aps b/host/dxwndhost.aps index 8b1afcf68ea16ef81549a2b3142c3c7e4de9ec50..7a15f233a4341c12efed47da43e8e3c19b16d853 100644 GIT binary patch delta 2343 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 c;r$FwGWiu<{P=h?nROOV{FO!7q-;9Qsq#A$0u zf}FNHol+H(F|CqT`Jp%vb+r#OHjX-D+8Nu7+DWFZ)5JJK7-J3edwzQ*oBWkr=DYXY z&pE$y@9%OSKYvj32esoH%+6gxh>_9J(UquIL93y9i2UZwG0(tYCyPs`_F~j$$0q$a z_2Fe{hEKde&Dtef3@mojfvQR5)hraWX|&C9RgO@V)sx_XI}J*QI8z4dT>6PM&7H4E z9_q)H?NxOlY90{1Z|#d{fUyR85z^Zq>yomZ8hR4+C&rz!S_=U0S}7`KF8N|Ar(49` zkxxgZ6yh=*e}g#nh#2g za#DvQnaWeM$)BoGTgnXb<^Dj{()rY+Qmf!`i+>xFYZsTzU8eCow>wROIhW%*F3IM{FJ4CT4fcSTgsD$#wR54qWi$Yk% z!V9|+RyqF4L!7D|GZ#yW2QkE7i)2U-YvL4L!nP_p%9t^B$ zD2J}KEt55LKD|sY_nx#wV@-UC_(v;Ee^~M-yN|moC@d;2Dg92J;whulQpNlQbY-no zudUuFsUrV~F)5SD|85N3ta5d}U6lJ>l9Nk|r}Nw}1 zmSMO4kA)vcQMMLEMK#D4_`OBu(3dsOMSks{-MQMIy$&yu0EI7I-W@(DHjI(*5g# zCh~jS#{1^ebx$sK&+h6n^4?D+$MY}Hy_0!#e@dJleBN*Ftn)4^FoiluN4i4TT;_(c zd5YC3mI41t#jx|nw%)D~3&fgal78c*Bc>->ls5%Ww5lh1!DZuhsJ+yt<(;ubQo1XidP=i5^2X-Jx$r=_@DP}lK|BmD zEf6!lJX;|y9T2l3Xg|c|KhUFmcMKwg1Ati~-L9~=X2Ei)kWA&t1&Cl$(`t!f}K2R4_5ig9xZex{*bp&0Lk zMf6E+8u{P$SvVqxVwc+!a$q%b6J@=M71TY$e)u;g=Wc*kp*>I=v={mEnMWtkHS&j9==NYHZ60z^ zxjvEni)(QUEYc6sM}s*0`C{`(A9eQ`>5Th>~ z)3o^HQC*%MmE%X}!ok}wjr#~)7M2RMmy&FnPZ0-fW~@Ov*Z4H8xsZixf%7NRtsag1 z^QvWxF*2t2r#R&I=yuPq_@csC3+ehmhH)3y55(bPU_75J(n$x08tC}vzxe7p+cwoH zX9l_><#fGe*lX$i<9lZL{qS!(=!%fNfi|lQU77re5+`R-#i`8x&5<(R^3B6U&gKsa z7cK2^6TgJ_)P=xX5z;%Bf8XG#&dgLNatm*# zy1@2{@<;rtQ$wS)YnGMBY7Wn8jX-35=w(XA!j>S+6dq=YLRee>7fEuSsr7x>T&|*K zldrdHihZCMAB%rg?1o~z^Zu^bO~ru3EyX@kjGO<$51(xRRm=tZV|L)$6rU={?R)s) dz+uJs2)xS4Z8^$EH?;K64^7J2`7_W#xLLMi|N delta 2749 zcmc&$eN0nV6u+l^t>vp!C>6A{r4+}2j`AUhb6Sz9XhBiQbVCIEm@tOKsT04}xlOZ$ z8Rg8qnHY47$&9)Mc?gRL6kUcfn$>05AIrAvkNvS2r_4cusC4JP7E;kg{A;iIy?gGt z=bm%!@1A@6+#bR05n47WRU1sy@YoNZbFk#tM#1C{^{oMbx=~@ zS%W);tD03L(lj477bc=ZP@zX7;0~1+Qn65-8uJ1Tn+X;IcW8U&R1SdSE zBq3PODdRLv8KgB`-_c5Xj7fMh-iXUmX5%4)F`nB`WsBGb zR>{`WdkeF$1+1FYlKd8y#-}Q$vK6>4J|S;2+eV}7NFQVo2uC*TKgY56()?DlI~<+W zHhCX#S(^qwsZN{AD3HI9YN)0CWO~Az1TCSSz;)4tZ3GKpJAvz>2z?^NK?&+idL#Ad z86u22xhHEFQ-S13b1JgbaviZhO z=gRXZ>}Yhs267YGwAL-~n!uCkWq8XKsT-dT`qtWw;Y3&jK}(1vOeSz%;;F?&6;9!K zE;LrWFTBhJeWhpab`stu>>xA{b`o|Gb`xYuY5HhObG8w<1ACD<3 zAB*AF(%DMF`iFeCG_6~l3QR6K!>b^sbz5(w_=6q{6sQPY#bM7<0jps-_Es&yIUbFq z-+#-58SzQ90;|8i9$d1%vzzT^yVy*Y&$8&98GxPTknAAX={Cz?1q3^d&1AWxwG;fm z1+r!aY4ga&zwV68tn3*%6I?y<#}8*#k$gD$nKPiTs5Hj@fu9!sb`lf>GbWhKsB4c! z_m|Ei3NWFj)B43J#o?8)7<;<$-1;(T8gyW2b0}@uo`prA!#h1mfupSF9Dr8riUo1f zZ1Uz}>%|)YiJXd=($8N_7sPxO%)w()4c_gcdTPtTKZdQix6RSy{S0#PbIFXx#C!lM zomX(+JU8)|4;FW5_#8j0b@%010{^2#=cfJmONR~X+q9I(O%yIa!1~@O3BIAfJ)h_a z1GntTeIW%84r*}Vq7~g2lF>03g+C5)*?=cH1*{)7VgI0j#SdG>3M~)?WK=N}^{EyF zw3&=Vi;-7;0Z$6Otu}~}D{8O5C)P&7be`U9*(;#4ynl3CLzsMI`GV^1$726QftF&#+OB*etqcpgR}$Gx=T>rHz5iNFo;6o^^!xIbdff`C_vMzYC>L}gItHg$>Z~*%>dGyf~ s)^s-weH4gk;r4Mx5jX-x$)rM!FUw4SUDQ2-Uwv4_mHnZ2+zoJuP82|tP diff --git a/host/dxwndhostView.cpp b/host/dxwndhostView.cpp index ad53e2e..d089510 100644 --- a/host/dxwndhostView.cpp +++ b/host/dxwndhostView.cpp @@ -432,6 +432,7 @@ void CDxwndhostView::OnModify() dlg.m_ShowFPSOverlay = TargetMaps[i].flags2 & SHOWFPSOVERLAY ? 1 : 0; dlg.m_TimeStretch = TargetMaps[i].flags2 & TIMESTRETCH ? 1 : 0; dlg.m_HookOpenGL = TargetMaps[i].flags2 & HOOKOPENGL ? 1 : 0; + dlg.m_FakeVersion = TargetMaps[i].flags2 & FAKEVERSION ? 1 : 0; dlg.m_InitX = TargetMaps[i].initx; dlg.m_InitY = TargetMaps[i].inity; dlg.m_MinX = TargetMaps[i].minx; @@ -444,6 +445,7 @@ void CDxwndhostView::OnModify() dlg.m_SizY = TargetMaps[i].sizy; dlg.m_MaxFPS = TargetMaps[i].MaxFPS; dlg.m_InitTS = TargetMaps[i].InitTS+8; + dlg.m_FakeVersionId = TargetMaps[i].FakeVersionId; if(dlg.DoModal() == IDOK && dlg.m_FilePath.GetLength()){ strcpy_s(TargetMaps[i].path, sizeof(TargetMaps[i].path), dlg.m_FilePath); strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module); @@ -529,6 +531,7 @@ void CDxwndhostView::OnModify() if(dlg.m_ShowFPSOverlay) TargetMaps[i].flags2 |= SHOWFPSOVERLAY; if(dlg.m_TimeStretch) TargetMaps[i].flags2 |= TIMESTRETCH; if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL; + if(dlg.m_FakeVersion) TargetMaps[i].flags2 |= FAKEVERSION; TargetMaps[i].initx = dlg.m_InitX; TargetMaps[i].inity = dlg.m_InitY; TargetMaps[i].minx = dlg.m_MinX; @@ -541,6 +544,7 @@ void CDxwndhostView::OnModify() TargetMaps[i].sizy = dlg.m_SizY; TargetMaps[i].MaxFPS = dlg.m_MaxFPS; TargetMaps[i].InitTS = dlg.m_InitTS-8; + TargetMaps[i].FakeVersionId = dlg.m_FakeVersionId; strcpy_s(TargetMaps[i].module, sizeof(TargetMaps[i].module), dlg.m_Module); strcpy_s(TargetMaps[i].OpenGLLib, sizeof(TargetMaps[i].OpenGLLib), dlg.m_OpenGLLib); strcpy_s(TitleMaps[i].title, sizeof(TitleMaps[i].title), dlg.m_Title); @@ -819,6 +823,7 @@ void CDxwndhostView::OnAdd() if(dlg.m_ShowFPSOverlay) TargetMaps[i].flags2 |= SHOWFPSOVERLAY; if(dlg.m_TimeStretch) TargetMaps[i].flags2 |= TIMESTRETCH; if(dlg.m_HookOpenGL) TargetMaps[i].flags2 |= HOOKOPENGL; + if(dlg.m_FakeVersion) TargetMaps[i].flags2 |= FAKEVERSION; TargetMaps[i].initx = dlg.m_InitX; TargetMaps[i].inity = dlg.m_InitY; TargetMaps[i].minx = dlg.m_MinX; @@ -830,6 +835,7 @@ void CDxwndhostView::OnAdd() TargetMaps[i].sizx = dlg.m_SizX; TargetMaps[i].sizy = dlg.m_SizY; TargetMaps[i].MaxFPS = dlg.m_MaxFPS; + TargetMaps[i].FakeVersionId = dlg.m_FakeVersionId; if (dlg.m_InitTS>=-8 && dlg.m_InitTS<=8) TargetMaps[i].InitTS = dlg.m_InitTS-8; else