From 094d020e05379d1503b0b55f1805cabf6d7bfdb2 Mon Sep 17 00:00:00 2001
From: FunkyFr3sh <cc.red.alert.1@googlemail.com>
Date: Sun, 1 Sep 2024 12:16:19 +0200
Subject: [PATCH] allow to override bpp via fake_mode

---
 src/winapi_hooks.c | 24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c
index 86e95b2..da7a99c 100644
--- a/src/winapi_hooks.c
+++ b/src/winapi_hooks.c
@@ -849,15 +849,27 @@ SHORT WINAPI fake_GetAsyncKeyState(int vKey)
 
 int WINAPI fake_GetDeviceCaps(HDC hdc, int index)
 {
-    if (g_ddraw.ref &&
-        g_ddraw.bpp &&
-        index == BITSPIXEL &&
-        (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main))
+    DWORD bpp = 0;
+
+    if (g_ddraw.ref && g_ddraw.bpp)
     {
-        return g_ddraw.bpp;
+        bpp = g_ddraw.bpp;
+    }
+    else if (g_config.fake_mode[0])
+    {
+        char* e = &g_config.fake_mode[0];
+
+        strtoul(e, &e, 0);
+        strtoul(e + 1, &e, 0);
+        bpp = strtoul(e + 1, &e, 0);
     }
 
-    if (g_ddraw.ref && g_ddraw.bpp == 8 && (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main))
+    if (bpp && index == BITSPIXEL && (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main))
+    {
+        return bpp;
+    }
+
+    if (bpp == 8 && (g_config.hook != 2 || g_ddraw.renderer == gdi_render_main))
     {
         if (index == RASTERCAPS)
         {