…but first invite a friend or two. It’s dangerous to go alone!
The rating period is slowly but surely nearing its end, and I thought it cannot hurt to write a postmortem for the game I made three weeks ago. I wish I would’ve promoted the game more (it’s my first online multiplayer game after all!) and I wish I could’ve played more games, but my master’s thesis was jealous and demanded I spent more time with it. That being said, I have a free minute now, so here goes nothing!
Three weeks ago, when I was still young and inexperienced, I thought that “Connected Worlds” lends itself perfectly well to making an online multiplayer game. (Nevermind that I never did one before, haha.) That being said, there are some obvious design problems that I needed to solve – and that ultimately led to the current design:
- LD rating is 3 weeks, and people likely won’t play all at once. To tackle that, the game should a) be able to be finished single-player too.
- Even if people are online at the same time, they probably won’t arrive at the same time – and likely don’t want to wait either. For that reason, I made the game drop-in/drop-out: The first player to join starts a new session that ends when the last player leaves or the game is won/lost. Any player that arrives in the meantime just spawns next to the torch. (I briefly entertained the idea of one permanent session, but I wouldn’t want to do the level design for THAT, phew. Also I highly doubted that players would come back often enough for that to be interesting.)
- Synchronisation is hard. So, uh, nothing twitchy. More slowly. With tiles to walk on.
- Synchronisation might not work correctly. I have no idea what I’m doing after all. So, better do a co-op game and nobody gets pissed that the enemy had an advantage.
Okay, so a scalable drop-in/drop-out co-op online multiplayer game. This is basically what I spent my complete first day on, and I had no idea what I actually wanted to do gameplay-wise yet. I implemented a chat though: Just text that appears on top of player’s heads.
After a good night’s sleep, I arrived at the idea spawning from the Olympic torch relay: A flame had to be transported from A to B – in this case between two kingdoms. Slowly everything clicked together: It was dark, hence the flame is important. If you drop it, it’s not protected anymore and slowly dies down, and you have to drop it sometimes because it’s heavy as hell. And there are multiple obstacles that you have to dig through or build across. You can do it alone if you react fast, but it’s stressful always to drop the flame, dig/build a little, pick it up again, transport it, drop it etc. – it’s much better with friends helping you! So yeah, here we go – a game that you can play alone or with “any” number of friends.
The game is made in Unity and with the SDK from (and hosted by) Yahoo Game Networks. Free hosting for up to 5000 daily users? Yes please.
There is a server, but it doesn’t do much – it mainly keeps track of the users, items on the floor and already dug-out rocks so that it can inform new players. It also distributes events. The only thing that it is really authoritative about is when an item is spawned, picked up or dropped to avoid item duplication.
On the client side, you are the only player that moves directly – and you send messages to the server how you move. Because movement is between tiles, those messages are few, and they will arrive in roughly the same interval in which they are send, so on the other screens you move the same way, just with a delay. Each player object has an event queue – move, dig, build bridge etc – that will be executed in that order with the appropriate delays, so it’s no problem if messages arrive to quickly either.
Making the server mostly non-authoritative and using that message queue system is what helped me be able to finish the game in such a short time, I think.
What didn’t go so well?
- No sound effects. I wish I had some, but I finished the level itself in last second, and well – that was a bit more important, I guess.
- Nobody invites their friends to play. I wish I knew why. It’s super easy – just share a link – but many people commented that they had to play alone. I suppose they do have friends, right? Maybe even game developer friends?
Apart from that, I’m actually largely content! Sure, there’s not that much gameplay, but it’s fun – and sure, the graphics could be better, but hey! 48 hours and first time online multiplayer! I’m certainly not complaining. Which leads me to…
What went well?
- Online Multiplayer in 48 hours, that’s what!
- The whole thing is surprisingly stable, if sometimes a little laggy. I would’ve expected to have more problems with an online multiplayer game.
- Development wasn’t as hard as expected. I was always a bit wary of networked multiplayer in any form, but it turns out that it wasn’t that bad to always have a server and often two windows running. Might be because it was only 48 hours and a small-scoped project with no necessary security though.
- The Drop-in/Drop-out is cool. And it also has the side effect of allowing people to spectate games. Apropos drop-in/drop-out…
- The game is a lot of fun with streamers! Allowing for a variable number of players that can join anytime, and streamers having an audience already made for great fun a lot of time.
- The chat is refreshingly different. Having text appear on top of the heads is cool, but seeing it being typed live is surprisingly even more fun!
- Trust in the process. Seriously, don’t worry if your design is not complete yet. I didn’t have any core gameplay ideas until 12 hours before the end and I still finished with something. Just work towards that goal until then.
- Keep a ToDo list. Workflowy is superb for that. Helps me stay on course and motivated.
- Keep your design simple and modular. Especially if you do something big technology-wise that you haven’t attempted before. If you finish early, you can still add more features! I would’ve loved to have enemies and defending each other, or wind zones where you have to keep the flame safe, and… but time ran out, and the current state is very playable.
- Test early. I started testing long before I had actual gameplay. I guess networked games are special in that regard though.
…I’m quite happy with the result, and I’m seriously considering doing a game with online components for next LD too. So much inspiring online stuff this LD, damn! And maybe I’ll even get a chance to gather more networked multiplayer experience by then, but knowing me, I won’t and I’ll just dive right in. Wouldn’t have it any other way, really.
Do you have any questions? Feel free to ask them in the comments or on Twitter!
And maybe you have a free minute or two and want to try my game? (And maybe ask a friend to join you! Friends are pretty cool.)
Thanks for reading! I’m done here, goodbye.