Divide and Conquer (Procedural Gen Lessons #3)

Divide and Conquer (Procedural Gen Lessons #3)

How do you procedurally generate a world that can be small, medium, or large, and guarantee it's always fun? This was a huge problem for us on Curious Expedition.

Just scattering a random number of locations was a failure. So our next thought was to create regions to stop locations from clumping up. It created a new problem: some regions ended up with all the resting spots, while others had none. The world was still super unbalanced.

The breakthrough was counter-intuitive. Instead of focusing on the bigger picture, we zoomed in and designed just one perfect self-contained region. It followed a simple guaranteed rule:

  • 1 Resting Spot
  • 1 Shrine (The Game Objective)
  • 1 Utility Location
  • 1 Loot Location (only spawned with 25% chance since they were bonus)

Once we had solved that, creating small or big worlds got trivial:

  • A small level is 2x2 regions
  • A medium level is 2x3 regions
  • A large level is 3x3 regions

No matter to what size we scaled up, the system didn't break. In Curious Expedition: Rivals we went as far as creating levels with 100x100 regions, without any extra tuning overhead.

Spelunky is another examples which builds its levels from perfectly playable, hand-crafted room chunks. We used a similar approach again in our game Mother Machine. Divide and conquer. To build a robust large-scale procedural system, focus on a small-scale self-contained building block.

This is post 3 in my series on the "95% problem" in procedural design.

What's a complex design problem you solved only after you completely reframed it?