—
This is actually a really interesting question and answering it brings up a lot of nuances. Starting with the fact that, as you point out (though I don’t want anyone to feel like I’m slagging off on them) failures can often be more instructive than successes.
Then, too, the context matters. I don’t think that there are any inherently bad techniques, simply because I’ve seen so many off-the-wall unusual inputs used to good effect that I think it’s quite possible to find an effective use for something that no one else has spotted before.
As a further consideration, something I feel that gets frequently overlooked in the popular discussion of games is that different games need different things. Just as there’s no one purpose for art, there’s no one purpose for procedural generation. Simcity 2000 and katierosepipkin’s no people both generate text, but they’re using it for very different effects. Proteus and Dungeon Crawl have different goals; what works in one might not work for the other.
For that matter, Dungeon Crawl and Crypt of the Necrodancer are both dungeon crawls, but Dungeon Crawl has large dungeon levels and an autoexplore feature, while Necrodancer has tightly constrained dungeons where every step counts. They both have perfectly sized dungeons for the game that they’re in.
There are also different aesthetic goals. Just as some games deliberately curtail the player’s agency to produce an effect of fatalism or determinism, procedural generation can strive to produce results that feel familiar and realistically mundane, or it can be deliberately pushed to produce something that feels alien.
What works for one project may not work for another. One of my friends has a saying: “You are not Tarn Adams”. Dwarf Fortress thrives on the obsessive attention to minute details. It wouldn’t be Dwarf Fortress without it. But Tarn Adams has been working on Dwarf Fortress as a full-time job for nearly a decade at this point. While I’d love to make something with the same intricate detail (and a better interface) it’s not something that most projects need. Even in the base-simulation-genre that Dwarf Fortress revitalized, most games are better off finding their own simplification, rather than trying to copy the excesses of Dwarf Fortress.
When it comes to failures of procedural generation itself, there are two broad categories that I’ve noticed so far. The first is what we might call conceptual failures: the flip side of the order/chaos balance I’ve discussed quite a lot, Michael Cook’s “more unpredictable stuff” critique, Darius Kazemi’s call for context, and so on.
The early Elder Scrolls games are a good example here. While there’s something to be said for the sheer indifference of Arena and Daggerfall’s massive worlds, the bulk of the things you’ll encounter in the game are mostly interchangeable. Random town #3 looks a lot like random town #4. Even if the buildings and names are shuffled around, they’re too big and too anonymous to do much more than confuse the player.
Part of this is down to the tech and design limitations of the time: while you can take the basic concepts here are design a tight procedurally generated open-world dungeon crawler, no one had ever done it before. In an era of experimentation, when CRPGs were still reacting to the design lessons of Dungeon Master, Arena’s open-world procedural generation is simultaneously revolutionary and haphazard.
The towns, for example, have very little order, being more a random jumble of buildings. If you compare them with a map of an actual medieval city, you can see that while the real thing has a level of organic chaos, it also has decipherable patterns and enough unique features to be navigable. Real-world chaotic patterns have clumps and irregularities that derive from their history.
I touched on this a bit when I talked about Arena specifically. The games are just too big for what the generator is able to accomplish. Generating large-scale structures that make sense requires more than just scaling up. Which is why the platform that NaNoGenMo gives for novel generators has had a significant impact on the state of story generation over the past few years: working at novel length has driven experimentation with new long-form techniques.
If you’re not Tarn Adams but you want to generate something that’s along the same lines as Arena while avoiding their mistakes, you might consider making something that generates a small but self-contained world rather than a vast, sprawling one. The original Elite, as you’ll recall, was capable of generating two hundred trillion galaxies but deliberately shipped with only eight.
I suspect the developers themselves recognized this, because they stripped out the procedural generation completely in Morrowind and then gradually added it back in…but that’s another story.
Even these rules aren’t ironclad guidelines. For example, while generators that are too big and too infinite are generally less interesting, the whole point of simulations of Borges’s Library of Babel is that their infinite complexity is too big for the human mind to comprehend as we browse through the mind-numbing noise that frustrates our desperate search for meaning.
The second class of failures are more technical. For example, it was pointed out to me on Twitter that the articles in SimCity 2000 are regenerated if you close and reopen the article. This obviously hurts the verisimilitude. While they probably never fixed it because it’s a relatively minor part of the game, this is a good example of a solvable error. You could either store the random seed used to create the newspaper or have the entire process be deterministically random. Simcity isn’t the first game to have this issue, nor is it the last: Elite Dangerous does the same thing with some of the minor local news articles. It’s also a good example of the importance of understanding the random number generation that you use.
That’s one reason I try not to use the term “random generation,” by the way. It tends to give people the impression of an entirely chaotic process. A single Perlin noise texture map or a jumble of building parts are poor examples of what procedural generation is capable of accomplishing. I’ve seen some confusion out there on the internet that procedural generation is just about dungeon maps, or terrain height maps, or Perlin noise planets. The randomness is only one aspect of procedural generation. Albeit an important one.
I haven’t highlighted too many technical errors, partially because only some of them are illuminating, and partially because they often require a deep dive into the minutia of a generator. At some point I’d like to do some writeups of the source code for some generators and point out exactly what they’re doing, step-by-step.
The last bit, summing up your question, of how not to use procedural generation could probably use a whole tag series itself, to go along with the when not to use procedural generation posts. There’s quite a few games and projects I haven’t mentioned here because they don’t use procedural generation and I think they’re all the better for it. Kentucky Route Zero, Infinifactory, The Stanley Parable, and Undertale don’t have much in the way of procedural generation, and don’t need it. I could write volumes about their approaches to interactive narratives (and might do that in an organized fashion someday, since that’s another one of my passions) but I deliberately haven’t talked about them here.
How not to use procedural generation combines that with the first failures, the conceptual problems (and occasionally the technical problems). Failed procedural generation is generally either broken, boring, confusing, or jarring. Broken is when it fails in a way that makes the game unplayable, or breaks another part of the game. Boring is when the generation is too predictable or too samey. Jarring is when the generation is technically fine, but aesthetically doesn’t fit, as exemplified by the worst sorts of random combinations. Confusing is when boring gets combined with broken or jarring, as in some of the early Elder Scrolls dungeons. Mazes are frequently more fun to design than they are to solve.
As a rule of thumb, anything where the procedural generation is having more fun than the player is probably a place where you shouldn’t be using procedural generation.