I've been working on combating this problem for a few years now. I'm working on a game called Spire (
http://hitboxteam.tumblr.com/), which is a mix of Quake and Roguelikes. Every procedural dungeon creator I've seen so far seems to just use pre-made rooms or chunks of rooms, and shuffles them around. It never feels like you're in a new world each time, it just feels like you're in the same world jumbled up.
For the past few years, I've been working on an alternate system, which is to use a goal-oriented design based around the player experience. Each element in the world is placed purposefully, instead of randomly.
I do this by emulating the traditional level design process. I think about every action and intention that goes in creating a level manually, and reduce it to rules for my system. The goal is that the end result feels crafted to guide the player through an experience, rather than to rely on the player to create a experience for themselves.
Examples of the generation behavior:
- Lights are placed in areas to guide the players attention towards the primary path, or treasures and dangers.
- Geometric features are generated based on spatial aesthetic rules (eg. a pleasing amount of symmetry and repetition), as well as gameplay rules (eg. jump distances based on player capabilities, corridor widths based on desired feeling of claustrophobia and combat difficulty).
- Unique color palette for each seed.
- Parameters of room construction have emotional analogues (high density -> claustrophobia; harsh angles -> tension; high symmetry -> order; sweeping vistas -> a moment to take a break; gradually lowering elevation -> an unsettling descent).
- The curve of emotional parameters over time have varying mathematical relationships to other parameters' curves, so every seed feels like there is a unique consistency to it.