Sunday, November 3, 2013

Procedural Content Generation on a MOBA genre videogame - Part 1

Its been a year since I started doing research on Prodecural Content Generation (PCG), and on October 28th I presented my thesis project, getting the highest grade, yaay!

As the title says, the project was a prototype of a videogame of the MOBA genre (Multiplayer Online Battle Arena, think of League of Legends, Heroes of Newerth, Dota, etc...), and it involved creating a MOBA game that relied heavily on PCG to create most of its content, thing that hasn't been done that I'm aware of.

On the common MOBA, developers provide most of the content of the game in the form of new and interesting characters to play. Each character is supossed to be new and refreshing in order to stand out among a huge pool of characters. The problem here is that the more characters the game has, the harder it is to create new ones, and thus comes the problem of the constant rebalancing that (I mostly play LoL or Dota 2 so I will be using those for examples) the developers have to go through. For example: whenever LoL spawns a new champion there is always a rebalancing update involved, because the new abilities brought by this new champion overshadow other(s) champions in some way, making them less viable, and since the idea of having a ton of different things to play with is to... well... play with them, the developers are forced to make changes here and there to make everything fit and make every champion kinda stand at the same height in the matter of viability (although in competitive gameplay we all know this is not and probably will never be the case).

Because of this issue regarding the creation of new characters to bring variety to the game, I thought about a solution for this problem and came up with an interesting solution, instead of having a lot of carefully crafted characters, every player would start a game with the same character, and then throughout the game, these characters would adapt to the play style of the player and change their appearance and attributes accordingly. I've called this the Character Adaptation System.

Before I get to explain the CAS I want to talk about the map. If you have played any MOBA you know that theres little variety on the maps you play. It's usually the same map over and over and over and over and over and over again and again. I'm not saying this is a problem, but who doesn't like to experience the refreshing feeling of traversing a place for the first time? This is seen on Minecraft or any game with a procedurally generated world, new content is always welcome by players and gives a nice touch to the overall experience.

Personally I think that this staticity presented on MOBA's maps comes from the fact that designing a map is hard, thus it's not worth it to create different variations of a map that is in the core the same. The best example for this is the Magma Chamber map for LoL that was never released because the designers concluded that it was just the same as Summoner's Rift but bigger (which also led to longer games). The developers didn't want to spend time developing the same thing they already had on Summoner's Rift, so they scrapped the map and created instead The Crystal Scar, which also brought with it the Dominion game mode. Both the map and the game mode are awesome and extremely fun to play, but with this you can have an idea of the consequences involved in redisigning a map just to have a different layout of roads and things like those, its hard, so hard that the developers rather not waste time on that, and I get it, it's actually what makes sense.

But since I felt like I could address this problem (and also because I'm a PCG addict) I decided I would come up with a way to generate the map procedurally so that everytime you play a game the map is different, and I'm not talking about slightly different positioning of the towers, lanes, camps, etc... I'm talking about design concerned different, where the change is so big that it has real impact on how the map is played.

With this in mind, I created a system that is capable of procedurally generating the map from scratch, focusing on the river and the jungles (which covers a huge % of the map). The other stuff like lanes and bases generation don't have much impact on the design of the map.

This is a map generated procedurally by the system I created.


This is the video showing how the whole game works, it pretty much sums up all the features it has.


And this is last build I made. It still has some bugs here and there, but thats the final version of it.

IMPORTANT:
  • To be able to connecto to a server hosting the game, the server must be connected directly to the modem (for some reason I'm not aware of, Unity network interface wouldn't let me get through routers).
  • If you are hosting a game and it's running at non-playable fps, try leaving the "Spawn Minions" checkbox unchecked before hosting the server.

Content information:
  • The Ancient, towers and terrain textures belong to Dota 2.
  • Ashe and Blitzcrank (the melee and ranged characters you can play) as well as the minions, belong to League of Legends
  • The rocks and trees where made by Anguel Roumenov for another project we are working on. You can check out his work at sohardtoremember.com
Well, thats it for this post, on Part 2 I'll be talking more specifically about how the map was generated and will explain implementation related stuff so you can have a better idea of how this was achieved. On Part 3 I will explain how are the characters modified throughout the game and how the Character Adaptation System works to achieve this.

Feel free to leave a comment if you have any questions related to the game or how did I get the content from Dota 2 or LoL

1 comment:

  1. REally great work, I was thinking about doing a thesis on that subject.
    How did you get the ashe model?

    ReplyDelete