1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00

v2_03_46_src

Former-commit-id: a29ee258050b59c37e33287a7c26e77d41ef796e
This commit is contained in:
gho tik 2015-11-19 11:42:28 -05:00 committed by Refael ACkermann
parent 2c9572fa77
commit 06026c6ab2
28 changed files with 154 additions and 65 deletions

View File

@ -138,7 +138,7 @@
#define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions #define SUPPORTSVGA 0x00400000 // Supports SVGA standard resolutions
#define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions #define SUPPORTHDTV 0x00800000 // Supports HDTV standard resolutions
#define RELEASEMOUSE 0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window #define RELEASEMOUSE 0x01000000 // GetCursorPos returns centered coordinates when the mouse cursor is moved outside the window
//#define FRAMECOMPENSATION 0x02000000 // Compensate for frame border adding x,y displacement of (x) left border and (y) window title bar #define ENABLETIMEFREEZE 0x02000000 // Enable Time Freeze functionality and toggle key
#define HOTPATCH 0x04000000 // Use hot patching technique to handle obfuscated IAT #define HOTPATCH 0x04000000 // Use hot patching technique to handle obfuscated IAT
#define ENABLEHOTKEYS 0x08000000 // Enables hot keys #define ENABLEHOTKEYS 0x08000000 // Enables hot keys
#define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call #define HOTPATCHALWAYS 0x10000000 // Force hot patching to every call
@ -210,6 +210,8 @@
#define SYNCPALETTE 0x04000000 // Syncronize GDI to DDRAW palette #define SYNCPALETTE 0x04000000 // Syncronize GDI to DDRAW palette
#define VIRTUALJOYSTICK 0x08000000 // Enables the DxWnd virtual joystick #define VIRTUALJOYSTICK 0x08000000 // Enables the DxWnd virtual joystick
#define UNACQUIRE 0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus #define UNACQUIRE 0x10000000 // Unacquire DirectInput devices when losing focus and acquire back when gaining focus
#define HOOKGOGLIBS 0x20000000
#define BYPASSGOGLIBS 0x40000000
// logging Tflags DWORD: // logging Tflags DWORD:
#define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general #define OUTTRACE 0x00000001 // enables tracing to dxwnd.log in general

View File

@ -26,5 +26,6 @@ plocktoggle=
fpstoggle= fpstoggle=
printscreen=0x7B printscreen=0x7B
corner=0x7A corner=0x7A
freezetime=0x79

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:35b41771cbc6227fe2b767905fbd42e75f893b1bedc8f5ccbcf26d42dffc802f oid sha256:58d53ae35a2c6ed0abd1628c80eebf170d591eb9b2a840f79b3a0507813048c9
size 619008 size 619520

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:a1616682f67e2e527cec0060d101ab43de06f3cbe2ff7cd4e03394c7de2c0027 oid sha256:bfcf831bd510bb48aaef99c2469d1627a11d73ea4c4c50c765e257ab30b38f7e
size 546304 size 546304

View File

@ -968,3 +968,9 @@ add: option "Unacquire input devices on focus lost". Needed for Star wars "Tie F
fix: set dinput SetCooperativeLevel flags to DISCL_NONEXCLUSIVE | DISCL_FOREGROUND fix: set dinput SetCooperativeLevel flags to DISCL_NONEXCLUSIVE | DISCL_FOREGROUND
fix: fixed CreateIC hooker call method (WINAPI) fix: fixed CreateIC hooker call method (WINAPI)
fix: emulated Unacquire on virtual joystick. Needed for Star wars "Tie Fighter 95". fix: emulated Unacquire on virtual joystick. Needed for Star wars "Tie Fighter 95".
v2.03.46
add: added compatibility options "Hook GOG libs" and "Byass GOG libs" to manage GOG games
add: added "Enable Time Freeze" timing option and the virtual key "freezetime"
add: command line option /E to terminate exixting DxWnd session
fix: relocation of WS_POPUP windows. Fixes "Riven" menu window.

3
build/redist/dpwsock.dll Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7fe37bba5475b66375d286ee92bc10cfcdeff6e9fa1ef112eb2813b86d4d4065
size 42768

View File

