Triangulating a Game Design

What core mechanic am I trying to design a game around? It changes when I try to pin it down, so I have found it difficult to settle on a concrete mechanic. For today, let's say: I want a programming game mechanic that can be used to build and traverse layers of abstraction, with the sense of place and movement of a video game. Maybe I can define this better by contrasting with existing games nearby in design space.

First, there are some genres I'm not interested in designing. Competitive programming games seem too hard to balance, and I'm generally not interested in a RTS or RPG with programmable strategy. I'll also avoid indirectly commanding a robot around a maze, this leaves little room for growth1 and has been overdone. So what else is out there?

In Hack 'n' Slash, the player explores both the game world and the game's own data structures, through various hacking and debugging tools. This is the game I resonate with the most, though there's little programming involved, besides a cool interface for viewing Lua bytecode disassembly. There's also Glitchspace, which is 3D and requires a good deal of visual programming, but it is more of a puzzle game in a sterile, disconnected world.

Baba Is You is a puzzle game where the player needs to think deeply about puzzle game mechanics. In late stages of English Country Tune, the player must build a solvable puzzle, looking at the mechanics from a new perspective. I consider these to be puzzle games about puzzle games. Could there be a game like this about models and methods of programming?

There are bottom-up games like MHRD and Silicon Zeroes, played by building a computer hierarchically from tiny primitives2. It's helpful to have the tutorial and workbench integrated, but these have dry gameplay and an uninteresting (or absent) game world. Working through nand2tetris might be more fun, for someone inclined to learn. Is it possible to do this with a more embodied feel like Rocky's Boots or Robot Odyssey? With more apparent choice, exploration, and discovery?

In the Zachtronics design puzzle games (Spacechem, Infinifactory, Shenzhen I/O, etc), the puzzle progressions are well chosen to introduce ideas without expressing them explicitly. But these games are mostly about how hard it is to get anything done with limited tools and resources, keeping track of things with no structural assistance3. Systematic puzzles like Toki Tori 2, Stephen's Sausage Roll, and A Monster's Expedition also allow the player to discover techniques, but the focus is still on puzzling through the details of some tricky system, without ever transcending it.

I'm drawn to the grammatical magic systems first seen in Dungeon Master, where spells are strings of symbols reflecting the physics/metaphysics of the game world. That physics tends to mostly involve making hit points go up and down, though. Spell building games like Magicmaker tend not to go beyond macros. CodeSpells has a lot of programming power available, but it never went beyond a sandbox, and the magic programming just feels like programming. Since the game world is a software construct, there should be more resonance possible between the magic system and programming. Rick Cook's Wizardry books take an interesting angle: In a world where traditional fantasy magic users are effectively working in machine code, a programmer from our world can become extremely powerful by implementing a higher level language4.

One way to get a player thinking about programming is by debugging an existing program, there are many examples of game-like interfaces for this in the educational literature. As an example, consider the robot programming game Gidget: Some players don't try to understand the existing buggy code, they ignore it and look for a simple way to solve the maze problem. UUhistle has an interesting way to direct a student's attention to program semantics: It requires the student to act out the execution steps of a Python program, including details like creating stack frames for function calls and dragging values around to initialize variables. It might be interesting to allow the player to build an interpreter to automate this drudgery5.

There, I've broken my 8 year blog silence! There's even a new RSS feed. I'll try to post more as I think things through. Please email me at agashlin@gmail.com if you're interested, and I'd love to hear about any related games I missed!


[1] Robot maze games were discussed in Code-worthy Gameplay.

[2] I've been meaning to play Turing Complete, which might improve on this, though the programming doesn't go past assembly.

[3] Design puzzles were discussed in Machine Languages.

[4] For some earlier thoughts about magic see Magical Programming.

[5] I discussed user-designed interpreters in Won't Get Fooled Systematically and Shell Script of the Gods.