Procedural generation has been used in gaming for 40 years. What do you think about it?

Elite (1984) was the first complete game that made heavy use of procedural generation. Since then we've seen some interesting titles that make heavy use of procedural generation. Dwarf Fortress, Spore, No Man's Sky, and RimWorld are some examples.

What do you think about procgen technology today? Has it reached its peak? Could AI be used to improve on it in the future? Are there any obvious gaps in procgen that haven't been filled?

I had this thought when looking at all of the properties a planetary body has in Elite (surface pressure, temperature, composition, gravity, orbital features, etc). These features tend to have minimal impact on actual gameplay. There are minor exceptions such as very high G worlds that slightly change the way you need to land on them. I realized that this is a common thing in procedurally generated space galaxies (NMS, Elite). The distribution of properties/characteristics is high but the gameplay impact tends to be low. Why is that?

It's always felt like procgen was just barely scratching the surface of what's possible. But is that just wishful thinking?
 
Elite (1984) was the first complete game that made heavy use of procedural generation.
Rogue (1980) has it beat by a few years and probably isn't the earliest example either.

The distribution of properties/characteristics is high but the gameplay impact tends to be low. Why is that?
Broadly, because procedural generation can combine but can't invent.

Everything in it has to be supported by the underlying game at an implementation level.

So the two main successful uses of it are:
- combinatoric variety (text strings and numbers, especially, though procedural graphics are getting better), especially for "cosmetic" things for the reasons below
- maps (broadly interpreted)
where you can combine stuff relatively simply, and then rely on rulesets to give interesting behaviour on top of that

So for example No Mans Sky, or a roguelike like DCSS, have plenty of random weapons. But they don't have random weapon classes, because ultimately someone has to code "a laser weapon does this" or "an axe has these advantages and disadvantages", which works a lot better in terms of both immersion and a well-balanced game.

But is that just wishful thinking?
Largely, yes. Procedural generation is really useful for either populating larger spaces than you could possibly do by hand, or for - extending the generation in a different way - making a game replayable by randomising maps and challenges so it doesn't play out identically every time.

But it has four big costs which mean it's definitely not suitable everywhere.

Firstly, you still have to build all the components it uses in both supporting code routines and supporting assets. So we can have Electricae and Stratum procedurally placed across the ED galaxy because the procgen is mostly directly in numbers, where it's strong ... but the Stratum models are a fairly small set of fixed ones, because even for a lifeform that's basically "a fairly dull rock" the effort to get a procedural generator to build an infinite number of convincing ones isn't worth the effort (and the cost at render time of not having pre-built models and multi-layered textures to feed the GPU with isn't either) ... for something even slightly more complex like a Fonticula, that gets even tougher.

Secondly, if you just throw a bunch of random stuff together without constraints, most of the outcomes are bad. For example, it took Braben and Bell a substantial number of attempts to find a starting seed for Elite (1984)'s galaxy generator which
- led to eight mostly-connected galaxies
- without some sort of obscenity in the system names (even with the name generation method making most common English curses impossible)
and even then, there are a few cases, especially once you get past the first three galaxies, where the outcome isn't ideal. So you end up with a lot more balancing work to do to ensure that things remain fun for the player under a wider range of combinations than you can actually test.

Thirdly, humans are really good at pattern-matching and compressing that procgen variety back down to its meaningful differences. Every system in Elite Dangerous is unique but we still don't get that excited when exploring because this lone K-class star is slightly heavier than the previous one. That's not necessarily a problem - roguelikes rely, to an extent, on the player being able to spot and take advantage of those patterns, rather than thinking "oh, I have never seen this precise arrangement of corridors and monsters before, guess I'll just hit buttons randomly until I die" - but it does mean that you need to know when to stop, too.

