Dungeon Lords Steam Edition (271760)

Aperta Adatta ai principianti
#8,857 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
68/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
c, linux

Direzione di ricerca

Inizia in dlls/win32u/input.c, all'interno di NtUserGetAsyncKeyState, e verifica la gestione esistente specifica per i giochi di GetAsyncKeyState. Riproduci il problema provando a saltare o mettere in pausa i filmati introduttivi in Dungeon Lords Steam Edition, quindi verifica che il comportamento della pressione dei tasti interessati funzioni senza introdurre regressioni nel caso esistente.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Game compatibility - Unofficial

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.
Lingua principale
C++
Stelle
33.2k
Fork
1.7k
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di ValveSoftware/Proton

Tutte le issue di ValveSoftware/Proton

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.