|09-19-2008, 03:30 PM||#1|
Join Date: Sep 2008
What's State of the Art in Dynamic Quest/Plot Generation?
I was a fairly successful coder/builder on a CDLib MUD, Angalon, years ago, but have been out of serious mudding for years. As many do, I've nurtured a lot of nostalgia for it, and I've had the urge to get back into it.
Anyways, I've been sitting on a few ideas that were inspired by some recent play in EVE Online. The quest instancing was neat, but it seemed so basic, and it seems like there's room to do way, way more. I hear a lot about how MUDs are in many ways more advanced than their graphical cousins, game-play wise (as it's easier to build, say, faction support when you don't have to deal with all the graphical stuff that goes along with it).
Has anyone done anything where quests, or “the plot” more generally, is entirely dynamic? Where each quest solved permanently changes the world? Or anything along those lines?
I'm curious what the state of the art is before I go and reinvent the wheel.
Maybe the term 'quest' brings connotations I'm not meaning to imply. What I'm trying to work out is a sort of plot improvisation engine. So, instead of coding up a specific quest, I'm thinking of a system that would be able to dynamically compose “atoms” of plot-related NPC behavior onto cohesive stories, on the fly.
By atoms of plot-related behavior, I mean concrete things like, “issue verbal thanks”, “give small cash reward”, “recognize”, or “ask player to carry message”. (Despite being concrete, these are still 'uninstantiated', and unconnected with any particular player or NPC.)
It's not hard to imagine ways in which you could compose these into weightier behavior sequences, such as ordering an underling to dispense a some gold trinket from the treasury as a reward.
Now consider, separately, the idea of NPC 'motives'. These are persistent impulses to meet some objective, but in an unspecified way. An example might be, “demonstrate gratitude to <x>”, or something as simple as “kill <x>”. You could imagine the system selecting behavior sequences that fulfill these motives, somewhat randomly, somewhat on the basis of the NPC's resources. An desperate beggar might satisfy his motive to kill you by dropping his crutches and trying to strangle you in the street (via the “heedless physical attack” sequence). The king might simply order someone to do it for him (via the “delegate to trusted killer” sequence).
Back to the plot improvisation engine. Make a bigger leap with me and imagine the engine is always running, always looking for ways to fulfill NPC motives not just randomly, but in a way that engages specific players. This would be based on player stats, accomplishments, affiliations, and also his or her declared 'story goals'.
One player might be looking for combat challenges, another for courtly intrigue, for example. If the knight ****es off the king, then contrive him a plot where the king's favourite challenges him in combat. If the courtier gives offense, then subject him to character assassination.
In fact, how much better if the assassin is himself a player!
So, that's the idea in a nutshell. Rather than ever composing specific quests, write plot elements that can be randomly composed into bigger potential stories by the thousands, scored for suitability, and the best chosen and put into play.
The ultimate goal is to create a world with an evolving plot, where NPCs are constantly pushing dramatic potential, but where all “denouments” are carried out by players.
I'm really curious if anyone is already doing this sort of thing.
|09-20-2008, 12:08 AM||#2|
Join Date: Feb 2006
Re: What's State of the Art in Dynamic Quest/Plot Generation?
I haven't heard of or seen anything like this in a mud, or in any game, really. You might want to look up the dev house Tale of Tales, the new Storytron engine by Chris Crawford, the Procedural Arts game Facade (the lead dev Andrew Stern there just gave a talk on atoms in story at the AGDC), and check out some of the old threads at MudLab.
Sounds like fun. Where do I sign up.
eta: you can also look at something like this:
Last edited by Ide : 09-20-2008 at 04:40 PM.