Dark Side of the Jam

Last weekend, I organized and participated in Seattle’s satellite “Dark Side of the Jam,” a space-themed game jam which the Academy of Interactive Entertainment graciously agreed to host. Our mission was to build a game (using at least one NASA asset) in just 48 hours.

Our satellite jam started at 6pm on Friday, with participants filing in until around 7:30. We kicked off the event with some inspirational words by Dan Dixon, the creator of Universe Sandbox, and then started brainstorming ideas. As more people arrived, we decided to split into two teams, but to let everyone collaborate between the two projects (especially our artists and sound designer!).

We tossed around a number of exciting and ambitious ideas, from a game about discovering exoplanets with real-world problem solving elements (along the lines of Foldit) to one about engineering your own rockets (think Kerbal Space Program).

Two projects gathered the most attention and excitement, though. One was a game about driving the Lunar Rover around to pick up your astronaut bros. The other, and the one I worked on, is called Seven Minutes to Heaven. The game is about the time delay involved in communicating with a rover on Mars. While that delay can range from a couple of minutes to nearly half an hour, the name is an allusion to Curiosity’s Seven Minutes of Terror.

The game is played by selecting commands from the control panel’s arrows to drive the rover, a camera to get a better view of the surrounding area, and the drill to take a sample from the surface. The objective is to search for elements of interest (Hydrogen, Helium, Carbon, and Oxygen) within the time limit. The amount of each element in a square is communicated through an emission spectrum. The player can cross-reference this against known spectra to make decisions about where the most productive areas to drill are. It’s a little like Minesweeper, if you had to wait a while for your moves to take effect, the numbers were in code, and you only had until the sun goes down to finish playing. Also it’s on Mars.

Because we only had 48 hours to build the entire game, some features did not make it into the finished product before the end of the jam. With more time, we would have given players specific objectives (for example, find at least 6 units of Carbon and 2 of Helium) and better explained the controls and emission spectra in-game. We also didn’t get in all the art and sound effects produced by our teammates, or have much time for testing and play balance.

Even so, I’m really proud of how complete and polished the game ended up. More than that, I had a great time getting to know and work with a bunch of awesome people.

The Bug

Start new game. Exit game. Resume game.
Expected result: Game resumes where player left off.
Actual result: Camera appears stuck inside sun OR game crashes

After Rare Earth 0.1 was released, it wasn’t long before the first bug reports started rolling in. This issue bubbled to the top quickly. However, I was just about to leave on a trip to Europe and only had time for one quick update to the game, so I instead addressed the bug that was getting the most complaints and added instructions.

Maybe being immersed in foreign cultures gave me the idea, but as soon as I got back, the first thing I tried was to change the region format on my phone. Sure enough, I could suddenly repro the bug. Why should the region format matter? Math is the same in any language, and all the game UI treats numbers as invariant culture, specifically to avoid issues like this.

Ah, but I overlooked another point of vulnerability – the game save. Each object in the game is serialized as a collection of XML attributes: mass, radius, etc. For example, a sphere looks like this:

var element = new XElement("Sphere");
element.Add(new XAttribute("Radius", body.Radius));
element.Add(Serialize((Body)body));

…where Body includes universal physics properties, like position and mass. Loading is a bit more nuanced, but ultimately ends up with something like this:

var radius = float.Parse(xAttribute.Value);

This would work fine, if creating an XML attribute and parsing a float defaulted to the same culture format (either both current or both invariant). But if they did, this post wouldn’t exist. My saved attributes always had floats formatted the U.S. English way (e.g. 0.45), but float.Parse apparently defaults to the current culture. In a region format like Italian, 0.45 reads like 0,45 would in English – 45 with some junk in front. So a star that was 0.90 units wide at save time is 90 units wide at load time, which is bigger than the entire game world, which means you’re stuck inside the sun forever. Best case scenario. Worst case, some numbers can’t even be parsed, the load operation fails, and now the game crashes every time. Fortunately, there is a pretty simple fix:

float.Parse(xAttribute.Value, CultureInfo.InvariantCulture);

I could alternately serialize my value types to the current culture by hand, but that could have other consequences, so I stuck with the simple fix.

Ultimately, it’s a pretty embarrassing mistake, but I learned a valuable lesson about testing my game for an international audience.

Coming Soon

It’s been a while since the last update, and for that I apologize. I’ve been really busy lately, which unfortunately has set back my schedule for Rare Earth. On the other hand, there’s been plenty of time to gather feedback! This has been incredibly helpful – dozens of players have forwarded crash reports that have helped me track down and fix bugs. In addition, there’s been plenty of analytic data rolling in. For instance, check out this breakdown of feature votes submitted so far:

There’s still a clear demand for improved instruction (even after last update’s stopgap of an info screen), and people would love some customization options, but the clear winner is LIFE. Well, I haven’t wasted any time – it’ll be in the next update!

Space

Space is a subject I’ve been in love with my whole life. As a kid, I dreamed of growing up to be an astronaut (far later in life than most kids would consider normal).

From my childhood bedroom

As a game designer, fully half of my prototypes have something to do with space – as a setting, theme, or even a character. Still, it’s something I’ve struggled to express in gameplay. Initially, I just wanted to replicate the cool, dynamic visual of moving through space on a cosmic scale, the kind of thing they do on the typical Discovery Channel show or NOVA special.

Space physics prototype

But I also want to create games that reflect my personality, and that’s a little hard to do with an n-body physics simulation. So I kept experimenting.

One of the concepts I found myself repeatedly drawn to is a mix of strategic management and tactile action. I decided to pursue that idea with a game about creating and managing a solar system – small enough scope to be practical on a phone, but complex enough to yield a rich field of possibilities. That’s what I’m working on now.