Christian Zuger: Co-Founder of Indie Gaming Studio Metalhead Software
After 15 years as a developer,
an indie gaming company that made huge waves in 2014 when it launched Super Mega Baseball, an arcade-style baseball game that received game-of-the-year considerations from Polygon and Metacritic.
We interviewed Zuger about his transition from corporate software developer to full-time gaming guru. In what follows, he talks his favorite games, influences, how he learned to code, and why Lady Gaga sometimes appears on his coding playlist.
What was the first piece of software you ever wrote?
My first program was a very simple game written in Visual Basic 6 that I wrote in a high-school programming class.
It was basically a board game where two people took turns pushing a dice-rolling button to advance their piece on a track like Snakes and Ladders. Depending on where you landed, various bad things would happen (like a rocket being shot at you). It was a lot of fun and my first exposure to programming.
Which games have been inspirations for you personally while working at Metalhead Software?
Our first and only game at Metalhead so far is an arcade baseball simulation called Super Mega Baseball. [Editor's note: Super Mega Baseball is as super as it sounds.]
We drew inspiration from a large list of games in a variety of genres. Of course, there are the classic baseball games, such as RBI Baseball, Baseball Stars, and Bases Loaded. Geometry Wars is an excellent twitch game and was the inspiration for how we present leaderboard scores to the user. Diablo 3 inspired how we allow the player to unlock new items in the game and provide the "endless optimization mechanics" that you see in our team progression system.
What piece of software are you most proud of?
Super Mega Baseball, by far. This is the most complex piece of software we have worked on. It runs on vastly different hardware systems – multiple console generations, PCs, and Android devices – at 60 fps, solves complex humanoid animation problems, and faces the challenges of a complex content pipeline.
This was our first cross-platform console game, so a lot of seemingly simple problems turned out to be quite complex. We tried to be diligent in our implementation, and eight months after our launch on Xbox One, we are still on version 1.00 on that platform with effectively no issues reported (and very proud of it!).
For a lot of developers, the first year or so of work can feel like treading water – did you go through that? If so, when did you start to feel like you really got development?
Haha, yes! In fact, it was so bad we decided to write a very lengthy blog series about it here.
As we mention in the blog, two guys with a software engineering background but no games experience started the company. Our plan was to make a cross-platform 3D, 60 fps sports simulation and… well, it took a while.
I've been writing software for more than 20 years now (more than 15 professionally) and most of it in C++. But I am still hesitant to call myself an expert. As soon as you start delving into new problems and new APIs, you end up going right back to treading water for a bit.
To answer your question more generically, I think it took several years of professional development work to really "get" it. Everyone I’ve seen starting out as a developer struggles to find their spot on the "let’s-over-engineer-everything" to "let’s-git-er-done" axis. The sweet spot is usually somewhere in the middle, but it seems to take most developers a long time to find that out.
What feature of SMB are you most proud of getting right (or was the trickiest to nail)?
Our animation system is incredibly complex. We had several problems:
- Animating humanoids (reaching for balls, performing athletic and context-specific movements, moving limbs to the correct spot, etc.).
- Animating thousands of crowd members.
- Creating distinct variations of animation with very limited artistic resources.
- Cheaply mirroring animation data at runtime.
- Compressing animation data to fit it into the very limited amount of memory available on PS3.
- Creating a content pipeline that allowed us to author, export, process, optimize, blend, skin, and render.
The first problem we solved via a complex runtime animation blending system, allowing our characters to sprint, look, reach, and swing without having to run unstable and expensive runtime inverse kinematic solutions.
Because we had such limited artistic resources, we tried to solve as many problems as possible with tech. The system we built decomposes animations as much as possible, and recombines them at runtime using an additive blending system.
This process allows us to author "variations"(such as how the arm behaves in a batting stance) independently from all other animation going on at the same time. The combinatorics allow for a very modest number of source animations to produce a huge amount of animation variety at runtime.
The codepath for the animation system is dramatically different depending on the platform it’s running on, leveraging SPU's on PS3 and graphics cards where applicable with CPU fallback paths.
What music do you listen to you while you code? Any other creature comforts you must have while coding?
I listen to a wide variety of music, depending on the task at hand. For periods where heavy thinking is required, I prefer classical or more ambient electronica. During periods where a lot of the thinking is complete and it's more about actually typing out a solution, metal, dubstep, and over-the-top "epic" movie scores are my favorites. Lady Gaga's "Paparazzi" has been known to make an appearance as well.
To find out more about Christian Zuger's work (and to download Super Mega Baseball) check out Metalhead Software. Or visit our blog for information about risk management for developers and programmers.