Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Age of Empires II: Definitive Edition (813780) #3189

Open
2 tasks done
ThaChillera opened this issue Nov 4, 2019 · 638 comments
Open
2 tasks done

Age of Empires II: Definitive Edition (813780) #3189

ThaChillera opened this issue Nov 4, 2019 · 638 comments
Labels
Game compatibility - Unofficial Games not expected to work without issues Regression Confirmed working on an older version of Proton XAudio2 Uses the XAudio2 subsystem

Comments

@ThaChillera
Copy link

Compatibility Report

  • Name of the game with compatibility issues: Age of Empires II: Definitive Edition
  • Steam AppID of the game: 813780

System Information

  • GPU: GTX 680
  • Driver/LLVM version: nvidia 435.21
  • Kernel version: 5.3.8-arch1-1
  • Link to full system information report as Gist:
  • Proton version: 4.11-7

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.

Proton Log

Symptoms

When it starts, I get a splash screen and a popup: Title: "Wine C++ Runtime Library". Text: "A Program: Z F Press OK to exit program, or Cancel to start the Wine debugger."

Reproduction

Just boot the game normally

@kisak-valve kisak-valve added the Game compatibility - Unofficial Games not expected to work without issues label Nov 4, 2019
@aeikum
Copy link
Collaborator

aeikum commented Nov 4, 2019

Possibly due to missing SpVoice object. From your log:

2901.866:0039:003a:err:ole:CoGetClassObject no class object {96749377-3391-11d2-9ee3-00c04f797396} could be created for context 0x17
2909.925:0039:003a:trace:seh:NtRaiseException code=80000003 flags=0 addr=0x7bcaf638 ip=7bcaf639 tid=003a

@ThaChillera
Copy link
Author

How can I solve this?

@aeikum
Copy link
Collaborator

aeikum commented Nov 4, 2019

If you want to get into Wine development, implement the SpVoice class and whatever interfaces the app requests (probably ISpeechVoice, possibly more) in dlls/sapi, and see if that is enough to get the game running or if it needs more work past that.

@Marroja
Copy link

Marroja commented Nov 9, 2019

I have tried installing several versions of VC Runtime, both using Winetricks and with normal prefix installation and none of them worked. I also tried using DotNet but I haven't got past that same error you're telling us @ThaChillera

I tried installing SpVoice dll with winetricks today but still nothing. @aeikum I tried sweeping all the error's on Chillera's log and on mine but still nothing.

In case it helps in any way:

https://gist.github.com/Marroja/2c9b6a118c7d6b19359839b92a3fd7c3

@Marroja
Copy link

Marroja commented Nov 9, 2019

At the moment I understand the main problem is regarding an unwinding problem. I'm not sure how to deal with it.

@ozyman42
Copy link

Seeing this issue on a new install of the officially released game.

@Mte90
Copy link

Mte90 commented Nov 15, 2019

I think that the problem is related also to #2995 so probably in this other ticket there are info to fix this one.

@krisives
Copy link

AFAIK this is actually a problem related to sapi.dll not existing?

@busyboredom
Copy link

As a workaround, how hard would it be to kill the speech recognition functionality? I don't think sapi would be needed for anything other than speech recognition, right?

@nawaik
Copy link

nawaik commented Nov 15, 2019

Has anyone tried this yet?

https://www.reddit.com/r/aoe2/comments/dwuplr/how_to_run_age_of_empires_2_definitive_edition_on/

@Mte90
Copy link

Mte90 commented Nov 16, 2019

