HomeGamesUpdatesPricingMethodology
Steam News7 June 202625d ago

DEVPOST2: Achievements

DEVPOST2: Steam achievements While Teemu is working on the new map, I started adding support for achievements to Snow War.

Full notes

Full Snow War update

Read the full published notes in a cleaner layout. The original post stays linked below.

What changed

0 fixes3 additions2 changes0 removals
  • Maps
  • Server
  • UI and audio
  • Gameplay
addedDEVPOST2: Steam achievementsWhile Teemu is working on the new map, I started adding support for achievements to Snow War. The achievement support in Unreal Engine 4 is well-documented in Epic’s documentation, which is the same for the Steam-specifics in Valve’s documentation. So this was a pretty straightforward task: create a solid base that we can use to easily handle and add achievements, then hook everything up to Steam.
addedThe achievement baseOne of the fun parts of developing a game and almost any other kind of software, is coming up with robust, but flexible foundation for new systems. Luckily, Unreal Engine’s own design and achievements not being too complex themselves, help a lot in this case. The result is a new game instance subystem – the achievement handler – and a base achievement class along with separate classes per achievement which are derived from the base class. The achievement handler keeps track of all available achievements, the players which are currently playing on the server and their progress per achievement. Being a game instance subsystem, the handler is easily accessible from anywhere in the code, which is crucial for easy integrations of new achievements. It is also event-based, so we just need to raise an event, along with information about the player who unlocked or progressed an achievement and optional additional data. The handler then takes care of having the corresponding achievement object perform further processing. The base class mentioned above already covers most of the processing, but the derived classes can easily add to that, if required.
changedSurprisingly quick working draftAfter finishing the base implementation, I moved forward with integrating our code with Unreal Engine’s achievement interface. As mentioned, this is well-documented, but I was suprised to see achievements unlock so easily in my Steam account without too much additional work.
changedDedicated serversAbout everything a player can do to unlock or progress an achievement happens in server-side code. We run official dedicated servers and will release it via Steam later this year, so you can run your own servers. That means, everything what I wrote up to this point has to work on a dedicated server as well. So the first thing that comes to mind at this point is, since it is already working on a listen server, just test it on a dedicated server. And while testing, learn that it does not work. The reason for this is that the engine’s achievement interface is a client-side interface. And while a listen server is both a server and a client, the dedicated server is, well, just a server. Therefore the interface is not available and the code did not work there. That must have slipped me while I was reading the documentation, but luckily there is a solution for that, too. To have achievements work on a dedicated server, it is necessary to use the Steam Game Server API. For the sake of similar code for both the listen and dedicated server, I decided to not use the engine’s achievement interface at all and use the Steam User Stats API for listen servers instead. Both are easily accessible from the engine’s code and things are working as expected now on any kind of server.
addedFinal thoughtsSince we are now able to easily add new achievements whenever we come across anything that feels worthy of one, we will do so. But we are also open to suggestions from you, be it on Steam’s discussion forums or our Discord.

DEVPOST2: Steam achievements

While Teemu is working on the new map, I started adding support for achievements to Snow War. The achievement support in Unreal Engine 4 is well-documented in Epic’s documentation, which is the same for the Steam-specifics in Valve’s documentation. So this was a pretty straightforward task: create a solid base that we can use to easily handle and add achievements, then hook everything up to Steam.

The achievement base

One of the fun parts of developing a game and almost any other kind of software, is coming up with robust, but flexible foundation for new systems. Luckily, Unreal Engine’s own design and achievements not being too complex themselves, help a lot in this case. The result is a new game instance subystem – the achievement handler – and a base achievement class along with separate classes per achievement which are derived from the base class. The achievement handler keeps track of all available achievements, the players which are currently playing on the server and their progress per achievement. Being a game instance subsystem, the handler is easily accessible from anywhere in the code, which is crucial for easy integrations of new achievements. It is also event-based, so we just need to raise an event, along with information about the player who unlocked or progressed an achievement and optional additional data. The handler then takes care of having the corresponding achievement object perform further processing. The base class mentioned above already covers most of the processing, but the derived classes can easily add to that, if required.

Surprisingly quick working draft

After finishing the base implementation, I moved forward with integrating our code with Unreal Engine’s achievement interface. As mentioned, this is well-documented, but I was suprised to see achievements unlock so easily in my Steam account without too much additional work.

Dedicated servers

About everything a player can do to unlock or progress an achievement happens in server-side code. We run official dedicated servers and will release it via Steam later this year, so you can run your own servers. That means, everything what I wrote up to this point has to work on a dedicated server as well. So the first thing that comes to mind at this point is, since it is already working on a listen server, just test it on a dedicated server. And while testing, learn that it does not work. The reason for this is that the engine’s achievement interface is a client-side interface. And while a listen server is both a server and a client, the dedicated server is, well, just a server. Therefore the interface is not available and the code did not work there. That must have slipped me while I was reading the documentation, but luckily there is a solution for that, too. To have achievements work on a dedicated server, it is necessary to use the Steam Game Server API. For the sake of similar code for both the listen and dedicated server, I decided to not use the engine’s achievement interface at all and use the Steam User Stats API for listen servers instead. Both are easily accessible from the engine’s code and things are working as expected now on any kind of server.

Final thoughts

With today’s update, achievements are available in Snow War. We start with eight of them, six being the usual suspects. Elimination streaks of 2, 4, 6, 8 and 10 players will earn you an achievement and believe me, the last two are not too easy to get. Another one is eliminating 1000 bots, across all types of matches, including bot matches you start from the menu. The last two are about destroying other players‘ snowballs with your own thrown snowball. One for a snowball that was thrown by another player and one for a snowball another player shot from their snowbow. Not easy to get, but very rewarding when it happens.

Since we are now able to easily add new achievements whenever we come across anything that feels worthy of one, we will do so. But we are also open to suggestions from you, be it on Steam’s discussion forums or our Discord.

-

Jan aka eddi

Source

Steam News / 7 June 2026

Open original post

Changelog.gg summarizes and formats this update. How we read updates.