Game animation logic in React

I’ve been working on a small minigame written in JavaScript using React. It’s similar to Robo Rally: you write a small program for a robot, it executes it, if it gets to the end without dying, you win. The actual robot logic is turn-based, the display isn’t. It’s split up like this:

One module contains a pure functional implementation of the actual robot / program execution logic. It exposes two functions: one that takes a level description and returns an initial game state, and one that takes the level description and a game state and produces a new game state.

The next module contains a Flux store (just something that holds data) which holds the level descriptions, the current game state, and can run a timer. If you tell the store to start, it starts the timer, runs the robot logic every tick, and emits an event when its data changes. (It also handles a whole bunch of other state, but that’s irrelevant for this description.)

Then there is a React component for the robot (obviously one of many components). React components are, ideally, pure functions of their inputs. They’re best written declaratively: you use React to declare what you want the user interface to be like. This usually works like a charm.

But game logic can be hard to fit into this model.

Continue Reading »

Announcing Choba, an experimental interactive storytelling engine

Over the last few weeks I have taken the interactive fiction engine inside Mainframe, the IF game Liz England and I made for Procjam last year, and have rewritten it in JavaScript. I’ve called it Choba, short for CHOice BAsed, and I’ve put it on GitHub and npm. It’s open source, just like Mainframe.

I’ve also backported it into Mainframe itself, so if you play it now, you’re no longer seeing a Python program running on Heroku, but a JavaScript program running inside your browser. (Doing just that has already been worth it. It means I no longer have to pay Heroku, it makes the game much easier to deploy, and I’ve already learned a lot starting a new JavaScript project.)

As you can see from the project’s readme file, I have future plans for this engine. Writing an actual parser, porting it to desktop and mobile, experimenting with different game types, better tools, and new procedural generation / narrative AI techniques: these are all things that have come a step closer.

I don’t recommend it for general use yet, but I do welcome feedback, and if you want to build a game with it, let me know how I can help.

More thoughts on tagging

I did some more thinking after yesterday’s blog post on tagging, and had an interesting discussion with Mike Cook and Chris Martens about how they approach similar problems. So here are some more thoughts on the subject.

Continue Reading »

Procedural content generation in Mainframe

The procedural content generation in Mainframe uses a very simple mechanism, which is both more powerful and trickier to implement and use than I expected at the outset. That mechanism is tagging. You tag bits of content, and then somewhere else you say you want something with a given set of tags.

One of my theses about interactive storytelling is that selecting, adapting, and combining bits of authored content is an approach that is powerful, underexplored, and pragmatic, in that it offers a smooth learning curve from simple and known to, I hope, complex and new. Mainframe is, among other things, an experiment with this approach.

Tagging is one of the more interesting ways to select content. I first saw it used in 2008 as the interface between the AI and the audio system in LMNO. Back then I was mostly impressed by how it reduced the production dependency between AI and audio.

In 2010 and 2011, I worked on an unreleased Diablo-like that used tagging to procedurally generate levels. I did a lot of work on the level design and tool chain. At GDC in 2012, I saw Elan Ruskin’s talk about the dynamic dialog system used at Valve, which used an advanced tagging approach to allow writers to create dialogues. In 2012, we used tagging to select texts in a mobile game. I remember vividly how the actual tagging logic consisted of one line of code, but it took three of us a day to write that line. (It was a LINQ expression in C#, if you’re curious.)

The system in Mainframe is really simple. The core logic is this function:

Continue Reading »

Repetition and procedural content generation

Last night I innocently tweeted:

And then I watched a movie (Pi! still great) and 90 minutes later I checked Twitter and suddenly I had 50 replies.

My tweet was a bit gnomic and lacked context, as tweets often do. I wasn’t talking about repetitiveness: I was talking about how PCG is used by game designers, beyond “hey look we can create a billion dungeons / planets”. Not that there’s anything wrong with that, but I am interested in using it in other ways.

In Mainframe, the IF game Liz England and I made for Procjam, one of my basic tenets was that we should design the game around repetition, because we were using procedural content generation (PCG). When you play it, you will quickly find the element of the game that repeats. Whether it feels repetitive is a different question, although we don’t claim it is not.

This tenet was something I intuitively picked as a design heuristic, but afterwards I started wondering how core it actually is. Is it essence or accident?

I had a lot of fascinating discussions about this last night, and I’ve thought about it some more, and I now think that using PCG as a game designer will always involve repetition in some way. (Again, I am not talking about repetitiveness. This is not about procedural content generation being “bad”.)

Continue Reading »

Mainframe, the procgen horror IF game Liz England and I made

Last year I wanted to do something for PROCJAM, Mike Cook’s “make something that makes something” one week game jam, but circumstances conspired against me. This year, I collaborated with Liz England, and we made a horror interactive fiction game called Mainframe. It’s about a spaceship and its mainframe and something is wrong and it needs help.

Making it was a great experience. I learned a lot, and I’m going to be talking about it more.

The texts, assets, and source code can be found on GitHub.

The conflict between game design and AI programming

A few days ago, Julian Togelius tweeted this:

I replied that I have an interest in AI, and I agree with the quote. Julian didn’t reply, but I was still motivated to write this small blog post. (Thanks Alex :))

