This article is the first of a serie describing Umbra’s Level Generator.
Introduction and Global generation parameters
As an independent developer thinking about replayability in a game, you must always consider the best way to generate variety of content with the minimal amount of work.
In Hack & Slash, this variety must be present for:
- Weapons & Armors
- Skills & Spells
- Level replayability
Of course, Umbra features many procedural and semi procedurally generated content for all these topics.
In this article, we will focus on level generation.
The idea of level randomization in Umbra is to create repayable and credible environment. Each path in our environment must be fun to play, and also reward the player for both the accomplishment and the exploration.
Another thing we wanted for our dungeon creation algorithm was to be make it valid for any kind of levels: Caves, dungeons, village, and even exteriors. It means that we need a “smart creation” process. In the case of interiors and urban levels, we want our levels to be generated as if humans settle in the area for real.
When human choose to settle in an area, they need a good reason to do so. It can be a water point, cult location, height position, ect…
So our level will always need an Interest Point. Our village / level will be organized around that place. Close to the interest point, we want to create various important areas related to it. In order to create such a system, we listed the different parameters and option we wanted to play with.
Note that the current version of our level generator does not generate dungeons as we expect to do it in the final version, but is already able to generate levels following simple rules.
This is what we are going to share with you here.
Our level is going to be a succession of various “Level Elements” connected to each other, following some rules of construction. Each “Element” of the level will have its reason to be here, and will have to be organized with the other around. Let’s focus on the basics right now.
We need to define the key parameters of our level creation.
What will be the type of area we are going to build? I can be a cave, dungeon, village, ruins… What will be the type of architecture? This will be our first generation parameter.
We also want to define the size of our level, so we will have minimum and maximum size values.
What will be the “interest point” of our level? How are we going to connect the various element of our generated level according the other element around? We decided to have a “Maximum Element Level” parameter. Each of the dungeon Element will have a level describing their importance. For each generated level, we will filtrate the Element comparing their Level parameter to the “Maximum Element Level”. It will allow us to create 3 different stages for a dungeon, each one having incrementing “Maximum Element Level” and disclosing new areas to the player each time he push the exploration further.
Is the level going to be a straight line, or is it going to be labyrinthine? Is it supposed to climb up or down? We will need parameters for these value too.
Do we want any secondary paths? If we do, what is their length supposed to be?
What kind of enemies will appear in that level? We defined 5 different type of “AI Level”:
- Low (trash, only designed to be killed for fun)
- Medium (the actual enemies, with various type of attacks, support, ect)
- Hard : usually, medium enemies with a Boss Rank, or special enemies, hard to kill, or extremely aggressive
- ForceBoss: For important room (if a treasure chest is present, for example), we want to spawn enemies with a boss rank.
- Force Named: A specific boss (not randomly generated) to be in the room.
Each Element is supposed to spawn different enemies according to its Level, but the spawning system may be altered by the AIDirector in order to adjust challenge for the player. We will talk about that later.
And finally, what kind of reward will be present in this level? How often will chest spawn? What is the level of rarity of these chests?
All these parameters are described in the LevelDesign file. The file is defined as an XML, and can be easily moddable by anyone !
The following images show four different levels, build with the same “Architecture Type”, but with various “size” and “stairs up / down” parameters:
That’s it for the basic parameters of our Level Generator. In the next article, we will give you details about the generation process itself!
Feel free to give us some feedback about the article or any suggestion you have !