Steam shipping build only works when adding steam_appid.txt

  • Running 4.10.2
  • Multiplayer Shootout template

Following wiki, packaging project as a Shipping build requires you to copy over Steam SDK dlls in your packaged project’s Binaries/ThirdParty/Steamworks.

These are only instructions I’ve found on hub, so I did that.

But apparently, that’s not enough because I needed to add a steam_appid.txt containing number ‘480’ for Steam’s universal test appID for it to work. (work meaning Steam overlay shows up and I can create/join sessions)

Is this normal? I thought this was an automated process when the .exe was built. Why does adding a simple steam_appid.txt in ‘ProjectName/Binaries/Win64/’ make it work all of a sudden as a Shipping project?

However, a Development packaged project works straight away without needing to copy over Steamworks DLLs at all or adding a steam_appid.txt

love to know how you even got that far. i followed about 4 different tutorials and all failed for me. no steam overlay no matter what i do.

All I did was dissect Multiplayer Shootout project which is setup for Steam right now, and I also followed 's Steam tutorial on wiki.

I made a brand new project and pieced it together and I also did some bugfixing from Multiplayer Shootout, workflow in BP wasn’t that clean.

It works perfectly for me, I can create sessions and join them, tested on 3 different computers with 3 different Steam accounts and their Steam usernames show up in my scoreboard.

I’m just wondering why Shipping Build requires a steam_appid.txt. I thought that was already included. development build doesn’t need it.

Hi shahrizai,

I know we discussed this elsewhere, but someone pointed out this post to me, so I figured I’d update it in case anyone else has same question.

steam_appid.txt file is just a text file with steam appid assigned from Steam in it. It’s required to be in game root folder when running with Steam. In non-shipping builds, it’s generated automaticallly and deleted when engine shuts down gracefully, but it needs to be manually created for Shipping builds. engine uses SteamDevAppId value when it generates file.

steam_appid.txt file is only required for Shipping builds that are not run through Steam, so it’s really only a development thing. This isn’t intended to be released with game; after properly uploading and instrumenting your build through Valve AND launching from Steam client, text file is no longer necessary. Valve SDK site might have more information on why it’s necessary for development. Oh, and it is required when distributing dedicated server builds.

That said, it’s harmless to distribute it, especially now while you’re using 480 testing appID.

Additionally with Shipping builds currently, you’ll sometimes need to run it through Steam client to get Steam Overlay to show up. You can do this by adding a non-steam game to your library and opening it from there.

Hope that helps!

1 Like

Just ran into this. For anyone googling this for dedicated servers, steam_appid.txt must go in [Gamename]/Binaries/[arch], for a linux dedicated server that’s [Gamename]/Binaries/Linux

1 Like

Does txt file need to go in packaged folder, or project folder?
Also, my packaged folder does not have a [GameName]/Binaries folder, it has a [GameName]/Engine/Binaries. Is that where I should put it?

Or even inside [GameName]/Engine/Binaries/ThirdParty/Steam[VersionNumber] ?

It should go adjacent to binary that runs your server (not GameName.sh script in root, but actual binary that it runs). I don’t know why your layout is different, my stuff is all based on ShooterGame.

In my GameName.Build.cs I just add this now:

    if (Target.Platform == UnrealTargetPlatform.Linux && Target.Type == TargetType.Server)
    {
        RuntimeDependencies.Add("$(ProjectDir)/Binaries/Linux/steamclient.so");
        RuntimeDependencies.Add("$(ProjectDir)/Binaries/Linux/steam_appid.txt");
    }

That causes files to get copied during packaging. Your paths may be different.

And add $(ProjectDir)/Binaries/Linux/steam_appid.txt into source control (it might not be desireable to have that in source control if you are running linux clients as well as servers on some checkouts as it may get overwritten).

You can find instructions elsewhere on how to get right steamclient.so file for 64bit.

1 Like