(Formerly, Hoom, and before that Murmuration)
BackgroundHi! I've been working on this prototype on-and-off the past few months. I was working at thatgamecompany up until the end of last year and when I left I decided it would be cool to try applying some of the TGC design aesthetics I picked up with a multiplayer browser game along the lines of Slither.io. I wound up focusing on flocking mechanics using Craig Reynolds good old "Boid" models (
http://www.red3d.com/cwr/boids/) (I've gotten used to referring to things that flock as boids so I'm gonna continue doing that here). I was originally calling the game Murmuration, a murmuration is a specific kind of flocking behavior in birds that looks like this:
What's in a name? (Updated 7/19/17)
After trying to find a .io domain name for the project I switched first to Hoom.io, and then to HyperBoid.io. I'm not sure what i was thinking with Hoom. In retrospect is sounds like an Ikea product or startup (maybe the Uber of vacuum cleaners?). HyperBoid sounds like an old arcade game to me, also rings of metroid, asteroid, bolide, and hyperboloids - all good mental references. So it's
HYPERBOID.IO for now!
DesignThe current game operates a lot like Slither.io, but instead of eating to grow longer, you pick up free boids and add them to your flock. You guide your flock indirectly by controlling a leader boid that all of your flock members try to follow. You can take out other players by getting your follower boids to collide with his/her leader. When someone is eliminated their flock is free for the taking. I'm still tuning the flocking trying to find the right balance of control and chaos, I need to do some more playtesting to really determine if the feel is right.
The game was originally everyone for themselves (like Slither.io), but, because there is a finite number of boids in the game what would happen is one player would eventually have almost all the boids in their flock and everyone else would be left with none. In some of my playtests new players couldn't join because there were no boids free. So I changed direction and am currently experimenting with a team based mechanic where one team wins by collecting half of the boids in the game. I'm not sure yet what should happen at the end of each round. I like the idea of rebalancing the teams based on how many boids everyone collected, so that if there are a few dominant players they might wind up out numbered. I'm also liking the idea of doing rounds that end rather than an infinite play mode like in Slither.io. I currently have bots in the game so that I can test it on my own. They're pretty dumb, but it's still pretty fun playing against them. I'm not sure whether the final version of the game will have bots or not, I sort of like the idea of filling every game with bots that get kicked out any time a human joins - that's basically how it works now.
Development Challenges / Next StepsMy current version supports 64 players, but that number is pretty arbitrary. The "right" number of players will depend on how many boids I can support - currently its around 1000, so that's about 15 boids for each player on average. I think the game would be better with double that, so either less players per game (lame) or more boids (hard). Generally the more boids the better!
The biggest challenges I'm facing now have to do with networking and performance in general. All of the logic and state of the game runs server side with player clients acting as basically just a renderer for the game's state and a controller. The only data passed from client to server is the input position. The server is sending the positions, orientations, and state for every boid to the client around 10 times a second. With 1000 boids that winds up being enough data that if I were to launch the game today I'd wind up with a hefty AWS bill. So I'll be seeing what I can do to cut down on the bandwidth requirements through compression or other means. I'm interested in seeing if I can send each client only the data relevant to their view of the game.
General performance for running all the boids is another issue. The flocking logic involves testing distances between each boid and every other boid in its vicinity. The performance here was greatly improved by using a hashmap to determine which boids are close enough to each other to require a real distance check. I think the game is viable with 1000 boids, but it would be definitely improve the experience if I can make it work for even more.
The last next thing for this prototype is my figuring out some of the ins-and-outs of hosting a browser game. The current prototype is running on AWS but I'm not sure that's the best long term solution. I also need to figure out how to integrate ads (annoying I know, but I need a way to at least try to cover the server costs). My plan is to have short ad show at the end of each game round, I'm hoping it won't be too annoying. I'm definitely open to hearing other monetization ideas if people have feelings about that.
If you're interested in playtesting let me know, I'm going to be organizing some larger (64 players would be awesome) playtests soon. Feedback and ideas are very welcome.
Thanks for checking out Murmuration! I mean Hyperboid!