ValveSoftware / ValveSoftware/Proton
Dungeon Lords Steam Edition (271760)
Nobody has claimed this yet.
- 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
- Start the game
- 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
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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