This is a study in storytelling and morphology, eventually combining Georges Polti's "The Thirty-Six Dramatic Situations" with aspects of Joseph Campbell, David Adams Leeming, and Phil Cousineau's mythology patterns to create story frameworks. The ultimate goal is to study how their pattens could be used interactively to create procedurally-generated, player-driven stories. What you see right now are baby steps, but an important foundation for future work.
Character names are selected from a list provided by The Office for National Statistics, UK (England and Wales, 2009 database).
All stories are randomly generated on refresh.
Complex situation generation (with relationships)
This is where the bulk of my work is going: an attempt to draw more meaningful relationships between characters, based on a crude mix of two (or more) of Polti's dramatic situations. It's often a bit of a mess, but occasionally touches on a bit of brilliance.
I've culled a few of the situations that the algorithm can't quite handle yet. I'm putting them back in as the algorithm becomes more robust.
Abduction / Revolt. Joseph is abducted by Charlie and conspires against the tyrant Charlie. Amelia is the guardian of Joseph. Charlie is a tyrant.
Conflict with a god / Rivalry of kin. Georgina is a mortal in conflict with the immortal Molly and is preferred over their kin Molly. Molly is a rejected kin. There is an object of rivalry.
Supplication / Crime pursued by vengeance. Carly persecutes Tara and is a criminal pursued by Tara. Emily is a power in authority whose decision is doubtful.
Complex situation generation (no relationships)
Similar to my work above, but without attempting to draw any relationships between the characters.
Conflict with a god / Fatal imprudence. Levi is a mortal and the imprudent. Yunus is an immortal and the victim.
Remorse / Enmity of kin. Alice is an interrogator and a malevolent kin. Ella is a victim. Jamie-Lee is a culprit and a hated kin.
Rivalry of superior vs. inferior / Slaying of kin unrecognized. Isabella is a superior rival and a slayer. Georgia-Leigh is an inferior rival and the unrecognized victim. There is an object of rivalry.
Simple situation generation
Nothing more than one of Polti's dramatic situations combined with random names. The most basic story-starter.
Obtaining. Francesca is an Adversary who is refusing. Pavan is a Solicitor.
Deliverance. Arun is a Threatener. Isla is a Rescuer. Finley is an Unfortunate.
Abduction. Timothy is an Abducted. Caitlin is their Guardian. Patrick is an Abductor.
Overly-complex situation generation (with relationships)
The same algorithm as the top experiment, but mixing together four plots instead of two. The reason it doesn't really work is because it attempts to draw relationships wherever possible, resulting in entirely too many connections for too few characters. Many of the situations don't work when applied to the same characters, like a slain character still being able to discover something. Sometimes, however, it hits a nice balance by fluke. It's a curious example of the limitations of the current algorithm.
Revolt / Obtaining / Slaying of kin unrecognized / Abduction. Flynn conspires against the tyrant Oliver and solicits their adversary Oliver and is abducted by Oliver. Edward is the guardian of Flynn. Oliver is a tyrant and refuses the solicitation of Flynn and is slayed, unrecognized, by their kin Flynn.
Revolt / Supplication / Pursuit / Necessity of sacrificing loved ones. Theo conspires against the tyrant Oliver and is a hero who is forced to sacrifice their beloved Tejay. Oliver is a tyrant and persecutes Theo and is a fugitive being chased by Theo. Enzo is a power in authority whose decision is doubtful. There is a necessity for the sacrifice.
Murderous adultery / Abduction / Deliverance / Adultery. Shiya is adulterous with Lexi and is abducted by Amelia and is adulterous with Lexi. Lexi is the guardian of Shiya and rescues Shiya. Amelia is the betrayed partner and threatens Shiya and has been cheated on by their spouse Shiya.
Pulls random names from UK census data, weighted for popular names. Also cross-references the male and female list to find gender-neutral options. It can currently retrieve around 8k unique names.