Coding huge multiplayer tournaments in 30 hours: the Prismata hackathon 12


Edit: stream and publicly viewable docs are up, and we’ve blown up over at /r/gamedev.

This is a post about a game development hackathon that we’ll be live-streaming for much of the next two days. But this is no ordinary hackathon. We’re upping the ante by setting a hard deadline that could result in extreme embarrassment if things go horribly wrong. Allow me to explain.

Organized tournaments are a favourite aspect of many of the games we know and love, and Prismata is no different, being an excellent candidate for compelling and competitive tourneys. After the success of events like Alex’s Prismata Cup Hearthstone tournament, our fans have been begging us to host an actual Prismata tournament. So, at long last, we’re doing it. The first ever Prismata Open Tourney will happen tomorrow, Thursday October 16th, at 7pm Eastern time. We’ve recruited a slew of Hearthstone and poker pros to participate, including millionaire poker superstar Mike ‘Timex’ McDonald and Hearthstone number one Americas legend Jeffrey ‘Tarei’ Liu. The tournament is going to be epic.

There is just one problem.

Prismata currently doesn’t support tournaments. At all. There is literally no tournament feature in Prismata, and we’ve never worked on one before.

That’s why we’re adding tournaments, today. We’ll be designing, coding, and refining Prismata’s tournament features in a 30-hour hackathon that starts 1pm EST Wednesday and ends at 7pm Thursday—when the first Prismata tournament will begin.

Oops. We just did.

 

The best part? We’ll be streaming the development process for the full 30 hours. Our goal is not only to create Prismata tournaments from the ground up, but to make better tournament software than has ever existed in an online game. In thirty hours. We’ll have a huge selection of tournament formats, robust customization options, built-in observing and replay features, and my personal favourite goal: no bugs.

 

Are you serious?

Yep. This won’t be your typical hackathon livestream. We know that watching nerds type out code is hardly interesting, which is why we’re streaming everything: the whole process, from nothing at hour 0, to a pro tournament at hour 30 that (hopefully) won’t crash. You’ll see it all: us planning features on shitty whiteboards, sleeping in shifts, finding and fixing bugs, and so on. We’ll take your feature suggestions in the stream chat, post an update on this blog post at least every hour, and keep a live-updated public task list for everyone participating. We’ve had server crashes during high-population Prismata brawl nights before, and we have never attempted to undertake such a huge project in so little time. Anything could happen.

We’ll also be running a Reddit vs Devs Prismata game at the same time. More info to come.

 

Why?

Why do this? To prove that it’s possible. In the past few years, we’ve seen big game developers take ages to implement often-requested game-critical features. It’s been over a year since Hearthstone was available to play, and the game still lacks tournaments and observer mode. League of Legends is still missing a proper replay system. StarCraft 2 lacked chat rooms for over 2 years after its initial release. We find it pretty inexcusable that top competitive online games lag behind so much in feature development, so consider this a call on companies like Riot and Blizzard to step up their game.

 

Give me the details

What: Our riskiest venture ever

When: Wednesday October 15 @ 1pm Eastern – Thursday October 16 @ 7pm

Where: Watch on our Twitch stream or below, and read hourly updates here!

Who: The Lunarch studios devs: Elyot, Will Ma, Alex, Alexey, and TC.

 

The stream (goes live at 1:00pm eastern)

The stream is now offline, but follow us on our twitch page to be notified when future streams go live.

 

Updates

Wed 4:15am: Blog post is live! Gonna get some sleep before the big day.

Even if nothing else gets done during this hackathon... at least we made this. Click for bigger size.

Even if nothing else gets done during this hackathon… at least we made this.

Wed 1pm: Got started, Alex was still asleep, we banged on his door and got him.

Wed 2pm: Stream and publicly viewable docs and trello board are all set up, time to start team meeting to plan tourneys.

Wed 3:40pm: Tourneys are planned, Alexey and I just spent a bunch of time figuring out all the client-server protocol stuff, time to start the server coding for me. Will and TC are working on the user interface. Alexey is working on some screen transition stuff that will allow players to move straight from games/replays/observing into new tourney games without returning to the menu. Alex has specced out the tourney settings and will start on the server code soon.

Wed 3:54pm: The Team Lunarch Studios vs. Team Reddit Prismata game has started, with Elyot playing Turn 1: Drone, Drone. Units available in the additional set: Cryo Ray, Shiver Yeti, Ossified Drone, Shadowfang, Amporilla, Lucina Spinos, Plasmafier, Tia Thurnax, Protoplasm, Hannibull. Can you say “burst?” TeamReddit plays Drone, Drone. Elyot plays Turn 2: Drone, Conduit. (Follow TeamReddit on Prismata if you want to spectate.)

Wed 5:10pm: Team Reddit playing Turn 2: Drone, Drone, Conduit. Devs: Drone, Animus.

Wed 5:45pm: Initial server code is kinda done, still need to add the code to actually run the tourney though. Adding some client code to accept invitations to tournaments. Alexey managed to get some screen transition stuff working, and the spec for options looks pretty good.

