This interview is part of our Road to the IGF series. You can find the rest by clicking here.
Mirror Drop takes players to a puzzling world of endless mirrors and reflections, creating a dizzying realm of repeating visions and colors into infinity.
Gamasutra spoke with Ian Lilley, developer of the Excellence in Visual Art nominated game Mirror Drop, to talk about the challenges faced in creating a game built to disorient, the difficulties of making puzzles in the game's confounding landscapes, and the draw of becoming lost in their own realm of endless reflections.
My name's Ian Lilley, and I did everything in Mirror Drop except the music (which was done by the3rdmimi).
I've been making games since sophomore year of high school. My twin brother Sean and I were really into Newgrounds, and originally picked up Flash to create animations, but somehow that interest shifted more towards games. We spent many hours following random tutorials and eventually came out with a very basic game where you avoid obstacles with your mouse (there were tons of these on Newgrounds already). To this day I haven't beaten the game in one sitting... the second to last level is nearly impossible, but at the time we thought it would be an appropriate challenge for other players.
A few years later, we released a much more solid game called Two Rooms, which was a puzzle game about controlling two characters in side-by-side rooms and moving obstacles from one room to the other. After that, we both went to UPenn and majored in Digital Media Design, a niche program with programming and art classes in the curriculum. Here, we got really into graphics programming, and worked on game engines in our spare time.
After college, I went to thatgamecompany and did graphics programming for Sky, which was a challenging and ambitious project in many ways. They had a very creative and DIY approach to engineering that has had a lasting influence on me. However, after a few years of only doing graphics programming, I was beginning to feel tired and constrained, and decided to enter the void and start my own game.
I was sitting in bed thinking of game ideas, and something about mirrors reflecting different versions of the world popped into my head out of nowhere. I quickly scrapped the idea because it didn't play out as well as I had imagined, but I was fascinated by the tech and spent countless hours aimlessly flying around in weird infinite mirrored spaces.
Development was very improvisational, so it wasn't until a few months later when I added the ball and messed around with turning the lights on and off that I realized I could combine the two ideas into a sort of physics puzzle game.
My goal from the start was to make it 100 percent custom, so no third-party engine (though I do use open source libraries for sound, windowing, font, etc). I like this approach because it gives ultimate freedom, but on the flip side, it's a lot harder to figure things out, and I often asked "am I capable of implementing this?" The game is coded in C++ and OpenGL/DirectX, and a single shader is responsible for all of the in-game visuals. Honestly, I could do an entire interview on just the technical details of the game. Each line of shader and gameplay code was rewritten at least five times.
I wouldn't say I'm that much more interested in reflections than the average person. I'm guessing everyone's had at least one moment where they looked at themselves in the mirror and experienced some weird, fleeting, ineffable sensation. But when it comes to programming, reflections have been a draw for me ever since I became interested in graphics. I guess I was perplexed that such a common real-world effect was not easily possible in games.
My first few attempts during college were all right, but because they were based on rasterization/voxelization, they would come out jagged or blocky. For Mirror Drop, once I realized real-time raytracing was possible, I wanted to push it to the absolute limit.
I think the mixture of extreme reflection, refraction, infinite space, and saturated colors has an other-worldly vibe that puts the visual system into a kind of overdrive. There have been so many cases of people watching 5+ minutes of gameplay and coming out of it saying: "I still have no idea how the game works, but I like what I'm seeing."
My favorite reaction is when players see a new level and think... this is wild.
The main purpose of the reflections is to disorient the player, so I'll ease up a bit when the puzzle involves logic just so it doesn't become TOO frustrating. However, in the levels where disorientation is the main point, the design process basically asks: "What is the wildest-looking space I can make?" Then, I will move the ball around a bit to get it into weird spots, and that will be the "puzzle".
It's kind of an inverted process from my previous puzzle games, where the puzzle comes before the visuals, but Mirror Drop started out more as a visual spectacle and there were some levels I HAD to include. Of course, it's nice when the puzzles feel well integrated.
Trying to make every level feel unique was a big challenge. The game is comprised of just cubes, spheres, and cylinders, and for performance reasons I could only use a small number of objects per level, so finding a good theme/color scheme was very important. Also, every detail in the game is typed in code, and that turned out to be extremely inefficient when trying out new ideas. Another challenge was constructing each level in such a way that the ball never gets stuck, meaning you can always get back to earlier positions without restarting.
I personally love when a piece of media throws a giant curveball at me. So, in the game, I'm not doing it to be mean to the player; I'm doing it to break their expectations and overwhelm them in a good way.
However, people have different tolerances for this, and I compromised in a couple areas. For example, and this will be impossible to explain by text, the final transition in level 13 used to be the second-to-last transition, meaning the giant spheres took up the entire space as you were trying to solve the third puzzle. Nearly everyone who playtested disliked this particular level, but Sean (my brother) thought it made the level great. I decided to tone it down a bit.
There was another level that ended with an intense strobe light that made the field of view go in and out really quickly. I was kind of sad to remove it, but I was worried people would get headaches or something.
Yes, I often found it disorienting, but that was usually a good sign. In fact, the game plan before discovering the light-switching mechanic was going to be navigating spaces under increasing amounts of disorientation. There are remnants of this in the final game, most noticeably in the question mark level. I think I have a pretty high tolerance for this kind of thing, so my "coping mechanism" was to enjoy the view.