motd.co: Lonecraft

Last year at PAX East 2011 there was some discussion about a new project by game designer Jason Rohrer called Chain World, which had begun at GDC 2011 when he was challenged to design a game with the theme “Bigger than Jesus”. His idea was to create a religion around the game Minecraft by putting a self-contained copy of the game onto a USB stick. Whoever possessed the USB stick was allowed to play the game until their character died, at which point they had to pass the game on to someone else. Only one person could play Chain World at a time. By creating this ongoing world that contained the effects of the actions of the players without any real explanation of what had happened, mysteries and rituals could be created and explored in a way that video games don’t usually facilitate. By honoring a pact not to talk about the game, it leaves the experience of the new player totally unspoiled and with a sense of wonder about just what could be out there in the world created by those who came before them, which is a huge world of possibilities that even Minecraft’s procedural generation could never hope to approach.

The story behind Chain World fell into chaos pretty quickly when the question of who would get the USB stick turned into a scandal involving a question of celebrity, popularity, charity, and all kinds of other nonsense. I’m not going to bother trying to recount the whole story here; if you use a search engine I’m sure you can dig up all kinds of back-and-forth blog posts about who was doing the right thing and who ruined everything. Ultimately, that stuff wasn’t interesting to me. What was interesting was Chain World itself. It seemed like a brilliant idea, but one that few people would ever get to experience. What if we could make Chain World a little bit less exclusive? If Chain World was a handwritten copy of the Bible, I wanted to invent the printing press.

Lonecraft was that printing press. Anyone could run their own version of Lonecraft by setting up an instance of the Lonecraft code, which is a Ruby application built on the Sinatra framework (I used Heroku), and setting up an instance of a Minecraft multiplayer server (I ran on mine on Amazon EC2) running a few custom plugins built on the Bukkit platform.

Once you’ve got Lonecraft set up, you generate a “token”, a unique string of characters, and give that out to someone. They sign into Lonecraft, enter the token, and give it their Minecraft username. At this point, the web application connects to the Minecraft server and whitelists that username so that they can play on the server. The player is given the server details and is allowed to log in and play until they die.

When a player dies, the two custom Bukkit mods activate. The first one, a modified version of a mod someone else wrote, immediately bans the player from the server so they can’t respawn or log back in. The second one sends a notification back to the Lonecraft web application, telling it that the player has died. The web application emails the player, giving them a new token that they can pass on to the next person and giving them a link to the Journal location.

The Journal is the other feature I decided to add to make Lonecraft distinct from Chain World. Chain World was one instance, meant to go on forever, with no written record of what happened. I’m a big fan, though, of blogs like Towards Dawn, travel logs of Minecraft adventures, and I wanted to see what happened to people in Lonecraft. With this in mind, I set up a configurable set of “rounds” for each Lonecraft instance (10 by default), after which the game world would be “shut down” so that it could be archived and started over. When players die, they could go to the Lonecraft site and write about what they saw, and when all of the rounds had completed and players had written their findings, the combined journals of all the players would be posted on the website along with a downloadable copy of the game world file so that people could see the results firsthand.

I managed to get a prototype of Lonecraft up and running. A number of fringe features were never completed— mostly administrative stuff centered around starting up new games, shutting down the old ones, auto-archiving game worlds upon completion, the ability to ban abusive players if a problem arose, and the fleshing out of the journaling functionality. What’s on Github sort of works, though, and all of the administrative stuff can be managed using Tux or the Heroku console given enough familiarity with the system. The code is pretty rough, but it was the biggest Sinatra app I had written by far and I learned a few things about structuring an app like this and deploying to Heroku.

I shut down the EC2 instance that was hosting the Lonecraft multiplayer server last week because I wasn’t using it. I’m grateful to the friends who talked through the concept with me last spring and those who even got to log in and try it! It was a fun idea to work through, there just wasn’t a real groundswell of interest (I think my ideal Minecraft experience, which is basically this, is pretty different from that of most other people, who seem to enjoy it as a sandbox/chat room) and I don’t have the time to pursue it any further at this point. Whatever the outcome, thanks to Jason Rohrer for leading me down this rabbit hole for a few months in 2011.