I am trying this but with the last proton (waiting to download the game).
Anyway this tutorial suggest to use DXVK 1.4.4 or newer and Proton 4.11-8 (https://github.com/ValveSoftware/Proton/releases/tag/proton-4.11-8) already include them.

So the big difference with proton is wine staging that they are at wine 4.20 (https://dl.winehq.org/wine/source/4.x/) and to execute the 2 commands of the tutorial to set win10 and reinstall vcrun2017.

So my doubt are more about proton that is using an old version of wine compared to this tutorial.

@mozo78
Copy link

mozo78 commented Nov 16, 2019

Following the instructions from reddit:
https://i.imgur.com/zdleeea.png
Using Wine-Staging 4.20.

@Mte90
Copy link

Mte90 commented Nov 16, 2019

I installed the game in steam with proton 4.11-8 and get the already known error.
Using the reddit thread (after that installation in steam with all the dependence) I am trying with executing protontricks 813780 win10 vcrun2017.
This didn't worked :-(

@Mte90
Copy link

Mte90 commented Nov 16, 2019

After protontricks 813780 speechsdk vcrun2017 win10 I am getting the same error but now the library sapi.dll is avalaible, I am trying to understand if it isn't registered.

"/home/myuser/.steam/steam/steamapps/common/Proton 4.11/dist/bin/wine" regsvr32 sapi.dll
Says that is registered rightly.

@Mte90
Copy link

Mte90 commented Nov 16, 2019

Last insights about sapi.dll I don't think that is the problem because is a common issue in wine and everything worked (I searched on mailing lists and so on). So I think that is a fake positive, looking at my debug:

10919.688:002f:0030:err:ole:CoGetClassObject class {96749377-3391-11d2-9ee3-00c04f797396} not registered
10919.689:002f:0030:err:ole:CoGetClassObject class {96749377-3391-11d2-9ee3-00c04f797396} not registered
10919.689:002f:0030:err:ole:create_server class {96749377-3391-11d2-9ee3-00c04f797396} not registered
10919.690:002f:0030:fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported
10919.690:002f:0030:err:ole:CoGetClassObject no class object {96749377-3391-11d2-9ee3-00c04f797396} could be created for context 0x17
10956.011:002f:0030:trace:seh:MSVCRT_raise (22)
Setting breakpad minidump AppID = 813780
Steam_SetMinidumpSteamID:  Caching Steam ID:  76561198055726040 [API loaded no]
10957.051:0016:001a:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\drivers\\winebus.sys" : builtin
10957.051:0016:001a:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\setupapi.dll" : builtin
pid 64012 != 64011, skipping destruction (fork without exec?)

The real error is at MSVCRT_raise but doesn't include any hints about the error. I am not an expert of wine/proton but I finished all my ideas.

@Mte90
Copy link

Mte90 commented Nov 16, 2019

Uhm I said to quickly, enabling D9VK (PROTON_USE_D9VK=1) I got an error finally:

11342.603:002f:0030:trace:seh:MSVCRT_raise (22)
Unable to read VR Path Registry from C:\users\steamuser\Local Settings\Application Data\openvr\openvrpaths.vrpath
Setting breakpad minidump AppID = 813780
Steam_SetMinidumpSteamID:  Caching Steam ID:  76561198055726040 [API loaded no]
11343.640:0016:001a:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\drivers\\winebus.sys" : builtin
11343.640:0016:001a:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\setupapi.dll" : builtin
pid 64461 != 64460, skipping destruction (fork without exec?)

@GSchuemann
Copy link

Hello there, I am the creator of the tutorial and looking at your and mine output I discovered something which might be helpful for you.
I also get this part:
010d:fixme:ntdll:EtwEventRegister ({4372afee-73b0-42ce-9821-7e134361b519}, 0x13f006fd0, 0x13f0595c0, 0x13f0595b8) stub. 010d:fixme:nls:get_dummy_preferred_ui_language (0x8 0x22e1cc 0x22e630 0x22e1c8) returning a dummy value (current locale) 010d:err:ole:CoGetClassObject class {96749377-3391-11d2-9ee3-00c04f797396} not registered 010d:err:ole:CoGetClassObject class {96749377-3391-11d2-9ee3-00c04f797396} not registered 010d:err:ole:create_server class {96749377-3391-11d2-9ee3-00c04f797396} not registered 010d:fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported 010d:err:ole:CoGetClassObject no class object {96749377-3391-11d2-9ee3-00c04f797396} could be created for context 0x17

The error Message where you can click on ignore appears right now, when clicked on ignore it goes on like this:
0142:fixme:shell:CustomDestinationList_QueryInterface not implemented for {00000003-0000-0000-c000-000000000046} (unknown) 0142:fixme:shell:CustomDestinationList_QueryInterface not implemented for {00000003-0000-0000-c000-000000000046} (unknown) 0142:fixme:shell:CustomDestinationList_QueryInterface not implemented for {00000019-0000-0000-c000-000000000046} (unknown) 0142:fixme:shell:CustomDestinationList_BeginList 0x5c3a678 (0x993fbcc {92ca9dcd-5622-4bba-a805-5e9f541bd8c9} 0x993fbd8): stub ...

So with wine-staging 4.19 I don't get the MSVCRT_raise error. In mozo78s output (wine-staging 4.20) this error is also missing there just isn't an ignore option for him (for some reason).

DXVK is needed to display buildings and units otherwise they are invisible it shouldn't have to do with this bug.

@mozo78
Copy link

mozo78 commented Nov 16, 2019

Here's the log with Wine-Staging 4.19:
https://pastebin.com/DWdmJtZh

@kubapet
Copy link

kubapet commented Nov 16, 2019

Hello there, I am the creator of the tutorial and looking at your and mine output I discovered something which might be helpful for you.
I also get this part:
010d:fixme:ntdll:EtwEventRegister ({4372afee-73b0-42ce-9821-7e134361b519}, 0x13f006fd0, 0x13f0595c0, 0x13f0595b8) stub. 010d:fixme:nls:get_dummy_preferred_ui_language (0x8 0x22e1cc 0x22e630 0x22e1c8) returning a dummy value (current locale) 010d:err:ole:CoGetClassObject class {96749377-3391-11d2-9ee3-00c04f797396} not registered 010d:err:ole:CoGetClassObject class {96749377-3391-11d2-9ee3-00c04f797396} not registered 010d:err:ole:create_server class {96749377-3391-11d2-9ee3-00c04f797396} not registered 010d:fixme:ole:CoGetClassObject CLSCTX_REMOTE_SERVER not supported 010d:err:ole:CoGetClassObject no class object {96749377-3391-11d2-9ee3-00c04f797396} could be created for context 0x17

The error Message where you can click on ignore appears right now, when clicked on ignore it goes on like this:
0142:fixme:shell:CustomDestinationList_QueryInterface not implemented for {00000003-0000-0000-c000-000000000046} (unknown) 0142:fixme:shell:CustomDestinationList_QueryInterface not implemented for {00000003-0000-0000-c000-000000000046} (unknown) 0142:fixme:shell:CustomDestinationList_QueryInterface not implemented for {00000019-0000-0000-c000-000000000046} (unknown) 0142:fixme:shell:CustomDestinationList_BeginList 0x5c3a678 (0x993fbcc {92ca9dcd-5622-4bba-a805-5e9f541bd8c9} 0x993fbd8): stub ...

So with wine-staging 4.19 I don't get the MSVCRT_raise error. In mozo78s output (wine-staging 4.20) this error is also missing there just isn't an ignore option for him (for some reason).

DXVK is needed to display buildings and units otherwise they are invisible it shouldn't have to do with this bug.

Have you tried to run
winetricks -q vcrun2015
When using wine 4.19 staging?

@mozo78
Copy link

mozo78 commented Nov 16, 2019

Yes I did. It doesn't change nothing :(
Here's the log with vcrun2015 and Wine-Staging 4.19:
https://pastebin.com/Xk04auTH

@kubapet
Copy link

kubapet commented Nov 16, 2019

I was actually asking Georg, but nevermind,
I GOT IT WORKING on pure wine 4.19 staging installation, I even though I got the "message where you can click ignore" (the same one as you reported you got on 4.20 https://i.imgur.com/zdleeea.png.. but as georg said on 4.19 staging you can click on ignore for some reason)..

@GSchuemann
Copy link

Great that it also worked on pure (wanted to test this in the next few days, but other people aren't as lazy as me ;))

The missing buildings are fixed with DXVK.

Interesting that the ignore button is missing in 4.20

@kubapet
Copy link

kubapet commented Nov 16, 2019

:) So where did you manage to run it before? or how did you know that DXVK is needed for buildings and units?

@GSchuemann
Copy link

:) So where did you manage to run it before? or how did you know that DXVK is needed for buildings and units?

I saw the game needed DirectX11 (looked at Systemrequirements) and I knew that it isn't yet fully implemented in wine, so I tried DXVK, which just worked.

I reinstalled vcrun, because I thought that a reinstalled vcrun would help. I hadn't the idea to click on ignore before I did that so I was unsure if it really runs on pure.

Have you also changed the Windowsversion or does it also run with "Windows 7" ?

@kubapet
Copy link

kubapet commented Nov 16, 2019

:) So where did you manage to run it before? or how did you know that DXVK is needed for buildings and units?

I saw the game needed DirectX11 (looked at Systemrequirements) and I knew that it isn't yet fully implemented in wine, so I tried DXVK, which just worked.

I reinstalled vcrun, because I thought that a reinstalled vcrun would help. I hadn't the idea to click on ignore before I did that so I was unsure if it really runs on pure.

Have you also changed the Windowsversion or does it also run with "Windows 7" ?

I am not sure we mean the same thing by "pure" .. I still ment the staging version, just not proton.. And yes, it runs with Windows 7 as well.. But now I have installed the DXVK and it doesn't run anymore.. The game just doesn't pop up, only cursor changes and then nothing is rendered and mouse is not moving (looks like the screen is controllerd by the app but nothing is rendered) and I can get out of it only after I press alt+tab .. I am probably still missing some DX dependencies ?

EDIT: OK, now it runs, and buildings and units are rendered properly.. I just wasn't patient enough :)

@EnriqueWood
Copy link

Has anybody tried online functionality?

@mozo78
Copy link

mozo78 commented Nov 16, 2019

I was actually asking Georg, but nevermind,
I GOT IT WORKING on pure wine 4.19 staging installation, I even though I got the "message where you can click ignore" (the same one as you reported you got on 4.20 https://i.imgur.com/zdleeea.png.. but as georg said on 4.19 staging you can click on ignore for some reason)..

What do you mean by pure? Without vcrun2017? It doesn't run both with or without vcrun 2017 installed and I have no "Ignore" button with Wine-Staging 4.19...

@GSchuemann
Copy link

GSchuemann commented Nov 16, 2019

Has anybody tried online functionality?

Spectating works flawlessly.

Haven't tried out a real match yet, but I am expecting it to work.

We mean by pure that no changes were made to the prefix.

Maybe the missing button is distribution related, I use ubuntu 19.10, which one do you use?

@sulix
Copy link

sulix commented Nov 16, 2019

The reason people aren't getting the "Ignore" button on the assertion error is that when vcrun2017 is being installed, for some reason ucrtbase.dll isn't being installed properly.

Copying over a 64-bit ucrtbase.dll to c:\windows\system32 is sufficient to get the "Ignore" button to work, after which the game works fine in Proton.

Ideally, of course, either wine would support the SpApi speech API stuff properly, or the game would handle it not loading better, but this works for now.

@SeanRamey
Copy link

SeanRamey commented Oct 26, 2023

@Arkanosis

I'm happy to report that Proton 8.0-4 can indeed run the current update of AoE2:DE (94056 as I'm writing) just fine out-of-the-box. The ucrtbase.dll replacement remains needed for online multiplayer, as it has been since the release of DE.

Edit: I've updated this page accordingly.

Hey, I have a request since you seem to be somewhat of an expert on this particular issue with online multiplayer. In AoE3:DE my friends all seem to be having "lag spikes" when playing with me (they're on Windows, I'm on Linux). This reminds me of the desync problem that you made that website about for AoE2:DE. I can't seem to find anything specifically for AoE3:DE, only references to something similar for AoE4. Would you be able to look into that on AoE3:DE? I would appreciate it VERY much.

@Arkanosis
Copy link

Hi @SeanRamey

In AoE3:DE my friends all seem to be having "lag spikes" when playing with me (they're on Windows, I'm on Linux)

Desync issues in AoE2:DE cause the game to end almost immediately (“almost” because when you replay a saved game, it does not always end exactly at the same time — but it always end); it does not cause “lag spikes” as you experience in AoE3:DE.

In other words, you're describing different symptoms in a different game, so I'm not sure the same workaround can help… but it's definitely worth trying as desync issues in other games can be fixed with the same workaround (I at least know of MK11): just follow the instructions for AoE2:DE, but replace 813780 with whatever the steam id of your game is (that would be 1211010 for AoE3:DE).

I suggest you report the results on #3712 where other people could be interested as well. I don't play AoE3:DE myself, so I don't follow that other issue, but you can @ me there too if you want. That would be great if everybody could have the same great experience on Linux we have with AoE2:DE.

@SeanRamey
Copy link

@Arkanosis Thanks a lot! I did what you said, and I think that might have actually fixed it. My friends don't seem to be complaining of lag spikes anymore. I will definitely mention this in the AoEIII:DE issue page.

@felisucoibi
Copy link

felisucoibi commented Oct 31, 2023

after all these time still i can't play aoe de on my two screen laptop witn prime...
Not working with proton experimental, but with proton 8.0-4 seems is working, also i had to do the install fo the library for multiplayer and i disabled overlay...

@sulix
Copy link

sulix commented Nov 23, 2023

I may have found a possible fix for the LAN multiplayer issues, thanks to the 'Why BattleServer.exe doesn't work' section on @Arkanosis' page.

It looks like the issue is that the UDP socket being used (which, at least on my version, isn't a dup() of the TCP one) is failing to connect() to a broadcast address because SO_BROADCAST isn't set on the socket. BattleServer.exe does seem to set this, but only after the connect() call, which fails, causing a crash. This seems to be the correct behaviour, according to MSDN (see the comment on WSAEACCES), but doesn't match reality.

In any case, a hack to make all UDP sockets SO_BROADCAST by default makes the LAN option show up in both this and AOE1DE.

From 40c02c4fc48836b00d207e4467f541758c1e12f2 Mon Sep 17 00:00:00 2001
From: David Gow <david@ingeniumdigital.com>
Date: Thu, 23 Nov 2023 15:00:24 +0800
Subject: [PATCH] server: UDP sockets should be SO_BROADCAST by default

Windows seems to allow UDP sockets to connect() to a broadcast address
without SO_BROADCAST having been set beforehand. Whether this is because
SO_BROADCAST is the default, or just a difference in semantics with
connect(), I'm not sure.

MSDN calls out this behaviour as invalid, and says that connect() ought
to WSAEACCES in exactly this situation, which matches wine's current
behaviour:
https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect

However, the 'Relic BattleServer' used for LAN multiplayer in the
'Definitive Edition' Age of Empires games crashes on start, due to
receiving this error. The game does set SO_BROADCAST, but only _after_
connect() has been called, which is too late.

It's possible this is because BattleServer.exe makes this a non-blocking
socket, and the error hasn't been generated until after the socket
option is changed, but that's just a random guess.
---
 server/sock.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/server/sock.c b/server/sock.c
index 16769fc2b4b..aefac6c8916 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -1910,6 +1910,13 @@ static int init_socket( struct sock *sock, int family, int type, int protocol )
     }
 #endif
 
+    if (unix_type == SOCK_DGRAM)
+    {
+        /* Windows enables SO_BROADCAST by default for datagram sockets? */
+        static const int enable = 1;
+        setsockopt( sockfd, SOL_SOCKET, SO_BROADCAST, &enable, sizeof(enable) );
+    }
+
     len = sizeof(value);
     if (!getsockopt( sockfd, SOL_SOCKET, SO_RCVBUF, &value, &len ))
         sock->rcvbuf = value;
-- 
2.42.1

@Arkanosis
Copy link

a hack to make all UDP sockets SO_BROADCAST by default makes the LAN option show up in both this and AOE1DE.

Wow, that's great! Thanks @sulix !

I've tested it on my side and I indeed get the “Use Local Lan Server” option which was missing before. Looking at the network traffic using wireshark shows that BattleServer.exe starts broadcasting to port 9999 as soon as the game is started, regardless of whether one tries to create a lobby or not. As written before, AoE2DE_s.exe has *:9999 open, so the hypothesis that port 9999 is used to let the game know about the server is probably correct.

Now, if I click the “Create Lobby” button after choosing “Use Local Lan Server” however, I get the “Creating Lan Server” waiting dialog and it keeps spinning indefinitely. A quick look at the logs didn't reveal anything obvious, but I certainly haven't spent enough time on that. The output of strace -f -econnect on AoE2DE_s.exe on the other hand shows that it creates additional UDP sockets on 127.0.0.1 and ::1, that it closes immediately without having used them.

I'd have expected AoE2DE_s.exe to try to connect to BattleServer.exe on TCP port 8888, but BattleServer.exe isn't even listening on that port (wineserver.exe is, though). Maybe that's not at all what is supposed to happen; that'd be interesting to see how things behave on Windows… but I don't have Windows to look at it myself, unfortunately.

Note: the loopback network interface does not receive broadcast packets, so one should probably allow incoming connections on UDP port 9999 for signaling to work over the LAN. I've completely stopped firewalld for testing but according to the documentation, only four ports need to be reachable.

@sulix
Copy link

sulix commented Nov 26, 2023

I can get a little further than that: the game lobby starts, though I get a "You have been disconnected from the game server" message after a few seconds. I haven't tested much further yet, though.

I did get the same "spinning indefinitely" issue at first, and the issue was that my hostname was resolving to a different IP — once I fixed it to make sure the IPv4 address on my local machine matched what its hostname resolved to, the game lobby was created successfully. It looks like the game is calling gethostname(), then getaddrinfo() on the hostname.

Also, FYI, the MS version of ucrtbase.dll seems to cause WINEDEBUG=+winsock to crash, which may make debugging actual games difficult. Also, the version of BattleServer.exe in Age of Empires 1 DE prints a lot of extra debugging info.

@Arkanosis
Copy link

Good catch! I had getent hosts $HOST returning 127.0.0.1, edited /etc/hosts to make it return my LAN IP instead and now I have the lobby starting too. Thanks!

After that, it disconnects after a few seconds as you said, and an exception is visible in the logs, but the reason is not clear. I'm not using the MS version of ucrtbase.dll.

Interestingly, AoE2DE_s.exe is now trying to connect to TCP port 8888, but BattleServer.exe still isn't listening on it. I wonder if that's not why the game disconnects.

@sulix
Copy link

sulix commented Nov 27, 2023

So, I get a connection on TCP port 8888 (TCP listen()s seem to happen in wineserver, and the socket is passed through to BattleServer.exe on accept().

In AOE1DE, this then seems to work — there's data passed in both directions over that socket, and the lobby doesn't disconnect. (I haven't been able to try actually starting a game, but the lobby seems to work fine.)

For AOE2, it seems more complicated. The socket seems to connect on 8888, but data only passes from AoE2DE_S.exeBattleServer.exe, not in the other direction. Additionally, the game connects to BattleServer.exe on TCP port 9888 (which seems totally undocumented), and tries to do a TLS handshake, which fails. A second or two later, the game disconnects.

I've had no luck debugging the TLS handshake failure (or even confirming that it's the cause of the disconnection). It looks like BattleServer.exe has its own statically-linked OpenSSL, rather than using the Windows TLS APIs.

Packet logs
Frame 84100: 262 bytes on wire (2096 bits), 262 bytes captured (2096 bits) on interface any, id 0
Linux cooked capture v1
Internet Protocol Version 4, Src: 192.168.1.207, Dst: 192.168.1.207
Transmission Control Protocol, Src Port: 48660, Dst Port: 9888, Seq: 1, Ack: 1, Len: 194
    Source Port: 48660
    Destination Port: 9888
    [Stream index: 56]
    [Conversation completeness: Complete, WITH_DATA (47)]
    [TCP Segment Len: 194]
    Sequence Number: 1    (relative sequence number)
    Sequence Number (raw): 481360258
    [Next Sequence Number: 195    (relative sequence number)]
    Acknowledgment Number: 1    (relative ack number)
    Acknowledgment number (raw): 1908735795
    1000 .... = Header Length: 32 bytes (8)
    Flags: 0x018 (PSH, ACK)
        000. .... .... = Reserved: Not set
        ...0 .... .... = Accurate ECN: Not set
        .... 0... .... = Congestion Window Reduced: Not set
        .... .0.. .... = ECN-Echo: Not set
        .... ..0. .... = Urgent: Not set
        .... ...1 .... = Acknowledgment: Set
        .... .... 1... = Push: Set
        .... .... .0.. = Reset: Not set
        .... .... ..0. = Syn: Not set
        .... .... ...0 = Fin: Not set
        [TCP Flags: ·······AP···]
    Window: 260
    [Calculated window size: 33280]
    [Window size scaling factor: 128]
    Checksum: 0x85d7 [unverified]
    [Checksum Status: Unverified]
    Urgent Pointer: 0
    Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps
    [Timestamps]
    [SEQ/ACK analysis]
    TCP payload (194 bytes)
Transport Layer Security
    TLSv1.2 Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 189
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 185
            Version: TLS 1.2 (0x0303)
            Random: b3c44e60d6c39fda799e88289b1fe84f5e5bd9de47905b7f57414a0bac18a07e
            Session ID Length: 0
            Cipher Suites Length: 56
            Cipher Suites (28 suites)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x009f)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca9)
                Cipher Suite: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)
                Cipher Suite: TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xccaa)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x009e)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (0xc024)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x006b)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (0x0067)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x0039)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
                Cipher Suite: TLS_DHE_RSA_WITH_AES_128_CBC_SHA (0x0033)
                Cipher Suite: TLS_RSA_WITH_AES_256_GCM_SHA384 (0x009d)
                Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256 (0x009c)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA256 (0x003d)
                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA (0x0035)
                Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
                Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff)
            Compression Methods Length: 1
            Compression Methods (1 method)
            Extensions Length: 88
            Extension: ec_point_formats (len=4)
            Extension: supported_groups (len=12)
            Extension: session_ticket (len=0)
            Extension: encrypt_then_mac (len=0)
            Extension: extended_master_secret (len=0)
            Extension: signature_algorithms (len=48)
            [JA3 Fullstring: 771,49196-49200-159-52393-52392-52394-49195-49199-158-49188-49192-107-49187-49191-103-49162-49172-57-49161-49171-51-157-156-61-60-53-47-255,11-10-35-22-23-13,29-23-30-25-24,0-1-2]
            [JA3: fbe7e189e37a07ee33706f86bc746344]
