Steam Integration not working in Shipping Build

I have a game I successfully packaged a Shipping Builds of with Engine version 4.10.0. Steam integration worked perfectly fine when launching as standalone game from editor and also when launching packaged shipping build. Since a couple weeks (I’m pretty sure this correlates with update to 4.10.1), steam integration no longer works in packaged shipping build. Standalone game still works perfectly fine, but when packaging as shipping build, there is no steam overlay, no steam username, nothing. Can anyone confirm that this is a bug in 4.10.1, or did I just break something on my end?

Current workaround:
Package game as development build, there everything works as expected, but of course with side effects of using a development build rather than a shipping build (increased binary size etc).

Thanks in advance,
Elewyth

1 Like

Same here :frowning:

Are you cooking on computer with installed visual studio 2013/2015 ?

Hi Elewyth,

There’s a known issue with Shipping Builds not displaying Steam Overlay when they’re not launched using Steam client (UE-23238) that has not yet been resolved.

Three questions:

Hello ,

Thanks for your answer.

  • I am running on Windows 10 and building with Visual Studio 2015 (it’s a C++ project).
  • I have not tried that yet, will do as soon as I get home, and post an update
  • Finding game sessions does not work and PlayerState->PlayerName displays “Player” instead of Steam-Username, which makes me believe that all Steam functionality is completely missing

As mentionend, I will post an update on whether there is a difference when launching the .exe through Steam client. I probably should also mention, that I’m simply working with developer App-Id (480), and not a “real” app-id.

“Add a Non-Steam Game to My Library” gives me steam overlay
but still not Steam username.

Running my Game on win7 pro, engine 4.10.1, Visual Studio 2015 and Steamv135

I can confirm what deweka has experienced. Launching Shipping-packaged game from within steam client shows steam overlay, but actual steam functionality of online subsystem is still missing.

Win10, UE 4.10.1, VS 2015 and Steam v135.

Okay, I believe source of problem for both of you may be that you’re using Steam v135, and 4.10 only supports v132. If you’ve downloaded binary, this should be installed already, but if you’ve built from source you’ll need to make sure you’re integrating correct version.

App-Id 480 should work with a Shipping build without problems, at least for showing correct player info.

I just tested in binary 4.10 with default v132, and a Shipping build for Win64, if added to Steam Client Library, shows overlay with player information as expected (Shift+Tab uses player’s profile info for Friends, etc).

There’s a separate issue I’m currently investigating with 4.10.1 in which testing Steam connection on same machine no longer works (it did in previous versions), but does across separate machines. Create Session works, but Find Session does not.

Can you confirm if same problems occur when using v132 instead of 135? It’s probably best to test in binary first, rather than attempt to replace files in your current build, just to ensure we’re on same page. See if player information is correct, and test to see if Find/Join Session works across different machines rather than on same machine. Let me know what happens. Thanks!

I’m sorry, I kinda misread my steamworks version, I am, in fact, already using v132 (one included in engine). I am using a source version of engine, since I also need to cross-compile for Linux; but I also experience exact same problems if I package with normal binary release of UE.

Yes, Steam overlay works perfectly fine when I launch packaged game from steam client. What doesn’t work, is session finding and displaying steam-name in-game. (i.e. APlayerState::PlayerName always displays “Player”). Session creation seems to work, but I guess it just defaults back to null subsystem to create game session, so you don’t really see that it isn’t working.

Have you followed these steps for installing Steamworks SDK in your source build (substituting all references with v132)?

Have you tested this on multiple machines?

Yes, everything should be setup properly.

I created a very sparse project from scratch, showcasing problem I am experiencing. All it does, is include steam online subsystem and display player name in-game.

Experienced behavior:

  • Play in editor: Displays a name such as “MyPC-123456789” (expected)
  • Play as Standalone Game: Displays steam name such as “Elewyth” (expected)
  • Package Win64 as Development displays steam name, as well (expected)
  • Package Win64 as Shipping displays “Player” (unexpected)

I have tested this on 2 machines, both running Windows 10. behavior is exactly same on both. Build was done using UE 4.10.1 downloaded with Epic Games Launcher and without any modifications, on both PCs.

I hope you can reproduce this bug on your end with project provided.

Okay, it appears there are two bugs here:

  1. Create Session doesn’t work in packaged projects that use C++, whether it is added to a content-only project or project begins as a C++ project. This affects projects whether using Development or Shipping builds. It was reported as UE-24814, and I’ll be adding some notes from this post to report and alerting networking devs as soon as they’re back from vacation, as it seems pretty serious.
  2. PlayerName does not appear to work correctly in Shipping builds. In a content-only (BP) project, I get “MyPC-12345…” and in a C++ project I simply get “Player”, as you’ve reported. difference may be related to bug described above, but either way isn’t correct. I’ve entered this as a separate bug, UE-24849

I’ll update this post if I see any change in either bug. Thanks for diving further into this with me!

Hi,
actualy its just that you missing your “app_id.txt”.
In all other builds expect shipping this will be created when you start executable.
In shipping build, you need to put it in yourself.
It goes to: Projectname\Binaries\Win64 (for 64bit)
then just create a file with name “app_id.txt”.
put your app id inside.
480 for testing, if you dont have your own yet.
Then it will work.

Hope this Helps
Christoph

3 Likes

Correct name of that file is “steam_appid.txt”, besided you don’t need to put that file in final build if you are injecting Steam DRM to binary.

4 Likes

Sorry, you are right, “steam_appid.txt” is correct name.

1 Like

Can you please clarify “You don’t need to put that file in final build” ?
Does it mean that I need it to Launch that build Before uploading it to Steam, but when I upload it via SteamCmd I have to exclude it? So when I test build from Steam Client it should just work?

For those who are still confused like I was, here’s precise explanation from Steam:

SteamAPI_RestartAppIfNecessary
SteamAPI_RestartAppIfNecessary checks if your executable was launched through Steam and relaunches it through Steam if it wasn’t.

This is optional but highly recommended as Steam context associated with your application (including your App ID) will not be set up if user launches executable directly. If this occurs then SteamAPI_Init will fail and you will be unable to use Steamworks API.
If you choose to use this then it should be first Steamworks function call you make, right before SteamAPI_Init.

If this returns true then it starts Steam client if required and launches your game again through it, and you should quit your process as soon as possible. This effectively runs steam://run/ so it may not relaunch exact executable that called this function (for example, if you were running from your debugger). It will always relaunch from version installed in your Steam library folder.

Otherwise, if it returns false, then your game was launched by Steam client and no action needs to be taken. One exception is if a steam_appid.txt file is present then this will return false regardless. This allows you to develop and test without launching your game through Steam client. Make sure to remove steam_appid.txt file when uploading game to your Steam depot!

1 Like

Worked, BUT title of the .txt file needed to be “steam_appid.txt” - not name listed in chosen solution.