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.
Conflict with a god / Deliverance. Ethan is a mortal in conflict with the immortal Heidi. Finley rescues Ethan. Heidi threatens Ethan.
Vengeance taken for kin upon kin / Adultery. Mia is a guilty kin and is adulterous with Leon. Alex is an avenging kin and has been cheated on by their spouse Mia. Niall is a relative of both.
Obstacles to love / Enmity of kin. Oliver is lovers with Dhruv and hates their kin Lydia. There is an obstacle.
Complex situation generation (no relationships)
Similar to my work above, but without attempting to draw any relationships between the characters.
Loss of loved ones / Pursuit. Ruby is a kin spectator and the punisher. Ellen is a kin slain. Brooke is an executioner and the fugitive.
Erroneous judgement / Murderous adultery. Jessica is the author of the mistake and another adulterer. Mohammad is a mistaken one and an adulterer. Millie is a victim of the mistake and the betrayed partner. Callum is the guilty one.
The enigma / Falling prey to cruelty or misfortune. Samuel is an interrogator and an unfortunate. Niall is the master. Caleb is the seeker.
Simple situation generation
Nothing more than one of Polti's dramatic situations combined with random names. The most basic story-starter.
Revolt. Jenna is a Conspirator. Owen is a Tyrant.
Ambition. Olivia is an Adversary. Matthew is an Ambitious Person. There is Something Coveted.
Madness. Karina is the Victim. Lola is has gone insane.
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 / Loss of loved ones / Conflict with a god / Recovery of a lost one. Chloe conspires against the tyrant Natalia and is slain by Natalia and is a mortal in conflict with the immortal Natalia and seeks and finds the lost Oliver. Oliver sees the slaying of Chloe. Natalia is a tyrant.
Revolt / An enemy loved / Crimes of love / Rivalry of kin. Shaan conspires against the tyrant Sophie and is lovers with their enemy Alexander and commits a crime because of their love for Alexander and is preferred over their kin Sophie. Sophie is a tyrant and hates Shaan and is a rejected kin. There is an object of rivalry.
Remorse / Pursuit / Abduction / Recovery of a lost one. William is the victim of Aleena and is abducted by Aleena and seeks and finds the lost Seth. Seth is an interrogator and is the guardian of William. Aleena is a fugitive being chased by William.
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.