@ -629,6 +629,22 @@ static void ddSetCompatibility()
FreeLibrary(hinst); FreeLibrary(hinst);
} }
static void BypassGOGDDrawRedirector()
{
// this procedure bypasses the GOG proxy ddraw.dll that sometimes is found in the GOG game folders.
// This way, there will be no more the need to rename or delete this file.
char sSysLibraryPath[MAX_PATH+10];
HMODULE hinst;
GetSystemDirectory(sSysLibraryPath, MAX_PATH);
strcat(sSysLibraryPath, "\\ddraw.dll");
hinst = LoadLibrary(sSysLibraryPath);
pDirectDrawEnumerate = (DirectDrawEnumerate_Type)GetProcAddress(hinst, "DirectDrawEnumerateA");
pDirectDrawEnumerateEx = (DirectDrawEnumerateEx_Type)GetProcAddress(hinst, "DirectDrawEnumerateExA");
pDirectDrawCreate = (DirectDrawCreate_Type)GetProcAddress(hinst, "DirectDrawCreate");
pDirectDrawCreateEx = (DirectDrawCreateEx_Type)GetProcAddress(hinst, "DirectDrawCreateEx");
}
int HookDirectDraw(HMODULE module, int version) int HookDirectDraw(HMODULE module, int version)
{ {
if ((dxw.dwFlags2 & SETCOMPATIBILITY) || if ((dxw.dwFlags2 & SETCOMPATIBILITY) ||
@ -640,6 +656,11 @@ int HookDirectDraw(HMODULE module, int version)
} }
} }
if(dxw.dwFlags6 & BYPASSGOGLIBS) {
BypassGOGDDrawRedirector();
return TRUE;
}
if(dxw.dwFlags4 & HOTPATCH) { if(dxw.dwFlags4 & HOTPATCH) {
// hot-patch all APIs and that's all folks! // hot-patch all APIs and that's all folks!
HookLibrary(module, ddHooks, "ddraw.dll"); HookLibrary(module, ddHooks, "ddraw.dll");

View File

@ -92,7 +92,7 @@ static char *Flag4Names[32]={
"LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP", "LIMITSCREENRES", "NOFILLRECT", "HOOKGLIDE", "HIDEDESKTOP",
"STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF", "STRETCHTIMERS", "NOFLIPEMULATION", "NOTEXTURES", "RETURNNULLREF",
"FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV", "FINETIMING", "NATIVERES", "SUPPORTSVGA", "SUPPORTHDTV",
"RELEASEMOUSE", "--FRAMECOMPENSATION--", "HOTPATCH", "ENABLEHOTKEYS", "RELEASEMOUSE", "ENABLETIMEFREEZE", "HOTPATCH", "ENABLEHOTKEYS",
"HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY", "HOTPATCHALWAYS", "NOD3DRESET", "OVERRIDEREGISTRY", "HIDECDROMEMPTY",
}; };
@ -114,8 +114,8 @@ static char *Flag6Names[32]={
"NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE", "NOSYSMEMPRIMARY", "NOSYSMEMBACKBUF", "CONFIRMONCLOSE", "TERMINATEONCLOSE",
"FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY", "FLIPEMULATION", "SETZBUFFERBITDEPTHS", "SHAREDDC", "WOW32REGISTRY",
"STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "REUSEEMULATEDDC", "STRETCHMOVIES", "BYPASSMCI", "FIXPIXELZOOM", "REUSEEMULATEDDC",
"CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "", "CREATEDESKTOP", "NOWINDOWHOOKS", "SYNCPALETTE", "VIRTUALJOYSTICK",
"", "", "", "", "UNACQUIRE", "HOOKGOGLIBS", "BYPASSGOGLIBS", "",
}; };
static char *TFlagNames[32]={ static char *TFlagNames[32]={
@ -848,7 +848,8 @@ void HookModule(HMODULE base, int dxversion)
HookKernel32(base); HookKernel32(base);
HookUser32(base); HookUser32(base);
HookOle32(base); HookOle32(base);
HookWinMM(base); HookWinMM(base, "winmm.dll");
if(dxw.dwFlags6 & HOOKGOGLIBS) HookWinMM(base, "win32.dll");
//if(dxw.dwFlags2 & SUPPRESSIME) HookImeLib(module); //if(dxw.dwFlags2 & SUPPRESSIME) HookImeLib(module);
HookGDI32(base); HookGDI32(base);
if(dxw.dwFlags1 & HOOKDI) HookDirectInput(base, dxversion); if(dxw.dwFlags1 & HOOKDI) HookDirectInput(base, dxversion);
@ -1104,6 +1105,19 @@ DWORD WINAPI MessagePoller(LPVOID lpParameter)
return 0; return 0;
} }
DWORD WINAPI TimeFreezePoller(LPVOID lpParameter)
{
#define DXWREFRESHINTERVAL 20
extern UINT VKeyConfig[];
UINT FreezeToggleKey;
FreezeToggleKey = VKeyConfig[DXVK_FREEZETIME];
while(TRUE){
Sleep(DXWREFRESHINTERVAL);
if(GetAsyncKeyState(FreezeToggleKey) & 0xF000) dxw.ToggleFreezedTime();
}
return 0;
}
static void MemoryReserve() static void MemoryReserve()
{ {
VirtualAlloc((LPVOID)0x4000000, 0x04000000, MEM_RESERVE, PAGE_READWRITE); VirtualAlloc((LPVOID)0x4000000, 0x04000000, MEM_RESERVE, PAGE_READWRITE);
@ -1339,6 +1353,9 @@ void HookInit(TARGETMAP *target, HWND hwnd)
if (dxw.dwFlags1 & AUTOREFRESH) if (dxw.dwFlags1 & AUTOREFRESH)
CreateThread(NULL, 0, MessagePoller, NULL, 0, NULL); CreateThread(NULL, 0, MessagePoller, NULL, 0, NULL);
if (dxw.dwFlags4 & ENABLETIMEFREEZE)
CreateThread(NULL, 0, TimeFreezePoller, NULL, 0, NULL);
} }
LPCSTR ProcToString(LPCSTR proc) LPCSTR ProcToString(LPCSTR proc)

View File

@ -10,7 +10,7 @@ extern void HookDirectSound(HMODULE);
extern void HookImeLib(HMODULE); extern void HookImeLib(HMODULE);
extern void HookKernel32(HMODULE); extern void HookKernel32(HMODULE);
extern void HookUser32(HMODULE); extern void HookUser32(HMODULE);
extern void HookWinMM(HMODULE); extern void HookWinMM(HMODULE, char *libname);
extern void HookAdvApi32(HMODULE); extern void HookAdvApi32(HMODULE);
extern void HookImagehlp(HMODULE); extern void HookImagehlp(HMODULE);
extern void HookSmackW32(HMODULE); extern void HookSmackW32(HMODULE);

View File

