Issue with Actually Writing Steam Achievements in 4.26

Hello wonderful humans. I’m hoping someone can help me here as I’m pulling my hair out a bit and have been trying this for many many hours.

I am trying to get steam achievements working on my game and have done the following:

  1. Published the achievements in steamworks
  2. Followed the tutorial here: Online Subsystem Steam | Unreal Engine Documentation
  3. Added my app id and achievement info to my defaultengine.ini file

I am able to get the steam overlay working and it even connects to my game (the overlay has listed the two test achievements), but when I actually use the blueprints to cache achievements and write achievement progress, both nodes return success but I’m still not getting the achievement pop up in the lower right-hand corner. Any ideas what I might be missing?

Other Notes: my game is currently unreleased; not sure if that matters. Also, I’m unable to get the achievements to write with the default steam id of 480 and putting in the spacewar achievement information (so I don’t believe it is my game specifically, it has to be in my general setup with the online subsystem).

Other notes: I have tried using sdk v151, and v147 which seems to be the default one that comes with ue4.26 by default, but both give the same result.

Thank the good Lord! I finally fixed it.

When following one of the tutorials, I was told to add this line:

DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");

Just commenting that line out solved the issue! Note for those who may stumble across this:

If you are in UE4.26+, don’t bother doing anything crazy, don’t download the steamworks sdk. Literally all you need to do is enable the steam online subsystem plugin, use the appropriate blueprints nodes, and add this to your defaultengine.ini file:

[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=YOUR_APP_ID
bRelaunchInSteam=false
Achievement_0_Id="YOUR_STEAM_ACH_NAME1"
Achievement_1_Id="YOUR_STEAM_ACH_NAME2"
Achievement_2_Id="YOUR_STEAM_ACH_NAME3"



[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
1 Like

You are one of the few people who posted about this and got it to work. Can you post a more step by step version of your solution? I have achievements in my game, that I had to make on my own, without any plugins (they didnt work as expected). I’d like to have them comunicate with STEAMWORKS, but the steamworks instructions are a bit criptic for people who don’t code.

Sure. I put it in another answer in this thread, since it wouldn’t fit in the comment.

Someone asked in the comments to outline the process. These steps are for UE4 and are untested in UE5.

Pre-steps: You will need a game that has been greenlit on Steam to fully use Steam Achievements. If you just want to test the steam achievements generally though, you can use the demo app, Space War, that Steam put out to help developers do this kind of stuff.

  1. Login to steamworks and add the actual achievement names in steam

  2. Go to the settings tab in your UE4 project, click plugins, and enable the steam online subsystem plugin. You will need to restart the engine after this.

  3. Navigate to your project folders in your file browser. Go to the config folder and edit the file called DefaultEngine.ini add the following at the bottom:

      [/Script/Engine.GameEngine]
     +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
     
     [OnlineSubsystem]
     DefaultPlatformService=Steam
     
     [OnlineSubsystemSteam]
     bEnabled=true
     SteamDevAppId=480
     Achievement_0_Id=“ACH_WIN_ONE_GAME”
     Achievement_1_Id=“ACH_WIN_100_GAMES”
     Achievement_2_Id=“ACH_TRAVEL_FAR_ACCUM”
    
    
     [/Script/OnlineSubsystemSteam.SteamNetDriver]
     NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
    
  4. Replace your achievement names and SteamDevAppId above appropriately, based on what you set in Steamworks. Or don’t replace them to test the Space War app.

  5. Go to your player bp to test (can’t do achievements in a game instance I believe), just after keypress or begin play. Get your player controller and pull off from it to add the node “Cache Achievements.” After that, get your player controller ref again and get the “Write Achievement Progress” function. Input your achievement name EXACTLY as it is in your DefaultEngine.ini (e.g. ACH_WIN_ONE_GAME). Set progress to 100. User tag = 0.

You do not need to download the steamworks SDK and try to integrate it manually, the steam online subsystem plugin should do all the heavy lifting for you.

Also, Steam doesn’t work from within editor, so launch a standalone game or package your project to test. If everything works fine, you will see a Steam icon in the lower right corner and Steam overlay will appear if you press Shift-Tab.

1 Like

The Steam SDK is needed for uploading the game to steam. Several files needed to be changed in order for it to process properly on upload. I haven’t messed with any of those files since I first set up the upload.
What is the Steam Online Subsystem? the only one I see on the Store is $119.99

Steam SDK isn’t needed anymore if your compressed game files are less than 2 GB. You can upload it directly to steam. But if that isn’t the case for you, then yes, the SDK will be necessary. But strictly for achievements, it is not.

The plugin should be default in UE4 past a certain version. I’m in 4.26. Not sure what version you are using. You should just be able to search for it in the plugins section of your project. If it’s not there I’m not sure.

Not sure if you are still active in this thread @mmmmGoodDinner, but your initial problem describes an issue I’m having in both 4.25 and 4.27 (I skipped 4.26). I was a little excited after seeing you had found a solution, but then I realised that you solution was to remove a line of code that I don’t even have in my .ini file to begin with.

Is it possible you did something else on top of this to fix the issue?

Nope, nothing else. I would encourage you to start a blank project and try my step by step from above to see if you can get that particular test app working.

I saw on another post, removing the quotes from the .ini file work for me

from:
Achievement_0_Id=“ACH_WIN_ONE_GAME”

to:
Achievement_0_Id=ACH_WIN_ONE_GAME

1 Like

This was littarly the thing that made it work, Appreciate it!