Frame 84102: 75 bytes on wire (600 bits), 75 bytes captured (600 bits) on interface any, id 0
Linux cooked capture v1
Internet Protocol Version 4, Src: 192.168.1.207, Dst: 192.168.1.207
Transmission Control Protocol, Src Port: 9888, Dst Port: 48660, Seq: 1, Ack: 195, Len: 7
    Source Port: 9888
    Destination Port: 48660
    [Stream index: 56]
    [Conversation completeness: Complete, WITH_DATA (47)]
    [TCP Segment Len: 7]
    Sequence Number: 1    (relative sequence number)
    Sequence Number (raw): 1908735795
    [Next Sequence Number: 8    (relative sequence number)]
    Acknowledgment Number: 195    (relative ack number)
    Acknowledgment number (raw): 481360452
    1000 .... = Header Length: 32 bytes (8)
    Flags: 0x018 (PSH, ACK)
        000. .... .... = Reserved: Not set
        ...0 .... .... = Accurate ECN: Not set
        .... 0... .... = Congestion Window Reduced: Not set
        .... .0.. .... = ECN-Echo: Not set
        .... ..0. .... = Urgent: Not set
        .... ...1 .... = Acknowledgment: Set
        .... .... 1... = Push: Set
        .... .... .0.. = Reset: Not set
        .... .... ..0. = Syn: Not set
        .... .... ...0 = Fin: Not set
        [TCP Flags: ·······AP···]
    Window: 260
    [Calculated window size: 33280]
    [Window size scaling factor: 128]
    Checksum: 0x851c [unverified]
    [Checksum Status: Unverified]
    Urgent Pointer: 0
    Options: (12 bytes), No-Operation (NOP), No-Operation (NOP), Timestamps
    [Timestamps]
    [SEQ/ACK analysis]
    TCP payload (7 bytes)