@ -50,6 +50,7 @@ dxwCore::dxwCore()
iRefreshDelays[0]=16; iRefreshDelays[0]=16;
iRefreshDelays[1]=17; iRefreshDelays[1]=17;
iRefreshDelayCount=2; iRefreshDelayCount=2;
TimeFreeze = FALSE;
} }
dxwCore::~dxwCore() dxwCore::~dxwCore()
@ -1056,7 +1057,6 @@ void dxwCore::VSyncWait()
static float fMul[17]={2.14F, 1.95F, 1.77F, 1.61F, 1.46F, 1.33F, 1.21F, 1.10F, 1.00F, 0.91F, 0.83F, 0.75F, 0.68F, 0.62F, 0.56F, 0.51F, 0.46F}; static float fMul[17]={2.14F, 1.95F, 1.77F, 1.61F, 1.46F, 1.33F, 1.21F, 1.10F, 1.00F, 0.91F, 0.83F, 0.75F, 0.68F, 0.62F, 0.56F, 0.51F, 0.46F};
//static float fMul[17]={0.46F, 0.51F, 0.56F, 0.62F, 0.68F, 0.75F, 0.83F, 0.91F, 1.00F, 1.10F, 1.21F, 1.33F, 1.46F, 1.61F, 1.77F, 1.95F, 2.14F};
static DWORD TimeShifterFine(DWORD val, int shift) static DWORD TimeShifterFine(DWORD val, int shift)
{ {
@ -1127,6 +1127,7 @@ DWORD dxwCore::GetTickCount(void)
dwTick=(dwNextRealTick-dwLastRealTick); dwTick=(dwNextRealTick-dwLastRealTick);
TimeShift=GetHookInfo()->TimeShift; TimeShift=GetHookInfo()->TimeShift;
dwTick = (*pTimeShifter)(dwTick, TimeShift); dwTick = (*pTimeShifter)(dwTick, TimeShift);
if(TimeFreeze) dwTick=0;
dwLastFakeTick += dwTick; dwLastFakeTick += dwTick;
dwLastRealTick = dwNextRealTick; dwLastRealTick = dwNextRealTick;
return dwLastFakeTick; return dwLastFakeTick;
@ -1143,18 +1144,19 @@ DWORD dxwCore::StretchCounter(DWORD dwTimer)
{ {
TimeShift=GetHookInfo()->TimeShift; TimeShift=GetHookInfo()->TimeShift;
dwTimer = (*pTimeShifter)(dwTimer, TimeShift); dwTimer = (*pTimeShifter)(dwTimer, TimeShift);
return dwTimer; return (dxw.TimeFreeze) ? 0 : dwTimer;
} }
LARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER dwTimer) LARGE_INTEGER dxwCore::StretchCounter(LARGE_INTEGER dwTimer)
{ {
static int Reminder = 0; static int Reminder = 0;
LARGE_INTEGER ret; LARGE_INTEGER ret;
LARGE_INTEGER zero = {0,0};
TimeShift=GetHookInfo()->TimeShift; TimeShift=GetHookInfo()->TimeShift;
dwTimer.QuadPart += Reminder; dwTimer.QuadPart += Reminder;
ret = (*pTimeShifter64)(dwTimer, TimeShift); ret = (*pTimeShifter64)(dwTimer, TimeShift);
Reminder = (ret.QuadPart==0) ? dwTimer.LowPart : 0; Reminder = (ret.QuadPart==0) ? dwTimer.LowPart : 0;
return ret; return (dxw.TimeFreeze) ? zero : ret;
} }
void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
@ -1163,9 +1165,7 @@ void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
DWORD dwCurrentTick; DWORD dwCurrentTick;
FILETIME CurrFileTime; FILETIME CurrFileTime;
static DWORD dwStartTick=0; static DWORD dwStartTick=0;
static DWORD dwUpdateTick=0;
static FILETIME StartFileTime; static FILETIME StartFileTime;
// extern DXWNDSTATUS *pStatus;
if(dwStartTick==0) { if(dwStartTick==0) {
SYSTEMTIME StartingTime; SYSTEMTIME StartingTime;
@ -1180,6 +1180,7 @@ void dxwCore::GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
dwTick=(dwCurrentTick-dwStartTick); dwTick=(dwCurrentTick-dwStartTick);
TimeShift=GetHookInfo()->TimeShift; TimeShift=GetHookInfo()->TimeShift;
dwTick = (*pTimeShifter)(dwTick, TimeShift); dwTick = (*pTimeShifter)(dwTick, TimeShift);
if(dxw.TimeFreeze) dwTick=0;
// From MSDN: Contains a 64-bit value representing the number of // From MSDN: Contains a 64-bit value representing the number of
// 100-nanosecond intervals since January 1, 1601 (UTC). // 100-nanosecond intervals since January 1, 1601 (UTC).
// So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000. // So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000.
@ -1198,9 +1199,7 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)
DWORD dwCurrentTick; DWORD dwCurrentTick;
FILETIME CurrFileTime; FILETIME CurrFileTime;
static DWORD dwStartTick=0; static DWORD dwStartTick=0;
static DWORD dwUpdateTick=0;
static FILETIME StartFileTime; static FILETIME StartFileTime;
// extern DXWNDSTATUS *pStatus;
if(dwStartTick==0) { if(dwStartTick==0) {
SYSTEMTIME StartingTime; SYSTEMTIME StartingTime;
@ -1215,6 +1214,7 @@ void dxwCore::GetSystemTime(LPSYSTEMTIME lpSystemTime)
dwTick=(dwCurrentTick-dwStartTick); dwTick=(dwCurrentTick-dwStartTick);
TimeShift=GetHookInfo()->TimeShift; TimeShift=GetHookInfo()->TimeShift;
dwTick = (*pTimeShifter)(dwTick, TimeShift); dwTick = (*pTimeShifter)(dwTick, TimeShift);
if(dxw.TimeFreeze) dwTick=0;
// From MSDN: Contains a 64-bit value representing the number of // From MSDN: Contains a 64-bit value representing the number of
// 100-nanosecond intervals since January 1, 1601 (UTC). // 100-nanosecond intervals since January 1, 1601 (UTC).
// So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000. // So, since 1mSec = 10.000 * 100nSec, you still have to multiply by 10.000.
@ -1291,13 +1291,6 @@ void dxwCore::ShowFPS(HDC xdc, int w, int h)
if(corner==LastCorner) corner = (corner+1) % 4; if(corner==LastCorner) corner = (corner+1) % 4;
LastCorner = corner; LastCorner = corner;
color=0xFF0000; // blue color=0xFF0000; // blue
//(*pGetClientRect)(hWnd, &rect);
//switch (corner) {
//case 0: x=10; y=10; break;
//case 1: x=rect.right-60; y=10; break;
//case 2: x=rect.right-60; y=rect.bottom-20; break;
//case 3: x=10; y=rect.bottom-20; break;
//}
switch (corner) { switch (corner) {
case 0: x=10; y=10; break; case 0: x=10; y=10; break;
case 1: x=w-60; y=10; break; case 1: x=w-60; y=10; break;
@ -1307,7 +1300,6 @@ void dxwCore::ShowFPS(HDC xdc, int w, int h)
} }
SetTextColor(xdc,color); SetTextColor(xdc,color);
//SetBkMode(xdc, TRANSPARENT);
SetBkMode(xdc, OPAQUE); SetBkMode(xdc, OPAQUE);
sprintf_s(sBuf, 80, "FPS: %d", GetHookInfo()->FPSCount); sprintf_s(sBuf, 80, "FPS: %d", GetHookInfo()->FPSCount);
TextOut(xdc, x, y, sBuf, strlen(sBuf)); TextOut(xdc, x, y, sBuf, strlen(sBuf));
@ -1321,21 +1313,16 @@ void dxwCore::ShowTimeStretching(HDC xdc, int w, int h)
static int x, y; static int x, y;
static DWORD color; static DWORD color;
static int LastTimeShift = 1000; // any initial number different from -8 .. +8 static int LastTimeShift = 1000; // any initial number different from -8 .. +8
static int LastTimeFreeze = 1000; // any initial number different from TRUE, FALSE
if((*pGetTickCount)()-dwTimer > 4000){ if((*pGetTickCount)()-dwTimer > 4000){
if(LastTimeShift==TimeShift) return; // after a while, stop the show if((LastTimeShift==TimeShift) && (LastTimeFreeze==TimeFreeze)) return; // after a while, stop the show
dwTimer = (*pGetTickCount)(); dwTimer = (*pGetTickCount)();
LastTimeShift=TimeShift; LastTimeShift=TimeShift;
corner = dwTimer % 4; corner = dwTimer % 4;
if(corner==LastCorner) corner = (corner+1) % 4; if(corner==LastCorner) corner = (corner+1) % 4;
LastCorner = corner; LastCorner = corner;
color=0x0000FF; // red color=0x0000FF; // red
//(*pGetClientRect)(hWnd, &rect);
//switch (corner) {
//case 0: x=10; y=10; break;
//case 1: x=rect.right-60; y=10; break;
//case 2: x=rect.right-60; y=rect.bottom-20; break;
//case 3: x=10; y=rect.bottom-20; break;
switch (corner) { switch (corner) {
case 0: x=10; y=10; break; case 0: x=10; y=10; break;
case 1: x=w-60; y=10; break; case 1: x=w-60; y=10; break;
@ -1345,7 +1332,6 @@ void dxwCore::ShowTimeStretching(HDC xdc, int w, int h)
} }
SetTextColor(xdc,color); SetTextColor(xdc,color);
//SetBkMode(xdc, TRANSPARENT);
SetBkMode(xdc, OPAQUE); SetBkMode(xdc, OPAQUE);
sprintf_s(sBuf, 80, "t%s", dxw.GetTSCaption()); sprintf_s(sBuf, 80, "t%s", dxw.GetTSCaption());
TextOut(xdc, x, y, sBuf, strlen(sBuf)); TextOut(xdc, x, y, sBuf, strlen(sBuf));
@ -1365,6 +1351,7 @@ char *dxwCore::GetTSCaption(int shift)
"x1.00", "x1.00",
":1.10",":1.21",":1.33",":1.46", ":1.10",":1.21",":1.33",":1.46",
":1.61",":1.77",":1.95",":2.14"}; ":1.61",":1.77",":1.95",":2.14"};
if(TimeFreeze) return "x0";
if (shift<(-8) || shift>(+8)) return "???"; if (shift<(-8) || shift>(+8)) return "???";
shift += 8; shift += 8;
return (dxw.dwFlags4 & FINETIMING) ? sTSCaptionFine[shift] : sTSCaptionCoarse[shift]; return (dxw.dwFlags4 & FINETIMING) ? sTSCaptionFine[shift] : sTSCaptionCoarse[shift];
@ -1848,7 +1835,8 @@ static char *VKeyLabels[DXVK_SIZE]={
"timetoggle", "timetoggle",
"altf4", "altf4",
"printscreen", "printscreen",
"corner" "corner",
"freezetime"
}; };
void dxwCore::MapKeysInit() void dxwCore::MapKeysInit()
@ -1879,3 +1867,12 @@ UINT dxwCore::MapKeysConfig(UINT message, LPARAM lparam, WPARAM wparam)
} }
return DXVK_NONE; return DXVK_NONE;
} }
void dxwCore::ToggleFreezedTime()
{
static DWORD dwLastTime = 0;
if(((*pGetTickCount)() - dwLastTime) < 100) return;
TimeFreeze = !TimeFreeze;
dwLastTime = (*pGetTickCount)();
OutTraceDW("DxWnd: time is %s\n", dxw.TimeFreeze ? "freezed" : "unfreezed");
}

