Skip to content

World Generation: Level Design Week 1

World Generation: Level Design Week 1 published on

Traditionally when sitting down to start working on a game, the first thing I’d do is write a design doc. On this game I completely skipped that step. This was our second attempt at the game, and the last time we tried I never got passed the design phase. The game was just too big, with too many moving parts for me to fit it in my head all at once. We had a firm concept in mind, so I simply set out to build a generic engine for that concept. Instead of agonizing over every detail in my head, I’d do the most obvious solution to each problem and decide what needed improvement after play testing it.

For the world design the obvious design was to place towns and dungeons across the map with roughly the same distance between them. In theory, this means that the player would have at least 4 choices of where to go each turn. In practice this was quite dull. Not just because of the layout, but because towns and dungeons all did roughly the same thing no matter where they were. Traversal choices were boring: if weak, go to a town. if not weak, go to a dungeon of your level range. always head in the direction of a quest. There was no sense of discovery because none of the new destinations mattered to the players. It didn’t really matter which dungeon they went to.

world

There’s pretty much two parts of this problem. One, the destinations have nothing of interest behind them. Two, the -routes- to get to the destinations have nothing of interest to them. For the first part the solutions being employed are to have more nuanced degrees of difficulty on the map so players get to actively choose how far they want to push it, to give each type of place a unique purpose (one type specifically holds bosses, another specifically holds treasure, etc), and so on. For the routes is where the next step in world generation comes into play.

So I set out to add a better sense of route design to the world generator. In a perfect world one might hand craft several levels, take notice of fun patterns, and then try to distill them down into a form the generator could understand. We don’t have time to build a level editor that won’t even be used in the final product, so I am instead jumping straight into trying to produce a flexible generator that we can refine as we go.

The first step was deciding on a new building block for it: zones. Zones essentially divide the map into contiguous sectors. Since this is still an outdoor map, clumps of zone terrain end up forming the passageways rather than literal lines. Zones store adjacency properties to know whether a wall (mountains, water, etc) divides their adjacent zones or if they’re open. As such, a network of links develops.

zonesIn the illustration the only way to get to pink is through the grey zone.

 

It took awhile to decide how to build the network until I realized the same basic structure that we use for general terrain applies about as well. You have a “cursor” zone that moves about the network adding new zones to it, based upon some pattern. It can also apply sub-generators at a whim. The one design pattern that I kept in mind as an example is that of the long and short path. A primary zone would have two paths from town leading to it: a long one that’s typically safe, and a short one that typically has traps or poison marshes along it. This basic design handles that test case quite simply by adding the long zone after placing the short zone.

Presently I’m working on a very basic version of the generator that simply creates 2-3 linear paths in random directions from a starting town zone. These paths form the backbone of the world’s necessary plot locations, followed by a second generator that creates side paths/zones off the primary paths. We’ll see how that goes. Right now I’m building these generators as well as the underlying zone creation. Once I have that working we’ll see where this goes.