This week at Facepunch we’ve been doing “prototype week”. The aim of this is to clear Idea Debt, sharpen our skills and have some time away from our main projects so we can return back to them refreshed and focused.
I’ve decided to develop an idea that I’ve had in my head since Christmas. I’ve called it “Beep” for now and it’s an online, multiplayer only, mission based driving game.
The loose idea of the game is that you are a delivery guy doing your rounds across a city, but there’s potentially much more to it than that. The aim is for the server to broadcast missions that appear on each player’s UI / radar. Some of the missions will pitch players directly against each other but others might split players into teams. Think GTA’s online missions meets Crazy Taxi.
So what did I manage to get done this week?
It feels like time has rocketed by but I’m fairly pleased with what I’ve manage to achieve. I wanted to focus on 3 areas; car handling, networking and mission delivery.
I didn’t want to spend any time worrying about art, that can come later, so all the assets can be easily found on the Unity asset store. This meant I could just work on the code and gameplay.
Here’s a quick look so far…
I didn’t want the trucks to handle like real performance cars, this isn’t meant to be Forza, but my first attempt made them feel a bit like shopping carts. Reducing things like the maximum steering angle, adjusting the weight and increasing the speed really made a difference. It’s not perfect but good enough right now.
For networking I chose to have a crack at using Unity’s UNET. This seems to have had a bit of bad press but I actually found it quite easy to implement. I binned off the HLAPI system and went straight for the LLAPI version so I could send my own custom messages between the server and clients. This also means that I can switch to a different networking library if needed whilst keeping the core code.
I used the matchmaker and relay server just to make it easy to get machines talking. This type of game needs a dedicated server but this was good enough for now. One PC can be set as the “server” and is responsible for collecting player positions, engine speed, steering angles etc and broadcasting all that data back to the clients. I’ll probably end up using UNET for the console versions of Deuce so it was pretty useful to try this out.
For the missions I wrote a simple mission dispatcher that runs on the server. This keeps track of the missions that each player can join and every second or so it broadcasts details about the missions to the clients. Each mission has a unique ID which is broadcast along with a start time. Eventually the idea is that the server will be firing off multiple concurrent missions so you may be taking part in a point to point race whilst other players around you are battling it out in a game of cops and robbers. I’ve got a few ideas for different missions and there could even be scope for the communities to design their own.
That’s about as far as I got for this week but when we had a quick multiplayer game in the office it was already pretty fun.
I’ll probably continue to develop this prototype a bit more, the aim is to get it good enough so people with prototype keys can play it and give me some feedback.