The World SF Blog

Speculative Fiction from Around the World

Curveship: A new way to write IF

Nick Montfort‘s overview of Curveship was among the programming associated with the second IF mini-convention at PAX East. We interviewed him about the project.”What Curveship does differently is allowing control over the telling, not just the underlying storyworld.”

How did you first become academically interested in the possibilities of interactive fiction?

My interest in interactive fiction (IF) isn’t really academic. I’ve been playing it since I was in middle school. Shortly after I stated playing IF, I started writing it, not very well, in BASIC on the Epson QX-10 and Commodore 64. I kept playing and reading about interactive fiction; in 1995, I did a senior thesis on the topic. After working on IF and related topics further for a few years, I wrote three games in Inform 6. And I ended up doing my PhD at Penn on what would eventually become Curveship. So, I’ve been interested in IF as a player, as an author/programmer, and as a system developer—and I’ve found that humanistic theories and computer science research have been helpful in trying to advance the state of the art.


What is Curveship, and what is a Python framework?

Curveship is a platform for interactive fiction development that is written in the programming language Python; to create a Curveship game or fiction, you write a Python program that builds on the basic platform.

Other systems that are generally like Curveship, in that they are also IF development systems, are Inform and TADS.

What Curveship does differently is allowing control over the telling, not just the underlying storyworld. So, as easily as you can move a character or object around in existing IF, you can change qualities of the narrator in Curveship. Events can be told out of order, in flashback or even in reverse order. Any actor in play can be used to focalize the story, so that the narrative restricts itself to the events seen by that actor and flashbacks use that actor’s past knowledge of the world. The narrator (the ‘I’ of the story) and the narratee (the ‘you’) can be easily changed.

What were your research goals in creating this framework?

My main goal is to enable new sorts of interactive fiction games that do the same powerful things done by books we love. To accomplish this, I’ve implemented certain ideas about how the telling of a story—the ‘narrative discourse’—operates separately from the underlying storyworld. So I’ve been able to offer new ways to teach narrative theory, to see how existing narrative theory can enable the generation of narrative and how it needs to be reworked, and to see how to balance a simple-to-use formalism for sentence generation with the flexibility needed for storytelling. But, again, the main goal is to create new, awesome kinds of interactive fiction.

What were your inspirations in this research project? Are you building on the work of other writers, or scholars in narrative theory, and if so, who and why?

Gérard Genette’s Narrative Discourse was my touchstone for narrative theory, although I also took plenty of ideas from work in this field since then. The very valuable concept of narrator and narratee, for instance, is from work that my advisor, Gerald Prince, did years ago. Marie-Laure Ryan’s work on fictional worlds was the basis for the concepts (theories about the world) that each individual actor has in Curveship. The three-stage language generation pipeline that I implemented is based on Reiter and Dale’s discussion in Building Applied Natural-Language Generation Systems. And I could go on, but listing the scholarship and research that Curveship is based on is not very interesting. Suffice it to say that there’s plenty of it, and I wouldn’t have gotten anywhere with a system like this if I had needed to invent narrative theory, the theory of fictionality, and natural language generation from scratch.

What was your point of departure from Inform 7, or other IF authoring systems?

Work on Curveship started before Inform 7 was released, so Curveship didn’t take off from it. As far as world modeling was concerned, I tried to incorporate the insights of every system that I could learn about, although Inform 6 and TADS 2 were certainly foremost in my mind—Inform 6 particularly, since I’d used that system to create several games. I think that existing IF systems model the fictional world very well, at an appropriate level of abstraction. I won’t say that the problem is solved, but for me it’s not the bottleneck. Being able to control the telling and narrate in different ways is where I saw I could make a difference. So I didn’t try to innovate much when it came to the world model, although I made a few refinements in places. Improving the world model just wasn’t part of my research or part of my creative interests.

I looked outside of traditional IF for relevant work on changing the narrative discourse. Systems such as Michael Mateas’s Subjective Avatars and Mark Kantrowitz’s GLINDA, both done as part of CMU’s Oz Projects, were significant here. Michael Mateas and Andrew Stern’s project Façade was a great inspiration for this, although they developed a single large-scale creative work rather than a platform with a few small-scale demos.

Is there any way you can imagine it being a particularly powerful tool for writers authoring genre works (for example science fiction, fantasy, or horror)?

If what’s being authored is interactive fiction, it certainly can. Genre works, as much as any imaginative writing, succeed because the story is told in effective ways — not just because interesting things happen.

The system can certainly be used for teaching about the power of narrative variation and can be used to create IF. If the system is useful in creating standard (unilinear) stories, that would be great, too. I don’t know how to go about it, but maybe someone else will.


Can you imagine Curveship being used to create interactive/mutable electronic poetry, and if so, what direction do you think that exploration might take?

One of the nice things about creating work online is that it doesn’t have to get shoved into the ‘poetry’ section or the ‘fiction’ section exclusively. My concerns in creating Curveship have been those of narrative and fiction . . . but of course, there are plenty of poems (ballads, epics) that create fictional worlds and tell stories. So, I see no reason why the system can’t be put to explicitly poetic use. I wouldn’t want to try to corner such work before it’s created by guessing about what it will be.

How would you like to continue to develop this project?

I’d certainly like to write some interactive fiction in it, and to help others do the same. I also hope that others will make modifications and contributions that suit their needs. Ideally, I’d like to help cultivate a community of interested author/programmer/developers, including academic researchers and independent IF creators.

Why is the system’s name “Curveship”?

Hart Crane was the first to use the word, as far as I know, in the last line of his poem “To Brooklyn Bridge”:

O Sleepless as the river under thee,
Vaulting the sea, the prairies’ dreaming sod,
Unto us lowliest sometime sweep, descend
And of the curveship lend a myth to God.

Based on this, I understand that ‘Curveship’ means ‘the essential quality of curvature,’ just like ‘authorship’ means ‘the essential quality of being an author.’ So, Curveship, a system which models the essential qualities of variation—that is, the curve of a story through its telling.

Also, fortunately, the domain was available.


Where can people learn more?

As I said, the domain was available: http://curveship.com/

You can not only learn more, but also download the system, which is free software and cross-platform (just requires a recent version of Python 2, such as 2.7.1.). Right now, it’s good to either have Python programming experience yourself or have a collaborator with such experience if you want to create using Curveship.

March 22, 2011 - Posted by | Uncategorized | , ,

Sorry, the comment form is closed at this time.

%d bloggers like this: