Reflecting on Ludum Dare

I’d heard about previous Ludum Dare competitions, but never heard about it enough in advance to clear an entire weekend for it. This time, I decided to make the time and put it on my calendar. The goal was to design and build a game in 48 hours, by yourself, to fit a theme that is only announced at the start of the competition. You’re responsible for the entire game in that 48 hours–everything must be made in that time, including art, sound effects and music.

Ambitious Goals

The general consensus from folks who had participated in previous competitions was to aim very small. Many people aimed for a single-screen 2D game. As the deadline approached, I had an idea that was so interesting that I would probably have prototyped it anyway. Imagine exploring a maze in a scenario where there is a night/day cycle and the maze flips at night–so what is open space in the day is filled space and night, and vice versa. If you watch the Ludum Dare theme voting rounds, you can come up with a short list of potential winners, and I knew it would fit with any of them with some slight variation in the puzzles and setting.

The idea was absurdly ambitious in many ways… but not the ways I think many people expected. I had a clear idea of a quick (and hacky) way to get the geometry to turn on and off, as well as an idea for how to make a day/night cycle. The initial puzzle ideas were based on switches that opened doors and teleporters to other sections of the maze.

The ambitious part for me was making a real-time 3D game in Unity that included art and audio, and actually wrapping it up–finishing a side project, for once. My art skills are rusty (understatement) and in pre-rendered 3D, not real-time. I had no idea how to model and texture for real-time, much less how to optimize it. I’d never touched audio beyond importing music and adding a few sound effects way back when I worked on my first game in Adobe Director.

In fact, the idea was both absurd and crazy because I’d wanted to make an adventure game for years–ever since my first commercial game, Shadows, got cancelled in 1995. Complexity, circumstances and challenge had always conspired against me. Most of my career, I’ve worked for companies with very restrictive policies about both IP ownership and side projects. Even when I’d started an adventure game with the intention of releasing it for free, I’d hit a wall of self-doubt in my art abilities because they were always so rusty when I started that I hated the way things looked. On top of that, my art and to some extent even my code abilities were 2D, and the complexity of trying to build even a very small pre-rendered adventure game by myself were just high enough to make me give up.

I also debated the idea of streaming my 48 hours of work–live, via twitch. I don’t like being on camera. I was very leery of having other people see how little I knew about building a game by myself (especially with all my design experience). On the other hand, I’ve been thinking about creating an initiative to get more women to make solo games after the #1reasontobe panel at GDC. I could provide an example of why it’s valuable experience if I streamed (and saved) doing it myself. Unfortunately, the last day most of my streaming was of my second monitor (oops!) but I did manage to stream the first couple days.

My last thought as I waited for the final theme to be revealed at 5:50 on Friday: I think that I can do in 48 hours with people watching what I hadn’t managed to do in private over the last 20 years–ship an adventure game? I’m out of my mind.

Day One: Code

My goal for the first day was to create the levels, along with the core mechanics and puzzles.I wanted to have 100% of the gameplay done by 6 PM on Saturday so I would have the second 24 hours to work on art and audio. I was working with tools I’d been using informally for about 6 months: Unity + Playmaker + NGUI. I’d never come close to shipping anything with that toolset, though, and I’d never made a web build.


Building the maze

There were lots of brief stumbling blocks, but I was able to find hacky solutions pretty quickly. By 8 PM on Saturday, I had a night/day cycle that worked and two basic levels with working levers, doors. I’d also created a platform that would both be a safe spot during the day/night transition and also raise during the transition to let you see the maze. If the sun or moon set without you on the safe platform, the screen faded to black and you were reset. It worked!

Day Two: Art & Audio

I’d built both levels in Unity primitives because I had never built low poly models or tried the export path from my 3D tool (Cinema 4D). I started the second 24 hours by bringing in the Substance Database by Allegorithmic. My texturing experience was all back in the pre-rendered days, before normal maps and UV maps, in an environment where texture size largely didn’t matter if you had enough memory and time to render. In real-time, though, I knew you wanted to keep textures small. I was also limited by the Ludum Dare rules–you had to make everything, even textures, within the 48 hours, and that meant no textures based on photo reference.

Procedural textures were challenging to use, especially for someone who had never even really experimented with them since my original impulse purchase months ago (when they were having a big sale in the Unity Asset Store). For someone coming from a background of carefully crafting 1-to-1 texture maps for pre-rendered art, having something that tiled so terribly in a level made of repeated geometry really grated on me. My Mac Pro is also getting long in the tooth at this point, and it struggled with trying to handle complex procedural textures at the same time as it was drawing all the cubes of the maze. If I’d been looking at my Ludum Dare experience as if I were in my own adventure game, I would have had a sense of foreboding at this point.

Seeing beneath the floor of the maze was where I integrated the final theme: Beneath the Surface. There were pipes beneath each square that were color coded to help make the connection between levers and the platforms or doors they controlled. They also gave hints about the maze structure. I struggled with finding a texture to map on a plane that looked decent, and I also struggled with my original vision of concrete walls and grass on the ground. Sunday morning, my unhappiness with the way it looked finally forced me to take drastic measures: I opened up Cinema 4D, very quickly roughed out a floor tile with grate and hole for the pipes, brought it in, and figured out how to map it.

I also hated the way my big cylindrical buttons looked, so I modeled a quick lever, brought it into the level, and textured it as well. Now everything started to take shape! Feeling bold, I modeled an exit silo with stairs leading down. I textured it, added a light to attract you to the stairs, and added a trigger to the door so when you stepped inside you would load into level 2. I was almost ready for audio!


A lever!

And then I played it and discovered that level 1 ran at an almost unplayable 12 FPS. Filled with dread, I opened level 2, which is far more complex, and discovered it was a slide show at 4-5 FPS. Oops.

