Thursday, June 16, 2016

On level generation in general, and a new competition

Procedural content generation has been a thing in games at least since Rogue and Elite in the early 80s. Plenty of games feature some kind of procedural generation, for example of levels, maps or dungeons. There's also lots of generation of more auxiliary things, such as skyboxes, trees and other kinds of vegetation, and patterns in general. While Spelunky relit the interest in PCG among indie game developers, AAA developers are increasingly looking at generating various parts of their games. There is also a very active research community on procedural content generation, with lots of papers published every year on new ways of generating things in games. We even wrote a book on this.

Anyway. You probably already knew this, given that you somehow found your way to this blog. What I'm going to say next is also rather obvious:

Essentially all PCG systems are limited to a single game. The level generator for Spelunky only generates Spelunky levels, and will not work with Civilization, or Diablo, or even Super Mario Bros. The Civilization map generator will not work with The Binding of Isaac, or Phoenix, or FTL, or... well, you get my point. In many cases the general algorithm (be it L-systems, binary space partition, diamond-square or something else) could be made to work on other games, but various amounts of game-specific engineering (hacking?) would be necessary; in other cases, the PCG method itself is mostly game-specific engineering and it's hard to discern a general algorithm.

Now, this is actually a problem. It is a problem because we want reusability. We don't want every game designer/developer to have to develop their own PCG method for each new game. Wouldn't it be great if there was software we could just grab, off the shelf to do level generation (or generation of some other kind) in your game? Even for those designers who see PCG as a canvas for creative expression, wouldn't it be great to have something to start with? Most game developers now use some kind of game engine, where physics, collision detection, rendering etc are available out of the box. Even some kinds of PCG is available this way, in particular vegetation through SpeedTree and similar packages. Why couldn't this be the case for level generation?

Let's make another analogy. In research on game-playing AI, there is a growing realization that working only on a single game has its limits. Trying to create champion-level players of Go, Poker, StarCraft or Unreal Tournament is in each case a worthy endeavor and the results are valuable and interesting, but at the same time the resulting solution tends be pretty domain-specific. The world's best Go AI is worthless at any other game than Go, and the same goes for all the other games in the list. There's simply a lot of game-specific engineering.

This is the problem that some recent competitions and frameworks are aiming to overcome. The General Game Playing Competition, the Arcade Learning Learning Environment and the General Video Game AI Competition (GVGAI) each focus on testing game-playing agents on multiple different games. There are many differences between their respective approaches, but also strong similarities.

Tying these threads together, what would it mean to create level generators (or other kinds of game content generators) that without modifications would create good content for a large number of different games? In other words, what would general level generation look like? This is not only a question of making game designers' lives easier (I am of course always interested in that; making game designers' lives easier, or replacing them), but also a very interesting AI and computational creativity problem in its own right.

In a new paper, General Video Game Level Generation, we explore this question. We design a framework based on the GVGAI framework, that allows level generators to connect to any game that is defined in the Video Game Description Language (the basis of GVGAI). The interface gives the level generator information about how the game works, and the level generator then returns a game level in a specified format. In the paper, we describe three different generators based on different approaches, and we test them using both computational means (which agents can play these levels) and through user studies with human players.

Better yet, we are not content with doing this ourselves. We want you to get involved too. That is why we are setting up a level generation track of the General Video Game AI Competition. The competition will run at the International Joint Conference on Artificial Intelligence this year, and we have extensive documentation on how to participate. It is easy to get started, and given how important the question of general level generation is, participating in the first ever competition on general level generation could be a very good investment of your efforts.

Looking forward to seeing what you will do with our framework and competition!