Transport Layer Security
    TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
        Content Type: Alert (21)
        Version: TLS 1.2 (0x0303)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Handshake Failure (40)

@procobain
Copy link

I have an annoying problem on Arch with XFCE.

There is a bug happening where when I alt-tab, when I return to the game, the ALT key no longer works. I almost always use it to click, and it stops working after an alt-tab.

Any ideas on how to resolve it?

@0Xellos
Copy link

0Xellos commented Dec 23, 2023

@procobain I don't have this problem, but once in a rare while, alt-tab causes my game to switch resolution to maximum and/or keep the bottom desktop panel permanently visible and blocking the bottom of the game even on fullscreen. On previous laptops (arch+xfce and ubuntu+gnome/cinnamon, now I'm on arch+cinnamon) I also had the ancient bug where game gets stuck always scrolling to a corner after alt-tab. My solution? Rebind alt+tab to ctrl+alt+tab so that I wouldn't mash it by accident so easily 🤣

@Xinayder
Copy link

Xinayder commented Jan 8, 2024

I just installed the game and had an out of sync issue playing multiplayer. It was fixed by using protontricks and installing ucrtbase2019:

protontricks 813780 ucrtbase2019 -q

@procobain
Copy link

I'm having some freezes after finishing a game and returning to the ranked screen, when I click on "Find Match", the colors become slightly darker and the game freezes, I have to force it to close. Somebody else?

