mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-25 01:57:47 +01:00
align and tweak some more
This commit is contained in:
parent
b417da74f6
commit
be79bb8c8b
@ -5,6 +5,7 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
extern BOOL GameHandlesClose;
|
extern BOOL GameHandlesClose;
|
||||||
|
extern void* g_fake_primary_surface_export;
|
||||||
extern HMODULE g_ddraw_module;
|
extern HMODULE g_ddraw_module;
|
||||||
|
|
||||||
typedef enum PROCESS_DPI_AWARENESS {
|
typedef enum PROCESS_DPI_AWARENESS {
|
||||||
|
27
src/config.c
27
src/config.c
@ -11,9 +11,9 @@
|
|||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
static BOOL cfg_get_bool(LPCSTR key, BOOL defaultValue);
|
static BOOL cfg_get_bool(LPCSTR key, BOOL default_value);
|
||||||
static int cfg_get_int(LPCSTR key, int defaultValue);
|
static int cfg_get_int(LPCSTR key, int default_value);
|
||||||
static DWORD cfg_get_string(LPCSTR key, LPCSTR defaultValue, LPSTR outString, DWORD outSize);
|
static DWORD cfg_get_string(LPCSTR key, LPCSTR default_value, LPSTR out_string, DWORD out_size);
|
||||||
static void cfg_create_ini();
|
static void cfg_create_ini();
|
||||||
|
|
||||||
cnc_ddraw_config g_config =
|
cnc_ddraw_config g_config =
|
||||||
@ -71,6 +71,7 @@ void cfg_load()
|
|||||||
//can't fully set it up here due to missing g_ddraw->mode.dmDisplayFrequency
|
//can't fully set it up here due to missing g_ddraw->mode.dmDisplayFrequency
|
||||||
|
|
||||||
int max_ticks = cfg_get_int("maxgameticks", 0);
|
int max_ticks = cfg_get_int("maxgameticks", 0);
|
||||||
|
|
||||||
if (max_ticks > 0 && max_ticks <= 1000)
|
if (max_ticks > 0 && max_ticks <= 1000)
|
||||||
{
|
{
|
||||||
if (g_ddraw->accurate_timers)
|
if (g_ddraw->accurate_timers)
|
||||||
@ -93,10 +94,14 @@ void cfg_load()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((g_ddraw->fullscreen = cfg_get_bool("fullscreen", FALSE)))
|
if ((g_ddraw->fullscreen = cfg_get_bool("fullscreen", FALSE)))
|
||||||
|
{
|
||||||
g_config.window_rect.left = g_config.window_rect.top = -32000;
|
g_config.window_rect.left = g_config.window_rect.top = -32000;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(g_ddraw->handlemouse = cfg_get_bool("handlemouse", TRUE)))
|
if (!(g_ddraw->handlemouse = cfg_get_bool("handlemouse", TRUE)))
|
||||||
|
{
|
||||||
g_ddraw->adjmouse = TRUE;
|
g_ddraw->adjmouse = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
if (cfg_get_bool("singlecpu", TRUE))
|
if (cfg_get_bool("singlecpu", TRUE))
|
||||||
{
|
{
|
||||||
@ -114,7 +119,9 @@ void cfg_load()
|
|||||||
g_ddraw->render.bpp = cfg_get_int("bpp", 0);
|
g_ddraw->render.bpp = cfg_get_int("bpp", 0);
|
||||||
|
|
||||||
if (g_ddraw->render.bpp != 16 && g_ddraw->render.bpp != 24 && g_ddraw->render.bpp != 32)
|
if (g_ddraw->render.bpp != 16 && g_ddraw->render.bpp != 24 && g_ddraw->render.bpp != 32)
|
||||||
|
{
|
||||||
g_ddraw->render.bpp = 0;
|
g_ddraw->render.bpp = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// to do: read .glslp config file instead of the shader and apply the correct settings
|
// to do: read .glslp config file instead of the shader and apply the correct settings
|
||||||
cfg_get_string("shader", "", g_ddraw->shader, sizeof(g_ddraw->shader));
|
cfg_get_string("shader", "", g_ddraw->shader, sizeof(g_ddraw->shader));
|
||||||
@ -498,10 +505,10 @@ static void cfg_create_ini()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD cfg_get_string(LPCSTR key, LPCSTR defaultValue, LPSTR outString, DWORD outSize)
|
static DWORD cfg_get_string(LPCSTR key, LPCSTR default_value, LPSTR out_string, DWORD out_size)
|
||||||
{
|
{
|
||||||
DWORD s = GetPrivateProfileStringA(
|
DWORD s = GetPrivateProfileStringA(
|
||||||
g_config.process_file_name, key, "", outString, outSize, g_config.ini_path);
|
g_config.process_file_name, key, "", out_string, out_size, g_config.ini_path);
|
||||||
|
|
||||||
if (s > 0)
|
if (s > 0)
|
||||||
{
|
{
|
||||||
@ -517,21 +524,21 @@ static DWORD cfg_get_string(LPCSTR key, LPCSTR defaultValue, LPSTR outString, DW
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetPrivateProfileStringA("ddraw", key, defaultValue, outString, outSize, g_config.ini_path);
|
return GetPrivateProfileStringA("ddraw", key, default_value, out_string, out_size, g_config.ini_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL cfg_get_bool(LPCSTR key, BOOL defaultValue)
|
static BOOL cfg_get_bool(LPCSTR key, BOOL default_value)
|
||||||
{
|
{
|
||||||
char value[8];
|
char value[8];
|
||||||
cfg_get_string(key, defaultValue ? "Yes" : "No", value, sizeof(value));
|
cfg_get_string(key, default_value ? "Yes" : "No", value, sizeof(value));
|
||||||
|
|
||||||
return (_stricmp(value, "yes") == 0 || _stricmp(value, "true") == 0 || _stricmp(value, "1") == 0);
|
return (_stricmp(value, "yes") == 0 || _stricmp(value, "true") == 0 || _stricmp(value, "1") == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cfg_get_int(LPCSTR key, int defaultValue)
|
static int cfg_get_int(LPCSTR key, int default_value)
|
||||||
{
|
{
|
||||||
char def_value[16];
|
char def_value[16];
|
||||||
_snprintf(def_value, sizeof(def_value), "%d", defaultValue);
|
_snprintf(def_value, sizeof(def_value), "%d", default_value);
|
||||||
|
|
||||||
char value[16];
|
char value[16];
|
||||||
cfg_get_string(key, def_value, value, sizeof(value));
|
cfg_get_string(key, def_value, value, sizeof(value));
|
||||||
|
42
src/dd.c
42
src/dd.c
@ -56,6 +56,7 @@ HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVO
|
|||||||
memset(&m, 0, sizeof(DEVMODE));
|
memset(&m, 0, sizeof(DEVMODE));
|
||||||
m.dmSize = sizeof(DEVMODE);
|
m.dmSize = sizeof(DEVMODE);
|
||||||
i = 0;
|
i = 0;
|
||||||
|
|
||||||
while (EnumDisplaySettings(NULL, i, &m))
|
while (EnumDisplaySettings(NULL, i, &m))
|
||||||
{
|
{
|
||||||
if (refresh_rate == m.dmDisplayFrequency &&
|
if (refresh_rate == m.dmDisplayFrequency &&
|
||||||
@ -91,6 +92,7 @@ HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVO
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&m, 0, sizeof(DEVMODE));
|
memset(&m, 0, sizeof(DEVMODE));
|
||||||
m.dmSize = sizeof(DEVMODE);
|
m.dmSize = sizeof(DEVMODE);
|
||||||
i++;
|
i++;
|
||||||
@ -264,6 +266,7 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
g_ddraw->render.mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
g_ddraw->render.mode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
|
||||||
g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width;
|
g_ddraw->render.mode.dmPelsWidth = g_ddraw->render.width;
|
||||||
g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
|
g_ddraw->render.mode.dmPelsHeight = g_ddraw->render.height;
|
||||||
|
|
||||||
if (g_ddraw->render.bpp)
|
if (g_ddraw->render.bpp)
|
||||||
{
|
{
|
||||||
g_ddraw->render.mode.dmFields |= DM_BITSPERPEL;
|
g_ddraw->render.mode.dmFields |= DM_BITSPERPEL;
|
||||||
@ -300,7 +303,7 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
|
|
||||||
BOOL border = g_ddraw->border;
|
BOOL border = g_ddraw->border;
|
||||||
|
|
||||||
if(g_ddraw->fullscreen)
|
if (g_ddraw->fullscreen)
|
||||||
{
|
{
|
||||||
g_ddraw->render.width = g_ddraw->mode.dmPelsWidth;
|
g_ddraw->render.width = g_ddraw->mode.dmPelsWidth;
|
||||||
g_ddraw->render.height = g_ddraw->mode.dmPelsHeight;
|
g_ddraw->render.height = g_ddraw->mode.dmPelsHeight;
|
||||||
@ -318,11 +321,11 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(g_ddraw->render.width < g_ddraw->width)
|
if (g_ddraw->render.width < g_ddraw->width)
|
||||||
{
|
{
|
||||||
g_ddraw->render.width = g_ddraw->width;
|
g_ddraw->render.width = g_ddraw->width;
|
||||||
}
|
}
|
||||||
if(g_ddraw->render.height < g_ddraw->height)
|
if (g_ddraw->render.height < g_ddraw->height)
|
||||||
{
|
{
|
||||||
g_ddraw->render.height = g_ddraw->height;
|
g_ddraw->render.height = g_ddraw->height;
|
||||||
}
|
}
|
||||||
@ -431,12 +434,16 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_ddraw->nonexclusive && !g_ddraw->windowed && g_ddraw->renderer == ogl_render_main)
|
if (g_ddraw->nonexclusive && !g_ddraw->windowed && g_ddraw->renderer == ogl_render_main)
|
||||||
|
{
|
||||||
g_ddraw->render.height++;
|
g_ddraw->render.height++;
|
||||||
|
}
|
||||||
|
|
||||||
if (!g_ddraw->handlemouse)
|
if (!g_ddraw->handlemouse)
|
||||||
|
{
|
||||||
g_ddraw->boxing = maintas = FALSE;
|
g_ddraw->boxing = maintas = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
g_ddraw->render.viewport.width = g_ddraw->render.width;
|
g_ddraw->render.viewport.width = g_ddraw->render.width;
|
||||||
g_ddraw->render.viewport.height = g_ddraw->render.height;
|
g_ddraw->render.viewport.height = g_ddraw->render.height;
|
||||||
g_ddraw->render.viewport.x = 0;
|
g_ddraw->render.viewport.x = 0;
|
||||||
@ -505,15 +512,19 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
int cx = g_ddraw->mode.dmPelsHeight ? g_ddraw->mode.dmPelsHeight : g_ddraw->render.height;
|
int cx = g_ddraw->mode.dmPelsHeight ? g_ddraw->mode.dmPelsHeight : g_ddraw->render.height;
|
||||||
int x = (g_config.window_rect.left != -32000) ? g_config.window_rect.left : (cy / 2) - (g_ddraw->render.width / 2);
|
int x = (g_config.window_rect.left != -32000) ? g_config.window_rect.left : (cy / 2) - (g_ddraw->render.width / 2);
|
||||||
int y = (g_config.window_rect.top != -32000) ? g_config.window_rect.top : (cx / 2) - (g_ddraw->render.height / 2);
|
int y = (g_config.window_rect.top != -32000) ? g_config.window_rect.top : (cx / 2) - (g_ddraw->render.height / 2);
|
||||||
|
|
||||||
RECT dst = { x, y, g_ddraw->render.width + x, g_ddraw->render.height + y };
|
RECT dst = { x, y, g_ddraw->render.width + x, g_ddraw->render.height + y };
|
||||||
|
|
||||||
AdjustWindowRect(&dst, GetWindowLong(g_ddraw->hwnd, GWL_STYLE), FALSE);
|
AdjustWindowRect(&dst, GetWindowLong(g_ddraw->hwnd, GWL_STYLE), FALSE);
|
||||||
real_SetWindowPos(g_ddraw->hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
real_SetWindowPos(g_ddraw->hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
real_MoveWindow(g_ddraw->hwnd, dst.left, dst.top, (dst.right - dst.left), (dst.bottom - dst.top), TRUE);
|
real_MoveWindow(g_ddraw->hwnd, dst.left, dst.top, (dst.right - dst.left), (dst.bottom - dst.top), TRUE);
|
||||||
|
|
||||||
BOOL d3d9_active = FALSE;
|
BOOL d3d9_active = FALSE;
|
||||||
|
|
||||||
if (g_ddraw->renderer == d3d9_render_main)
|
if (g_ddraw->renderer == d3d9_render_main)
|
||||||
{
|
{
|
||||||
d3d9_active = d3d9_create();
|
d3d9_active = d3d9_create();
|
||||||
|
|
||||||
if (!d3d9_active)
|
if (!d3d9_active)
|
||||||
{
|
{
|
||||||
d3d9_release();
|
d3d9_release();
|
||||||
@ -535,9 +546,11 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
BOOL d3d9_active = FALSE;
|
BOOL d3d9_active = FALSE;
|
||||||
|
|
||||||
if (g_ddraw->renderer == d3d9_render_main)
|
if (g_ddraw->renderer == d3d9_render_main)
|
||||||
{
|
{
|
||||||
d3d9_active = d3d9_create();
|
d3d9_active = d3d9_create();
|
||||||
|
|
||||||
if (!d3d9_active)
|
if (!d3d9_active)
|
||||||
{
|
{
|
||||||
d3d9_release();
|
d3d9_release();
|
||||||
@ -554,7 +567,9 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (g_ddraw->wine)
|
if (g_ddraw->wine)
|
||||||
|
{
|
||||||
real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, GetWindowLong(g_ddraw->hwnd, GWL_STYLE) | WS_MINIMIZEBOX);
|
real_SetWindowLongA(g_ddraw->hwnd, GWL_STYLE, GetWindowLong(g_ddraw->hwnd, GWL_STYLE) | WS_MINIMIZEBOX);
|
||||||
|
}
|
||||||
|
|
||||||
real_SetWindowPos(g_ddraw->hwnd, HWND_TOPMOST, 0, 0, g_ddraw->render.width, g_ddraw->render.height, SWP_SHOWWINDOW);
|
real_SetWindowPos(g_ddraw->hwnd, HWND_TOPMOST, 0, 0, g_ddraw->render.width, g_ddraw->render.height, SWP_SHOWWINDOW);
|
||||||
g_ddraw->last_set_window_pos_tick = timeGetTime();
|
g_ddraw->last_set_window_pos_tick = timeGetTime();
|
||||||
@ -562,12 +577,12 @@ HRESULT dd_SetDisplayMode(DWORD width, DWORD height, DWORD bpp)
|
|||||||
mouse_lock();
|
mouse_lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(g_ddraw->render.viewport.x != 0 || g_ddraw->render.viewport.y != 0)
|
if (g_ddraw->render.viewport.x != 0 || g_ddraw->render.viewport.y != 0)
|
||||||
{
|
{
|
||||||
RedrawWindow(g_ddraw->hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE);
|
RedrawWindow(g_ddraw->hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(g_ddraw->render.thread == NULL)
|
if (g_ddraw->render.thread == NULL)
|
||||||
{
|
{
|
||||||
InterlockedExchange(&g_ddraw->render.palette_updated, TRUE);
|
InterlockedExchange(&g_ddraw->render.palette_updated, TRUE);
|
||||||
InterlockedExchange(&g_ddraw->render.surface_updated, TRUE);
|
InterlockedExchange(&g_ddraw->render.surface_updated, TRUE);
|
||||||
@ -636,7 +651,9 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
|
|||||||
g_ddraw->iscnc1 = strcmp(g_ddraw->title, "Command & Conquer") == 0;
|
g_ddraw->iscnc1 = strcmp(g_ddraw->title, "Command & Conquer") == 0;
|
||||||
|
|
||||||
if (g_ddraw->vhack && !g_ddraw->isredalert && !g_ddraw->iscnc1)
|
if (g_ddraw->vhack && !g_ddraw->isredalert && !g_ddraw->iscnc1)
|
||||||
|
{
|
||||||
g_ddraw->vhack = 0;
|
g_ddraw->vhack = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
@ -668,19 +685,26 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE h)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
static DWORD next_game_tick;
|
static DWORD next_game_tick;
|
||||||
|
|
||||||
if (!next_game_tick)
|
if (!next_game_tick)
|
||||||
{
|
{
|
||||||
next_game_tick = timeGetTime();
|
next_game_tick = timeGetTime();
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
next_game_tick += g_ddraw->flip_limiter.tick_length;
|
next_game_tick += g_ddraw->flip_limiter.tick_length;
|
||||||
DWORD tick_count = timeGetTime();
|
DWORD tick_count = timeGetTime();
|
||||||
|
|
||||||
int sleep_time = next_game_tick - tick_count;
|
int sleep_time = next_game_tick - tick_count;
|
||||||
|
|
||||||
if (sleep_time <= 0 || sleep_time > g_ddraw->flip_limiter.tick_length)
|
if (sleep_time <= 0 || sleep_time > g_ddraw->flip_limiter.tick_length)
|
||||||
|
{
|
||||||
next_game_tick = tick_count;
|
next_game_tick = tick_count;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
Sleep(sleep_time);
|
Sleep(sleep_time);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
@ -723,7 +747,7 @@ ULONG dd_Release()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(g_ddraw->render.hdc)
|
if (g_ddraw->render.hdc)
|
||||||
{
|
{
|
||||||
ReleaseDC(g_ddraw->hwnd, g_ddraw->render.hdc);
|
ReleaseDC(g_ddraw->hwnd, g_ddraw->render.hdc);
|
||||||
g_ddraw->render.hdc = NULL;
|
g_ddraw->render.hdc = NULL;
|
||||||
@ -754,8 +778,10 @@ ULONG dd_Release()
|
|||||||
|
|
||||||
/* restore old wndproc, subsequent ddraw creation will otherwise fail */
|
/* restore old wndproc, subsequent ddraw creation will otherwise fail */
|
||||||
real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)g_ddraw->wndproc);
|
real_SetWindowLongA(g_ddraw->hwnd, GWL_WNDPROC, (LONG)g_ddraw->wndproc);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, g_ddraw);
|
HeapFree(GetProcessHeap(), 0, g_ddraw);
|
||||||
g_ddraw = NULL;
|
g_ddraw = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "dllmain.h"
|
||||||
#include "dd.h"
|
#include "dd.h"
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
#include "ddsurface.h"
|
#include "ddsurface.h"
|
||||||
@ -11,8 +12,6 @@
|
|||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
|
|
||||||
void *g_fake_primary_surface_export; // hack for some warcraft II tools
|
|
||||||
|
|
||||||
HRESULT dds_AddAttachedSurface(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWSURFACE lpDDSurface)
|
HRESULT dds_AddAttachedSurface(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWSURFACE lpDDSurface)
|
||||||
{
|
{
|
||||||
IDirectDrawSurface_AddRef(lpDDSurface);
|
IDirectDrawSurface_AddRef(lpDDSurface);
|
||||||
@ -713,6 +712,7 @@ HRESULT dds_SetPalette(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWPALETTE lpDDPal
|
|||||||
HRESULT dds_Unlock(IDirectDrawSurfaceImpl *This, LPVOID lpRect)
|
HRESULT dds_Unlock(IDirectDrawSurfaceImpl *This, LPVOID lpRect)
|
||||||
{
|
{
|
||||||
HWND hwnd = g_ddraw->bnet_active ? FindWindowEx(HWND_DESKTOP, NULL, "SDlgDialog", NULL) : NULL;
|
HWND hwnd = g_ddraw->bnet_active ? FindWindowEx(HWND_DESKTOP, NULL, "SDlgDialog", NULL) : NULL;
|
||||||
|
|
||||||
if (hwnd && (This->caps & DDSCAPS_PRIMARYSURFACE))
|
if (hwnd && (This->caps & DDSCAPS_PRIMARYSURFACE))
|
||||||
{
|
{
|
||||||
if (g_ddraw->primary->palette && g_ddraw->primary->palette->data_rgb)
|
if (g_ddraw->primary->palette && g_ddraw->primary->palette->data_rgb)
|
||||||
@ -831,11 +831,11 @@ HRESULT dd_CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE FA
|
|||||||
dst_surface->bmi->bmiHeader.biBitCount = dst_surface->bpp;
|
dst_surface->bmi->bmiHeader.biBitCount = dst_surface->bpp;
|
||||||
dst_surface->bmi->bmiHeader.biCompression = dst_surface->bpp == 16 ? BI_BITFIELDS : BI_RGB;
|
dst_surface->bmi->bmiHeader.biCompression = dst_surface->bpp == 16 ? BI_BITFIELDS : BI_RGB;
|
||||||
|
|
||||||
WORD c_clr_bits = (WORD)(dst_surface->bmi->bmiHeader.biPlanes * dst_surface->bmi->bmiHeader.biBitCount);
|
WORD clr_bits = (WORD)(dst_surface->bmi->bmiHeader.biPlanes * dst_surface->bmi->bmiHeader.biBitCount);
|
||||||
if (c_clr_bits < 24)
|
if (clr_bits < 24)
|
||||||
dst_surface->bmi->bmiHeader.biClrUsed = (1 << c_clr_bits);
|
dst_surface->bmi->bmiHeader.biClrUsed = (1 << clr_bits);
|
||||||
|
|
||||||
dst_surface->bmi->bmiHeader.biSizeImage = ((dst_surface->width * c_clr_bits + 31) & ~31) / 8 * dst_surface->height;
|
dst_surface->bmi->bmiHeader.biSizeImage = ((dst_surface->width * clr_bits + 31) & ~31) / 8 * dst_surface->height;
|
||||||
|
|
||||||
if (dst_surface->bpp == 8)
|
if (dst_surface->bpp == 8)
|
||||||
{
|
{
|
||||||
|
@ -59,11 +59,11 @@ double dbg_counter_stop()
|
|||||||
|
|
||||||
void dbg_debug_string(const char *format, ...)
|
void dbg_debug_string(const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
char buffer[512] = { 0 };
|
char buffer[512] = { 0 };
|
||||||
_vsnprintf(buffer, sizeof(buffer), format, args);
|
_vsnprintf(buffer, sizeof(buffer), format, args);
|
||||||
OutputDebugStringA(buffer);
|
OutputDebugStringA(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
int dbg_printf(const char *fmt, ...)
|
int dbg_printf(const char *fmt, ...)
|
||||||
|
@ -17,6 +17,9 @@ DWORD AmdPowerXpressRequestHighPerformance = 1;
|
|||||||
// export for cncnet cnc games
|
// export for cncnet cnc games
|
||||||
BOOL GameHandlesClose;
|
BOOL GameHandlesClose;
|
||||||
|
|
||||||
|
// export for some warcraft II tools
|
||||||
|
void *g_fake_primary_surface_export;
|
||||||
|
|
||||||
|
|
||||||
HMODULE g_ddraw_module;
|
HMODULE g_ddraw_module;
|
||||||
|
|
||||||
|
@ -89,17 +89,25 @@ void util_update_bnet_pos(int new_x, int new_y)
|
|||||||
if (rc.bottom - rc.top <= g_ddraw->height)
|
if (rc.bottom - rc.top <= g_ddraw->height)
|
||||||
{
|
{
|
||||||
if (rc.bottom > mainrc.bottom && abs(mainrc.bottom - rc.bottom) > abs(adj_y))
|
if (rc.bottom > mainrc.bottom && abs(mainrc.bottom - rc.bottom) > abs(adj_y))
|
||||||
|
{
|
||||||
adj_y = mainrc.bottom - rc.bottom;
|
adj_y = mainrc.bottom - rc.bottom;
|
||||||
|
}
|
||||||
else if (rc.top < mainrc.top && abs(mainrc.top - rc.top) > abs(adj_y))
|
else if (rc.top < mainrc.top && abs(mainrc.top - rc.top) > abs(adj_y))
|
||||||
|
{
|
||||||
adj_y = mainrc.top - rc.top;
|
adj_y = mainrc.top - rc.top;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc.right - rc.left <= g_ddraw->width)
|
if (rc.right - rc.left <= g_ddraw->width)
|
||||||
{
|
{
|
||||||
if (rc.right > mainrc.right && abs(mainrc.right - rc.right) > abs(adj_x))
|
if (rc.right > mainrc.right && abs(mainrc.right - rc.right) > abs(adj_x))
|
||||||
|
{
|
||||||
adj_x = mainrc.right - rc.right;
|
adj_x = mainrc.right - rc.right;
|
||||||
|
}
|
||||||
else if (rc.left < mainrc.left && abs(mainrc.left - rc.left) > abs(adj_x))
|
else if (rc.left < mainrc.left && abs(mainrc.left - rc.left) > abs(adj_x))
|
||||||
|
{
|
||||||
adj_x = mainrc.left - rc.left;
|
adj_x = mainrc.left - rc.left;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hwnd = FindWindowEx(HWND_DESKTOP, hwnd, "SDlgDialog", NULL);
|
hwnd = FindWindowEx(HWND_DESKTOP, hwnd, "SDlgDialog", NULL);
|
||||||
|
@ -231,9 +231,9 @@ int WINAPI fake_GetSystemMetrics(int nIndex)
|
|||||||
|
|
||||||
BOOL WINAPI fake_SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
|
BOOL WINAPI fake_SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
|
||||||
{
|
{
|
||||||
UINT reqFlags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER;
|
UINT req_flags = SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER;
|
||||||
|
|
||||||
if (g_ddraw && g_ddraw->hwnd == hWnd && (uFlags & reqFlags) != reqFlags)
|
if (g_ddraw && g_ddraw->hwnd == hWnd && (uFlags & req_flags) != req_flags)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
return real_SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
return real_SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, uFlags);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user