Hello everyone ! So this blog post will cover what we did to create the desktop version of A Blind Legend and its release to the Steam store.
You can access the store page here and maybe try out the game in its desktop version !
If you are not familiar with the game, it was intended for mobile devices first and we covered its development in this previous blog article that you might want to take a look at first.
Due to the license agreements when you sign up to be a Steam/Steamworks developer, we cannot specifically talk about the publishing process itself. Nonetheless we can share our impressions and what was specific to this project !
Publishing to Steam
Overall, publishing to Steam took a bit of time to understand but the documentation and forums you get as a developer are plenty.
Since many games on Steam are created with unity, don’t worry about not finding the relevant information that would be specific to how unity works (for example synchronizing save game files in Application.persistentDataPath.)
Though it is absolutely not necessary for games to implement Steamworks for them to be published to the store (and this was not really clear to us in the beginning), we still did as we needed Achievements. We used a C# wrapper for the Steamworks API called Steamworks.NET which you can find and support here .
We suggest to get familiar with the Steamworks documentation you get from valve first (you have to become a steam developer first) so Steamworks.NET will be clearer then.
Steamworks.NET though is easy enough to implement in unity projects, initialize, and even to set up a simple DRM that, for example, exits the app if it hasn’t been launched from Steam.
Just a note on publishing, we’re leaving out the publishing process, but as we learned to master it, we realized things make enough sense as you go along for it to be easy – just make sure you read the docs !
Input Management : from touch controls to a keyboard/gamepad scheme
Now from the very beginning, A Blind Legend was coded with a custom Input management system, based on “actions”, the same system we build for the Citrus Engine . Thanks to this, we were able to unify all “controllers” and we didn’t have to change any code that “reacted” to such “actions”. The code that would “react” to a “jump” action (there’s no such action in A Blind Legend btw :p ) would not care from what controller (keyboard, mouse, gamepad, any other custom input) this action would be triggered. So that means better control of input, but we still could check out this actions “original controller” to do something special if triggered.
We only needed to had gamepad and keyboard support , plug that into our input managment system and everything would still work , by only changing one class.
We of course disabled any mouse/touch event simply using conditional compilation.
We found a great plugin called Rewired for gamepad support… and even more!
Basically Rewired is more than we bargained for as it also let’s you manage input by an action system. So it felt like we had two similar system, but Rewired also has a nice visual setup window, and it was easy to plug it into our existing solution (which essentially could be removed completely with a bit more work and refactoring).
Rewired would also let us make gamepads vibrate for extra feedback. We wished unity had thought of such a solution, but they can’t be working on everything evertime, so Rewired is a must have for desktop as far as we’re concerned. And part of the Unity team is actually working on a new Input system that would essentially implement most of the concepts we needed. So good luck to the team working on this!
A Blind Legend has some state machines and a general one is handling how you go from exploration to combat mode. Thanks to this, we simply switch Rewired’s controller maps so that actions corresponds to older actions we had setup, so merging our system and theirs was really easy without having to store controller schemes or maps ourselves.
The Standalone Version
A Blind Legend is also being distributed for desktop as a standalone version (no steam and no DRM). Conditional Compilation for Steamworks.NET and a couple of tweaks, Windows and Mac builds were easy enough.
I guess we have nothing special to say on the standalone version since you basically get what unity builds and create installers when needed. For example, Nullsoft’s scriptable installer NSIS.
Desktop app stores
There’s no official Mac App Store version, yet it was considered at some point and Aymeric created the following repository with details and scripts to help :