View File

@ -129,6 +129,7 @@ public: // methods
void SetVSyncDelays(UINT); void SetVSyncDelays(UINT);
void VSyncWait(); void VSyncWait();
void DumpDesktopStatus(); void DumpDesktopStatus();
void ToggleFreezedTime();
public: // simple data variables public: // simple data variables
BOOL Windowize; BOOL Windowize;
@ -168,6 +169,7 @@ public: // simple data variables
HDC RealHDC; HDC RealHDC;
HDC VirtualHDC; HDC VirtualHDC;
int GDIEmulationMode; int GDIEmulationMode;
BOOL TimeFreeze;
// Implementation // Implementation
protected: protected:
@ -346,6 +348,7 @@ typedef enum {
DXVK_ALTF4, DXVK_ALTF4,
DXVK_PRINTSCREEN, DXVK_PRINTSCREEN,
DXVK_CORNERIZE, DXVK_CORNERIZE,
DXVK_FREEZETIME,
DXVK_SIZE DXVK_SIZE
}; };

View File

@ -27,7 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "TlHelp32.h" #include "TlHelp32.h"
#define VERSION "2.03.45" #define VERSION "2.03.46"
#define DDTHREADLOCK 1 #define DDTHREADLOCK 1
//#define LOCKTHREADS //#define LOCKTHREADS

