Steam shipping build only works when adding steam_appid.txt

  • Running 4.10.2
  • Multiplayer Shootout template

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

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

But apparently, that’s not enough because I needed to add a steam_appid.txt containing the number ‘480’ for Steam’s universal test appID for it to work. (work meaning the 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 the Multiplayer Shootout project which is setup for Steam right now, and I also followed Rama’s Steam tutorial on the wiki.

I made a brand new project and pieced it together and I also did some bugfixing from the Multiplayer Shootout, the workflow in the 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 the Shipping Build requires a steam_appid.txt. I thought that was already included. The 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 the same question.

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

The 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 the game; after properly uploading and instrumenting your build through Valve AND launching from the Steam client, the text file is no longer necessary. The 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 the 480 testing appID.

Additionally with Shipping builds currently, you’ll sometimes need to run it through the Steam client to get the 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!

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

Does the txt file need to go in the packaged folder, or the 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 the binary that runs your server (not the script in the root, but the 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)

That causes the 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 the right file for 64bit.