Thursday, March 28th, 2013

Some interesting things I've had on my mind: Google Drive Realtime API, Catroid, Modit, Bootstrap.


Some 'splainin'

Monday, December 31st, 2012

I've begun work on an experimental programming environment called "explain". I'm lately inspired by Moonbase, a lovely system for doing animation in a browser. It's something that's been stewing at the back of my mind for some months now given form by Moonbase's wonderfully polished interface. When I'd constructed my first animation I found myself wishing that I could output a JavaScript equivalent so that I could noodle around with that instead of the quickly-crowded boxes-and-arrows data flow representation. This seems like it is a good candidate for an automatic translation, and what's more we can use it as a way to introduce a textual programming language to someone who understands the data flow picture and wants more power; say for instance the power to name a subgraph (like the group of boxes used to animate the text) and use that as a new primitive node, maybe even adding this as a new tool to the palette on the left.


Machine Languages

Monday, January 3rd, 2011 at 12:26 pm

I have recently been enjoying the design puzzle game SpaceChem. The game is played by designing nano-scale machines to assemble various chemical compounds. The design feels like a "best of" collection of elements from earlier Zachtronics games: the factory and grabbers of Manufactoid, the chemistry and rotation of Codex of Alchemical Engineering, and the layered circuit drawing of KOHCTPYKTOP. Of course it is much more as well: more mechanisms, and loads more polish. As much as I'd enjoyed the previous games, they had some major interface issues, and almost all of these seem to be resolved.


Code-worthy gameplay

Tuesday, December 28th, 2010

In 2008, Jonathan Blow, the author of Braid, gave a talk in which he described two "guiding skills", the latter of which was pushing. This is meant in the sense of pushing a concept to its utmost; given an idea, follow it through to its conclusion. Chris Hecker ranted similarly at GDC 2010. Pushing is what turns Braid's rewind from a gimmick into a gameplay mechanic. Rewind has the scary outcome that the designer can't really threaten the player with anything. Rather than shy away from this by limiting rewind, Braid actually illustrates it with the first few levels. World 2 is all about tricky platforming that would be tremendously frustrating to play through flawlessly. Since rewind allows unlimited rapid retries, though, it becomes a much more natural and forgiving problem solving experience.



Sunday, December 26th, 2010

While my main intent is to design games that are played by writing programs, I have considered a few game types that illustrate the operation of certain algorithms. Imagine enhancing any existing type of game with a scoring system based on the "originality" of the player's performance. Concretely, say that you would score fewer points for repeating the same solution every time you encounter a particular type of obstacle. The game could keep track of this by forming a statistical model of what it knows about the player's play style, and thus at each decision point it would assign a score based on how unexpected the decision was (say, oh, log 1/p). If this sounds like data compression, that's just what it is.


Shell script of the gods

Saturday, December 25th, 2010

One of the concerns I had with the programming contest problem was deciding what kind of fictional context to use. What kind of scenario could explain the need for a single automated solution to a suite of problems, even those that had already been solved?

The need to expose the player to such a test suite is twofold. We would like to introduce the player to the idea of breaking tasks down into reusable subcomponents. I thought I would give the player some small task to accomplish, thoroughly testing that the automation he produces works in every case, and then giving him access to that solution as a component to solve future problems. In this way, at least as one part of the level progression, we would coerce the player to build up a library of functionality.

The other aspect is the pedagogical model described yesterday. The gist is that a series of specific exercises are used to illuminate a general concept.