ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
24.5k stars 1.07k 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 1 year 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 7 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 7 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 7 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 2 months 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 2 months 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 2 months 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 2 months 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 2 months 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 months 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 months 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

jumofogit commented 1 month ago

@ValveSoftware, any progress on making it work so far?

chris-pcguy commented 1 month ago

Good news, everybody! No, not like Prof. Farnsworth, but actually good news!

I've retested it with the new Experimental - Bleeding Edge version, as I saw a few interesting changes a few days (or weeks, dunno anymore) ago. I've just got time for that, as the SEP emulation is still missing PKA, but overall somewhat/very workable.

Oh, back to the topic... I reapplied that CoD Black Ops 3 workaround and here's a new screenshot!

So please for the love of (whoever you're praying or not praying to), also apply it to the gameid/appid 1985810 !! Screenshot_20241006_195641

headassbtw commented 1 month ago

I just tested this on my machine, with [redacted, it'll ban you], it works as well! It crashes not long after starting though; it runs long enough to compile shaders but not long enough to read the EULA.

This log (I removed two megabytes of vkd3d error duplicates) might help if anyone else wants to look into it. I have a half-hunch it's an anticheat measure, those usually periodically check, but I don't see why it would crash instead of booting me out.

Here's another screenshot for the :eyes: reactors: Screenshot_20241006_190828

ivyl commented 1 month ago

Good news, everybody! No, not like Prof. Farnsworth, but actually good news!

I've retested it with the new Experimental - Bleeding Edge version, as I saw a few interesting changes a few days (or weeks, dunno anymore) ago. I've just got time for that, as the SEP emulation is still missing PKA, but overall somewhat/very workable.

Oh, back to the topic... I reapplied that CoD Black Ops 3 workaround and here's a new screenshot!

So please for the love of (whoever you're praying or not praying to), also apply it to the gameid/appid 1985810 !!

There have been some fixes for the game specifically. We've been trying it out with the hack applied and on a few machines we used for testing this has caused Activision account bans, even when playing in an offline mode only. We are trying to sort this out but in the meantime it doesn't make sense to enable this to needlessly put users in the harm's way.

chris-pcguy commented 1 month ago

There have been some fixes for the game specifically. We've been trying it out with the hack applied and on a few machines we used for testing this has caused Activision account bans, even when playing in an offline mode only. We are trying to sort this out but in the meantime it doesn't make sense to enable this to needlessly put users in the harm's way.

Thank you, and thanks for the heads-up. I thought, that this issue was just being ignored. I think I mentioned how vicious Activision can be. Maybe I should look at Ricochet instead, if the rumors are true that Infinity Ward said that they won't ban anybody if they manage to get it to run properly on Linux. (I would like to hear that directly from them, I couldn't find a source for that) Maybe Treyarch is as vicious as Activision. Why can't they be more like Infinity Ward, if the rumors are true? In the long-term, they're only hurting themselves and their shareholders with such nonsense.

jumofogit commented 1 month ago

I wonder if they will unban those, who used this workaround before as bans made by mistake... At least anyone who got banned could probably appeal, or at last, Valve can try reach to Activision/Treyarch with this problem.

headassbtw commented 1 month ago

I've been banned. Edit (7 hours later): Appeal was denied.

jumofogit commented 1 month ago

I've been banned.

Same thing, already trying to appeal ban both on Activision side and trying to get someone from Valve to talk with me. UPD:I wasn't able to appeal a ban. :(

chris-pcguy commented 1 month ago

Unfortunately, I have to suggest to close this issue as "not planned" or a more matching reason.

TL/DR: TAC supports Proton/Wine, Activision doesn't anymore. Running the game under a non-Windows platform will get you permanently BANNED. This includes any Call of Duty, including the Ricochet ones, that alleged guarantee is a lie! TL/DR 2: I've just got banned as well, and it didn't got lifted. Their answer suggests, that they disallow running their games on anything but a pure baremetal (non-VM, only consumer hardware, no server boards) Windows >= 10 with Secure Boot being active. This new policy appears to also include the ones already supported by Proton, including the pure offline games of the whole Call of Duty series. What do they want next, a stool sample or a verification can?

Also, the ban email came as HTML+Text, telling that the whole account is banned, while the appeal answer came as HTML-only email, saying that I should avoid "these types of violations to keep your account in good standing" (running Linux, I guess). Erm, what account? It is gone.

The answer to the appeal is further suggesting, that due to recent policy changes, their anti-cheat engines are specifically used to detect if someone runs their games on non-Windows machines. I guess it just took longer for me, because my crappy machine lead to the game crashing so often. Either that or the game's gross misuse of the steam_api64.dll file and various NT API's (like calling NtGetContextThread with context being NULL), running the game makes even the Steam client itself (running outside Proton's sandbox) crash. They probably needed to wait to confirm that I'm actually running Linux. Recently, I even made it into the accessibility settings to enable the subtitles and to disable motion blur. They surely don't like those. :-D Their anti-Linux policy appears to also apply on Ricochet, despite whatever different thing Infinity Ward/Sledgehammer Games allegedly said. It's a shame, making it compatible didn't looked that difficult at the first glance. (First step, stubbing/implementing ci.dll)

I recently, because of the ban reports, looked into the Microsoft Gaming aquisition of Activision Blizzard. According to some news reports, there were some gamers suing against it, because they expected/predicted the same thing as some Redditors and the judge's rejection/ruling were basically, "They surely wouldn't hurt their own bottom-line". Apparently, they don't care about money. (Don't have a Reddit account, never had. They even banned the whole subnet including my server's IP from read-only access a long time ago) I would rather want a diarrhea infusion than to productively using Windows outside a VM. Microsoft and their anti-trust issues are unfortunately like me being fat, both will not change that quickly.

P.S.: No, I'm not cheating in online games, neither did I modified any game files. The game wouldn't even start, if it detects anything unexpected, like when ASLR is disabled under Windows (rejected immediately), using the steam_api64.dll from CoD BO III (also rejected immediately), or Secure Boot unsupported or supported but not being active (dunno if it rejects that, but it detects that). That specific ASLR check is explicitely disabled when it detects being run under Wine/Proton/Linux, because ASLR is basically unimplemented under Wine/Proton. Their software/game, including their anti-cheat solution, supports Linux perfectly fine, their publisher just doesn't. And no, using "impulse 101" in a CS 1.6 offline bot round over fifteen/twenty years ago, or using a self-written Python script to use a car as a flying carpet in GTA:SA doesn't count.

I wonder if they extend that policy to World of Warcraft. Back then, they even had a native Linux client for internal use.

@jumofogit: Valve doesn't like to talk about any anti-cheat engines. I've made that experience seven years ago. After that, when Proton was suddenly and unexpectedly announced, they (and Codeweavers?) were saying that they won't support any anti-cheat software, that isn't already supported. So if I wouldn't have found the Steam CEG debug register on thread creation issue in time back then, Proton probably wouldn't support CEG until this day.

I don't like, that doesn't matter where I go, everywhere I'll get turned into Don Quixote, just Windmills appearing everywhere. I don't want fight or even ask to. I'm too old and lazy for that crap. :-D I just want to do my work and not get sucked into things like that. Before people reported that they got banned, I didn't even knew that Microsoft bought Activision.

headassbtw commented 1 month ago

I guess it just took longer for me, because my crappy machine lead to the game crashing so often

Nope, my fairly powerful (5900x, 6900XT) system (which handles the game great on windows) crashed about a minute or two in as well

This new policy appears to also include the ones already supported by Proton

So, the deck verified ones too? That's absurd (even if it did happen to GTA) and would absolutely not go unnoticed.

[I can't find a quote to directly refute]

I highly doubt Microsoft is at fault here, as they've allowed their games to be steam deck verified in the past; enabling EAC for MCC, not banning for Halo Infinite's custom anticheat, and enabling EAC when (probably before actually, no downtime) Infinite switched to it. Hell, if I have any hope for this, it'd be them intervening.

Activision has always been an awful company, or at the very least temperamental. I do not believe giving up on this is the right way to go. Personally I was going to wait and see valve's take on this when/if the game starts without tinkering, or (being cynical/selfish here) waiting for more people to get banned for simply launching the game though steam, to draw attention to this issue.

At the very least, if none of this ever goes anywhere, "I simply launched the game and never entered a match, and am now banned from the offline campaign" should be a slam dunk of a refund.

chris-pcguy commented 1 month ago

Nope, my fairly powerful (5900x, 6900XT) system (which handles the game great on windows) crashed about a minute or two in as well

I mean not only that, but crashing in over 90% of the time, between the launcher and the intro video. Sometimes also causing the Steam client itself to crash. Don't know if that is exploitable.

So, the deck verified ones too? That's absurd (even if it did happen to GTA) and would absolutely not go unnoticed.

Grand Theft Auto? Luckily that's afaik not owned by Activision or Microsoft. It appears that history, as always, repeats itself, and that the merger brought the worst from both, Activision and Microsoft. Nowadays, companies tend to even ignore the noticed things, as people tend to have a very short memory. Even the time during the launcher or while it's stuck counts towards game-time, so I'm way past the refund period. And I don't want a refund, I want to play Prop Hunt, someone showed me some [redacted]101 videos and it looks like a lot of fun, it reminded me very much of my pentesting work.

I highly doubt Microsoft is at fault here, as they've allowed their games to be steam deck verified in the past; ... Activision has always been an awful company, or at the very least temperamental. I do not believe giving up on this is the right way to go. ...

I had to learn the hard way, that giving up can be ok, and sometimes the only winning move is not to play.

(being cynical/selfish here) waiting for more people to get banned for simply launching the game though steam, to draw attention to this issue.

Not gonna happen, because that game won't run without one of those two (maybe three) workarounds, all leading to the same result in different ways. With the history I now know, I have to assume, that only people who are affected way later will get their account reinstated, and the ones who got it banned early will get ignored.

At the very least, if none of this ever goes anywhere, "I simply launched the game and never entered a match, and am now banned from the offline campaign" should be a slam dunk of a refund.

Or as in, I downloaded it, it didn't ran. I made it run successfully, created the account in-game, haven't been able to enter a single match, and the whole account is now banned. It sucks, and I hope that the affected accounts weren't too valuable, financially or otherwise.

Edit:

[I can't find a quote to directly refute]

No, I won't publish any communication with them (except that tiny quote), by doing so I could count the seconds until I get a SLAPP suit. Looking at software or even taking it apart to improve compatibility is perfectly legal in many if not most jurisdictions, but that wouldn't stop them.

I guess that I won't touch TAC, Ricochet or any Call of Duty and Activision stuff, until I get a written guarantee (email would be plenty) that they won't sue or ban me (yet again) for trying to fix their crap. Maybe I should charge them a hardship fee. :-D There are tens of thousands of others, if not hundreds of thousands, who are perfectly able to do it instead of me. The problem is that 99.9% of them are already working on 100% capacity, the goal is to find the 0.1% who are only working on 99% capacity.

robotman40 commented 1 month ago

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

For a matter of fact in regards to Infinity Ward's statement, it was actually Beenox who said it: https://pcgamesn.com/call-of-duty-modern-warfare-2/steam-deck-workaround

But I think the only way for us to resolve this further is if Valve can speak with Activision and ask if it such statements are true.

robotman40 commented 3 weeks ago

Since I saw another report on Reddit about someone getting banned from this game on Steam Deck, should we update Proton to block this title (like we do with Destiny 2)?

chris-pcguy commented 3 weeks ago

Since I saw another report on Reddit about someone getting banned from this game on Steam Deck, should we update Proton to block this title (like we do with Destiny 2)?

I know nothing about Destiny 2, but I think that would probably be a good idea, maybe checks on different places, all commented to explain why they're there and what will not only eventually happen if those blocks/precautions are being removed. I recently read about e.g. Ricochet (afaik not TAC, but anyway) malfunctions (e.g. with graphic card drivers) and even design flaws (bans on demand/as a service), which caused people who never cheated to be banned even three years ago, back when it was released (and never fixed), while Activision knew perfectly well about it and still decided to silently sit on that knowledge, doing nothing but to smear people. As much as I would like to finally being able to play Prop Hunt, I don't want to see any more people being banned because Activision is Activision. And I thought that E.A. or Ubisoft would be way worse. There's an old German saying, roughly translated, put them all in a sack and punch it, you'll never hit the wrong ones. It's not only about being banned, they e.g. told me that they want to sue me for damages if I merely launch any current or future Call of Duty title, even including the first one from 21 years ago, that's why I wrote that I'll wait for them to explicitly tell me that they will refrain from doing so. I mean c'mon, what damages, that I gave them money?!

Edit: Just read about Destiny 2/Bungie, that's abhorrent.

headassbtw commented 2 weeks ago

Looks like fixes for this game have trickled down into experimental and GE, according to reports on ProtonDB. Someone's clock is ticking; let's hope it's Activision's.

robotman40 commented 2 weeks ago

Looks like fixes for this game have trickled down into experimental and GE, according to reports on ProtonDB. Someone's clock is ticking; let's hope it's Activision's.

You sure they don't cause bans anymore?

polluxau commented 2 weeks ago

Yeah I would like confirmation that Activision won't ban us for playing lol

headassbtw commented 2 weeks ago

You sure they don't cause bans anymore?

Sorry, I meant fixes to get the game running, not fixes to Activision