Indie Speed Run: Scarlet

A little while back, I held down the programming end of things on my second year of participating in the Indie Speed Run 48-hour game jam with some of my incredibly talented former coworkers from Michigan State's GEL Lab, where we worked together on a motion controlled game set in ancient Greece, which is in hindsight, weirdly similar to the concept behind Crytek's Xbox One title Ryse.

Anyways, last year we were a close runner up to having Ron Gilbert's finalist nomination with our game Umbrella Party. Here's a shot from that game. It was a nifty little speech simulator game that was pretty silly:

This year, the theme we were randomly given for the game jam was "Secrecy," so naturally we made a game about keeping your spouse from finding out that you'd been cheating on them called Scarlet. It was a bit stressful for me since this year our team had extra art support instead of extra programming, but it turned out pretty well in the end. We got some early recognition when the games went live on the Indie Speed Run website, and even more amazingly, was Peter Molyneux's pick for a finalist. Here's a screenshot from the finished game:

Besides wanting to get around to shamelessly plugging our successes with our games on my blog, I wanted to point out a few of the features in Unity I used to save us a lot of time getting the look and feel right within 48 hours. Although we unfortunately didn't have time to get in one big gameplay feature, the ability to select your gender at the start and swap out all of the items you have to hide around the house accordingly. Heck, it would've been as easy jump from that to avoid gender norms entirely and be able to select both your gender and your spouse's gender, and the gender of the person you're having an affair with, although I'm not sure if that actually has any relevance to the core of the game. Maybe this is why I'm not a designer in my day job. Anyways, there were a few things that went really well on the technical side of things.

First off, we made the really obvious decision of emulating a simple color palette with very hard edges on geometry (especially on characters) to create a polygonal look, obviously there were important benefits to this for saving art development time. However, it turned out looking pretty good for a couple of reasons in the engine itself. First, I leveraged Unity's lightmapping system to get the shading and shadows on static objects, even though all of our materials were just using a simple constant color. This ended up being very similar to what the game Super Hot did recently which uses lighting on mostly white levels coupled with red enemies and bullets. The items that the player must hide in Scarlet are also red, but that's as much to do with them being the color of a torrid affair (and also obviously ties in to the name of the game we chose), however we opted for more of an array of duller shades than just the stark white of Super Hot.

To get this working is rather pain free, just make sure your level geometry is all set to static for lighting in Unity, and I got the results seen in the final game with a few iterations on some test bakes late on Saturday evening to get the settings right. Namely just some fiddling with amount of bounces and the lightmap resolution. getting the bounces right was important for having the soft light fill the room from just a handful of point sources. There's one glaring bug with the static lighting you can see above where the ceiling lights are set to not cast shadows and the light is just kindof blown out in the ceiling. With a little more time and placement, making those object play more nicely correctly could probably have become a reality, but wouldn't have been worth the amount of time needed during a game jam.

The second part of what I did after getting the lightmaps set up to bake (we would repeat the baking process a few more times the next day as art became finalized), was that I needed some way to handle lighting of the characters as they ran around, since it would be a little off-putting to have the wife not become shadowed in the same way that lighting is handled bouncing around the scene. Unity's light probe system seems to be the correct way to handle this, and while I'm no stranger to Unity's lightmapping system, this would actually be my first adventure with setting up and baking probes. I would post a screenshot of my probe layout, but unfortunately my Unity install is currently non-existent since I wiped my computer and repartition my hard drive. It worked pretty well though, my biggest gripe with it is that to my knowledge there's not a great way to then integrate dynamic shadows into the dynamic and static objects to bridge the gap between the static and dynamic object's lighting. I'd really like some sort of hacky shadow projection coming off of the wife as she runs around from a fake directional light (possibly even rotating it based on her position relative to the main light in each room), you'll notice she has no shadow in the screen shot.

Finally, it's worth mentioning Mechanim + Pathfinding working in tandem, two features of the engine that I have never used before. It took a little digging to get my feat wet, but once I got it working, it worked shockingly well. It's a bit goofy the way the she runs around the house, but it was also quite the crash course for me. The best was that baking the pathfinding graph basically just worked with our static geometry and collider placements, and getting the wife's AI to have her visit different important locations was very straightforward. It took a bit more effort to have her animate when moving around, and ended up abandoning an attempt at having root motion work, deciding feet sliding was acceptable to get better results working faster and then just move on. By far though, it was most impressive to see Mechanim retarget the animations to the character rigs, stunning results I really wish I had access to when I was using Unity in the GEL Lab. Really wish we had gotten the gender select in on Scarlet, since this would have made the character model swap work very smoothly. Definitely will be looking to learn a bit more about how to tune it just right in the future.

Well, I guess this concludes my little micro post-mortem of Scarlet. Hopefully we'll end up doing another Indie Speed Run game next year!

Here's a links to the web pages for my 3 compatriots from Scarlet:
Marie Lazar: http://www.pixelbutterfly.com/
Andrew Dennis: http://tc.msu.edu/users/andrew-dennis
Jordan Ajlouni: http://www.jordanajlouni.com/

And our pal Adam Rademacher was on Umbrella Party in the place of Andrew the year before: http://www.whitefoxproduction.com/