This is something of an aside.
For a while now I’ve had an idea for a game system, which is extensible enough to have uses in education, but would also have uses elsewhere. I haven’t really played games since the demise of the LucasArts SCUMM adventures in the early nineties – although I did nurture a Sims addiction for a little while – so I don’t know if this has been done. But if it hasn’t, I think it could be interesting.
It’s a tile-based game engine; nothing hugely fancy to it, except for the back end. When you boot it up, it loads an initial world, which is defined by an XML file on a server somewhere. Each object in the game – monsters, keys, non-player characters, wall materials – is also a separate XML file, referenced by the world XML. Everything has its own unique ID, so these could happily be off on another server (you could have a number of central object library servers, for example). The XML defines how strong they are, whether they move, where their graphics are stored, and so on – and much like CSS, once the object XML has been loaded, any parameter can be overwritten in the main world XML file.
There are a number of set actions – use object on object, talk to, examine and hit with current wielded object. The XML for an object can contain definitions for what happens with certain actions; for example, a sign might flash up some text when you examine it, or a pirate character could “speak” a few paragraphs if you talk to him about loom. Most importantly, you can have portals, which link to other worlds. This is as simple as adding a URI, so in theory you can have decentralised roleplaying game worlds where rooms exist all over the Internet, potentially with completely different graphics and atmosphere. If there’s a problem with the referenced XML – with a world, or object, or character – it simply doesn’t load, and you can always go back to the previous world.
Your character also has its own unique ID, and a bottomless inventory. When you pick up an object, its unique ID is stored in memory, even when you go and access different worlds. So you could get a key from one world, go to a second world and – assuming that world’s owner has added an action for that key – use it in a door there.
The final piece is internal flags, which aren’t associated with an object, but also carry from world to world. Say you talk to a pirate about loom; that might set an internal flag to “true”. Once that’s been set, if you go talk to another character over in another world, they might have something new to say. Or you might have killed a monster, which in turn set a flag that means if you wave a magic wand at a particular door, it’ll open. With these building blocks, in theory you could collaboratively build an adventure hosted in a hundred different places, with objects from a hundred more.
There are possible other enhancements, too: so far this could be hosted by anyone with some flat webspace, but perhaps some worlds could have a back-end server software that handles multiple connections and allows you to see other users in the same world. In those cases, objects you can pick up could have a number associated with them, and the world could reset itself on a regular basis (so that other characters would have an opportunity to pick objects up etc). And there’s always the opportunity for things like embedded web browsers, so people can set up rooms full of videos, embedded games and so on. If you gave the web browser the opportunity to also set flags, you could force users to answer questions correctly or solve a Flash-based puzzle in order to progress.
I don’t have time to build this, but mention it because I’ve been thinking about it a lot and it might be kind of fun.