Binary file not shown.

View File

@ -383,13 +383,16 @@ time related APIs
DWORD WINAPI extGetTickCount(void) DWORD WINAPI extGetTickCount(void)
{ {
return dxw.GetTickCount(); DWORD ret;
ret=dxw.GetTickCount();
//OutTraceB("GetTickCount: ret=%x\n", ret);
return ret;
} }
void WINAPI extGetSystemTime(LPSYSTEMTIME lpSystemTime) void WINAPI extGetSystemTime(LPSYSTEMTIME lpSystemTime)
{ {
dxw.GetSystemTime(lpSystemTime); dxw.GetSystemTime(lpSystemTime);
if (IsDebug) OutTrace("GetSystemTime: %02d:%02d:%02d.%03d\n", OutTraceB("GetSystemTime: %02d:%02d:%02d.%03d\n",
lpSystemTime->wHour, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds); lpSystemTime->wHour, lpSystemTime->wMinute, lpSystemTime->wSecond, lpSystemTime->wMilliseconds);
} }
@ -398,7 +401,7 @@ void WINAPI extGetLocalTime(LPSYSTEMTIME lpLocalTime)
SYSTEMTIME SystemTime; SYSTEMTIME SystemTime;
dxw.GetSystemTime(&SystemTime); dxw.GetSystemTime(&SystemTime);
SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime); SystemTimeToTzSpecificLocalTime(NULL, &SystemTime, lpLocalTime);
if (IsDebug) OutTrace("GetLocalTime: %02d:%02d:%02d.%03d\n", OutTraceB("GetLocalTime: %02d:%02d:%02d.%03d\n",
lpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds); lpLocalTime->wHour, lpLocalTime->wMinute, lpLocalTime->wSecond, lpLocalTime->wMilliseconds);
} }
@ -410,25 +413,29 @@ VOID WINAPI extSleep(DWORD dwMilliseconds)
dwNewDelay = dxw.StretchTime(dwMilliseconds); dwNewDelay = dxw.StretchTime(dwMilliseconds);
if (dwNewDelay==0) dwNewDelay=1; // minimum allowed... if (dwNewDelay==0) dwNewDelay=1; // minimum allowed...
} }
if (IsDebug) OutTrace("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift); OutTraceB("Sleep: msec=%d->%d timeshift=%d\n", dwMilliseconds, dwNewDelay, dxw.TimeShift);
(*pSleep)(dwNewDelay); (*pSleep)(dwNewDelay);
while(dxw.TimeFreeze)(*pSleep)(40);
} }
DWORD WINAPI extSleepEx(DWORD dwMilliseconds, BOOL bAlertable) DWORD WINAPI extSleepEx(DWORD dwMilliseconds, BOOL bAlertable)
{ {
DWORD ret;
DWORD dwNewDelay; DWORD dwNewDelay;
dwNewDelay=dwMilliseconds; dwNewDelay=dwMilliseconds;
if ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){ if ((dwMilliseconds!=INFINITE) && (dwMilliseconds!=0)){
dwNewDelay = dxw.StretchTime(dwMilliseconds); dwNewDelay = dxw.StretchTime(dwMilliseconds);
if (dwNewDelay==0) dwNewDelay=1; // minimum allowed... if (dwNewDelay==0) dwNewDelay=1; // minimum allowed...
} }
if (IsDebug) OutTrace("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift); OutTraceB("SleepEx: msec=%d->%d alertable=%x, timeshift=%d\n", dwMilliseconds, dwNewDelay, bAlertable, dxw.TimeShift);
return (*pSleepEx)(dwNewDelay, bAlertable); ret = (*pSleepEx)(dwNewDelay, bAlertable);
while(dxw.TimeFreeze)(*pSleep)(40);
return ret;
} }
void WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) void WINAPI extGetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime)
{ {
if (IsDebug) OutTrace("GetSystemTimeAsFileTime\n"); OutTraceB("GetSystemTimeAsFileTime\n");
dxw.GetSystemTimeAsFileTime(lpSystemTimeAsFileTime); dxw.GetSystemTimeAsFileTime(lpSystemTimeAsFileTime);
} }

View File

