Support us on Patreon to keep GamingOnLinux alive. This ensures all of our main content remains free for everyone. Just good, fresh content! Alternatively, you can donate through PayPal. You can also buy games using our partner links for GOG and Humble Store.
We do often include affiliate links to earn us some pennies. See more here.

Open Source Game Achievements with Gamerzilla

By -

For a while, I've been suggesting an open source game achievement system. Some people liked the idea but no one wanted to build it. Finally after LibrePlanet 2020, I decided to tackle the problem.

But who cares if open source has game achievements or not?

Achievements are a feature game players expect at this point. By not having any support, the audience looks at our platform as outdated. Currently the data is controlled by one company. Can it be misused? Maybe or maybe not but we don't have to ability to control that at the moment. Game developers are the ones who should be fighting against it. Right now they are making multiple builds and coding support multiple times.

Beyond those arguments, game achievement systems are our virtual bookshelf for games. Many games are bought digitally these days so you can't go to friends' houses and see what they've been playing. If you look at a friend's achievements you can find other games that might interest you or maybe they played a game you were interested in so you can ask for their opinion.

What is Gamerzilla?

Gamerzilla is a multitude of pieces. The web interface is served by Hubzilla, a federated social network service. Hubzilla has extensive addon capabilities which could implement game achievements. Perhaps the biggest contributing factor to choosing Hubzilla was FreeGameDev site setting up an instance.

Asking developers to interact with a web interface probably wouldn't get much traction. LibGamerzilla is a C library that handles interfacing with the Hubzilla instance. It should be as easy for developers to use as the Steam API.

However that would still require every game to add a setting page where you specify your Hubzilla instance and login information. No one wants to do that. Instead LibGamerzilla can also be added to a game launcher like Lutris or GameHub. Connection information would be configured once and the launcher would relay all achievements to the Hubzilla instance. If you don't want to upload your data, no problem the game launcher saves data locally and could display your achievements.

Everything is saved locally and synchronized. If you play a game without the game launcher running, it will synchronise next time you run it from the game launcher. You can also play offline and upload achievements at a later date.

What about languages other than C?

C was chosen for the library because of the ease of integrating with other languages. LibGamerzilla has been used from Vala, Nim, Python, Godot, and the Love game engine. It has minimal dependencies to make it easier to use. Fedora includes a mingw cross compiled library to make Windows ports easy.

How do I use it now?

To my knowledge, FreeGameDev Hubzilla instance is the only one running the addon at this time. You could always ask another instance to include the addon. A standalone server could also be implemented but nothing is currently being done for that.

Fedora is the only distribution that I know includes the library. I have mentioned it to Debian developers and presented at the MiniDebConf in November. Let the distributions know if you want support.

No game launcher has built in support yet. I have modified GameHub to support Gamerzilla but the changes have yet to be merged. Recently I modified the test program included with LibGamerzilla to be a temporary solution. If you install libgamerzilla-server on Fedora, you can run the command line gamerzillaserver. On first run it will ask for your Hubzilla instance and login information. After that it can run without interaction. (There is currently no way to correct a mistake except deleting the file .local/share/server.cfg and running the server again.)

At the moment the game support is limited. A new release of Seahorse Adventures and Shippy 1984 have been released with support and will hopefully get added to Fedora soon. SuperTuxKart has merged support but unless you build it yourself, you will have to wait. Me & My Shadow and Smalltrek have shown no interest in merging support but can be built from my repositories. Pinball Disc Room has support under Linux but the update has yet to be uploaded to itch.io. Marvellous Inc. and BYTEPATH are two open source Steam games modified to the latest version of Love and Gamerzilla support. It is unlikely those changes will be accepted by the original developers. Support for Unreal or Unity has not been investigated. While it would be useful to have a simple addon for those engines to help commercial developers, I have kept to open source games at the moment.

It might seem kinda depressing by the lack of support but Gamerzilla is young. Game players need to ask for support. Game developers need to learn about the system and how it can simplify things for them. Steam is unlikely to change but itch.io has no achievement system. Fewer developers spend the time adding support for GOG or other achievement systems. We need to convince them to adopt an open standard.

Article taken from GamingOnLinux.com.
Tags: Open Source
24 Likes
About the author -
author picture
I am an open source game developer. I write about games and try to restore ones that no longer work. As a Fedora packager, I try to improve the games available with the distribution.
See more from me
The comments on this article are closed.
All posts need to follow our rules. For users logged in: please hit the Report Flag icon on any post that breaks the rules or contains illegal / harmful content. Guest readers can email us for any issues.
11 comments

Akien Dec 12, 2020
Great initiative! I'm happy to see something like this finally available in the FOSS toolkit, and kudos to you for creating bindings for so many FOSS languages and engines. I'm sure Godot folks will find a good use for your GDNative implementation at https://github.com/dulsi/gdnativegamerzilla :)
TheSHEEEP Dec 12, 2020
View PC info
  • Supporter Plus
Not sure if I misunderstand what it is, but wouldn't it make more sense to have a system that automatically translates game achievements into the right format for a given platform?

At least from a developer's perspective, what would be most useful would be to code your achievements once and then have them work on all platforms (Steam, GOG, open source) without having to do any platform-specific coding. It would just detect if you're building for Steam/GOG/etc. (or you set a flag) and automagically work.