I use Arch Linux with xfce and Proton GE always on the latest version, currently 8.30.

@ranplayer
Copy link

I've found a regression for Proton 9.0 (Beta 11). The intro videos are not displayed (there is only sound):

steam-813780.tar.gz

Specs

  • OS: Arch
  • Kernel: 6.6.18
  • GPU: RX 6700 XT (Mesa 24.0.1)
  • CPU: Ryzen 7 5700G

@sulix
Copy link

sulix commented Feb 25, 2024

I can also reproduce the missing intro videos on Proton 9.0, on different hardware.

There are a few suspicious messages in the logs:

winegstreamer error: decodebin0: Your GStreamer installation is missing a plug-in.
winegstreamer error: decodebin0: ../src-gst_base/gst/playback/gstdecodebin2.c(4704): gst_decode_bin_expose (): /GstBin:bin0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: Advanced Streaming Format (ASF) (video/x-ms-asf)


(wine:5935): GStreamer-Video-CRITICAL **: 21:19:25.013: gst_video_info_from_caps: assertion 'gst_caps_is_fixed (caps)' failed

(wine:5935): GStreamer-Audio-CRITICAL **: 21:19:25.024: gst_audio_info_from_caps: assertion 'gst_caps_is_fixed (caps)' failed

620139.391:0120:0124:fixme:dxva2:device_manager_processor_service_GetVideoProcessorDeviceGuids 00000000611B5EC8, 000000000011D3F0, 000000000011D39C, 000000000011D3B0 semi-stub.
620139.391:0120:0124:fixme:dxva2:device_manager_processor_service_GetVideoProcessorDeviceGuids 00000000611B5EC8, 000000000011D3E0, 000000000011D38C, 000000000011D3A0 semi-stub.
620139.391:0120:0124:fixme:dxva2:device_manager_processor_service_GetVideoProcessorDeviceGuids 00000000611B5EC8, 000000000011D470, 000000000011D41C, 000000000011D430 semi-stub.
620139.391:0120:02b8:warn:threadname:NtSetInformationThread Thread renamed to L"audio_client_timer"
620139.393:0120:02bc:warn:threadname:NtSetInformationThread Thread renamed to L"wine_dsound_mixer"
620139.404:0120:0124:fixme:dxva2:device_manager_processor_service_CreateVideoProcessor 00000000611B5EC8, {5a54a0c9-c7ec-4bd9-8ede-f3c75dc4393b}, 000000000011D330, 22, 15, 0000000061098978.
620139.405:0120:0124:fixme:dxva2:device_manager_processor_service_CreateVideoProcessor 00000000611B5EC8, {5a54a0c9-c7ec-4bd9-8ede-f3c75dc4393b}, 000000000011DC20, 22, 15, 0000000061098978.
620139.406:0120:0124:fixme:evr:filter_media_event_sink_Notify iface 000000003D233F18, event 32, param1 0, param2 0.
620139.407:0120:0124:fixme:wmvcore:WMReaderAdvanced2_SetOutputSetting reader 000000005168C0F0, output_num 0, name L"DedicatedDeliveryThread", type 3, value 000000000011DC3C, length 4 semi-stub!
620139.407:0120:0124:fixme:wmvcore:WMReaderAdvanced2_SetOutputSetting reader 000000005168C0F0, output_num 1, name L"DedicatedDeliveryThread", type 3, value 000000000011DC3C, length 4 semi-stub!