@ -1466,19 +1466,25 @@ static HWND WINAPI extCreateWindowCommon(
return hwnd; return hwnd;
} }
// tested on Gangsters: coordinates must be window-relative!!! // from here on, fullscreen is garanteed
// Age of Empires....
if (dwStyle & WS_CHILD){ if (dwStyle & WS_CHILD){
// tested on Gangsters: coordinates must be window-relative!!!
// Age of Empires....
dxw.MapClient(&x, &y, &nWidth, &nHeight); dxw.MapClient(&x, &y, &nWidth, &nHeight);
OutTraceDW("%s: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n", OutTraceDW("%s: fixed WS_CHILD pos=(%d,%d) size=(%d,%d)\n",
ApiName, x, y, nWidth, nHeight); ApiName, x, y, nWidth, nHeight);
} }
// needed for Diablo, that creates a new control parent window that must be else {
// overlapped to the directdraw surface. if ((dwExStyle & WS_EX_CONTROLPARENT) || (dwStyle & WS_POPUP)){
else if (dwExStyle & WS_EX_CONTROLPARENT){ // needed for "Diablo", that creates a new WS_EX_CONTROLPARENT window that must be
dxw.MapWindow(&x, &y, &nWidth, &nHeight); // overlapped to the directdraw surface.
OutTraceDW("%s: fixed WS_EX_CONTROLPARENT pos=(%d,%d) size=(%d,%d)\n", // needed for "Riven", that creates a new WS_POPUP window with the menu bar that must be
// overlapped to the directdraw surface.
dxw.MapWindow(&x, &y, &nWidth, &nHeight);
OutTraceDW("%s: fixed pos=(%d,%d) size=(%d,%d)\n",
ApiName, x, y, nWidth, nHeight); ApiName, x, y, nWidth, nHeight);
}
} }
OutTraceB("%s: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n", OutTraceB("%s: fixed pos=(%d,%d) size=(%d,%d) Style=%x(%s) ExStyle=%x(%s)\n",
@ -1578,7 +1584,8 @@ HWND WINAPI extCreateWindowExW(
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle),
hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu); hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu);
} }
if(IsDebug) OutTrace("CreateWindowExW: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight()); OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n",
dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());
if((dxw.dwFlags6 & STRETCHMOVIES) && !wcscmp(lpWindowName, L"ActiveMovie Window")){ if((dxw.dwFlags6 & STRETCHMOVIES) && !wcscmp(lpWindowName, L"ActiveMovie Window")){
RECT MainWin; RECT MainWin;
@ -1620,7 +1627,8 @@ HWND WINAPI extCreateWindowExA(
dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle), dwStyle, ExplainStyle(dwStyle), dwExStyle, ExplainExStyle(dwExStyle),
hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu); hWndParent, hWndParent==HWND_MESSAGE?"(HWND_MESSAGE)":"", hMenu);
} }
if(IsDebug) OutTrace("CreateWindowExA: DEBUG screen=(%d,%d)\n", dxw.GetScreenWidth(), dxw.GetScreenHeight()); OutTraceB("CreateWindowExW: DEBUG fullscreen=%x mainwin=%x screen=(%d,%d)\n",
dxw.IsFullScreen(), dxw.GethWnd(), dxw.GetScreenWidth(), dxw.GetScreenHeight());
if((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, "ActiveMovie Window")){ if((dxw.dwFlags6 & STRETCHMOVIES) && !strcmp(lpWindowName, "ActiveMovie Window")){
RECT MainWin; RECT MainWin;

View File

@ -61,12 +61,12 @@ static HookEntry_Type JoyHooks[]={
{HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator {HOOK_IAT_CANDIDATE, 0, NULL, 0, 0} // terminator
}; };
void HookWinMM(HMODULE module) void HookWinMM(HMODULE module, char *libname)
{ {
HookLibrary(module, Hooks, "winmm.dll"); HookLibrary(module, Hooks, libname);
if(dxw.dwFlags2 & TIMESTRETCH) HookLibrary(module, TimeHooks, "winmm.dll"); if(dxw.dwFlags2 & TIMESTRETCH) HookLibrary(module, TimeHooks, libname);
if(dxw.dwFlags5 & REMAPMCI) HookLibrary(module, RemapHooks, "winmm.dll"); if(dxw.dwFlags5 & REMAPMCI) HookLibrary(module, RemapHooks, libname);
if(dxw.dwFlags6 & VIRTUALJOYSTICK) HookLibrary(module, JoyHooks, "winmm.dll"); if(dxw.dwFlags6 & VIRTUALJOYSTICK) HookLibrary(module, JoyHooks, libname);
} }
FARPROC Remap_WinMM_ProcAddress(LPCSTR proc, HMODULE hModule) FARPROC Remap_WinMM_ProcAddress(LPCSTR proc, HMODULE hModule)
@ -330,7 +330,7 @@ MMRESULT WINAPI extjoyGetDevCapsA(DWORD uJoyID, LPJOYCAPS pjc, UINT cbjc)
MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji) MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji)
{ {
OutTraceDW("joyGetPosEx: joyid=%d\n", uJoyID); OutTraceC("joyGetPosEx: joyid=%d\n", uJoyID);
if(uJoyID != 0) return JOYERR_PARMS; if(uJoyID != 0) return JOYERR_PARMS;
LONG x, y; LONG x, y;
HWND hwnd; HWND hwnd;
@ -352,8 +352,10 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji)
} }
} }
POINT pt; x=(XSPAN>>1);
y=(YSPAN>>1);
if(hwnd=dxw.GethWnd()){ if(hwnd=dxw.GethWnd()){
POINT pt;
RECT client; RECT client;
POINT upleft = {0,0}; POINT upleft = {0,0};
(*pGetClientRect)(hwnd, &client); (*pGetClientRect)(hwnd, &client);
@ -381,7 +383,7 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji)
if(INVERTJOYAXIS) if(INVERTJOYAXIS)
y = ((client.bottom - pt.y) * YSPAN) / client.bottom; // inverted y axis y = ((client.bottom - pt.y) * YSPAN) / client.bottom; // inverted y axis
else else
pt.y = (pt.y * YSPAN) / dxw.GetScreenHeight(); y = (pt.y * YSPAN) / client.bottom;
} }
ShowJoystick(pt.x, pt.y, dwButtons); ShowJoystick(pt.x, pt.y, dwButtons);
} }
@ -399,7 +401,7 @@ MMRESULT WINAPI extjoyGetPosEx(DWORD uJoyID, LPJOYINFOEX pji)
pji->dwButtons = dwButtons; pji->dwButtons = dwButtons;
pji->dwFlags = JOY_RETURNX|JOY_RETURNY|JOY_RETURNBUTTONS; pji->dwFlags = JOY_RETURNX|JOY_RETURNY|JOY_RETURNBUTTONS;
OutTraceDW("joyGetPosEx: joyid=%d pos=(%d,%d)\n", uJoyID, pji->dwXpos, pji->dwYpos); OutTraceC("joyGetPosEx: joyid=%d pos=(%d,%d)\n", uJoyID, pji->dwXpos, pji->dwYpos);
return JOYERR_NOERROR; return JOYERR_NOERROR;
} }

