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:
parent
2c9572fa77
commit
06026c6ab2
@ -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
|
||||||
|
@ -26,5 +26,6 @@ plocktoggle=
|
|||||||
fpstoggle=
|
fpstoggle=
|
||||||
printscreen=0x7B
|
printscreen=0x7B
|
||||||
corner=0x7A
|
corner=0x7A
|
||||||
|
freezetime=0x79
|
||||||
|
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
3
build/redist/dpwsock.dll
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:7fe37bba5475b66375d286ee92bc10cfcdeff6e9fa1ef112eb2813b86d4d4065
|
||||||
|
size 42768
|
@ -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");
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
@ -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");
|
||||||
|
}
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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.
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
@ -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.
@ -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.
@ -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;
|
||||||
|
BIN
host/host.aps
BIN
host/host.aps
Binary file not shown.
BIN
host/resource
BIN
host/resource
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user