Of course, this would also work the other way around, if e.g. Steam supported an open source platform and converted it to its own system automatically. But I do find the chances for that relatively low.

But (again, if I understood this right), this platform would actually increase the work for developers. That's a pretty tough sell.


Last edited by TheSHEEEP on 12 December 2020 at 9:53 am UTC
Julius Dec 12, 2020
This isn't so much about creating a useful library for commercial game developers to easily use Steam achivements, but offering a FOSS alternative to this walled garden. Think of it in terms of Mastodon Vs. Twitter. Gamerzilla is trying to do what Mastodon does, not just write an alternative front-end client for Twitter.


Last edited by Julius on 12 December 2020 at 10:33 am UTC
eldaking Dec 12, 2020
This looks very cool. While I don't have much hope that major studios will use this, it opens a great possibility for FOSS games of all kinds - from engine recreations that might have trouble re-implementing this element, to the reasonably big projects, but maybe even small games like Sudoku or Solitaire implementations? It could also be very useful for non-FOSS indies that want to use itch or distribute in other, non-Steam channels.

Achievements can be pretty important (though it is all over the place, not all games make good use of it). It may seem like a small thing, but goals to accomplish are a crucial element of games. Comparing yourself to your friends, having a register of what you accomplished, having different side-goals to aim for, getting cool landmarks for progressing are all natural elements of gameing.
Dennis_Payne Dec 12, 2020
@Hori: It's impossible for it to be secure. The source code for every game using it right now is available. Gamerzilla achievements are like golf scores. Sure you can cheat but it doesn't matter.
MayeulC Dec 13, 2020
Just make sure it is secure and the achievements can't be (easily) cheated.

I don't know about this. It isn't really secure on other platforms either. (See that kind of tools.

What if you already unlocked achievements on another platform and would prefer not to start over?

What if you wanted to lock them again as you decide to start afresh?

I don't like playing with cheaters, but that's generally a trust issue, and a web of trust could do wonders. Achievements are for you only, it doesn't really matter to me.

I applaud this initiative!

It would be even better if this library could take care of abstracting achievements for other platforms, especially as GPL apps can't easily link to the Steam runtime.


Last edited by MayeulC on 13 December 2020 at 12:54 pm UTC
Doc Angelo Dec 13, 2020
I just realized that I really don't care about achievements in the way they were intended. If the achievements are *inside* the game or displayed via a third party frontend (Steam for example) doesn't interest me. For me, those are like quests so to speak. I don't care about them being visible for others online.

Imagine the Witcher 3 having an online display for the quest progress of ALL quests in the game, for every player. I don't give a shit, neither for random users, nor my friends. Nobody of us takes a look at those statistics other than their own.
Maath Dec 14, 2020
I wonder, why does this need a launcher to be able to publish your achievements to hubzilla? Why can't it just read a config file in ~/.config/gamerzilla/ ?
Dennis_Payne Dec 14, 2020
I wonder, why does this need a launcher to be able to publish your achievements to hubzilla? Why can't it just read a config file in ~/.config/gamerzilla/ ?
It could be setup that way. How would you configure it? I don't like telling people to manually edit a file. I don't think most games are going to want to include a configuration screen for it. I have wondered about the possibility of making it some sort of service in the desktop. What exact technology would be used for that I don't know? I want to support Windows as well so any solution needs to have an answer for that. (It doesn't have to be the exact same answer but more code to maintain is a minus.)
MayeulC Dec 15, 2020
I wonder, why does this need a launcher to be able to publish your achievements to hubzilla? Why can't it just read a config file in ~/.config/gamerzilla/ ?
It could be setup that way. How would you configure it? I don't like telling people to manually edit a file. I don't think most games are going to want to include a configuration screen for it. I have wondered about the possibility of making it some sort of service in the desktop. What exact technology would be used for that I don't know? I want to support Windows as well so any solution needs to have an answer for that. (It doesn't have to be the exact same answer but more code to maintain is a minus.)

Hmm, D-bus exists on windows as well (if you bring your own). Have a standalone GUI to configure it if you must, leave the option to have a config file: I migrate those across my PCs :)
Maath Dec 16, 2020
I wonder, why does this need a launcher to be able to publish your achievements to hubzilla? Why can't it just read a config file in ~/.config/gamerzilla/ ?
It could be setup that way. How would you configure it? I don't like telling people to manually edit a file. I don't think most games are going to want to include a configuration screen for it. I have wondered about the possibility of making it some sort of service in the desktop. What exact technology would be used for that I don't know? I want to support Windows as well so any solution needs to have an answer for that. (It doesn't have to be the exact same answer but more code to maintain is a minus.)

Storing the user's config and presenting a GUI to modify it are two different things. How does the user configure it now, through those aforementioned launchers? From there it could be saved into the config file, then it is able to be used always, not only when a game is run from a launcher.

I don't think it needs to be an always-on service.
While you're here, please consider supporting GamingOnLinux on:

Reward Tiers: Patreon. Plain Donations: PayPal.

This ensures all of our main content remains totally free for everyone! Patreon supporters can also remove all adverts and sponsors! Supporting us helps bring good, fresh content. Without your continued support, we simply could not continue!

You can find even more ways to support us on this dedicated page any time. If you already are, thank you!
The comments on this article are closed.