View File

@ -512,6 +512,9 @@ LRESULT CALLBACK extWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lp
case DXVK_CORNERIZE: case DXVK_CORNERIZE:
dx_Cornerize(hwnd); dx_Cornerize(hwnd);
break; break;
//case DXVK_FREEZETIME:
// dxw.ToggleFreezedTime();
// break;
case DXVK_TIMEFAST: case DXVK_TIMEFAST:
case DXVK_TIMESLOW: case DXVK_TIMESLOW:
if (dxw.dwFlags2 & TIMESTRETCH) { if (dxw.dwFlags2 & TIMESTRETCH) {

View File

@ -50,6 +50,10 @@ void CTabCompat::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry); DDX_Check(pDX, IDC_OVERRIDEREGISTRY, cTarget->m_OverrideRegistry);
DDX_Check(pDX, IDC_WOW64REGISTRY, cTarget->m_Wow64Registry); DDX_Check(pDX, IDC_WOW64REGISTRY, cTarget->m_Wow64Registry);
DDX_Check(pDX, IDC_WOW32REGISTRY, cTarget->m_Wow32Registry); DDX_Check(pDX, IDC_WOW32REGISTRY, cTarget->m_Wow32Registry);
// GOG patches
DDX_Check(pDX, IDC_HOOKGOGLIBS, cTarget->m_HookGOGLibs);
DDX_Check(pDX, IDC_BYPASSGOGLIBS, cTarget->m_BypassGOGLibs);
} }
BEGIN_MESSAGE_MAP(CTabCompat, CDialog) BEGIN_MESSAGE_MAP(CTabCompat, CDialog)

View File

@ -39,6 +39,7 @@ void CTabTiming::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_NORMALIZEPERFCOUNT, cTarget->m_NormalizePerfCount); DDX_Check(pDX, IDC_NORMALIZEPERFCOUNT, cTarget->m_NormalizePerfCount);
DDX_Check(pDX, IDC_QUARTERBLT, cTarget->m_QuarterBlt); DDX_Check(pDX, IDC_QUARTERBLT, cTarget->m_QuarterBlt);
DDX_Check(pDX, IDC_FINETIMING, cTarget->m_FineTiming); DDX_Check(pDX, IDC_FINETIMING, cTarget->m_FineTiming);
DDX_Check(pDX, IDC_TIMEFREEZE, cTarget->m_EnableTimeFreeze);
DDX_Text(pDX, IDC_MAXFPS, cTarget->m_MaxFPS); DDX_Text(pDX, IDC_MAXFPS, cTarget->m_MaxFPS);
DDX_LBIndex(pDX, IDC_LISTTS, cTarget->m_InitTS); DDX_LBIndex(pDX, IDC_LISTTS, cTarget->m_InitTS);
//{{AFX_DATA_MAP(CTabTiming) //{{AFX_DATA_MAP(CTabTiming)

View File

@ -81,6 +81,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_LimitResources = FALSE; m_LimitResources = FALSE;
m_CDROMDriveType = FALSE; m_CDROMDriveType = FALSE;
m_HideCDROMEmpty = FALSE; m_HideCDROMEmpty = FALSE;
m_HookGOGLibs = FALSE;
m_BypassGOGLibs = FALSE;
m_FontBypass = FALSE; m_FontBypass = FALSE;
m_BufferedIOFix = FALSE; m_BufferedIOFix = FALSE;
m_ZBufferClean = FALSE; m_ZBufferClean = FALSE;
@ -179,8 +181,8 @@ CTargetDlg::CTargetDlg(CWnd* pParent /*=NULL*/)
m_NormalizePerfCount = FALSE; m_NormalizePerfCount = FALSE;
m_QuarterBlt = FALSE; m_QuarterBlt = FALSE;
m_FineTiming = FALSE; m_FineTiming = FALSE;
m_EnableTimeFreeze = FALSE;
m_ReleaseMouse = FALSE; m_ReleaseMouse = FALSE;
//m_FrameCompensation = FALSE;
m_EnableHotKeys = TRUE; // default true !! m_EnableHotKeys = TRUE; // default true !!
m_InterceptRDTSC = FALSE; m_InterceptRDTSC = FALSE;
m_HookOpenGL = FALSE; m_HookOpenGL = FALSE;

View File

@ -145,8 +145,8 @@ public:
BOOL m_NormalizePerfCount; BOOL m_NormalizePerfCount;
BOOL m_QuarterBlt; BOOL m_QuarterBlt;
BOOL m_FineTiming; BOOL m_FineTiming;
BOOL m_EnableTimeFreeze;
BOOL m_ReleaseMouse; BOOL m_ReleaseMouse;
// BOOL m_FrameCompensation;
BOOL m_EnableHotKeys; BOOL m_EnableHotKeys;
BOOL m_InterceptRDTSC; BOOL m_InterceptRDTSC;
BOOL m_HookOpenGL; BOOL m_HookOpenGL;
@ -171,6 +171,8 @@ public:
BOOL m_LimitResources; BOOL m_LimitResources;
BOOL m_CDROMDriveType; BOOL m_CDROMDriveType;
BOOL m_HideCDROMEmpty; BOOL m_HideCDROMEmpty;
BOOL m_HookGOGLibs;
BOOL m_BypassGOGLibs;
BOOL m_FontBypass; BOOL m_FontBypass;
BOOL m_BufferedIOFix; BOOL m_BufferedIOFix;
BOOL m_ZBufferClean; BOOL m_ZBufferClean;

