Proton icon indicating copy to clipboard operation
Proton copied to clipboard

Warframe (230410)

Open davidbepo opened this issue 7 years ago • 471 comments

as per title i installed warframe and it doesnt work, if you want me to provide any log files tell me the instructions and i will do it

system and os specs

apu: ryzen 5 2400G using the vega 11 integrated graphics os: manjaro linux mesa: 18.1.6 llvm: 6.0 kernel: 4.18.3 using proton 3.7 from the steam beta client

by the way huge thanks to valve for bringing this huge advancement for linux gaming

davidbepo avatar Aug 22 '18 21:08 davidbepo

gentoo 17.0 same thing

https://appdb.winehq.org/objectManager.php?sClass=version&iId=29230

Warframe/Downloaded/Public/Tools/ is not exists inside: $mysteamlibrary/steamapps/common/Proton_3.7/dist/share/default_plx/drive_c/users/steamuser/Application\ Data

dkornev89 avatar Aug 22 '18 23:08 dkornev89

i tried the proton env variables one by one to see if it worked that way and it doesnt

davidbepo avatar Aug 22 '18 23:08 davidbepo

Someone on Warframe forums found a workaround. Fix seems to be something easy on dev side, altho probably not too hard on Steam's side.

XANi avatar Aug 23 '18 05:08 XANi

Same here. Using Arch Linux with the latest proprietary nvidia drivers.

Huge compliments to the Proton team for making this possible!

mvdstam avatar Aug 23 '18 05:08 mvdstam

