From 52310540961602948843b2f45599efb4cd771c89 Mon Sep 17 00:00:00 2001
From: FunkyFr3sh <cc.red.alert.1@googlemail.com>
Date: Fri, 25 Sep 2020 08:07:41 +0200
Subject: [PATCH] #29 Fix Sierra City Building series scrolling bugs

---
 inc/main.h     | 2 +-
 src/main.c     | 7 +++++--
 src/settings.c | 8 ++++----
 3 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/inc/main.h b/inc/main.h
index 8405ac8..b245998 100644
--- a/inc/main.h
+++ b/inc/main.h
@@ -132,7 +132,7 @@ typedef struct IDirectDrawImpl
     BOOL accurateTimers;
     BOOL resizable;
     BOOL ddrawrefcount0;
-    BOOL forcewmmove;
+    BOOL sierrahack;
     BOOL bnetActive;
     BOOL bnetWasFullscreen;
     BOOL bnetWasUpscaled;
diff --git a/src/main.c b/src/main.c
index edc3ce0..5d19b6b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -957,8 +957,11 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
         This->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)This->renderer, NULL, 0, NULL);
     }
 
-    if (ddraw->forcewmmove)
+    if (ddraw->sierrahack)
+    {
         PostMessageA(ddraw->hWnd, WM_MOVE, 0, MAKELPARAM(-32000, -32000));
+        PostMessageA(ddraw->hWnd, WM_DISPLAYCHANGE, ddraw->bpp, MAKELPARAM(ddraw->width, ddraw->height));
+    }
 
     return DD_OK;
 }
@@ -1379,7 +1382,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
             if (!ddraw->handlemouse)
                 RedrawWindow(hWnd, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN);
 
-            if (ddraw->forcewmmove)
+            if (ddraw->sierrahack)
             {
                 lParam = 0;
                 break;
diff --git a/src/settings.c b/src/settings.c
index 8dabff5..63d4b96 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -44,7 +44,7 @@ void Settings_Load()
     ddraw->accurateTimers = GetBool("accuratetimers", FALSE);
     ddraw->resizable = GetBool("resizable", TRUE);
     ddraw->ddrawrefcount0 = GetBool("ddrawrefcount0", FALSE); // Twisted Metal 2 DirectDraw Error hack
-    ddraw->forcewmmove = GetBool("forcewmmove", FALSE); // Sierra Caesar III, Pharaoh, and Zeus hack
+    ddraw->sierrahack = GetBool("sierrahack", FALSE); // Sierra Caesar III, Pharaoh, and Zeus hack
 
     WindowRect.right = GetInt("width", 0);
     WindowRect.bottom = GetInt("height", 0);
@@ -450,17 +450,17 @@ static void CreateSettingsIni()
             "; Caesar III\n"
             "[c3]\n"
             "handlemouse=false\n"
-            "forcewmmove=true\n"
+            "sierrahack=true\n"
             "\n"
             "; Pharaoh\n"
             "[Pharaoh]\n"
             "handlemouse=false\n"
-            "forcewmmove=true\n"
+            "sierrahack=true\n"
             "\n"
             "; Master of Olympus - Zeus\n"
             "[Zeus]\n"
             "handlemouse=false\n"
-            "forcewmmove=true\n"
+            "sierrahack=true\n"
             "renderer=gdi\n"
             "hook=2\n"
             "\n"