Binary file not shown.

View File

@ -81,6 +81,12 @@ void CNewCommandLineInfo::ParseParam(LPCTSTR lpszParam, BOOL bFlag, BOOL bLast)
strcpy_s(m_ConfigFileName, sizeof(m_ConfigFileName)-1, sParam.Mid(2,sizeof(m_ConfigFileName)-1)); strcpy_s(m_ConfigFileName, sizeof(m_ConfigFileName)-1, sParam.Mid(2,sizeof(m_ConfigFileName)-1));
return; return;
} }
if (sParam.MakeLower() == "e"){
// Exit (kill) existing DxWnd session
extern int KillProcByName(char *, BOOL);
KillProcByName("DxWnd.exe", TRUE);
exit(0);
}
} }
// Call the base class to ensure proper command line processing // Call the base class to ensure proper command line processing

Binary file not shown.

Binary file not shown.

View File

@ -270,6 +270,8 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES; if(dlg->m_LimitResources) t->flags2 |= LIMITRESOURCES;
if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE; if(dlg->m_CDROMDriveType) t->flags3 |= CDROMDRIVETYPE;
if(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY; if(dlg->m_HideCDROMEmpty) t->flags4 |= HIDECDROMEMPTY;
if(dlg->m_HookGOGLibs) t->flags6 |= HOOKGOGLIBS;
if(dlg->m_BypassGOGLibs) t->flags6 |= BYPASSGOGLIBS;
if(dlg->m_FontBypass) t->flags3 |= FONTBYPASS; if(dlg->m_FontBypass) t->flags3 |= FONTBYPASS;
if(dlg->m_BufferedIOFix) t->flags3 |= BUFFEREDIOFIX; if(dlg->m_BufferedIOFix) t->flags3 |= BUFFEREDIOFIX;
if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN; if(dlg->m_ZBufferClean) t->flags4 |= ZBUFFERCLEAN;
@ -380,7 +382,7 @@ static void SetTargetFromDlg(TARGETMAP *t, CTargetDlg *dlg)
if(dlg->m_QuarterBlt) t->flags5 |= QUARTERBLT; if(dlg->m_QuarterBlt) t->flags5 |= QUARTERBLT;
if(dlg->m_FineTiming) t->flags4 |= FINETIMING; if(dlg->m_FineTiming) t->flags4 |= FINETIMING;
if(dlg->m_ReleaseMouse) t->flags4 |= RELEASEMOUSE; if(dlg->m_ReleaseMouse) t->flags4 |= RELEASEMOUSE;
// if(dlg->m_FrameCompensation) t->flags4 |= FRAMECOMPENSATION; if(dlg->m_EnableTimeFreeze) t->flags4 |= ENABLETIMEFREEZE;
if(dlg->m_EnableHotKeys) t->flags4 |= ENABLEHOTKEYS; if(dlg->m_EnableHotKeys) t->flags4 |= ENABLEHOTKEYS;
if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC; if(dlg->m_InterceptRDTSC) t->flags4 |= INTERCEPTRDTSC;
if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL; if(dlg->m_HookOpenGL) t->flags2 |= HOOKOPENGL;
@ -542,6 +544,8 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0; dlg->m_LimitResources = t->flags2 & LIMITRESOURCES ? 1 : 0;
dlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0; dlg->m_CDROMDriveType = t->flags3 & CDROMDRIVETYPE ? 1 : 0;
dlg->m_HideCDROMEmpty = t->flags4 & HIDECDROMEMPTY ? 1 : 0; dlg->m_HideCDROMEmpty = t->flags4 & HIDECDROMEMPTY ? 1 : 0;
dlg->m_HookGOGLibs = t->flags6 & HOOKGOGLIBS ? 1 : 0;
dlg->m_BypassGOGLibs = t->flags6 & BYPASSGOGLIBS ? 1 : 0;
dlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0; dlg->m_FontBypass = t->flags3 & FONTBYPASS ? 1 : 0;
dlg->m_BufferedIOFix = t->flags3 & BUFFEREDIOFIX ? 1 : 0; dlg->m_BufferedIOFix = t->flags3 & BUFFEREDIOFIX ? 1 : 0;
dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0; dlg->m_ZBufferClean = t->flags4 & ZBUFFERCLEAN ? 1 : 0;
@ -623,7 +627,7 @@ static void SetDlgFromTarget(TARGETMAP *t, CTargetDlg *dlg)
dlg->m_QuarterBlt = t->flags5 & QUARTERBLT ? 1 : 0; dlg->m_QuarterBlt = t->flags5 & QUARTERBLT ? 1 : 0;
dlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0; dlg->m_FineTiming = t->flags4 & FINETIMING ? 1 : 0;
dlg->m_ReleaseMouse = t->flags4 & RELEASEMOUSE ? 1 : 0; dlg->m_ReleaseMouse = t->flags4 & RELEASEMOUSE ? 1 : 0;
// dlg->m_FrameCompensation = t->flags4 & FRAMECOMPENSATION ? 1 : 0; dlg->m_EnableTimeFreeze = t->flags4 & ENABLETIMEFREEZE ? 1 : 0;
dlg->m_EnableHotKeys = t->flags4 & ENABLEHOTKEYS ? 1 : 0; dlg->m_EnableHotKeys = t->flags4 & ENABLEHOTKEYS ? 1 : 0;
dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0; dlg->m_InterceptRDTSC = t->flags4 & INTERCEPTRDTSC ? 1 : 0;
dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0; dlg->m_HookOpenGL = t->flags2 & HOOKOPENGL ? 1 : 0;

Binary file not shown.

Binary file not shown.