Every Man’s Sky Breakdown
Since I was asked to go through the tech that I had used for my entry “Every Man’s Sky”, I thought that I should take the opportunity to do a bit more of a write up about it.
Background
The concept of the game has been around in my head for a few months before the event, mainly because of one night (when I may have been slightly drunk) getting annoyed at No Mans Sky winning awards for technical achievement… Then when I saw this LD’s theme I knew what I had to do.
I realized creating an “Infinite Universe” would be fairly easy with procedural generation, but I don’t believe I could have made the universe a very interesting place to be in. So that’s when I had the idea to let the players themselves make it. In the beginning, I wanted to just let players name the planets they found, but then I decided it would be even more interesting to let players place them themselves, literally shaping the entire game world.
This has its own problems. But I decided, for this experiment to try to have as few limitations as possible, so this means you are free to place whatever you want, wherever you want, I want to try to avoid moderating this world (within reason) and let it be a true representation of what the players want to say.
The outcome was not quite like No Mans Sky, but it still has a focus on exploration. But I also look forward to seeing player’s creativity. Who knows what the universe will look like in a month?

Technology
My technology stack could be referred to as “non-standard”, since I am not aware of any other projects using a similar stack. So I will go through it, with my reasoning why I had chosen these technologies. The stack itself is as follows: - Game Engine – Unity - Serverside – C# WebApi (dotnet core) - Database – RavenDB (https://ravendb.net/)
Unity was an obvious choice of engine, as I am already very familiar with it (I have used it in all previous LD projects). I have found it is a remarkably flexible engine, and also very good at allowing me to rapidly prototype ideas without getting bogged down in unnecessary details.
RavenDB was selected for my database as the setup is very quick and straight forward (plus I had a server with it set up on already, so I could repurpose that fairly easily). It is a document database with super-fast read times, which is perfect for what I needed (players will want hundreds of planets loaded ASAP on the game load). It also allowed me to create indexes to query details at super fast speeds (someone already taken your username? I can look that up very quickly thanks to ravens indexing). Raven also supports caching by default, so it doesn’t even need to hit the database to retrieve planet information (it is just important to make sure all of the requests the clients are sending requesting data is uniform).
The Web API layer is just because I needed a very basic interface between the database and the players game. This simply takes basic HTTP POST and GET requests from the game clients, and throws back responses in JSON. (Turns out parsing JSON in Unity is needlessly hard). There is some basic validation of input, but other than that, I chose WebApi for its reliability.
This is all running on the free tier Amazon Webservices EC2 instance, running Windows Server 2016, is this box going to have enough power as the universe grows? Only one way to find out. A likely scenario is I run out of CPU credits and the server slows to a crawl.
What’s also notable is the way I tried to structure my client-server relationship. I tried to make all interaction (apart from loading the player information at the game start) between the server and client asynchronous, this means that hopefully, even under load, your game should not slow down, planets may take longer to load, but other than that it should not be noticeable. The actual loading of planets is done on a cycle, every ~5 seconds the client polls the server, gets a JSON list of planets, parses them and displays them. When you create a planet, you simply POST it to the WebApi, the client is dumb and doesn’t care about the response from this POST, so it simply lets it run in the background and continues doing its own thing.

Final Thoughts
The main interest for me in this project is to see what kind of things the general public make of it, how engaged they find themselves, but more importantly what they can create.
If you would like to play the game for yourself, and make a little mark on the universe, you can find it here: https://ldjam.com/events/ludum-dare/38/every-mans-sky
If you have any other questions, drop a comment here (if you can do that?), or on the game page itself, I will try to answer anything I can.
Keep Jamming Guys!