1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-25 01:57:47 +01:00

add support for woms 2 high resolution patch zoom

This commit is contained in:
FunkyFr3sh 2024-05-08 05:54:56 +02:00
parent 8326407a64
commit 54d6ff5112
5 changed files with 43 additions and 5 deletions

View File

@ -123,6 +123,7 @@ typedef struct CNCDDRAW
BOOL isredalert; BOOL isredalert;
BOOL iscnc1; BOOL iscnc1;
BOOL iskkndx; BOOL iskkndx;
BOOL isworms2;
LONG upscale_hack_active; LONG upscale_hack_active;
HCURSOR old_cursor; HCURSOR old_cursor;
int show_cursor_count; int show_cursor_count;

View File

@ -1190,8 +1190,9 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
g_ddraw.isredalert = strcmp(g_ddraw.title, "Red Alert") == 0; g_ddraw.isredalert = strcmp(g_ddraw.title, "Red Alert") == 0;
g_ddraw.iscnc1 = strcmp(g_ddraw.title, "Command & Conquer") == 0; g_ddraw.iscnc1 = strcmp(g_ddraw.title, "Command & Conquer") == 0;
g_ddraw.iskkndx = strcmp(g_ddraw.title, "KKND Xtreme") == 0; g_ddraw.iskkndx = strcmp(g_ddraw.title, "KKND Xtreme") == 0;
g_ddraw.isworms2 = strcmp(g_ddraw.title, "worms2") == 0;
if (g_ddraw.iskkndx) if (g_ddraw.iskkndx || g_ddraw.isworms2)
{ {
g_ddraw.upscale_hack_width = 640; g_ddraw.upscale_hack_width = 640;
g_ddraw.upscale_hack_height = 480; g_ddraw.upscale_hack_height = 480;
@ -1202,7 +1203,7 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
g_ddraw.upscale_hack_height = 400; g_ddraw.upscale_hack_height = 400;
} }
if (g_config.vhack && !g_ddraw.isredalert && !g_ddraw.iscnc1 && !g_ddraw.iskkndx) if (g_config.vhack && !g_ddraw.isredalert && !g_ddraw.iscnc1 && !g_ddraw.iskkndx && !g_ddraw.isworms2)
{ {
g_config.vhack = 0; g_config.vhack = 0;
} }

View File

@ -174,13 +174,15 @@ static void ogl_build_programs()
if (!is_upscaler || if (!is_upscaler ||
g_ddraw.render.viewport.width != g_ddraw.width || g_ddraw.render.viewport.width != g_ddraw.width ||
g_ddraw.render.viewport.height != g_ddraw.height) g_ddraw.render.viewport.height != g_ddraw.height ||
g_config.vhack)
{ {
g_ogl.scale_program = oglu_build_program_from_file(shader_path, core_profile); g_ogl.scale_program = oglu_build_program_from_file(shader_path, core_profile);
if (!g_ogl.scale_program && if (!g_ogl.scale_program &&
(g_ddraw.render.viewport.width != g_ddraw.width || (g_ddraw.render.viewport.width != g_ddraw.width ||
g_ddraw.render.viewport.height != g_ddraw.height)) g_ddraw.render.viewport.height != g_ddraw.height ||
g_config.vhack))
{ {
g_ogl.scale_program = g_ogl.scale_program =
oglu_build_program( oglu_build_program(

View File

@ -635,9 +635,29 @@ static unsigned char util_get_pixel(int x, int y)
BOOL util_detect_low_res_screen() BOOL util_detect_low_res_screen()
{ {
/* struct Copied from wkReSolution */
typedef struct
{
PVOID UnkTable1;
DWORD Unk1, Unk2, Unk3, Unk4;
PVOID UnkDD, UnkTable2;
DWORD Unk5;
DWORD RenderWidth, RenderHeight;
DWORD Unk6, Unk7;
DWORD WidthRT, HeightRT;
DWORD HalfWidth, HalfHeight;
DWORD Unk8;
PCHAR UnkC;
LPDIRECTDRAW lpDD;
} W2DDSTRUCT, * LPW2DDSTRUCT;
static int* in_movie = (int*)0x00665F58; static int* in_movie = (int*)0x00665F58;
static int* is_vqa_640 = (int*)0x0065D7BC; static int* is_vqa_640 = (int*)0x0065D7BC;
static BYTE* should_stretch = (BYTE*)0x00607D78; static BYTE* should_stretch = (BYTE*)0x00607D78;
static LPW2DDSTRUCT* pW2DS;
if (!pW2DS)
pW2DS = (char*)GetModuleHandleA(NULL) + 0x799C4;
if (g_ddraw.width <= g_ddraw.upscale_hack_width || g_ddraw.height <= g_ddraw.upscale_hack_height) if (g_ddraw.width <= g_ddraw.upscale_hack_width || g_ddraw.height <= g_ddraw.upscale_hack_height)
{ {
@ -663,6 +683,20 @@ BOOL util_detect_low_res_screen()
{ {
return util_get_pixel(g_ddraw.width - 3, 3) == 0; return util_get_pixel(g_ddraw.width - 3, 3) == 0;
} }
else if (g_ddraw.isworms2)
{
if ((*pW2DS)->RenderWidth < g_ddraw.width && (*pW2DS)->RenderHeight < g_ddraw.height)
{
if (g_ddraw.upscale_hack_width != (*pW2DS)->RenderWidth || g_ddraw.upscale_hack_height != (*pW2DS)->RenderHeight)
{
g_ddraw.upscale_hack_width = (*pW2DS)->RenderWidth;
g_ddraw.upscale_hack_height = (*pW2DS)->RenderHeight;
InterlockedExchange(&g_ddraw.upscale_hack_active, FALSE);
}
return TRUE;
}
}
return FALSE; return FALSE;
} }

View File

@ -84,7 +84,7 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint)
y = min(pt.y, g_ddraw.height - 1); y = min(pt.y, g_ddraw.height - 1);
} }
if (g_config.vhack && InterlockedExchangeAdd(&g_ddraw.upscale_hack_active, 0)) if (g_config.vhack && !g_ddraw.isworms2 && InterlockedExchangeAdd(&g_ddraw.upscale_hack_active, 0))
{ {
diffx = 0; diffx = 0;
diffy = 0; diffy = 0;