ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
23.92k stars 1.04k forks source link

Call of Duty®: Black Ops Cold War (1985810) #6852

Open Parapass opened 1 year ago

Parapass commented 1 year ago

Compatibility Report

System Information

I confirm:

steam-1985810.log

Symptoms

The game launches in Steam and is listed as playing but does not start at all.

Using journalctl I saw that the game was trying to find d3d12core.dll in /home/deck/.steam/steam/steamapps/compatdata/1985810/pfx/drive_c/windows/system32/ and /home/deck/.steam/steam/steamapps/compatdata/1985810/pfx/drive_c/windows/syswow64/ but could not find it as the file did not exist. Would this be a Wine problem or a Proton problem? On my Windows 10 install I can find both d3d12.dll and d3d12core.dll

Reproduction

Always happens

kisak-valve commented 1 year ago

Hello @Parapass, wine: Call from 000000007B04D723 to unimplemented function winegstreamer.dll.winegstreamer_create_video_decoder, aborting looks like the line of interest from your log.

https://gitlab.winehq.org/wine/wine/-/commit/70e93833679342c485b9720af61c92efcdcbd191 might help.

Parapass commented 1 year ago

Hello. I had the wrong Proton version selected, my bad. I changed it to Proton Experimental and the gstreamer error has gone away. However, the game still refuses to launch. The log for Experimental: steam-1985810.log

The game tries to open dxdiag (presumably either for error reporting or for automatically setting graphics settings), but fails while doing so. Here is the core dump: https://gist.github.com/Parapass/bd7593ecb1030bc4e921afdea14cf546

headassbtw commented 1 year ago

Hi, I'm having this issue too; on AMD as well, except this time on desktop with an RX 6900 XT.

I wasn't able to corroborate the journalctl d3d12 stuff, however I have an interesting addition where occasionally, a blank (wayland default) icon will show in the taskbar, it goes away very fast, too fast for me to look at the window title. It happened only once under amdvlk but a few times under radv. I'll attach logs for both radv and amdvlk.

steam-1985810_radv.log steam-1985810_amdvlk.log

Along with that, in journalctl I get umip: BlackOpsColdWar[24832] ip:14ce27576 sp:11a230: SIDT instruction cannot be used by applications. umip: BlackOpsColdWar[24832] ip:14ce27576 sp:11a230: For now, expensive software emulation returns the result. however i'm not certain that's really relevant to this game.

kisak-valve commented 1 year ago

Hello @headassbtw, there's a bunch of failed to create ... lines in your Proton log which hints that the Proton Experimental install or the game's wineprefix might be damaged or incomplete.

Parapass commented 1 year ago

I installed Arch Linux on my desktop to try out Cold War on it. Still crashes the same. Here is the log: steam-1985810.log

ilovethensa commented 10 months ago

Ive been trying to get it to run, i think this needs a patch to wine/proton hope someone smart enough sees this thread

Elitefiree commented 5 months ago

I know this is from a while ago but I'm using the Battle.Net version and I'm getting these errors:

5002.838:012c:0154:err:sync:RtlpWaitForCriticalSection section 00006FFFFFFB0380 "../src-wine/dlls/ntdll/loader.c: loader_section" wait timed out in thread 0154, blocked by 0130, retrying (60 sec)
5002.941:012c:0190:err:sync:RtlpWaitForCriticalSection section 00006FFFFFFB0380 "../src-wine/dlls/ntdll/loader.c: loader_section" wait timed out in thread 0190, blocked by 0130, retrying (60 sec)
5005.888:0064:007c:err:wineusb:usb_main_loop Error handling events: System call interrupted (perhaps due to signal)
5025.636:0064:007c:err:wineusb:usb_main_loop Error handling events: System call interrupted (perhaps due to signal)
5045.560:0064:007c:err:wineusb:usb_main_loop Error handling events: System call interrupted (perhaps due to signal)

I was using Proton Experimental then Proton 9.0 (Beta) and after that I tried ProtonGE but still got this error. The game loads with the T9 Console and the loader but that's really it

polluxau commented 5 months ago

Replying to https://github.com/ValveSoftware/Proton/issues/6852#issuecomment-2053646093

It's quite odd that this game has issues under proton, the anticheat isn't a kernel level so that's not a problem, seems like a wine problem?

I wonder if anyone has any information about why this game doesn't work still, if it is anticheat related or just something to do with wine

Id like to play some cold war zombies again sometime lol

Elitefiree commented 5 months ago

Replying to https://github.com/ValveSoftware/Proton/issues/6852#issuecomment-2053646093

I have asked modders about the game and some say there isn't an anti-cheat and it uses an engine simlar to BO4 (Which works great on linux according to few people) So I presume it could be the games problem or a wine/proton problem

chris-pcguy commented 3 weeks ago

Hi,

Here's the Proton BO3 workaround: if os.environ.get("SteamGameId", 0) == "311210": or here for Experimental: "311210", # CoD: Black Ops 3

Whatever version you use, add "1985810" and it'll get further. (Screenshot)

However, graphics is still an issue, at least with Lavapipe and AMD (Mesa-9999 and Proprietary 22.40.6.1580631-r1 on Gentoo Unstable, nothing newer because of an "old" RX470). I won't test it with my nVidia Titan V's, because they're in my workstation and history has shown that I can't trust the Steam client on important computers. Maybe I'll put one of them inside the gaming machine, but I'm not sure if VKD3D simply just needs to support that game. From what I can tell is that this workaround is necessary for both games because of the Treyarch Anti-Cheat. I won't go into details, because Activision is known to be very vicious.

P.S.: @ValveSoftware: This time I didn't had to decompile the disassembly by hand, like with your CEG. Thank you very much for not helping with Modern Warfare 3 (the older one), I'm still resentful because I had to fix your issues all by myself. Please be the Valve from 20-25 years ago again.

