protonscr

Dungeon Lords Steam Edition

protonopen appid 271760Game compatibility - Unofficial
ValveSoftware/Proton#8857 · opened 2025-06-27 by CkNoSFeRaTU · updated 2025-06-27 · 0 comments · github · game page · search this game
CCkNoSFeRaTU 2025-06-27 github

Compatibility Report

  • Name of the game with compatibility issues: Dungeon Lords Steam Edition
  • Steam AppID of the game: 271760

System Information

  • GPU: Radeon 6700XT
  • Video driver version: Mesa 25.0.5
  • Kernel version: 6.14.6
  • Proton version: Proton Experimental

I confirm:

  • [x] that I haven't found an existing compatibility report for this game.
  • [x] that I have checked whether there are updates for my system available.

Symptoms

Game's movie player relies on recent bit in GetAsyncKeyState to detect keypresses (e.g. if ((GetAsyncKeyState(VK_ESCAPE) & 1) != 0)) and these proton hacks interferes so movies cannot be skipped or paused:
4b7342236aedf9db88dcdebd251889262a93505f -> HACK: user32: Always pretend that GetAsyncKeyState recent bit is 0
c8355ba22826e2e492059b7d6eba729f7e3e1256 -> HACK: win32u: Enable GetAsyncKeyState() recent bit for Amerzone (1999).

Solution

diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 42daab3d301..b2c4f5d6835 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -818,7 +818,7 @@ SHORT WINAPI NtUserGetAsyncKeyState( INT key )
 
     if (use_recent_bit == -1) {
         const char *sgi = getenv("SteamGameId");
-        use_recent_bit = sgi && strcmp(sgi, "302190") == 0;
+        use_recent_bit = sgi && (strcmp(sgi, "271760") == 0 || strcmp(sgi, "302190") == 0);
     }
 
     if (key < 0 || key >= 256) return 0;

Reproduction

  1. Start the game
  2. Try to skip any intro movies (or movie on new game) with Escape key or pause them with Spacebar key.

Proton versions