But most particularly, a lot of spam of:

fixme:evr:evr_render Unhandled input type {3231564e-0000-0010-8000-00aa00389b71}.

That looks to be the result of wine's EVR implementation not supporting the NV12 format. Wine recently added support for YUY2, which is similar, though that's not been backported into Proton. If the rest of the stack supports it, something similar for NV12 should be possible.

@fragiledish4432

This comment was marked as resolved.

@Arkanosis

This comment was marked as resolved.

@fragiledish4432

This comment was marked as resolved.

@Arkanosis

This comment was marked as resolved.

@fragiledish4432

This comment was marked as resolved.

@Arkanosis

This comment was marked as resolved.

@sulix
Copy link

sulix commented Feb 25, 2024

This patch seems to fix the missing intro video in Proton 9.0 for me:

Date: Sun, 25 Feb 2024 23:47:53 +0800
Subject: [PATCH] evr/dshow: List NV12 as supported, improve warnings

Add support for NV12 to evr_render(), as otherwise no video is rendered
at all in games like Age of Empires II DE.

Interestingly, this doesn't result in NV12 data being passed to
evr_copy_sample_buffer() as I suspected, so the RGB32 copying code seems
to work fine. Nevertheless, add a warning if we get an unknown format in
evr_copy_sample_buffer(), as that could potentially lead to nasty memory
issues.

