I have changed my mind and decided to continue working on improving the Storytron software. However, the direction I am going to go in has changed.
Storytron was originally supposed to be a platform and business for interactive storytelling. It was an exciting, quixotic venture that failed. My open source efforts over the past year were in service of that original goal. Now Storytron has a new mission — to become a game-agnostic tool for experimenting with procedural narrative design for dramatic storytelling.
Over the years I have read about procedural generation in one form or another as it relates to game development. I recently read two books, Procedural Generation in Game Design and Procedural Storytelling in Game Design, that got me thinking about this technique again.
There are many games, too many to mention here, that use procedural generation in their creation, and this has given rise to numerous approaches, techniques, and frameworks. Online groups, conferences, and events like ProcJam, NaNoGenMo, Narrascope, IntFiction, and others provide numerous opportunities for conversation and cross-pollination. There is also a rich history of procedural story generation going back to the 1970’s with programs like Meehan’s Tale-Spin, Turner’s Minstral, and Leibowitz’s Universe (I plan on exploring some of these early programs in future posts to see what can be learned).
With this new direction I will temporarily “forget” about the interactive side of Storytron and focusing on its story-creating capabilities. The software already has many of the building blocks necessary to calculate dramatic situations as well as a scripting language and utilities to tweak and refine the final product. I imagine reading the final result will be a cross between watching a short play and reading a short story or poem.
Here are two examples of procedurally generated stories. The first is from Micro-Talespin, a recreation of Meehan’s original program (the Micro-Talespin source code can be found here).
JOE WAS NEAR THE CAVE.
JOE KNEW THAT JOE WAS NEAR THE CAVE.
IRVING WAS NEAR THE OAK-TREE.
IRVING KNEW THAT IRVING WAS NEAR THE OAK-TREE.
JOE KNEW THAT IRVING WAS NEAR THE OAK-TREE.
THE WATER WAS NEAR THE RIVER.
JOE KNEW THAT THE WATER WAS NEAR THE RIVER.
THE HONEY WAS NEAR THE ELM-TREE.
IRVING KNEW THAT THE HONEY WAS NEAR THE ELM-TREE.
THE WORM WAS NEAR THE GROUND.
JOE KNEW THAT THE WORM WAS NEAR THE GROUND.
IRVING KNEW THAT JOE WAS NEAR THE CAVE.
THE FISH WAS NEAR THE RIVER.
IRVING KNEW THAT THE FISH WAS NEAR THE RIVER.
JOE WAS THIRSTY .
JOE WANTED NOT TO BE THIRSTY .
JOE WANTED TO BE NEAR THE WATER.
JOE WENT TO THE RIVER.
JOE WAS NEAR THE RIVER.
JOE DRANK THE WATER.
JOE WAS NOT THIRSTY .
And here is the output from my 2010 attempt to re-imagine the game “Trust & Betrayal: The Legacy of Siboot” using Storytron.
Felsym is dead! The fourth Shepherd of Kira has died and one of his seven acolytes must take his place as the spiritual leader of Laminian civilization.
Vetvel what are you going to do?
you depart for Kendra’s House from Temple of Siboot
you arrive at Kendra’s House from Temple of Siboot
Kendra greets you formally
Kendra rejects Vetvel
Kendra doesn’t believe that Vetvel’s trust towards her is almost non-existent
Kendra says her trust towards Vetvel is almost non-existent
Skordokott greets you warmly
Skordokott is skeptical Vetvel
Skordokott believes that Vetvel’s trust towards him is moderate
Skordokott says his trust towards Vetvel is moderate
you depart for Wiki’s House from Kendra’s House
you arrive at Wiki’s House from Kendra’s House
This log from the second example shows the detailed calculations that are saved for each event in the story, events that can be manipulated by the scripting language.
I admit that neither of these examples is great literature or particularly entertaining. Both are light years away from anything written by Shakespeare, Marlowe, Mamet, or Stoppard. But they are a start. Once a dramatic non-interactive story can be created using Storytron, adding in the player interaction should be as easy as flipping a PC/NPC switch on a specific actor (though I bet that is probably easier written then done).
I realize that my approach will be considered heresy by some since interactivity is considered to be the computer’s competitive advantage. Process, they will say, should take precedence over data. Any attempt to marginalize interactivity, they will say, reduces the chances of “true” interactive storytelling.
Maybe. We’ll see.