Wed 7:25pm: Client side of invitations done, some UI stuff is in, more to come. Client and server still not really talking but they will soon. Will’s taking a break and will join us again at around 12:30pm.

Wed 9:17pm: Server code to dispatch games and feed the results into the tournament brain is now complete. Alex’s first version of the tournament brain is now merged with the server code. TC and Alexey are still working on more client-side menu stuff, but it looks like lots of progress is being made. I’m still a bit worried that a lot of the server code hasn’t been tested yet, but it feels a bit redundant to write a test harness when the client itself will be ready to test the code soon. Next steps are to write the server-side polling loop to automatically determine when to dispatch games and fire off the dispatch code.

Wed 10:15pm: Tourney dispatch code done.

Wed 11:45pm: Refactored a lot of server error handling stuff. TC and Alexey retired for the night and checked in the remaining UI code which implements some of the features. Currently working on more protocol functionality, like the ability to leave tournaments, destroy them, and kick people from a tourney that you’re directing. Still haven’t tested the dispatcher and will be adding some client-side hacks soon to make this happen. Will is gonna join me around 12:30. Not tired… yet!

Thu 1:15am: 40% of the time is gone. I think we’re more than 40% done but everyone except Alex and I have gone to sleep. Server stuff is done and I’ve moved on to client-side work to get the menus working with the server. TC and Alexey actually did quite a lot so it’s been pretty easy to interface the server code with what they’ve been doing. Hopefully it goes smoothly. I don’t really want to sleep until I can run SOME tournament on this thing. I think we are close. ^_^

Thu 3:15am: Starting to feel pretty tired. Fixed a lot of bugs in the last couple of hours; pretty confident in most of the server code. Still need to test more of it though. Gonna keep going a bit longer at least!

Thu 4:45am: We’re past halfway. And we have a working single-elimination tourney working. Sort of. It dispatches games. You can play them. I’m gonna take a much-needed nap and leave Alex to stream for a bit. There’s a long way to go, but things look pretty good.

Thu 7:35am: I napped for a bit. Alex seems to have worked out all the remaining bugs with the dispatcher, and we have tourneys. Will should be up soon, time to make plans for the final push! Less than 12 hours to go. Still lots of UI work and bugfixing to do.

Thu 12:00pm: Sorry for the lack of updates, did TONS of bugfixes. Alex finally went for a nap. Everyone else is grinding hard to get all the features ready. UI is improving fast, and the customizable tourney options will be underway soon. I’m gonna grab a quick power nap and then get back to it.

Thu 2:30pm: Awake again. Final 4.5 hours left. Actually not that much left to do other than polish. Still finding the occasional bug here and there. There are a lot of features we could add but it’s mostly a case of making tourneys not completely janky at this point. ^_^

Thu 3:30pm: Starting to feel a bit panicked. Some features, like users getting kicked from the tourney when they don’t show up, are still pretty untested. And they’re pretty annoying to test, so it’s gonna take some time to certify that everything works. I’ve more-or-less called 4pm as the last time to add new features, after which we’ll just test test test. I’m pretty confident but at the same time, people are pretty sleepy so we should be really certain that stuff works. There are also still some small UI fixes that need to go in.

Thu 4:10pm: Looks like our blog got reddit hugged. Damn you wordpress for being so lousy at scalability. CPU on the blog server is at 100%.

Thu 5:05pm: Still finding bugs, but there is more time in between each new bugfind. Nothing but bug-fixing for the next 2 hours. Most of the bugs are trivial and easy to repair. The user interface still lacks a lot of features but it will do for the tourney tonight. I’m still quite pleased with the progress, mostly just crossing my fingers in hopes that nothing too embarrassing will happen in the next few hours…

Thu 6:05pm: <1 hour to go. Things seem to work. Adding tiny little finishing touches and fixing minor interface/appearance/update bugs. Haven’t found a major showstopper bug in over an hour of mostly testing.

Thu 7pm: AND WE’RE DONE! It works! Starting a 38-person tourney to test. Everything going smoothly so far.

Thu 8:40pm: IT WORKS!!!!!!! Like, it actually pretty much works. We’re running a multi-round swiss tourney, people automatically get paired and games get dispatched. It handles draws, handles disconnects, and kicks people from the tourney if they don’t show up for games. We’re 4 rounds in with no catastrophic issues yet. Lots of minor UI bugs, and the “withdraw” feature didn’t work as planned, but everything else seems pretty good!

Thu 9:30pm: Congratulations to Mike ‘Timex’ McDonald, winner of the first ever Prismata tourney. We’ll post a post-mortem next week.

 

Interested in Prismata? Sign up for the beta at prismata.net


About Elyot Grant

A former gold medalist in national competitions in both mathematics and computer science, Elyot has long refused to enjoy anything except video games. Elyot took more pride in winning the Reddit Starcraft Tournament than he did in earning the Computing Research Association's most prestigious research award in North America. Decried for wasting his talents, Elyot founded Lunarch Studios to pursue his true passion.