Day Two: Art & Audio Performance Hell

Forget finishing the art and making audio: I was dead in the water if you couldn’t play the game. Everything else–including bug-fixing–went out the window as I madly struggled to solve performance issues. I knew a little bit about what would cause poor performance, but more from a theoretical than a problem-solving point of view. I knew where some of the areas probably were, so I switched as many textures as possible to the more streamlined mobile textures, but it only helped a little. I added fog and brought in the camera’s clip plane, but even with all of those changes, I only netted an improvement of about 3-4 FPS. I needed a more drastic solution.

I had InstantOC Dynamic Occlusion from a dungeon building experiment I’d been playing with for the past couple months, but I’d never used it beyond a few experiments. I imported it, set it up and added what I initially thought would make a big difference: the world cubes for day and night. I tested… and my world vanished. My hacky way of switching day and night cubes was to turn off rendering for the cubes I didn’t want to show. InstantOC also works by turning off rendering for cubes not in sight. The two conflicted. I wouldn’t be able to use InstantOC without recoding the entire framework. It was 3PM on Sunday, and I was running out of time.

I took a minute to think, and realized there were persistent elements not hidden by the day/night switch: the pipes beneath the floors, and the edge cubes. I added InstantOC to those, and while they blinked on and off as you moved, it worked! Well, it worked for level 1–it came up to almost 20 FPS, which is barely playable. Level 2 still held at 10 FPS. I made the call at 4:30 to ship with only one level.

I went back to level 1 and made more performance tweaks, getting it up to 25 FPS on average. I had a few minutes, so I animated the levers. I couldn’t quite get the cursors to show, but I decided to ditch that effort and see if I could pull level 2 out of the fire. At around 5:45–15 minutes before the 6 PM deadline–I had optimized level 2 to the point that it would run. Unfortunately, a couple of its levers didn’t work so you couldn’t finish it… but the rules allow you to fix game-breaking bugs after the deadline, and not being able to open a door to the exit definitely fit the bill. I made a web build and submitted two playable (after fixing two bugs) levels of an adventure game by the deadline, completing Ludum Dare.


Green pipes lead to green doors

It wasn’t great. I hated the way the art looked. The puzzles were conceptually broken because the pipes popping in and out of occlusion meant they didn’t help solve the puzzle. I knew without a tutorial, it would be hard to even figure out what to do–the rules of this world were not clear yet. There were no sound effects, and there was no music. But it was playable, and I’d accomplished what I set out to do.


Ludum Dare was a great experience, and I’d recommend it to anyone who wants to dedicate a weekend to creativity. They run the competition every quarter, and you can expect me to participate in every one after this, because it was a fantastic experience. Part of the experience is the community–streaming to a few people who stop in to watch and chat, talking to friends also participating over Skype, discussing the themes together and the ones you hope will make it to the finals.

Beyond that, though, it was really meaningful on a personal level. I can’t listen to music with words when I’m trying to concentrate on game logic, so I was playing the Myst game soundtracks while I worked. There was a moment when I was testing my game that everything came together for me, and I had a glimpse of something special. The sun was setting, my timer was working, I got onto the platform, and as the sky transitioned from day to night the platform rose to show me the world I was building. Then the sun set and the maze flipped from day to night, the platform dropped, and I was back in my world.

I’ve helped make lots of games, and every one is a unique, special experience, but this was different. I recently had the two-year check-up for cancer surveillance and got the all clear. Two years is a significant marker, since odds of recurrence are much higher in the first two years than afterward. I remembered that when I was diagnosed, on that BART ride home while I processed what my ENT had just told me, that my only regret was a creative one. I’d never written a specific book that meant a lot to me. And I’d never made that adventure game I’d always wanted to make. I got over the initial “how do I even get started” barrier into game development because of Myst. I worked nights and weekends after my day job to make my own game, sold it to Microprose, and started my own company. I did all that out of love for games, and the vision of making a world like Myst.

Years later, after shipping both large and small games, I still had the passion. I still loved Myst. I bought every version they released (and boy, did they release a lot of versions). I donated to the resurrection of Uru. I was an early and large backer of Obduction. I still had the dream of building a world like that someday. I bought the tools. I learned to use them… and yet I did nothing. Fear of failure, doubt of my own abilities, and persistent Resistance had conspired to stop me, to limit me.

Yet here I was, listening to music from Myst and making an adventure game. Yes, it was simple, but there was something deeply interesting about the core concept. I believed in it–I still do–and I had built it. It was possible. I actually could make and ship an adventure game.

And I’m going to.


Finding the way

Related Posts

Storify on being a game designer

Prompted my a news story back in September that Halfbrick had laid off the last of its designers, I chatted on Twitter about some of the challenges in being a designer. I’ve been updating the

Read More »

Example of FSM Building: Combat

A past side project included building Wizardry-style combat. That’s a very specific kind of turn-based combat, best displayed in Wizardry VI and Wizardry VII. I call this phased combat. The player enters orders for each of

Read More »

Segmenting (and not repeating) FSMs

I’ve been talking a lot on Twitter lately about creating my solo game, and I’m going to start saving them here as well. Today, I talked about why you often want FSMs on stand-alone gameobjects,

Read More »

Don’t get stuck on copy

Staring at an empty dialog window? Trying to mock up UI? It sounds absurd, but I’ve seen many designers get hung up on placeholder text. If you have text space to fill, grab some lorem

Read More »

Overcoming game dev resistance

Over the years, I’ve developed what I call the “We’re Guessing” voice. It’s this little whisper in my head, when I’m hip-deep in theory or debate over a feature, that says, “You’re guessing what will work.

Read More »