Berries on the Hill: Lessons in Procedural Game Design

For my entire career, I’ve been an advocate of procedural systems in games that generate endless content. Procedural generation has been a design pillar of some of my favorite titles – going all the way back to my early days playing Nethack and the original Civilization, with its evocative random maps.

From a production perspective, the appeal of procedural generation is easy to understand. Once you’ve got the system built, it’s a massive shortcut for creating content. Who needs an entire department full of level designers when you can generate great random levels?

From a design perspective, procedural systems are appealing as well. Good procedural generation has the potential to make games endlessly replayable. For genres like roguelikes, which require players to run through content multiple times, procedural systems are a requirement.

On the projects I’ve worked on over the years, I had come to believe every genre benefitted from procedural elements. Even in heavily scripted narrative games, like Westwood’s Blade Runner, a minor degree of remixing – randomizing which characters were replicants on each given run – proved to be a powerful hook that added replayability and unpredictability to the game.

Or at least, that was my thinking until recently. In a year where everyone’s talking about whether an AI will be able to generate entire games from scratch – and where the scope of massive open-world game designs often requires some level of procedural terrain generation – I find myself questioning whether procedural content generation is always the right tool for the job.

In fact, for some developers, leaning too heavily on procedural generation may prove to be a dangerous trap.

The Procedural Landscape Today

There’s no denying that there are lots of powerfully innovative procedural-focused designs on the market today. 

Shadows of Doubt, which launched in early access in April 2023, leverages solid procedural design for everything from its characters to its maps to its randomly generated murders, serving up a clever stew of endless noir-themed mysteries for players to solve.

Shadows of Doubt. That guy in glasses looks fishy for sure.

Dwarf Fortress, which achieved enormous success on Steam after years as a donation-funded indie game, is the poster child for pushing procedural generation to its limits. An entire world, with hundreds of years of history, gods, factions, and characters, is built from a complex yet coherent ruleset – generating an entire fantasy setting for every new playthrough that no designer ever touched.

It makes sense to leverage the power of procedural systems for both games. Endless replayability is at their core. Yet even in these two fantastically-designed titles, the developers rely on the imagination of players to “fill in the gaps” in their systems – a common downside to procedural games.

Shadows of Doubt has had a great early access run, but several pesky bugs have proven difficult for the developers to fully shake out. Early on, cases would sometimes be entirely unsolvable. Clues would fail to generate, or the next murder wouldn’t actually occur, blocking progress. 

Similarly, over its many years in development, bugs in Dwarf Fortress have become both comical and notorious – dwarves not cleaning up blood, leading to fortresses covered in gore; carnivorous civilizations that starved to death due to not having any hunters; cats dying from poisoning from walking through pools of alcohol.

Dwarf Fortress fans in particular – and I’d consider myself one of them – have for many years “embraced the chaos.” The bugs have contributed to player stories; rationalizations for the game’s sometimes-odd behaviors are plentiful on the internet. 

The power of procedural generation, when it’s done right, is that players will accept holes in a game’s narrative if they’re able to “fill it in” in their minds. But frequently, bugs in an unfinished procedural system are hard to detect without extensive and complex testing.

Good ol’ Dwarf Fortress on Steam. This screenshot tells a genuinely tragic tale if you know how to interpret it.

Smoothing Out Randomness

At Ensemble, for the Age of Empires franchise and Age of Mythology, we had a robust scripting system for generating random maps, iterated and polished over multiple projects. For the most part, the system did exactly what it was designed to do: create a unique battlefield for every multiplayer or skirmish game.

However, the system also required full-time development work from some of the studio’s best programmers and designers. And even with the right people dedicated to the feature for the duration, there were still plenty of pesky bugs to sort out. 

A classic issue was when a map script would generate “hill berries.” Since villagers were slightly slower walking up hills, if a player’s starting berry patch was placed on a hill and their opponent’s berries were not, it would result in an early imbalance that could sway a competitive multiplayer match between expert players.

Smoothing out these imbalances was necessary. Though only a tiny percentage of the audience played at the skill level where “hill berries” would make a difference, those folks were critical customers in the game’s community. 

The solution was to add a map constraint to ensure starting berries weren’t placed on hills. But the more constraints that were added, the less random the maps became. We particularly struggled with the tension between fairness and randomness during the development of Age of Empires 3. The maps became more visually sophisticated and interesting-looking with the improved graphics engine, but often felt “samey” – simply because there were so many constraints on the scripts that generated them.

In the end, spending time on good map generation was worth it. Random maps were a key design pillar of the Age series, and everyone at Ensemble understood the necessity of making the investment in getting the system right. 

However, some developers see procedural generation as a cheap way to get more content quickly while failing to recognize the work necessary to build the robust systems their game’s design needs. Without understanding the costs, it’s easy to commit to a procedural path, assuming it will solve all problems.

Not Everything is a Nail

Then there’s the other factor that’s changed my thinking: not every game benefits from procedural elements.

If I’m forced to pick my two favorite games from the last few years, the first would be Disco Elysium. There are no procedural elements at all in that game. It’s a hand-crafted narrative with an extremely focused design and relatively simple mechanics, but also a lengthy, robust experience that supports at least a couple of replays.

The second is today’s industry juggernaut of the moment, Baldur’s Gate 3. I’ve now finished the game and I’m on a second run. Baldur’s Gate 3 absolutely hits the sweet spot for me – the perfect combination of story, setting, and mechanics – and it’s no secret that I’m a big fan. While there are certainly random elements in the game – loot, dice rolls, and so forth – all of the 80+ hours of content is hand-crafted.

I recognize that Larian is operating in a space that few developers can afford to directly compete in. They threw a legion of content creators, artists, and level designers at the project for a long and expensive development cycle, and then further honed the first act’s worth of content during an extended early access period. 

Larian could have included random “roguelike” dungeon elements to pad the experience further, but I doubt they even considered it. In fact, unlike other games in the genre such as Pathfinder: Wrath of the Righteous, there aren’t any random encounters in Baldur’s Gate 3. Every combat scenario is a hand-crafted and unique experience.

I’ll take any excuse to post Baldur’s Gate 3 screenshots! From my evil run – this Dragonborn oathbreaker paladin has done some bad, bad things.

Procedural game design can be powerful. The many complex vectors and procedural systems in games like Shadows of Doubt and Dwarf Fortress are what make them great. I’m also excited by hybrid designs like 7 Days to Die, which combines random world map generation elements with an enormous and expanding library of hand-crafted points of interest.

But particularly as AI technology continues to improve, there’s a growing tendency for developers to see procedural generation as a shortcut for generating a large quantity of content quickly.

The high quality of both Disco Elysium and Baldur’s Gate 3 shows there’s still a lot of value in hand-crafted content. Similarly, my experience working with random maps on the Age series proved that a good procedural system requires a bigger investment than you’d initially expect to get it right.

So beware of reaching for the procedural hammer on every project. Not every design is a nail.

New content appears on ScreeGames.com every Tuesday. Reposts on Medium will appear every Wednesday going forward.

Leave a Comment

Your email address will not be published. Required fields are marked *