Screenshot_20240823_072934

Mikaka27 commented 3 weeks ago

Replying to https://github.com/ValveSoftware/Proton/issues/6852#issuecomment-2306344902

What did you do exactly to get it running? You posted some 'if' code, but where do you put that?

chris-pcguy commented 3 weeks ago

Replying to #6852 (comment)

What did you do exactly to get it running? You posted some 'if' code, but where do you put that?

Exactly there.

"311210", # CoD: Black Ops 3

turns into

"311210",   # CoD: Black Ops 3
"1985810",   # CoD: Black Ops Cold War

And

        if os.environ.get("SteamGameId", 0) == "311210":
            argv = [g_proton.wine_bin, "c:\\Program Files (x86)\\Steam\\steam.exe"]

turns into (e.g., very long version)

        if os.environ.get("SteamGameId", 0) == "311210":
            argv = [g_proton.wine_bin, "c:\\Program Files (x86)\\Steam\\steam.exe"]
        elif os.environ.get("SteamGameId", 0) == "1985810":
            argv = [g_proton.wine_bin, "c:\\Program Files (x86)\\Steam\\steam.exe"]

Or (shorter)

if os.environ.get("SteamGameId", 0) == "311210":

turns into

if os.environ.get("SteamGameId", 0) in ("311210", "1985810"):

As I said, the same workaround/treatment is needed, so just add the Cold War game id as well, like in these examples.

chris-pcguy commented 3 weeks ago

That specific workaround was committed two and a half years ago and this bug report is from a year ago. Hindsight is 20/20 when a very similar game needs the exact same workaround. I got lost into the details as usual and kept digging until I finally followed my thought of checking what exactly Proton does with BO3.

Now it's randomly either stuck or crashes. The crashes, at least, are because of heap corruption. I have a hunch that it has something to do with openxr, because it gets past that point in Proton 7, only to show many D3D12 errors.

359575.535101:0114:0118:err:heap:validate_used_block heap 0000000000140000, block 00000000640D0038: free block overwritten

I guess, since nobody else volunteers, I have to bisect between Proton 7 and 8. Damnit, all I wanted to do, was to play some Prop Hunt. :-D

chris-pcguy commented 3 weeks ago

The change in behavior happened during the d3d12core refactoring. I really hope that the actual underlying cause of those hangs and crashes is somewhere else, because graphics is not my métier. experimental-bleeding-edge-7.0-38314-20230320-pa52104c-w2a9873-d3d5bec-vf0697a (full screen) experimental-bleeding-edge-7.0-38355-20230321-pa52104c-w2a9873-d3d5bec-v071ead (no full screen)

Edit, forgot to post this: When atiadlxx.dll is set to builtin, like with BlackOps3.exe, it can crash like this: wine: Call from 00006FFFFFC1CF07 to unimplemented function atiadlxx.dll.ADL2_Adapter_AdapterInfo_Get, aborting

robotman40 commented 2 weeks ago

The change in behavior happened during the d3d12core refactoring. I really hope that the actual underlying cause of those hangs and crashes is somewhere else, because graphics is not my métier. experimental-bleeding-edge-7.0-38314-20230320-pa52104c-w2a9873-d3d5bec-vf0697a (full screen) experimental-bleeding-edge-7.0-38355-20230321-pa52104c-w2a9873-d3d5bec-v071ead (no full screen)

Edit, forgot to post this: When atiadlxx.dll is set to builtin, like with BlackOps3.exe, it can crash like this: wine: Call from 00006FFFFFC1CF07 to unimplemented function atiadlxx.dll.ADL2_Adapter_AdapterInfo_Get, aborting

If you think graphics might be an issue, then I suggest filing a report on vkd3d-proton's issue tracker

chris-pcguy commented 2 weeks ago

If you think graphics might be an issue, then I suggest filing a report on vkd3d-proton's issue tracker

TLDR: Feel free to do that yourself, I don't really have much time for that.

It could very well be that it's only broken for my "ancient" card.

It somewhat looks like a timing issue, I've already seen the fullscreen on an unmodified bleeding edge, besides that workaround. However, on 99% of the runs, I won't even see "Failed to wait for VR registry key ready." Mostly I see it being stuck because of a critical section ("loader_section"), crashes because of trashed heap, and even a crash with a stack trace that includes ntdll.dll/kernel32.dll/kernelcore.dll/d3d12.dll/BlackOpsColdWar.exe.

I think that I should remember Scrubs, if I hear hoofbeats, I should think of horses instead of zebras, but I want to be triple sure that it's not because of a specific TAC codepath. Like CEG, it doesn't show all its tricks on a single run, it's rather randomized.

Here's a screenshot and the logs of a extremely good run, however it still complains with a dialog window.

I'm getting too much pressure to focus on my real work. Unfortunately that doesn't include finishing the Lynx/SSC implementation of that iPhone/SEP emulator. I can't split myself and a day just has 24 hours.

I would simply suggest that everybody just tries that BO3 workaround, which should be included/applied in any case for CW as well (hello, @ValveSoftware), because that's the (first) issue, everybody is seeing here. The SIDT access violation exception is a fake/trick/distraction, because it has the kernel space KUSER_SHARED_DATA address as a destination, it's not supposed to work in user-space, even on a real Windows. The rest could be either other bugs or just (one of) my ancient machines crapping themselves yet again.

One file is slightly renamed, because GitHub won't take text files as an attachment if they don't have a .txt extension. Compressed it because GitHub complained again, and doesn't include a full trace, because then GitHub would complain even more because of the sheer filesize.

Screenshot_20240827_170205 steam-1985810.log.bak50_experi_bleedingedge_fullscreen_dialog.txt.gz