I am currently trying to integrate level sharing in Alien Blitz, at first what was planned was something along those lines (simplified):
- Create the level using level editor
- Open some page on this website, to access a personal account (maybe automatically created from steam or using username/password account style) where you can upload your maps and describe them
- To download a file it would either be from the browser with a nice interface (and copy/paste map ids in the game to download them), or from the game itself, but getting a nice interface would be hard.
That would have been a lot of work, getting a nice map sharing website with enough functionalities is not very complicated but very time consuming.
Instead I have changed my plans for something a lot better: Steam Workshop
Now what will/should happen is:
- Create the level using level editor, level editor will provide a way to create simple preview images for the workshop.
- Open game, play your level, and complete it
- Once completed (just to avoid garbage map, not a strong protection, but better than nothing) there will be an option to upload your level to the Workshop
- When done you can access the workshop, edit details, add more preview and such, and make the level public when ready.
- To download you would just have to go to the Steam Workshop (from Game overlay, or just using Steam application)
- Select a map (thanks to Steam it is nice and easy to find maps, get rating, discuss,…) and subscribe to it (Steam downloads it in the background)
- Open the game, view all subscribed maps and select the one you want to play
The workflow might change a bit, but it will be something like that.
If user is not using Steam (DRM free version) then he will have to download maps manually and put them in the correct game folder, but I won’t manage a central map sharing in this case.
What will the workshop contain ?
At first the workshop will contain single-maps, you can upload and download individual maps to play with. It will use your current save but monsters level is automatically scaled to the save file level.
Then I will probably include map-packs, instead of publishing one map you can select multiple ones and share them in a pack.
I might also (replacing map-packs, or along with them) add full game maps replacements: basically when user download the pack he will start with a fresh new save file specific to this pack, and he will have to complete your maps in the order you selected, gaining weapons and such as you define it.
And finally if there is enough demands and players (so nothing planned yet, we will see how release goes) I could work on mods: provide a tool to add new weapons, enemies, and more.
At first I tried using the newest Steam Workshop API but they are not implemented in steamworks4j, so I began adding some functions (jni/C++ and such), I had the first functions ready before realizing I could just instead use the old Steam Workshop API that is implemented in steamworks4j 🙂 It’s a lot easier that way (no need to recompile everything on each platform).
I’ve first implemented a static publishing tool (hard-linked to some local files) that immediately worked, and then I’ve implemented the functions to retrieve the subscribed maps.
Second part is fully dynamic, when you enter the menu a request is made to Steam, and asynchronously the map table is filled. Maps are only displayed when Steam has finished downloading them.
Currently it is just a quick & dirty table with a label and button, but it works! I will make things nicer later on.
I now have to work on the publishing tool (current one is static/hard-linked), that will be available only on local maps, and that should provide a simple way to publish a new map or update an existing one.