I'm walking through the firehouse in Culver City where a good portion of the games at IndieCade are set up, and then I see what looks like "not a game." And I don't mean that in the disparaging, "Your game doesn't have guns so it's not a game," way that the Internet sometimes means.
I mean, quite literally, it looks like not a game. As far as I can tell, the guy standing in front of the laptop is staring at a text editor. Maybe Notepad++. There are quite clearly lines of code on the screen. My heart goes out to the team. "Oh no," I think, "Their game must have crashed bad if they're coding on the show floor."
Turns out, it is the game. A game called [Code], where you're tasked with deciphering a program in order to solve puzzles.
A surprise hit
"When I first made this we thought everybody was going to hate it, you know, because the class is mainly full of people with non-programming backgrounds," says project creator Rambod Kermanizadeh. "So I thought me and like two other guys in the class were going to get it."
Kermanizadeh and a small team--Trevor Rice, John Bair, and Daniel Romero-Quiroga--created [Code] for famed designer Richard LeMarchand's Experimental Game Design course at the University of Southern California last spring. LeMarchand urged the team to submit the game to IndieCade on the strength of the original three levels, and the project was accepted.
In [Code], you control an "@" symbol. You have no real purpose. No function. You're a memory leak. "You're just doing your own thing in your own little block of memory and then the evil garbage collector comes by and he's trying to reclaim the memory for the system to use. He doesn't quite succeed and releases you into the world," says Kermanizadeh.
The garbage collector in pursuit, you must figure out how each program (level) works in order to open the next stage. For instance, the first level looks like this:
Touch the public bool levelBeat, it switches to equal true, the metaphorical "door" pops open, the @ sign does a little dance, and you jump to the next level.
"But wait!" I hear all you programmers say, "That's not real code in the example. That would never run!" Okay, you caught them. It's not real code--more a pseudo-code or an All-Language.
"People who have actually played with Unity or C# go, Oh, is this C#? This seems like C#,'" says Kermanizadeh. "The actual levels themselves were originally laid out just like the code for C# but we kind of made them a weird pseudo-code because there's a lot of information that confused players or didn't necessarily matter to the level itself."
"When we start designing levels, we don't think of them in code right away," he continues. Levels are often designed by the game's artist, Bair, who knows less about programming. They've even built a traditional boss battle into the game.
According to Kermanizadeh, Bair will design something like, "What if here you have to tick something to a specific number and then that unlocks that door that then you can go through to beat the level?"
Then Kermanizadeh and fellow programmer Rice turn that outline into, "There's an integer variable that you can then adjust and then we have the Boolean that's private so the player can't change that. By changing the integer value it unlocks the Boolean which then takes you to the next level."
"That's a really crazy way to design a game," I say.
"At first we did it in terms of code but our own heads wanted to explode," says Kermanizadeh. "We were talking about code but then we had to code the code for the code--it was like this weird Inception of code."
So [Code] won't necessarily teach you to the correct syntax for C# or Python. On the other hand, it will teach you what to do with those languages.
One level in the IndieCade demo, for instance, teaches you the broad strokes about "For Loops," a common programming technique that executes the same block of code repeatedly. It turns out that despite syntax differences, a For Loop works the same in Python as in C# as in BASIC. [Code] might not teach you how to set up a For Loop in your language of choice, but you'll understand why you should implement a For Loop--a much more valuable skill.
"We really didn't want to focus on teaching any specifics of any one language because then we felt like it would kind of lose the value of the teaching aspect of it. So we just try to teach the overarching logic behind programming and computer science," says Kermanizadeh.
The team plans to have 64 levels total, and hopes to complete the game by early next year--after a lot of playtesting.
"We do want to give it more mass appeal but we don't want to alienate our niche of programmers and coders," says Kermanizadeh. "Those are the people who are really going to love the game. That's who we are and that's who we're making it for. We want to make a game that we'd want to play."
For now, you can check out the [Code] demo here (it runs using Unity Web Player).