Signed-off-by: David Gow <david@ingeniumdigital.com>
---
 dlls/evr/evr.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c
index 516427c5fff..3871b710d45 100644
--- a/dlls/evr/evr.c
+++ b/dlls/evr/evr.c
@@ -368,9 +368,14 @@ static HRESULT evr_copy_sample_buffer(struct evr *filter, const GUID *subtype, I
     {
         width = (3 * width + 3) & ~3;
     }
+    else if (IsEqualGUID(subtype, &MFVideoFormat_ARGB32)
+                || IsEqualGUID(subtype, &MFVideoFormat_RGB32))
+    {
+        width *= 4; 
+    }
     else
     {
-        width *= 4;
+        FIXME("unsupported video format %s\n", debugstr_guid(subtype));
     }
 
     if (FAILED(hr = IMediaSample_GetPointer(input_sample, &src)))
@@ -427,7 +432,8 @@ static HRESULT evr_render(struct strmbase_renderer *iface, IMediaSample *input_s
 
     if (IsEqualGUID(&subtype, &MFVideoFormat_ARGB32)
             || IsEqualGUID(&subtype, &MFVideoFormat_RGB32)
-            || IsEqualGUID(&subtype, &MFVideoFormat_YUY2))
+            || IsEqualGUID(&subtype, &MFVideoFormat_YUY2)
+            || IsEqualGUID(&subtype, &MFVideoFormat_NV12))
     {
         if (SUCCEEDED(hr = evr_copy_sample_buffer(filter, &subtype, input_sample, &sample)))
         {
-- 
2.43.2

It's based on top of the YUY2 patch upstream, though, to be honest, I suspect it'd work with just the one || IsEqualGUID(&subtype, &MFVideoFormat_NV12) line on top of Proton 9.0.

I'm still not 100% sure why this works — I spent quite a while trying to work out where the conversion from NV12 → RGB32 was happening, and calculating the right sizes and strides, but it all seems to work behind the scenes somewhere.

@kisak-valve
Copy link
Member

Hello @sulix, this looks like something to be sent upstream first. Can you make a pull request upstream?

@fragiledish4432

This comment was marked as resolved.

@Arkanosis

This comment was marked as resolved.

@fragiledish4432

This comment was marked as resolved.

@norg
Copy link

norg commented Mar 10, 2024

@RokeJulianLockhart I just ran into the same issue that you had and might have found one potential root cause. Do you also have any internal GPU enabled?

I had the issue that it runs flawlessly with all Proton versions on my Thinkpad with AMD Ryzen and AMD GPU but starting with Proton 6 the performance on my Desktop system with Ryzen 7950X3D and AMD Radeon 7900 XT was near a frozen screen. I couldn't find any diff between the two systems, same kernel, driver version etc. So the slower GPU had no issues but the big 7900 XT had, but only on AoE2 (Other games run perfect with Proton Experimental) and Proton after 6, since Proton 5.13 was also fine.

Maybe you can try this as well (I know it has been some time), so we could report this to the developers, that this could be a potential issue.

@RokeJulianLockhart
Copy link

RokeJulianLockhart commented Mar 10, 2024

#3189 (comment)

@norg, I'm also using solely AMD hardware — a 12-thread Ryzen 5 7600X 6-Core CPU and Radeon RX 5700, but on a self-built desktop system, rather than a laptop. I'm not sure that my ASRock X670E Taichi MB even allows its iGPU to operate simultaneously, but I'll try to verify that it's disabled.

Do you have Resizable BAR enabled? Considering we're both using AMD stuff, could you verify whether your Thinkpad has that enabled? It might be worth checking, since NVIDIA & Intel systems won't be able to use that.

I also recall Ao2DE working on an older Proton version, so thanks for verifying that I'm not going insane — that it is v6.

Many thanks. I'll corroborate any report you file.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Game compatibility - Unofficial Games not expected to work without issues Regression Confirmed working on an older version of Proton XAudio2 Uses the XAudio2 subsystem
Projects
None yet
Development

No branches or pull requests