I’ve been trying out Warren Sack’s Micro-Talespin story generator, which is, as he says in the initial comments in the code,
“A reconstruction, in Common Lisp, of James Meehan’s program in _Inside_Computer_Understanding:_Five_Programs_Plus_Miniatures_ Roger Schank and Christopher Riesbeck (eds.)”
This is a very interesting early example of generative stories, based (almost entirely?) on character goals and whether or not a character trusts other characters.
Here’s a sample output, in this case under-specifying some of the variables (for example whether or not Joe and Irving trust each other.
CL-USER 219 > (micro-talespin-demo *story6*)
Once upon a time …
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 THOUGHT THAT IRVING LIKED JOE.
JOE THOUGHT THAT IRVING DID NOT DOMINATE JOE.
One day,
JOE WAS HUNGRY .
JOE WANTED NOT TO BE HUNGRY .
JOE WANTED TO HAVE THE HONEY.
JOE WANTED TO KNOW WHERE THE HONEY WAS .
JOE WANTED IRVING TO TELL JOE WHERE THE HONEY WAS .
JOE THOUGHT THAT IRVING DECEIVED JOE.
[Y/N]?
>y
JOE WANTED IRVING TO THINK THAT IF IRVING WOULD NOT TELL JOE WHERE THE HONEY WAS THEN JOE WOULD STRIKE IRVING.
JOE WANTED TO BE NEAR IRVING.
JOE WENT TO THE OAK-TREE.
JOE WAS NEAR THE OAK-TREE.
JOE TOLD IRVING THAT IF IRVING WOULD NOT TELL JOE WHERE THE HONEY WAS THEN JOE WOULD STRIKE IRVING.
IRVING THOUGHT THAT JOE DECEIVED IRVING.
[Y/N]?
>y
JOE STRUCK IRVING.
IRVING WAS NOT ALIVE .
JOE THOUGHT THAT IRVING WOULD NOT TELL JOE WHERE THE HONEY WAS .
JOE THOUGHT THAT JOE DID NOT KNOW WHERE THE HONEY WAS .
JOE THOUGHT THAT JOE DID NOT HAVE THE HONEY.
JOE WANTED TO HAVE THE BERRIES.
JOE WANTED TO KNOW WHERE THE BERRIES WERE .
JOE THOUGHT THAT JOE DID NOT KNOW WHERE THE BERRIES WERE .
JOE THOUGHT THAT JOE DID NOT HAVE THE BERRIES.
JOE WANTED TO HAVE THE FISH.
JOE WANTED TO KNOW WHERE THE FISH WAS .
JOE THOUGHT THAT JOE DID NOT KNOW WHERE THE FISH WAS .
JOE THOUGHT THAT JOE DID NOT HAVE THE FISH.
JOE KNEW THAT JOE WAS HUNGRY .
The end.
Poor Joe. And the moral of the story? Perhaps that its better to trust people, especially if you’re a hungry bear?
The job of the author is to specify the various facts about the world, such as:
; Irving thinks that there are fish in the river
(irving (loc (actor fish) (val river))
As the story generator handles the characters’ negotiations and their attempts to reach their goals, if there are any facts that are not specified, the reader is asked to make a decision, which determines the fact. This blurs the roles of the reader and author – actually, they are doing the same thing, but at different stages. In the author’s case, the decisions are make during the writing process, whereas for the reader the decisions are made while reading the story, but the types of decisions, in this case, are exactly the same.
Why am I blogging about this?
(Note: I’m stealing this format from Pasta and Vinegar)
Although the stories are very simplistic, Micro-Talespin is a very compelling demonstration of what can be done with automatic story generation. This is one of possible many paths down which research into interactive storytelling could lead. Even if I do end up avoiding going too deeply into AI, I should at least understand the issues involved in this type of system.
I’m also thinking of including a generative story assignment in my Interactive Storytelling class this coming semester, inspired by what I’ve read about Mike Mateas’s use of Wide Ruled.