Fourthly, because you aren't building anything much by hand at the output level, and it's therefore all coming from a bunch of starting seed numbers and algorithms and components, any change to a component or algorithm can completely change the whole thing. For a roguelike that's no big deal - who cares that seed 1234 in version 1.0 gives a different map to seed 1234 in version 6.0, the one in version 6 is more fun anyway. For something with a persistent permanent world like Elite Dangerous that's a real problem in some cases because it also makes every single bug permanent. In Elite (1984) they could probably have fixed that Galaxy 8 had two systems with the same name. In Elite Dangerous the blue star cubes near the core are completely unfixable and set for all time. The planetary terrain changes with Odyssey broke a lot of things which assumed the Horizon terrain was permanent. "Right first time, always" is a tough standard to meet in computer gaming!

It's a great tool in its place, but it's not a magic bullet which will someday allow the creation of a infinitely broad and deep computer game without someone having to do any actual coding work.
 
Rogue (1980) has it beat by a few years and probably isn't the earliest example either.
Thanks for this! Turns out the source code is available online! Can't wait to explore it. We've reached a point where exploring very old codebases is like a digital archeology.


Largely, yes. Procedural generation is really useful for either populating larger spaces than you could possibly do by hand, or for - extending the generation in a different way - making a game replayable by randomising maps and challenges so it doesn't play out identically every time.
I guess what I'm wondering is... why does it feel like procgen's combinatorics don't translate to more variety in gameplay. Your points about human pattern matching and hand crafted game mechanics do explain it for the most part.

But it has four big costs which mean it's definitely not suitable everywhere.

Firstly, you still have to build all the components it uses in both supporting code routines and supporting assets. So we can have Electricae and Stratum procedurally placed across the ED galaxy because the procgen is mostly directly in numbers, where it's strong ... but the Stratum models are a fairly small set of fixed ones, because even for a lifeform that's basically "a fairly dull rock" the effort to get a procedural generator to build an infinite number of convincing ones isn't worth the effort (and the cost at render time of not having pre-built models and multi-layered textures to feed the GPU with isn't either) ... for something even slightly more complex like a Fonticula, that gets even tougher.

Secondly, if you just throw a bunch of random stuff together without constraints, most of the outcomes are bad. For example, it took Braben and Bell a substantial number of attempts to find a starting seed for Elite (1984)'s galaxy generator which
- led to eight mostly-connected galaxies
- without some sort of obscenity in the system names (even with the name generation method making most common English curses impossible)
and even then, there are a few cases, especially once you get past the first three galaxies, where the outcome isn't ideal. So you end up with a lot more balancing work to do to ensure that things remain fun for the player under a wider range of combinations than you can actually test.

Thirdly, humans are really good at pattern-matching and compressing that procgen variety back down to its meaningful differences. Every system in Elite Dangerous is unique but we still don't get that excited when exploring because this lone K-class star is slightly heavier than the previous one. That's not necessarily a problem - roguelikes rely, to an extent, on the player being able to spot and take advantage of those patterns, rather than thinking "oh, I have never seen this precise arrangement of corridors and monsters before, guess I'll just hit buttons randomly until I die" - but it does mean that you need to know when to stop, too.

Fourthly, because you aren't building anything much by hand at the output level, and it's therefore all coming from a bunch of starting seed numbers and algorithms and components, any change to a component or algorithm can completely change the whole thing. For a roguelike that's no big deal - who cares that seed 1234 in version 1.0 gives a different map to seed 1234 in version 6.0, the one in version 6 is more fun anyway. For something with a persistent permanent world like Elite Dangerous that's a real problem in some cases because it also makes every single bug permanent. In Elite (1984) they could probably have fixed that Galaxy 8 had two systems with the same name. In Elite Dangerous the blue star cubes near the core are completely unfixable and set for all time. The planetary terrain changes with Odyssey broke a lot of things which assumed the Horizon terrain was permanent. "Right first time, always" is a tough standard to meet in computer gaming!

It's a great tool in its place, but it's not a magic bullet which will someday allow the creation of a infinitely broad and deep computer game without someone having to do any actual coding work.
👏Great points. I didn't know about that history of the first galaxy generator.

I would add a sixth cost: procedural generation is mostly static. Procedural generation (itself) doesn't dynamically react to player actions and other procedurally generated elements. In other words it can only be used as a starting point/seed. After that conventional game design needs to take over. One manifestation of that is how minable asteroids can't move.
 
Back
Top Bottom