There are lots of cool games which do things along these lines: Elite, Diablo, Nethack, Fate, Elder Scrolls, etc ... but pretty much all of them boil down to just randomising the landscape in which you fight randomised things for randomised items. Now don't get me wrong, I played Diablo ruthlessly until I had Windforce at my side and a keychain full of my friend's ears: but I really long for the exploration and puzzles that filled the isometric adventures of yesteryear: Head Over Heels, Fairlight, The Great Escape, Little Big Adventure. I want to be able to walk into a room in my own game, and scratch my head wondering what to do next.
So how exactly can I get the computer to actually assemble one of these isometric puzzles, or any puzzle for that matter? It's easy to just drop a few random objects onto some randomly placed platforms in a randomly shaped room, with some random doors to other random rooms - but how can the computer tell this is even traversable, yet alone a challenge for the player? How can the computer actually create a challenge - rather than just re-hashing pre-programmed/pre-assembled sections or hoping something clever emerges from the noise?
Well - a few weeks ago, I hatched a cunning plan that I'm hoping will get me there. It's a big multi-layered algorithm, but it should be quite easy to teach it how to use new objects, new characters, new art assets, new capabilities - so the generated levels will scale with me as I add new things into the game. It should also be quite easy to tune the output, asking it to generate a hard level, versus an easy one, a combat heavy one versus a more cerebral one. It's going to be a big project - I'm thinking around the order of a year.
The first step (of many, many steps) is to teach it how to turn a logical description of an area into a real scene the character can run about in. There are lots of ways to skin this cat, but the solution I'm playing with is kind of like a constraint based physics solver ... although the solver is more directed and focuses on detecting cases where there are no solutions. I've only just started, but here are the first procedurally generated rooms. They're still quite unrefined, but just seeing a navigatable environment that I didn't layout by hand myself was really satisfying. The key thing to note is that while these look like randomly scattered tiles - the computer understands what they are and where the player will be able to move. Indeed, it's constrained them so you can only get where it wants you to be able to get.
It still generates quite a few messy rooms (that are still valid, just very busy and/or hard to comprehend from an isometric perspective) - but I'll hold off adding more constraints to clean these up until I get a few more elements into the solver. The next step is to give the computer a purpose for the environment it's creating: get the player to this door, or item.