@XANi i ran that script and it clearly did something but still i cant get warframe to run :( now it gives a wine debug error if i launch it from the terminal

davidbepo avatar Aug 23 '18 11:08 davidbepo

Runs perfectly on Lutris with this workaround launcher shellscript. But obviously this is about steam. The game does not start because of the launcher. This script mentioned above replaces the launcher and updates the game. The developers should just implement this script or make their launcher linux/wine compatible.

weidtn avatar Aug 23 '18 14:08 weidtn

Just to note:

The game itself is broken in proton, this is on proton's end, as it runs perfectly fine in wine staging with the appropriate winetricks.

For any Proton devs looking into this: when Warframe.exe tries to launch, it thinks it's offline and can't download the cache manifest in needs to continue loading:

2.110 Sys [Info]: Cache languages enabled: _en
2.110 Sys [Info]: Loading Oodle DLL: oo2core_6_win64.dll
2.111 Sys [Warning]: INTERNET_OPTION_IGNORE_OFFLINE failed
2.112 Sys [Info]: Downloading cache manifest index...
2.112 Sys [Error]: Could not get cache manifest index.
2.113 Sys [Info]: ===[ Exiting main loop]====================================================================================
2.211 Sys [Info]: Loaded TOC for Windows/H.Misc (took 93.8ms, loaded 87009 entries, found 0 deleted)
2.211 Sys [Info]: Cache flushed
2.211 Sys [Info]: Main Shutdown Initiated.  

The launcher issue is something DE would have to fix, which I've posted about here: https://forums.warframe.com/topic/1000489-question-to-developers-regarding-steams-new-steam-play-on-linux/

Who knows if I'll actually get a response though.. I've posted about this before. This is why I ended up just making my own launcher.

Here is my launch script (with README) which is a drag and drop solution if you have the game installed: https://gitlab.com/GloriousEggroll/warframe-linux/tree/steamplay-proton/

GloriousEggroll avatar Aug 23 '18 21:08 GloriousEggroll

Issue exists on Solus w/AMD RX 580

PadreAdamo avatar Aug 24 '18 23:08 PadreAdamo

Figured out the WINE bugs that break the game and the patches that fix them!

  1. WINE has a bug report from 2016 with a patch in staging that hasn't been merged yet: https://www.winehq.org/pipermail/wine-bugs/2016-May/443111.html FIX: wininet-InternetCrackUrlW is the patchset in staging that fixes this.

  2. Also, this one is not major/game breaking, but in the log:

000f:err:service:process_send_command receiving command result timed out
000f:fixme:service:scmdatabase_autostart_services Auto-start service L"WineBus" failed to start: 1053
0015:err:service:process_send_command receiving command result timed out
002a:err:plugplay:handle_bus_relations Failed to load driver L"WineHID"

FIX: Fixed by staging patchset wuauserv-Dummy_Service, which I believe ZF (another staging maintainer) is working on getting merged to wine mainline.

  1. The game currently needs native xaudio2_7 from DirectX, as builtin fails. FIX: A temporary fix until wine's builtin xaudio2_7 can be fixed is to install Direct X to the prefix then add a dll override to the registry that sets xaudio2_7 as native. This has to be installed by hand as winetricks disabled 64 bit xact dlls in Direct X due to this bug in the past.

If 3 gets fixed in wine this game will not rely on any MS native libraries

GloriousEggroll avatar Aug 25 '18 05:08 GloriousEggroll

Even more digging.. WINEDEBUG report with +xaudio2 reveals the culprit of the xaudio2_7 bug:

191576.058:0008:0009:trace:xaudio2:CreateFX {a90bc001-e897-e897-7439-435500000003} 0x53f620
191576.058:0008:0009:err:ole:CoGetClassObject class {a90bc001-e897-e897-7439-435500000003} not registered
191576.058:0008:0009:err:ole:CoGetClassObject no class object {a90bc001-e897-e897-7439-435500000003} could be created for context 0x1
191576.058:0008:0009:warn:xaudio2:CreateFX CoCreateInstance failed: 80040154

this is the last thing xaudio2 tries to do before spoamming a bunch of xaudio2:do_engine_tick frames then crashing

CreateFX is in xapofx.c it's trying to register class {a90bc001-e897-e897-7439-435500000003} which apparently doesn't exist.

EDIT: It exists, it's just for FXEcho, and FXEcho and FXMasteringLimiter have yet to be implemented in WINE'S XAudio2_7 - specifically xapofx.h:

static HRESULT WINAPI xapocf_CreateInstance(IClassFactory *iface, IUnknown *pOuter,
        REFIID riid, void **ppobj)

and

HRESULT CDECL CreateFX(REFCLSID clsid, IUnknown **out)

both have

/* TODO FXECHO, FXMasteringLimiter, */

A quick fix can probably be added by just allowing them to be identified like so:

    if(IsEqualGUID(clsid, &CLSID_FXEcho27) ||
            IsEqualGUID(clsid, &CLSID_FXEcho))
        class = &CLSID_FXEcho;

along with some mumbo jumbo that makes them do nothing, but idk right now. 7:30 am now, time for some zzz's. Hope someone's able to do something useful with my blabber

GloriousEggroll avatar Aug 25 '18 09:08 GloriousEggroll

alright, I've managed to create a patch that implements FXEcho, which fixes the bug listed above:

https://gitlab.com/snippets/1748561

The game also needs xaudio2_7-OnVoiceProcessingPassStart xaudio2_7-WMA_support xaudio2_CommitChanges from wine-staging

However now IXAudio2Impl_CommitChanges needs to be implemented as it's currently just a stub that returns S_OK, which results in the game crashing due to not knowing how to properly commit the changes which pass WMA audio to ffmpeg to be converted for OpenAL. By default CommitChanges returns a stub and E_NOTIMPL, the xaudio2_CommitChanges patch in staging makes it return S_OK, which allows the game to start, but it then crashes when trying to do any wma->openal decoding:

EDIT: I'm not sure if CommitChanges needs to be implemented. The stub may work just fine, but the WMA patch for xaudio2 causes avcodec_send_packet to return with Operation not permitted which is what causes the crash

240188.164:0008:0056:trace:xaudio2:IXAudio2Impl_CreateSourceVoice (0x91d1d0)->(0x4ba308a0, 0xb89e990, 0x8, 3.000000, (nil), 0xb89e950, (nil))
240188.164:0008:0056:trace:xaudio2:dump_fmt wFormatTag: 0x161 (WAVE_FORMAT_WMAUDIO2)
240188.164:0008:0056:trace:xaudio2:dump_fmt nChannels: 2
240188.164:0008:0056:trace:xaudio2:dump_fmt nSamplesPerSec: 44100
240188.164:0008:0056:trace:xaudio2:dump_fmt nAvgBytesPerSec: 12000
240188.164:0008:0056:trace:xaudio2:dump_fmt nBlockAlign: 4459
240188.164:0008:0056:trace:xaudio2:dump_fmt wBitsPerSample: 16
240188.164:0008:0056:trace:xaudio2:dump_fmt cbSize: 0
240188.164:0008:0056:trace:xaudio2:IXAudio2Impl_CreateSourceVoice OpenAL can't use this format, so using FFmpeg
240188.164:0008:0056:trace:xaudio2:IXAudio2Impl_CreateSourceVoice synthesizing extradata for xWMA
240188.165:0008:0056:trace:xaudio2:XA2SRC_SetOutputVoices 0x948630, 0xb89e950
240188.165:0008:0056:trace:xaudio2:XA2SRC_SetOutputVoices Outputting to: 0x0, 0x91d1e8
240188.165:0008:0056:trace:xaudio2:IXAudio2Impl_CreateSourceVoice Created source voice: 0x948630
240188.165:0008:0056:trace:xaudio2:XA2SRC_SetFrequencyRatio 0x948630, 1.000249, 0x0
240188.165:0008:0056:trace:xaudio2:XA2SRC_SetOutputMatrix 0x948630, 0x91d1e8, 2, 2, 0xb89e968, 0x0
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer 0x948630, 0xb89e998, 0xb89e9c8
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer Flags: 0x40
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer AudioBytes: 2100189
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer pAudioData: 0x662b0010
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer PlayBegin: 1031477
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer PlayLength: 6671051
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer LoopBegin: 0
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer LoopLength: 0
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer LoopCount: 255
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer pContext: (nil)
240188.165:0008:0056:trace:xaudio2:XA2SRC_SubmitSourceBuffer 0x948630: queued buffer 0 (2100189 bytes), now 1 buffers held
240188.165:0008:0056:trace:xaudio2:XA2SRC_Start 0x948630, 0x0, 0x0
240188.165:0008:0056:trace:xaudio2:IXAudio2Impl_CommitChanges (0x91d1d0)->(0x0): stub!
240188.169:0008:0063:trace:xaudio2:do_engine_tick frames available: 441
240188.170:0008:0063:trace:xaudio2:update_source_state 0x94ea00: going to queue a period from buffer 1
240188.170:0008:0063:trace:xaudio2:xa2buffer_queue_period queueing 1024 bytes, now 4096 in AL
240188.170:0008:0063:trace:xaudio2:do_engine_tick Calling OnVoiceProcessingPassStart with BytesRequired: 4410
240188.170:0008:0063:trace:xaudio2:update_source_state 0x948630: going to queue a period from buffer 0
[wmav2 @ 0x7fa150005400] nb_frames is 0 bits left 35664
240188.170:0008:0063:warn:xaudio2:xa2buffer_queue_period avcodec_send_packet failed: Operation not permitted
240188.170:0008:0063:trace:xaudio2:xa2buffer_queue_period queueing 0 bytes, now 0 in AL
240188.170:0008:0063:trace:xaudio2:update_source_state 0x948630: going to queue a period from buffer 0 

GloriousEggroll avatar Aug 26 '18 00:08 GloriousEggroll

warframe doesnt load from me as well gloriouseggroll up there is an asset i havent been able to play warframe in years because I could never get it to run right in linux if you guys can in anyway implement the changes up there that would be amazing because I miss this game

roadh0use avatar Aug 26 '18 17:08 roadh0use

at the moment I've got a workaround for the launcher and xaudio2_7 that allows proper updating, cache defragging, and getting in game and logging in.

After that, for some strange reason proton just forces the client closed? I've tried turning debugging on but it doesnt show anything useful, just immediately closes, not even a safe shutdown. If anyone's willing to try to figure out why proton's straight up closing the app here's my repo, just follow the readme:

https://gitlab.com/GloriousEggroll/warframe-linux/tree/steamplay-proton

Some dev input would be really useful here as to why proton just straight kills the running client

GloriousEggroll avatar Aug 28 '18 01:08 GloriousEggroll

@GloriousEggroll i tried running your script but if i append --firstrun to the launch options it doesnt recognize it and if i dont do it it doesnt update the laucher, got any help?

davidbepo avatar Aug 28 '18 09:08 davidbepo

@davidbepo for any issues regarding my launcher please use the issues section of my gitlab as the official launcher bug and in-game bugs reported here are not related to my launcher, for the sake of keeping this bug report on point

GloriousEggroll avatar Aug 28 '18 14:08 GloriousEggroll

With the patched wininet dll, my own launcher executable, and a bit of tinkering, I've gotten it to go ingame and run at near native performance. On a i7-7700K and a RX 580 with Mesa 18.1.6.

Something seems to cause the game to freeze after a while though, leaving it just sitting there eating two full cores worth of CPU.

Edit: As it turns out, actually getting DXVK to work solved the freezing, though the game loads assets really slowly, which causes heavy choppiness during gameplay.

ananace avatar Aug 30 '18 20:08 ananace

welp. as of latest update I can't get the game to launch at all any more. keep getting pid 37067 != 37066, skipping destruction (fork without exec?) every time i try to launch

@ananace I'd much prefer your solution to mine as bash script and a ghetto wrapped fake exe are not exactly ideal, how would one go about compiling it? (edited original comment as I realized it was for a win executable to be wine friendly)

as for the asset loading - thats actually the shader cache filling up, its fine after that

GloriousEggroll avatar Aug 31 '18 00:08 GloriousEggroll

@GloriousEggroll hmmm Still works here with your scripts. I am running the steam version but instead of renaming the Launcher.exe I just added it as Launcher-Lutris.exe and Launcher.sh (also create a Launcher-Lutris.bat so wine can run it through CMD, which I could've done straight with the exe).

Anyway, I don't execute it through steam, so I don't have to deal with the naming convention and etc (also the binaries are available to me through my windows install, so this was easier).

I do get a stuck screen on a CMD like shell, which I just press ctrl+c and it starts warframe, eventually

llitz avatar Aug 31 '18 04:08 llitz

@llitz the lutris wine-steam version is not the same as the steamplay-proton version. they launch in very different ways, with proton having many more environment variables passed from native steam. additionally proton launches things a much different way then just using wine whatever.exe -some -arguments. its a lot more annoying :/

GloriousEggroll avatar Aug 31 '18 06:08 GloriousEggroll

I have been running it manually and mixing some libraries, I should have thought about that: it has been a long day. I will report back if I can pinpoint what makes it run.

On Fri, Aug 31, 2018, 12:24 AM Thomas Crider [email protected] wrote:

@llitz https://github.com/llitz the lutris wine-steam version is -not- the same as the steamplay-proton version. they launch in very different ways, with proton having many more environment variables passed from native steam

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/ValveSoftware/Proton/issues/167#issuecomment-417564654, or mute the thread https://github.com/notifications/unsubscribe-auth/AVbEO2fCQcu-Ha0-CR1_tcYyTKZ84ZgPks5uWNaOgaJpZM4WIbhT .

llitz avatar Aug 31 '18 06:08 llitz

@GloriousEggroll The project should just be a regular Visual Studio 2017 solution, the code's a bit of a mess though as I just grabbed an old launcher from an abandoned MMO I helped develop - which as it turns out chose an almost identical method of distribution as Warframe did.

The only thing that executable doesn't do is run the DX redistributable setup, the wininet DLL replacement, or the xaudio override. And I somehow get the feeling that you don't particularly want to do such things through a native PE, probably better to keep them as a Linux bash-script.

I did render two minutes of video before bed. Mainly to have an example of the choppiness I'm experiencing, though I later found out that an application was loading the disk rather heavily in the background, so it might actually be much more playable than it looked at first.

ananace avatar Aug 31 '18 08:08 ananace

So I've been working with ananace on his launcher and we have it working very well. I've also discovered WHY warframe was randomly closing - turns out if I plug a controller in then start the game - it magically stays open. If I don't start the game with a controller plugged in.. it closes after a short time. Both my launcher and ananace's had this same problem so it seems like it's something to do with how controllers/controller profiles are handled on steams end.

also, the game benefits a lot from the PoE stutter patch on dxvk as well.

GloriousEggroll avatar Sep 03 '18 14:09 GloriousEggroll

i finally got the game to run with @GloriousEggroll launcher but there are a lot of issues

  1. the game is on english and i cant switch to spanish: captura de pantalla de 2018-09-07 15-59-39

  2. there are massive stutters (this was already mentioned)

  3. issues with shadows: captura de pantalla de 2018-09-07 16-05-31

  4. the game closes after a while (this was already mentioned)

davidbepo avatar Sep 07 '18 14:09 davidbepo

@davidbepo I've stated this once already - any problems with my launcher please post on my gitlab issues section. NOT here.

GloriousEggroll avatar Sep 07 '18 14:09 GloriousEggroll

@GloriousEggroll i think the issues that im having might be valuable for proton developers specially since some of them are not because of launcher

davidbepo avatar Sep 07 '18 14:09 davidbepo

the language problem is due to my launcher the closing problem has already been mentioned due to a controller issue the stutter problem has already been mentioned due to dxvk.

GloriousEggroll avatar Sep 07 '18 14:09 GloriousEggroll

but the shadow issue hasnt been mentioned

davidbepo avatar Sep 07 '18 14:09 davidbepo

make sure the game is running in dxvk - turn the hud on.

GloriousEggroll avatar Sep 07 '18 14:09 GloriousEggroll

by hud you mean the steam interface right? i enabled it and now the ship looks fine

davidbepo avatar Sep 07 '18 14:09 davidbepo

No. the DXVK_HUD. in the proton folder rename user_settings.sample.py to user_settings.py, comment out all the lines except DXVK_HUD and set DXVK_HUD to devinfo,fps,version

then start the game. if there's no DXVK hud in the top left then the game isn't using dxvk when it should, which would lead either a launcher or driver problem.

GloriousEggroll avatar Sep 07 '18 14:09 GloriousEggroll