mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
add new setting to fake current display mode
This commit is contained in:
parent
06290bbe9d
commit
504c2eb1c5
@ -76,6 +76,7 @@ typedef struct CNCDDRAWCONFIG
|
|||||||
int min_font_size;
|
int min_font_size;
|
||||||
BOOL direct3d_passthrough;
|
BOOL direct3d_passthrough;
|
||||||
BOOL center_cursor_fix;
|
BOOL center_cursor_fix;
|
||||||
|
char fake_mode[128];
|
||||||
|
|
||||||
/* Hotkeys */
|
/* Hotkeys */
|
||||||
|
|
||||||
@ -97,7 +98,6 @@ typedef struct CNCDDRAWCONFIG
|
|||||||
BOOL infantryhack;
|
BOOL infantryhack;
|
||||||
BOOL stronghold_hack;
|
BOOL stronghold_hack;
|
||||||
BOOL mgs_hack;
|
BOOL mgs_hack;
|
||||||
BOOL vermeer_hack;
|
|
||||||
|
|
||||||
} CNCDDRAWCONFIG;
|
} CNCDDRAWCONFIG;
|
||||||
|
|
||||||
|
@ -89,6 +89,7 @@ void cfg_load()
|
|||||||
GET_INT(g_config.min_font_size, "min_font_size", 0);
|
GET_INT(g_config.min_font_size, "min_font_size", 0);
|
||||||
GET_BOOL(g_config.direct3d_passthrough, "direct3d_passthrough", FALSE);
|
GET_BOOL(g_config.direct3d_passthrough, "direct3d_passthrough", FALSE);
|
||||||
GET_BOOL(g_config.center_cursor_fix, "center_cursor_fix", FALSE);
|
GET_BOOL(g_config.center_cursor_fix, "center_cursor_fix", FALSE);
|
||||||
|
GET_STRING("fake_mode", "", g_config.fake_mode, sizeof(g_config.fake_mode));
|
||||||
|
|
||||||
/* Hotkeys */
|
/* Hotkeys */
|
||||||
|
|
||||||
@ -107,7 +108,6 @@ void cfg_load()
|
|||||||
GET_BOOL(g_config.infantryhack, "infantryhack", FALSE);
|
GET_BOOL(g_config.infantryhack, "infantryhack", FALSE);
|
||||||
GET_BOOL(g_config.stronghold_hack, "stronghold_hack", FALSE);
|
GET_BOOL(g_config.stronghold_hack, "stronghold_hack", FALSE);
|
||||||
GET_BOOL(g_config.mgs_hack, "mgs_hack", FALSE);
|
GET_BOOL(g_config.mgs_hack, "mgs_hack", FALSE);
|
||||||
GET_BOOL(g_config.vermeer_hack, "vermeer_hack", FALSE);
|
|
||||||
|
|
||||||
GameHandlesClose = GameHandlesClose || g_config.infantryhack;
|
GameHandlesClose = GameHandlesClose || g_config.infantryhack;
|
||||||
|
|
||||||
@ -302,6 +302,7 @@ static void cfg_create_ini()
|
|||||||
"min_font_size=0\n"
|
"min_font_size=0\n"
|
||||||
"direct3d_passthrough=false\n"
|
"direct3d_passthrough=false\n"
|
||||||
"center_cursor_fix=false\n"
|
"center_cursor_fix=false\n"
|
||||||
|
";fake_mode=640x480x32\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -1055,7 +1056,7 @@ static void cfg_create_ini()
|
|||||||
"; Vermeer\n"
|
"; Vermeer\n"
|
||||||
"[vermeer]\n"
|
"[vermeer]\n"
|
||||||
"adjmouse=true\n"
|
"adjmouse=true\n"
|
||||||
"vermeer_hack=true\n"
|
"fake_mode=640x480x32\n"
|
||||||
"\n"
|
"\n"
|
||||||
"; Wizardry 8\n"
|
"; Wizardry 8\n"
|
||||||
"[Wiz8]\n"
|
"[Wiz8]\n"
|
||||||
|
57
src/dd.c
57
src/dd.c
@ -476,41 +476,56 @@ HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc)
|
|||||||
|
|
||||||
memset(lpDDSurfaceDesc, 0, size);
|
memset(lpDDSurfaceDesc, 0, size);
|
||||||
|
|
||||||
|
unsigned long width = 1024;
|
||||||
|
unsigned long height = 768;
|
||||||
|
unsigned long bpp = 16;
|
||||||
|
|
||||||
|
if (g_ddraw.width)
|
||||||
|
{
|
||||||
|
width = g_ddraw.width;
|
||||||
|
height = g_ddraw.height;
|
||||||
|
bpp = g_ddraw.bpp;
|
||||||
|
}
|
||||||
|
else if (g_config.fake_mode[0])
|
||||||
|
{
|
||||||
|
char* e = &g_config.fake_mode[0];
|
||||||
|
|
||||||
|
width = strtoul(e, &e, 0);
|
||||||
|
height = strtoul(e + 1, &e, 0);
|
||||||
|
bpp = strtoul(e + 1, &e, 0);
|
||||||
|
}
|
||||||
|
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
lpDDSurfaceDesc->ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_PALETTEINDEXED8 | DDPF_RGB;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = bpp;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 8;
|
|
||||||
|
|
||||||
lpDDSurfaceDesc->dwSize = size;
|
lpDDSurfaceDesc->dwSize = size;
|
||||||
lpDDSurfaceDesc->dwFlags = DDSD_HEIGHT | DDSD_REFRESHRATE | DDSD_WIDTH | DDSD_PITCH | DDSD_PIXELFORMAT;
|
lpDDSurfaceDesc->dwFlags = DDSD_HEIGHT | DDSD_REFRESHRATE | DDSD_WIDTH | DDSD_PITCH | DDSD_PIXELFORMAT;
|
||||||
lpDDSurfaceDesc->dwRefreshRate = 60;
|
lpDDSurfaceDesc->dwRefreshRate = 60;
|
||||||
lpDDSurfaceDesc->dwHeight = g_ddraw.height ? g_ddraw.height : 768;
|
lpDDSurfaceDesc->dwWidth = width;
|
||||||
lpDDSurfaceDesc->dwWidth = g_ddraw.width ? g_ddraw.width : 1024;
|
lpDDSurfaceDesc->dwHeight = height;
|
||||||
|
|
||||||
lpDDSurfaceDesc->lPitch =
|
if (bpp == 32)
|
||||||
((lpDDSurfaceDesc->dwWidth * lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount + 63) & ~63) >> 3;
|
|
||||||
|
|
||||||
if (g_ddraw.bpp == 32 || g_config.vermeer_hack)
|
|
||||||
{
|
{
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 32;
|
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask = 0xFF0000;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask = 0xFF0000;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask = 0x00FF00;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask = 0x00FF00;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask = 0x0000FF;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask = 0x0000FF;
|
||||||
|
|
||||||
lpDDSurfaceDesc->lPitch =
|
|
||||||
((lpDDSurfaceDesc->dwWidth * lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount + 63) & ~63) >> 3;
|
|
||||||
}
|
}
|
||||||
else if (g_ddraw.bpp != 8)
|
else if (bpp == 8)
|
||||||
|
{
|
||||||
|
lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_PALETTEINDEXED8 | DDPF_RGB;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwFlags = DDPF_RGB;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 16;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount = 16;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask = 0xF800;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwRBitMask = 0xF800;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask = 0x07E0;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwGBitMask = 0x07E0;
|
||||||
lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask = 0x001F;
|
lpDDSurfaceDesc->ddpfPixelFormat.dwBBitMask = 0x001F;
|
||||||
|
|
||||||
lpDDSurfaceDesc->lPitch =
|
|
||||||
((lpDDSurfaceDesc->dwWidth * lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount + 63) & ~63) >> 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lpDDSurfaceDesc->lPitch =
|
||||||
|
((lpDDSurfaceDesc->dwWidth * lpDDSurfaceDesc->ddpfPixelFormat.dwRGBBitCount + 63) & ~63) >> 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
@ -1298,9 +1313,15 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
|
|||||||
|
|
||||||
if (dwFlags & DDSCL_NORMAL)
|
if (dwFlags & DDSCL_NORMAL)
|
||||||
{
|
{
|
||||||
if (g_config.vermeer_hack)
|
if (g_config.fake_mode[0])
|
||||||
{
|
{
|
||||||
dd_SetDisplayMode(640, 480, 16, 0);
|
char* e = &g_config.fake_mode[0];
|
||||||
|
|
||||||
|
unsigned long width = strtoul(e, &e, 0);
|
||||||
|
unsigned long height = strtoul(e + 1, &e, 0);
|
||||||
|
unsigned long bpp = strtoul(e + 1, &e, 0);
|
||||||
|
|
||||||
|
dd_SetDisplayMode(width, height, bpp, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user