ValveSoftware / ValveSoftware/Proton

Dungeon Lords Steam Edition (271760)

Open Beginner friendly
#8,857 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Game compatibility - Unofficial
Dominant language
C++
Stars
32.8k
Forks
1.6k
PR merge metrics
PR metrics pending

Description

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:

  • that I haven't found an existing compatibility report for this game.
  • 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.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in dlls/win32u/input.c at NtUserGetAsyncKeyState and review the existing game-specific handling for GetAsyncKeyState. Reproduce the issue by trying to skip or pause the intro movies in Dungeon Lords Steam Edition, then verify that the relevant keypress behavior works without regressing the existing case.

Written by the indexing model from the issue text.

Assessment

Tech stack
c, linux
Domain
operating-systems
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
68/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.