Over the last few weeks I’ve been picking away at a sidetrack in the work on ANGELINA, and it’s spiralled into something a bit bigger that’s now genuinely captivating me. I talked about it a little today at Essex University’s Workshop on Games, and pretty soon I’ll be back from AIIDE and working on it quite hard until the end of the year. It’s all about tackling a problem I’ve had with ANGELINA since the very beginning – how can we automate the discovery of fun game mechanics? This is the first of two blog posts explaining the new approach I’m trying out.
When I first started working on ANGELINA, we were making arcade-style games, and rules were made out of templates. ANGELINA would take a rule template (there was only one, but it’s easy to specify more), fill in each option in the template with a particular game element or effect, and then use the rule in a game design to see how it worked. The rule template looked like this:
<TYPE1> <TYPE2> -> <EFFECT1> <EFFECT2> <SCORECHANGE>
TYPEs were things like player, enemy or wall; EFFECTs were things like teleport, or kill. Rules like this fired whenever two things of type TYPE1 and TYPE2 collided. It would apply each effect to the two colliding types respectively, and then add the scorechange. It worked – you can play one of the games online – but I was never very happy with it because we gave ANGELINA a lot to play with. First, we gave it lots of premade submechanics like teleport. Teleport is itself a game mechanic, and we’re letting ANGELINA use it for free. Sure, it might come up with a clever use for it, but it’s not doing much inventing at the lower level. It’s unlikely to come up with something truly new.
Then we move onto the second phase of ANGELINA’s development, working on Metroidvania games and other platformer-likes. Here we shifted a bit. Lots of mechanics in platformers are givens – jumping, maybe shooting, navigating a world, gravity. Here we focused on powerups, and tried to create a Metroidvania-style effect (where the player needs to find powerups to access new areas of the world) by having ANGELINA evolve powerups that would increase the percentage of the level the player could reach. A powerup had two values: first, the in-game variable it changed when the player grabbed it; second, the value it set the variable to.
Again, this works, and it can produce interesting level designs with cool properties. I’ve seen games with double-locked doors, blind drops into arena-style rooms containing powerups, and more. Lately I’ve been working on extensions to the map generator that lets it generate more interestingly-shaped maps, too. But overall the powerup system has problems: I set the possible variables it can choose to affect to ones that are likely to produce results for a given map (jump height, gravity, tile solidity). This shows an ability to design to achieve specific aims, but doesn’t give ANGELINA much elbow room to find novelty.
Why is this so hard? It’s partly because it’s hard to avoid giving these systems knowledge while building them. We’re building them to inspect and look at games, and we know a lot more than ANGELINA. Just to calculate reachability for platform games, we define a notion of gravity, jumping and movement. It’s tempting to give more and more information to the system, which wouldn’t be a problem if we were trying to build an assistive tool for humans to work alongside. But because our aim with ANGELINA is to develop a system that can work as independently as possible, we have to pare back and remove as much knowledge as possible.
It’s also hard because fun is elusive, and meta-level reasoning about game design (for AI systems at least) is something that’s relatively new. The best work I’ve seen doing this is Mike Treanor’s discussion of micro-rhetorics, in a paper published at this year’s FDG. The work is elegant, dissects games into tiny parts, and is doing great things for their Game-o-Matic.
The approach I’m exploring right now is more programmatical, and I’ll be talking about it more in the next blog post in a week or so’s time. The screenshot at the top of this blog post is from A Puzzling Present, a game I’m making using game content from ANGELINA that will hopefully release for both Android and PC/Mac/Linux platforms in December of this year. It’ll be free! And the biggest game we’ve worked on so far. More on that later too.