FAF & Steam Deck

Hello everyone.

Can anybody tell me step-by-step how you got, if you got, FAF running properly on the Steam Deck?

The game SC:FA runs fine on the Deck (with a couple of proton command line additions), in both, Game Mode & Desktop Mode and I also followed the official Wiki to get FAF client running BUT... No matter what I do, when I actually try to launch a game, I get the "unable to create Direct3D" -error.

I have tried to add /window -mode options and other workarounds after the "%s" in the launch command without success. Also tried different Proton variants & protontricks tweaks (which I think shouldn't even affect since the game does run without FAF).

What I have done so far is I have followed the official wiki mostly to get the FAF client to work:

  1. Install SC:FA and set command line options to prevent the slideshow animations
  2. Run SC:FA with the debug switch to dump the "run" script
  3. Download FAF Client & java
  4. Launched FAF client and configured the game folder and set the launch command to use the run -script
  5. Attempted to host a game, but got error before making it to the lobby

So to summarize:

  1. SC:FA game launches fine and runs in single player mode without any issues (protondb mentions that someone even finished the single player campaign)
  2. The FAF client starts fine and I see running games, chats etc. and I can attempt to start a game
  3. Launching a game ends with a quick flash of the screen and a "Unable to create Direct3d" -error - both in Game Mode and Desktop mode.

I think it may be due to this command "d3d_WindowsCursor" which was added as workaround to fix bugs due to nvidia drivers.

“Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected.”
— Steve Jobs.
My UI Mods

would you mind copy your complete LAUNCH OPTIONS line from Steam here?
We may have a peak at your Command lines from FAF; too.
Here are my commands:
FAF:
gamemoderun /home/frozen_byte/Games/faf/run "%s"
Steam:
PROTON_NO_ESYNC=1 PROTON_NO_FSYNC=1 PROTON_DUMP_DEBUG_COMMANDS=1 gamemoderun %command% /windowed 3840 2160

My Steam Deck is not intended to be used for RTS @Sheikah .

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice

@brutus5000 said in FAF & Steam Deck:

My Steam Deck is not intended to be used for RTS @Sheikah .

😭

I’ll be hetting one, eventually Sheikah ping me in 4 months if all goes as planned (October)

I’m a shitty 1k Global. Any balance or gameplay suggestions should be understood or taken as such.

Project Head and current Owner/Manager of SCTA Project

@Brutus5000 let me guess... factorio?

“Be a yardstick of quality. Some people aren’t used to an environment where excellence is expected.”
— Steve Jobs.
My UI Mods

I just finished Thief (2014). Probably Tomb Raider (2013) next. FIFA also works great.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice

@brutus5000 said in FAF & Steam Deck:

My Steam Deck is not intended to be used for RTS @Sheikah .

Also not for checking out replays on the go?

Check out my maps here:

Madness 1 - 10

https://forum.faforever.com/topic/480/h-master-s-maps

@h-master Now that is sweaty af!

@frozen_byte I have tried several combinations but ended up with:

PROTON_NO_ESYNC=1 PROTON_DUMP_DEBUG_COMMANDS=1 %command% /nomovie  /windowed 1900 1000

From your example I tested with the gamemoderun addition, but it didn't change anything.

With this setup you will get black screen on first launch but if you hit enter the profile creation window will pop up. With your options the videos play without problems but either way this doesn't seem to affect the end result.

As for FAF in Steam, I use:

INSTALL4J_JAVA_HOME="/home/deck/.local/share/jdk-latest" %command%

Same here, I tried adding the gamemoderun before the %command% but it did not seem to affect anything.

I did also try to launch FAF from terminal instead of Steam but it made no difference, unsurprisingly.

As for FAF settings, I have the following:

Game Location

/var/run/media/mmcblk0p1/steamapps/common/Supreme Commander Forged Alliance

So the game is sitting on the SD card. I also tried it earlier from the SSD but I didn't get it to work then either.

Command Line Format for Executables

/home/deck/Apps/FAF/run_fa.sh "%s"

I tried adding the gamemoderun here too - no change. Also I have tried moving the /nomovie and /windowed 1900 1000 after the "%s" here in case it was causing problems but that too didn't seem to help.

The ICE adapter window pops up when FAF is trying to launch the game, but I end up with....

109d23d6-bf2b-49ed-bf28-9b56c335a4b0-image.png

As I was writing this and clicking around while the Direct3D popup was still active, I got another window to pop up:

61ab336e-a388-4fe2-811b-7763bc7f2201-image.png

I have no idea if this helps at all.

I also checked the FAF log, but it seems to simply end to:

warning: GAL Exception: file : c:\work\rts\main\code\src\libs\gpggal\DeviceD3D9.cpp(189)
         error: unable to create device
warning: GAL Exception: file : c:\work\rts\main\code\src\libs\gpggal\DeviceD3D9.cpp(189)
         error: unable to create device

Any suggestions I could try?
I take it that you are actually able to run FAF without problems on your Deck?

I have not changed the default proton settings so currently I'm using the default 7.0-3. The Deck itself is on the preview update channel.

@balanceslavenoob said in FAF & Steam Deck:

@h-master Now that is sweaty af!

That’s what I thought 🙂

Check out my maps here:

Madness 1 - 10

https://forum.faforever.com/topic/480/h-master-s-maps

@tinhammer
Thanks for your informative post.

firstly, but not related to your error:
PROTON_NO_ESYNC should be used with PROTON_NO_FSYNC, so either enable or disable both at the same time.
gamemoderun is an application called gamemode from Feral Interactive, this should not apply to a steamdeck installation. If you are curious, have a look here: https://github.com/FeralInteractive/gamemode

The Problem looks like the compat layer for DirectX 9 is broken somehow.
Have you tried to install the winetricks a second time? protontricks 9420 dlls d3dx9 xact
Otherwise try the WINEDLLOVERRIDES="d3d9=n" trick, as explained in the FAF wiki: https://wiki.faforever.com/en/Linux-Install

Also have you browsed the protonDB thread? You may find some help there: https://www.protondb.com/app/9420

As a last resort, you may try to get the voodoo wrapper running 😕

@frozen_byte said in FAF & Steam Deck:

Sorry, I didn't have time to tinker with this recently so I'm replying a bit late.

firstly, but not related to your error:
PROTON_NO_ESYNC should be used with PROTON_NO_FSYNC, so either enable or disable both at the same time.

Ok, I did try now one more time to add the NO_FSYNC as well, but as you mentioned, it had no effect on the error.

gamemoderun is an application called gamemode from Feral Interactive, this should not apply to a steamdeck installation. If you are curious, have a look here: https://github.com/FeralInteractive/gamemode

Ok, it seems Steam Deck comes with that exact software pre-installed, which is why I had that command as well. I just didn't know it wasn't Steam Deck specific.

The Problem looks like the compat layer for DirectX 9 is broken somehow.
Have you tried to install the winetricks a second time? protontricks 9420 dlls d3dx9 xact

I had tried to play with these before but just in case, I had re-downloaded everything and installed the d3dx9 and xact using protontricks. No change.

Otherwise try the WINEDLLOVERRIDES="d3d9=n" trick, as explained in the FAF wiki: https://wiki.faforever.com/en/Linux-Install

I think this is already the proton default, which is included in the dumped "run" script:

#!/bin/bash
#Run game or given command in environment

cd "/run/media/mmcblk0p1/steamapps/common/Supreme Commander Forged Alliance"
DEF_CMD=("/run/media/mmcblk0p1/steamapps/common/Supreme Commander Forged Alliance/bin/SupremeCommander.exe" "/nomovie" "/windowed" "1900" "1000")
PATH="/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/bin/:/usr/bin:/bin" \
	TERM="xterm" \
	WINEDEBUG="-all" \
	WINEDLLPATH="/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64//wine:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib//wine" \
	LD_LIBRARY_PATH="/home/deck/.local/share/Steam/ubuntu12_64/video/:/home/deck/.local/share/Steam/ubuntu12_32/video/:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64/:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/:/usr/lib/pressure-vessel/overrides/lib/x86_64-linux-gnu/aliases:/usr/lib/pressure-vessel/overrides/lib/i386-linux-gnu/aliases" \
	WINEPREFIX="/home/deck/.local/share/Steam/steamapps/compatdata/9420/pfx/" \
	SteamGameId="9420" \
	SteamAppId="9420" \
	WINEDLLOVERRIDES="steam.exe=b;dotnetfx35.exe=b;dotnetfx35setup.exe=b;beclient.dll=b,n;beclient_x64.dll=b,n;d3d11=n;d3d10core=n;d3d9=n;dxgi=n" \
	STEAM_COMPAT_CLIENT_INSTALL_PATH="/home/deck/.local/share/Steam" \
	WINE_LARGE_ADDRESS_AWARE="1" \
	GST_PLUGIN_SYSTEM_PATH_1_0="/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64/gstreamer-1.0:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/gstreamer-1.0" \
	WINE_GST_REGISTRY_DIR="/home/deck/.local/share/Steam/steamapps/compatdata/9420/gstreamer-1.0/" \
	MEDIACONV_AUDIO_DUMP_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/9420/fozmediav1/audiov2.foz" \
	MEDIACONV_AUDIO_TRANSCODED_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/9420/transcoded_audio.foz" \
	MEDIACONV_VIDEO_DUMP_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/9420/fozmediav1/video.foz" \
	MEDIACONV_VIDEO_TRANSCODED_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/9420/transcoded_video.foz" \
	"/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/bin/wine64" c:\\windows\\system32\\steam.exe "${@:-${DEF_CMD[@]}}"

Also have you browsed the protonDB thread? You may find some help there: https://www.protondb.com/app/9420

Yes, I did mention that I had already checked that page out. The only mentions are that the game is completely playable, which I can also confirm and the only side remark about FAF was: "Didn't try multiplayer, because the multiplayer is dead for this game, only via Forged Alliance Forever client, which is a separate topic to launch on SteamDeck. "

As a last resort, you may try to get the voodoo wrapper running 😕

I could but I have a feeling I just don't feel motivated enough as I would need to install a bunch of stuff using the OS tools, which in turn means I would need to mount rootfs with write mode to make modifications.

On top of that, all changes will reset on every update so either I would have to opt out of updates or create scripts which will re-install everything back after every update. And finally there is no guarantee it will even help 🙂

Anyway, thanks for the follow-up - I will keep looking for solutions. While this game might not be best played with the Deck's small screen but it runs perfectly fine docked at least on 1080p so it would be really nice to be able to plug the Deck to a dock and start playing vs. boot up my power hungry, old and noisy desktop PC for this.

I managed to get it working on my Steam Deck with the following steps
but if you are not familiar with the desktop mode and the basics of arch linux it will be a bit hard.

some of the commands used are not available by default on the steam deck.
If you already built an AUR package successfully you can skip these steps.
But keep in mind that some of these steps can become necessary again after a system update.

To get it all working you need to run these commands:

Setup a Password for the deck user with the passwd command:
passwd
disable the read only file system
sudo steamos-readonly disable
Setup pacman-keyring so you can install packages
sudo pacman-keyring --init
sudo pacman-keyring --populate
Install the needed packages for AUR
sudo pacman -S --needed base-devel

Now you can install FAF

Switch to Desktop mode.
Install Supreme Commander Forged Alliance via Steam and go to properties and use the following launch options:

PROTON_NO_ESYNC=1 PROTON_NO_FSYNC=1 PROTON_DUMP_DEBUG_COMMANDS=1 %command%

In compatibility settings select Proton Version 5.0-10.

Then start the Game via steam.
This creates a file called "run" in the location /tmp/proton_deck/run
"deck" is the default name of the user. Change it if your user has a different name.
copy this file to a location where you can find it later. I created a directory called "faf" in my home directory for this and put it there.

then install downlords faf client:
to install it, download the client with git clone

git clone https://aur.archlinux.org/downlords-faf-client.git

then navigate into the downloaded folder with

cd downlords-faf-client

and run

makepkg -si

after this you can search for "faf" in your start menu and launch the program.
Log in with your faf account and go to settings.
Go to "Forged Alliance Forever" and set the start command format to the path to your previously copied run file. So for me it is /home/deck/faf/run
add a space and a "%s" to that path so it looks like this:
/home/deck/faf/run "%s"

Now you should be able to start a Match via FAF.
Some people also changed a specific .dll file in the games bin folder to fix some graphical issues but I did not find a reason for this at least for now.
You can find it inside this tutorial for setting up FAF on linux: https://wiki.faforever.com/en/Linux-Install

I guess this setup will break with every update as all pacman installs will get wiped.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice

@brutus5000
Thats true but you can make a script out of this and be up and running very quickly again.

I created one for me and it works well.

How do you run makepkg -si with no PGKBUILD file? Did you write one on your own?

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
– Benno Rice

@brutus5000 there is a pkgbuild file inside the AUR repo
https://aur.archlinux.org/downlords-faf-client.git