Week 11 Update

by 🦊 The Fox & ⚡ Shockk on 2019-09-29

Y’all mind if I scream?

“This should be easy!”

A phrase we have seriously regretted saying this week, on several occasions.
I’ll let ⚡ Shockk get into some more detail in a minute, but here’s what we’ve got done this week.

We’ve got “Steamworks” integration now!

That means that if you are playing Spacegame, Steam detects it properly. We also have an AppID which means we can now distrubute the game over the Steam network.
We plan to release in Early Access, but there’s a few milestones we want to hit first.
The Tech Demo will be available on this site sooner, but will be less feature complete.
During the Tech Demo phase, the release on the website and on Steam will be kept in sync, but once we leave that phase, Steam will be the only place to get releases.

Keeping the world in sync

Our current main map uses random number generation to create the asteroid spread, unfortunately this means that everyone sees a different map as most things are still handled client side at this time. The server just tells clients what all the other clients are doing.
So, the RNG is now “seeded”, this means that the clients all share what seed they are using and therefore share the “randomness” so everyone sees the same world.

Model Progress

🐰 The Rabbit has also been working hard on our ship model, I linked the concept art last week, and it’s coming along nicely. We hope to replace our placeholder model with it soon. Here’s a sneak peek.
Cool Fighter Model

“Wait! That’s not supposed to happen‽”

This week has presented me with problem after problem and I think I’m slowly being driven to insanity :D

It’s not random enough :|

So, in order to sync up the world map across clients, we’re opting to sync up the random seed used to generate the map and do all of the processing on the clients rather than needing to transmit loads of object data between each client and the server. Unfortunately, this isn’t as simple as it sounds. I’m going to try and write up a more detailed blog post about this particular issue later, but for now there are just a few points to take note of.

Because we want to be able to sync clients up to the current state of the server’s random engine, rather than just the initial seed, we need to be able to serialize/deserialize the random engine state. We also need our random engine to be super efficient. Due to these constraints, I had to write a new random engine from scratch and figure out how to wrangle a random integer into a floating point decimal, as well as other fun things like distributing points uniformly within a sphere, across the surface of a sphere, etc, etc, etc.

Ultimately this turned out to require a heck of a lot of maths to make it work properly, and in general it was actually a lot more complicated to pull off than I originally thought it was going to be.

steam pls

We just spent the better part of 5 hours trying to upload Spacegame to Steam. In fact, uploading it to Steam was easy! Downloading it back again.. however.. turned out to be surprisingly tricky to pull off. Essentially, we battled for an entire evening trying to get our Steam clients to download the 64-bit version of the game, but there’s actually a lot more stuff that needs to be configured in Steamworks in order to get depots working as expected, and more fool us, not all of this is documented!

Thanks to MoscowModder on the Steam community forums and a truckload of good luck, we were able to solve this and get both the 32-bit and 64-bit build depots working now on Steam. One small step closer to release!

What next?

Collision and the Damage model are taking a little longer than expected, along with some placeholder sound effects to make things feel a little less… quiet.
We’re also running internal testing with colleagues on some other platforms and hardware configurations to make sure everything is stable before a more public release.

See you all next week!
-🦊 The Fox, Project Manager
-⚡ Shockk, Lead Programmer