Building a Procedural Generated Dungeon
- Jarno Fleurkens
- 3 days ago
- 3 min read
As a self-study project, I set out to design and prototype a first-person roguelite that uses a procedurally generated dungeon. Think Doom meets Hades.
Research
To make sure I had a solid start, I researched two genres through pattern analysis: examining each genre as a whole to identify what design problems these games aim to solve and what patterns emerge across them in response.
Roguelite Structure & Procedural Generation
I studied ten titles: Hades, Dead Cells, Slay the Spire, Enter the Gungeon, Returnal, Cult of the Lamb, Risk of Rain 2, Inscryption, FTL: Faster Than Light, and Darkest Dungeon. Looking at how each game uses procedural generation and how level layouts are composed from modular pieces and their structure for each loop.
One of the core advantages of procedural generation in a roguelite is replayability. Each run teaches the player something new, what might appear, how it might affect their chances, and how to adapt on the fly. Over time, this pushes players beyond their comfort zones, encouraging them to engage with more than just their favourite weapons or strategies.
Procedurally generated rooms also prevent memorization. Even experienced players face fresh challenges each run, keeping the game demanding and the decision-making alive across many hours of play.
Failure is part of the deal in roguelites; players will lose, repeatedly. The key is making sure something always persists or progresses, even when a run ends badly. That might mean unlocking new story beats, opening shortcuts, growing a base or colony between runs, or uncovering a new part of the narrative. Each run should reveal something: a clue about how to break the loop, or a hint that maybe bending the rules is the way out. The players shouldn't feel stuck like their character.

One resource that stood out while researching was a GDC talk by Harry Krueger from Housemarque on the development of Returnal. It gave me a lot of insight into how the team approached making a bullet hell experience in 3D, coming from a 2D background. What stuck with me most was how they designed combat encounters so that the difficulty curve would feel consistent regardless of which direction a player entered a room from — a genuinely hard problem in procedural level design. That idea became a concrete design goal for the project; it's difficult to accomplish, but the right one.

First-Person Level Design & Combat Flow
I applied the same pattern analysis approach to ten boomer shooters: Doom (1993), Doom Eternal (2020), Forgive Me Father, Forgive Me Father 2, Duke Nukem 3D, Quake, Ultrakill, Dusk, Wolfenstein 3D, and Amid Evil. The focus here was on level layouts, arena design, and how the environment supports the moment-to-moment combat flow.
The combat arenas should encourage push-forward gameplay; players shouldn't be able to sit behind cover to wait out a cooldown or slowly recover health. Engaging with enemies should feel like the best choice, and killing enemies should reward the player by restoring health, refilling ammo, or both. At the same time, the level also shouldn't be barren with nothing to find. Pickups should exist, but be kept scarce enough that fighting through enemies remains the reliable option.
Beyond the combat, boomer shooters typically have some sort of puzzle, be it through matching the right weapon to the correct enemy, finding a key, navigating a maze of rooms, or unlocking a new path in an already explored area. With procedural generation, there's room for doors to stay locked until the player picks up an artifact along the way or learns something later on that allows the player to explore hidden areas in earlier rooms.

Prototyping the dungeon generator
Before designing any rooms, I first built the system itself. The blueprint assembles a dungeon from a designer-defined array of rooms, using a simple weighted randomness approach: the more times a room appears in the array, the higher its chance of being selected. This keeps the system easy to configure while still giving meaningful control over how often specific rooms appear. Once all rooms are placed, any open doorways are automatically sealed with end pieces, ensuring the player is always contained within the playable area. The total number of rooms can be adjusted directly in the blueprint, making it straightforward to iterate on dungeon size without touching the underlying logic.
What's next
The next goal for the project is to build a character controller and populate the dungeon with some basic enemies. Having actual combat in the space should make it much easier to start designing rooms with intention and to start identifying what ingredients make an encounter interesting and what layouts support good moment-to-moment gameplay.
Once enemies are in engine, the rooms' design and size need revisiting as they have a direct impact on how combat plays out. Not having something to fight in the game as of yet makes it difficult to make these decisions

Comments