Beat the Rhythm VR — Devlog 2
Building Our Own Backend Server
This was (and still is) a big one! I actually knew we needed our own backend server for a very long time: One reason Holodance is still only available on Steam is because I heavily relied on the Steamworks backend for leaderboards, achievements and keeping state for players (i.e. progress in the game, mostly for Story Mode). In order to let you play with people on other platforms, like Oculus Home, Windows Store or PlayStation Network, we either need to use a third party service (there are some, like PlayFab or GameSparks), or roll our own.
With our second game, Beat the Rhythm VR, we not only want cross-platform but cross-game: All the community features, like leaderboards, song and beatmap quality rankings, session streams and so forth should be consistent and shared among both games, so that we can have one (hopefully) large community for both games, instead of two smaller, isolated player communities.
And there’s another thing: I’m still working on our own in-VR beatmap editor and the fun with that really only starts when you can conveniently share your hard mapping work with your fellow players. Which opens a whole other can of worms and tricky challenges that need to be faced.
Having our own backend server solves a lot of these issues; even if solving some of these issues makes developing that backend server significantly more complex than just a leaderboard-system.
A little Personal History
Before I started working on VR games full-time in 2015, after several years of doing it “on the side” (since 2007), as freelance software-engineer I had a really decent income. Which was really cool! But that was due to taking whatever software-engineering project came along. That was still kind of fun. But when I’m totally honest, this wasn’t really what I was here for, and I had known that for sure at least since 2007 … but really, as a hunch much much longer. Most of my time, I spent working with databases, Web frontends, early Java days mobile apps, some of which I developed from scratch on my own, some large and complex systems that had grown over many years, that I worked on in small teams.
One reason it took a long while to get started with this was because I knew I’d be facing some old demons when getting back into this, and I honestly wasn’t looking forward to that. While I know I can do these things, and actually do them quite well, I’d honestly rather have paid someone … except I know how much that would cost, and we have to be super-careful with our budget (2018 was twice as good as 2017, and 2017 three times as good as 2016 — but we* still have very little liquid cash and roughly €100K open loans … also, it’s not so hard to double and triple your revenue when you start from a base of roughly €10,000 … per year … revenue).
*we currently actually only means me, working from my basement to be able to sustain the company
When I finally did get started, I first spent a lot of time figuring out which technology stack to use, and learning to use that technology stack. That was fun — I love learning new things, and in terms of server backends and Web development, I was living at least 10 years in the past, probably more like 15 years. Eventually, I got it rolling and we have now had the new leaderboard and progress tracking on the alphadev branch of Holodance for a little while, we also already use it for a little side project based in Beat the Rhythm that I did for money called Beat Challenge or 节奏激战 (this one’s currently only available in China, for the Lenovo Mirage AR headset), and the internal builds of Beat the Rhythm. This is on the beta now for Holodance, so by the time we release Beat the Rhythm, it will have been in production for a little while (you may have noticed that we just pushed the release of Beat the Rhythm from “Fall 2018” to “Spring 2019”).
It’s done … well … almost!
(and we all know what that means ;-) )
The hardest parts are done. Obviously, there is still a lot more work on this end, but I am super-happy that the foundation is there and I can now build out the various systems step-by-step, one at a time.
There was a price to pay: One of the things I really enjoy about developing games is that it’s an incredible creative and lively process. Sometimes, I have an idea of my own, or a request coming in from a player in the middle of the night (Hello Discord), start coding in the morning, and can play test this new idea in the afternoon, to share it with you in the evening. Then, of course, there’s usually several days, sometimes weeks, sometimes months of polishing until it behaves in the most fun way — but it’s usually a fun process that involves designing game play mechanics, coding, visuals and effects, sometimes audio.
I have been missing that during the last few months, and after my last meditation retreat, I took a little break from the server work to play with something new. That will go into Devlog 3, so stay tuned!
One (fairly big) concern …
One final thing, also to get a little discussion going: Until recently, I wanted to use the game play data that we have been keeping on player’s PCs to rebuild the complete history on our server. In other words, upload your game sessions, rebuild the leaderboards from that, basically “migrate” everything. Technically, this is possible, and I could still do it … but there are a few concerns:
- First of all, it does add a lot of complexity. There are a lot of things to be taken care of, and it would add a significant amount of time just to set up a reliable synchronization mechanism that can handle years worth of gameplay data without interrupting gameplay. We also changed the data format a few times, so that’s also something to be careful about.
- Then, that data is not necessarily complete or reliable: You can disable recording the movement data, or you might have deleted the GameData folder — when it’s gone, it’s gone. So, the restored history would not be as complete as one would wish for.
- A related issue: Without the movement data, there is a bit of potential for cheating by messing with the session data. With the new system, we’ll only record your session for the leaderboards if you opt-in to including the movement data. That way, cheating becomes near impossible. But handing that for lots of past (and partially incomplete) data is quite tricky.
- Finally, there’s the privacy issue: I honestly don’t feel comfortable uploading up to three years of gameplay sessions to a new system without asking (and under current EU privacy laws, that would be illegal, too). But when I ask, I kind of invite people to cheat (say “no” now, mess with the data, then say “yes”). This is much easier with current / future data that is generated while playing.
So, at the moment, I lean towards making this a fresh start, probably even with a few resets during beta, to be able to polish how we store things without having to carry the burden of migrating. When I made some changes to how scoring works, player feedback on “wiping the leaderboards” was fairly positive — Holodance is still in Early Access, Beat the Rhythm not even released, yet, so that kind of thing is not totally unexpected. But still, it’s something I’m not taking lightly (which is also the reason why I haven’t updated the default-branch and only did alphadev- and now beta-updates for about six months).