This was originally intended to be a non-research post over at Cut Garnet Games, but since it sprang out of work I’d been doing on ANGELINA I wanted to talk about it over here in the end. I entered the 7-Day Roguelike competition this year, a week-long game jam where entrants attempt to make a roguelike game. I failed, unfortunately, but I learnt a lot and had a good time. My attempt - A Rogue Dream – used techniques I’d picked up at computational creativity conferences, as well as work I’ve been doing on Spritely. Here’s how it would’ve gone
A Rogue Dream started from me wondering if I could generate roguelike content automatically using Spritely, a tool I’m working on that autogenerates game art from the web. The idea was that you were stuck inside a VR simulation that changed theme automatically, so enemies would flick from Wild West cowboys to evil ogres and so on. But I kept wondering how I would choose the themes – would I write down a fixed number by hand, and let Spritely do the work offline, or could I get themes generated automatically somehow?
Then I remembered work I’d seen Tony Veale present at last year’s International Computational Creativity Conference. Tony’s group does lots of wonderful work that you can see and interact with here, but there was one idea that Tony included in his work at the conference that blew me away, something I’ve come to refer to as cold reading the Internet. In developing a metaphor generator, Tony realised that if you want to find things out about a certain object or concept, you can simply ask Google. For instance, if you want to know things about doctors, you can Google for:
why do doctors…
And Google’s autocomplete results will give you information about what people have been asking about. At the time of posting, this gives things like “wear scrubs”, “say stat” and “prescribe steroids”. This is real, usable information that – while not always factual – at least represents common conceptions or questions people have about the thing you’re searching for. Could this be engineered into Roguelike content? I set about writing some code that could pull down autocomplete results, and then based on their words following the keyword (e.g. why do doctors wear scrubs) it could further classify the results into things the character wears, wants, fights or can do. It worked surprisingly well for some cases.
There are problems with the approach, for sure. Searching for nationalities can bring up stereotypes and, in the worst cases, racial slurs. Searching for general concepts brings up massive generalisations – “men” get verbs like “cheat” and “rape”, for instance – but this is true to the Internet’s understanding of these concepts, so in some ways it is appropriate if the game’s theme is spun a particular way. Posters on the Something Awful forums suggested tooling the game up as a roguelike in which you fight the Internet, which is a cool way to think about it. Right now, as the title suggests, the player is dreaming about being something. At the start of the game I ask you what you are dreaming about being, and the game is generated from that.
The next Ludum Dare is 38 days away, and I am planning to release Spritely at least a week before that. It’ll be a beta release but it will be out and usable, either for prototyping or in-game use as I’ve had it used in A Rogue Dream. I’ll also release the code for grabbing from Google Autocomplete soon, although it’s nothing that you couldn’t hash out in a half-hour I imagine. Above all else, A Rogue Dream is a project I’d like to return to someday soon. I’ll release a working executable soon, although the game is very, very unfinished. It was a great experience, and made me more sure than ever that I’d like to get ANGELINA working in this genre one day.
I have just come across this project and my big question was had you considered having ANGELINA design a game that had random generation built in. I envision the program developing game balance based on a survival rate in turns taken or levels cleared but with enough mechanical flexibility that it can be far exceeded by a clever player (the best examples of the genra produced by humans have many of these qualities measured out in dev). Glad to see you at least tried it. One other thing I thought of was adaptive difficulty abilities, defining a survival time (again in turns) that the developer feels is the goal to make a player feel like the game was rewarding, not a “first goblin killed me in two hits” experience.
I have been reading through your blog posts from the beginning. Your project intrigues and fascinates me.