Dear fellow enthusiasts,
I have to admit that I find Interactive Fiction both remarkably intriguing and fatally disconcerting at the same time. I’ve enjoyed reading all sorts of books and articles that have been written on the subject, but I hardly ever play (or read, or whatever one is said to do with) the stuff. And why is this? I think because, most of the time, I can never quite figure out what I’m supposed to be picturing. And I don’t mean “white houses” or “brass lanterns”; I can picture those just fine. It’s when I say things like “GO NORTH” and “EXAMINE THE SACK”. To whom am I speaking? Who is this remarkably submissive minion who has nothing better to do than obey my commands?
Now I have to admit that the whole thing works better (at least for me) when I’m commanding, say, robots on a far-off planet. And there was a time many years ago when I think I caught a glimpse of what Interactive Fiction just might grow up to be (though, as far as I know, it hasn’t): I was playing a game where I was communicating with an astronaut in a broken spaceship over an intermittent radio. Ah! I thought. This is more like it. Two people talking, much like they might in a similar real-life situation. The radio was a good idea, too: commands outside the scope of the game were simply rejected on the ground that there was too much static.
Conversational Storytelling is the name I give to this particular subset of Interactive Fiction: works that attempt to tell a story simply by simulating a conversation between two people. (Conversational Storytelling can, of course, include any number of characters – but they will all be seen and interacted with through the main character.)
Having thus reached the (personal) conclusion that the Conversational Storytelling paradigm just might be the most plausible form of Interactive Fiction (not to mention the most engrossing, since it focuses on human-to-human relationships), I decided to try my hand at authoring such a work. So I took a look at Inform, which by any standard is a very remarkable product; unfortunately, it was much too complicated for a minimalist like myself. Then I looked at TADS, but I was quite certain that I didn’t want to be thinking like a C-language programmer while I was trying to write a story. After looking at a few others, I concluded that they were all approaching the problem from a distinctly different perspective: they all appeared to be “world building tools” rather than “human interaction tools”. Their focus seemed to be the description of real-world places and things (a kitchen with a drawer with an empty roll of tape in it) rather than people (like a child who has been abducted or a woman caught in a bad marriage). It thus seemed clear that I’d have to write my own development system.
So I got out my favorite programming tool and wrote a little interpreter that could compile and run a story composed in Conversational Storytelling format. Input to the interpreter looks like this:
< GUILT BY ASSOCIATION
< An Experiment in Conversational Storytelling
< Text message:
< Help me, please!
< I want to go home.
Who are you?
What is your name?
< Samantha. My friends call me Sam.
< I already told you. I’m Sam.
< Sam. Don’t ask again.
What’s the problem?
Help you with what?
Help you how?
< They kidnapped me.
< I want to go home.
What can you see?
Are there any weapons nearby?
< There’s a dresser here with a gun in the drawer.
< I’ve already told you what’s here.
Why can’t you go home?
< Because I’ve been kidnapped!
How old are you?
< I’m 14. Well, I will be next month.
< Why do you keep asking? Are you some kind of perv?
Take the gun.
Take the gun out of the drawer.
Take the gun out of the dresser.
< Okay, I got it. Big sucker.
< I told you, I’ve got it.
Shoot the kidnappers with the gun.
Shoot the kidnappers.
< Okay. That worked.
< Free at last. Thanks.
< I can see now they had me in a white house.
< There’s a mailbox here…
This is the kind of thing you’ll be writing if you choose to partner up on this project.
As you can see, a story in this format consists of a TITLE, a PROLOG, one or more SCENES (with EXCHANGES that are either required or optional), and an EPILOG at the end. The left arrows (<) precede text that is to be output by the interpreter; the right arrows (>) are used to indicate possible user inputs.
The TITLE, PROLOG, and EPILOG sections contain only output statements; the EXCHANGEs contain both possible user inputs and main character responses. User inputs (preceded by “>”) define the various ways a particular question or command might be expressed by the user; the responses (indicated by “<”) are displayed sequentially, one at a time, as user inputs are entered and processed (and possibly re-entered and re-processed). The final response in each EXCHANGE repeats as necessary.
The interpreter begins by displaying both the TITLE and the PROLOG. The CURRENT SCENE is set to the first SCENE, and the user is prompted for INPUT. If the user’s INPUT is found in the CURRENT SCENE’S EXCHANGES, the appropriate OUTPUT response is displayed. If it is not found, the interpreter mumbles that it doesn’t understand and the user (presumably) tries something else. The story advances to the next SCENE when all the required EXCHANGES in the CURRENT SCENE have been exercised (though not necessarily exhausted).
And that’s the gist of it. Remarkably simple and concise, if I do say so myself. The question you’re probably asking yourself is whether a convincing and engrossing story can actually be written with such a trivial tool. I think so (and I’ve given it quite a bit of thought). But two heads, as we all know, are better than one, and frankly I don’t find the writing as much fun as the programming. Which is why I need your help. I’d also like to know if there’s any real interest in this kind of thing before I spend the time and effort polishing up my as-yet not-ready-for-prime-time development system.
Please write here on the forum if you have thoughts on the matter; responding will help me clarify the concept to myself as well as others.
Please write to me directly (email@example.com) if you’re seriously interested in the job. The story we create together will be entered in the 2015 Interactive Fiction Competition. The development system will be open source and will be offered free to all (with donations being gladly accepted). I’m offering $100 (US) upon successful completion of our task (even if we lose the Competition), plus a 50% interest in any profits from donations received.
UPDATE UPDATE UPDATE
[size=150]The Conversational Storyteller prototype is now ready for writers![/size]
It includes a very tiny sample story in the form we’ve been discussing here, plus the code needed to run it on almost any kind of device with a recent browser. (It’s been tested on the latest versions of Chrome, Safari, IE, and Firefox on a PC, a Mac, an iPhone, an iPad, and an Android tablet.) Don’t expect much of the story; it’s only there so you can see where the pieces go in the file. You can get it here:
I had hoped to simply attach it to this post, but apparently files with a “.html” extension are not allowed.
THE TECHNICAL DETAILS:
To write your own Conversational Story:
Open the file in your favorite text editor or word processor and edit/extend the various sections (TITLE, PROLOG, SCENES, REQUIRED and OPTIONAL EXCHANGES, EPILOG, GENERAL RESPONSES, INVISIBLES, and SYNONYMS) as necessary to say what you want to say in your story. But don’t mess with that one ugly line of HTML at the very top.
Save the file; you can give it any file name you like as long as it has a “.html” on the end. (Some systems may object to spaces in the name.) If you’re using a word processor, make sure you save it as text only.
Open your browser and enter the full path name of your file in the address bar; hit ENTER or click GO (or whatever your browser’s equivalent happens to be). Now you’re running; play away.
Repeat Steps 1-3 as required. For convenience, you can leave both your editor and browser open in different windows as you work; just make sure you save in the editor before you refresh in the browser each time around.
When your story is finished, you can make it accessible to others by emailing your file to them, copying it to a thumb drive, hosting it on a server with a link, etc.
FOR THE SERIOUSLY SERIOUS:
Here’s the process of writing a Conversational Story as I see it, in 7 steps:
Dream up a problem (say, kidnapping), with an emotion-evoking protagonist (innocent young girl), a reprobate and hateful antagonist (big hairy goon), and an ambivalent someone caught in the middle (the goon’s abused but submissive ladyfriend). Make sure the problem has an obvious solution for the protagonist (freeing the innocent young girl) with not-so-obvious side effects for the other characters (see below).
Dream up a believable communication link (a cellphone, smashed by the goon, but with the text-messaging capability still intact).
Dream up a setting (say, an attic) where the protagonist can (a) communicate with the user “offstage” and more-or-less “sotto voce”, while (b) maintaining contact with the other characters. The former is important because it helps the user bond with the protagonist; the latter gives the story breadth.
Outline the obvious solution with a series of exchanges: the most obvious questions/commands with appropriately leading answers/responses (ie, responses with keywords that prompt the next question. These keywords are the subliminal clues that we persistently feed the user to keep him on – or return him to – the right track. They’re in italics, below.)
Who are you? Samantha. Help me.
Help you with what? I’ve been kidnapped.
Who kidnapped you? A big hairy goon and his ladyfriend.
Tell me about the goon. He smells. But his ladyfriend doesn’t seem that bad.
Tell me about the lady. He hits her, but she’s nice to me. Help me. This place is awful.
Where are you? I’m in an attic.
Can you get out? Maybe. There’s a hole in the floor.
What can you see through the hole? There’s a bed under the hole. The lady is sleeping in it.
Where’s the goon? He went out. Said he’d be back in an hour. Help me.
Can you fit through the hole? Yes. But I’d wake the lady. Help me. This place is awful.
What’s in the attic? Nothing but me and this concrete block I’m sitting on.
[At this point the user sees the solution but has to convince the protagonist to do it]
[The protagonist goes through the five Kübler-Ross stages of accepting an unwelcome reality]
Drop the concrete block on the lady. No! She’s been nice to me. [denial stage]
But she helped kidnap you; drop the block. You’re sick. [anger stage]
It’s called guilt by association, kid; drop the block. Maybe later. [bargaining stage]
The goon is coming back; drop the block. I’ll never get out of here. [depression stage]
No time to waste, kid; drop the block. Okay, I guess you’re right. [acceptance stage]
Drop the block.
[This is the climax of the story; the user’s job is done; action, as described by the protagonist, follows]
I dropped it. It missed.
Now the lady’s got a gun. She’s going to kill me!
I can hear the goon coming back. I’m in big trouble now.
Wait! She’s pointing the gun at the goon.
The questions/commands above constitute the required exchanges of the story; label them as such. Then insert a scene break wherever a subsequent question requires information from a preceding exchange.
Add in the optional exchanges. Include who, what, when, where, why, and how questions for every noun in the primary question/command set above. Also include any reasonable action commands for each of those nouns. Make sure (a) the responses do not introduce new nouns; and (b) the responses include the keywords from the primary question/command set.
Beta test with at least three people of differing personality types. Focus on tightening up the primary question/command set first; make sure the obvious path is actually obvious. Then add in the color provided by optional exchanges. Collect synonym definitions and unusual expressions throughout and provide for them in the source.
Questions and comments can be posted here or sent to me directly: firstname.lastname@example.org. I’m still looking for a writer who wants to work seriously with me on a piece for entry in the 2015 Interactive Fiction Competition; we’ll improve the interpreter and gather the data we need for The Art of Conversational Storytelling manual (an extended version of the above) as we go along.