I don’t, in fact, know the context of the slide in question, or Julian’s position. But it strongly reminded me of a problem I have encountered a number of times in my career: the conflict between game design and AI programming.

Continue Reading »

Why I’m not publishing the slides to my dark side of game development talk

I’ve had a couple of requests for the slides of my talk on the dark side of game development which I gave last year at ENJMIN, and last week at the Northern Game Summit in Kajaani.

After some thought, I’ve decided not to publish them. The actual slides are very spare, often showing just a single image or a few words, so they’re not very helpful. I don’t have detailed presenter notes (as I found to my dismay when I started rehearsing it again about two weeks ago).

One of the images is a portrait of a personal friend, and I feel weird enough using his photo as it is. Some of those words are “stress” and “depression” and “sexism” and “homophobia”.

Because I talked about sexism and mentioned some of the female friends who helped me with that section, I want to reduce the contact surface in case Internet idiots come across the slides.

This is a very personal talk, and I feel that only the actual performance – all the words I said, the way I said them, and the questions I answered afterwards – comes close to saying what I meant to say. This talk only works when I fully believe everything I say, it’s not a dry technical talk at all. Writing slides with full presenter notes that say the same thing would be very hard, perhaps impossible.

And both times the talk wasn’t recorded. Sorry!

If you want to get an impression of what I talked about, the resource post may be helpful.

Resources for my talk on the dark side of game development

Here are some resources to go with my talk about the dark side of game development that I gave at Northern Game Summit on October 1st 2015.

Talking to people

Effective Networking in the Game Industry – Darius Kazemi


Impostor syndrome

Kill The Goddamn Vulture – Richard Dansky

Your body language shapes who you are – Amy Cuddy (especially 16 minutes in)

Sexism, racism, homophobia, transphobia

1ReasonToBe panel (GDC 2013) – Leigh Alexander, Mattie Brice, Robin Hunicke, Kim McAuliffe, Brenda Romero, Elizabeth Sampat

Straight White Male: The Lowest Difficulty Setting There Is – John Scalzi

But WHAT CAN BE DONE: Dos and Don’ts To Combat Online Sexism – Leigh Alexander

Geek Feminism wiki

Misogyny, Racism and Homophobia: Where Do Video Games Stand? (GDC 2014) – Manveer Heir

Stress & Depression

The Belly of the Whale: Living a Creative Life in the Game Industry (GDC 2010) – Bob Bates

General tips for students

From Student To Designer – Liz England

100 things every game student should know – Kaye Elling


Again, many thanks to these ladies for their help with this talk.

The RSS feed of this site has changed

Following on from the previous post, here is the new URL to the RSS feed for this website:

Again, sorry for the inconvenience.


Update: Well, this is awkward. This post showed up in both the old and the new feed, even though I turned off the old feed on the WordPress side. I don’t even know how this is technically possible. Undead accounts, leeching content from beyond…

Still. Better change your RSS feed URLs just to be sure.

Update 2: So that old Google account was not dead after all. Why am I not surprised. I managed to regain access to it, logged into FeedBurner, and deactivated the feeds there with permanent redirection to the proper URLs.