This is the first of a series of posts about my interactive fiction system, Curveship.
Curveship is an interactive fiction development system that provides a model of a physical world, and its workings, as do existing state-of-the-art IF systems (such as Inform 6, Inform 7, TADS 2, and TADS 3). It will not have as many libraries, and will have no multimedia features, when it is released, but it will provide another significant capability: it will allow IF authors to write programs that manipulate the telling of the story (the way actions are represented and items are described) as easily as the state of the IF world can now be changed. While existing IF systems allow for the simulation of a character who can move around and change the state of the world, Curveship provides for control over the narrator, who can tell as if present at the events or as if looking back on them, who can tell events out of order, creating flashbacks or narrating what happens by category, and who can focalize any character, not just a fixed PC or a hard-coded series of them, to tell the story from the perspective of that character’s knowledge and perceptions.
Curveship will have a closed round of testing and revision soon, and will be publicly released soon thereafter. This may happen as early as the end of summer, but if that timing makes little sense for the project or the IF community (IF programmers may be too busy finishing their IF Comp games at that point) the release could happen later.
I have had a very short page about the system up for a while at Curveship.com. As it explains in slightly more detail, the system’s starting point was my too-cleverly-named research system nn. I have been working for a while to get a usable programming interface set, to clean up the code, and to add some capabilities that are necessary for a usable IF system but didn’t have much research value to me, at least initially. Finally, the name of the system comes from a poem by Hart Crane. “Curveship is being fashioned to model the essential qualities of variation—the curve of a story through its telling—just as friendship and authorship represent the essence of being a friend and author.”
I’ve recently given a talk about the system to a group of roboticists and computational linguists at a workshop, and more recently (yesterday) got to discuss the practicalities and details of the system a bit with the Boston IF group; those folks provided some good suggestions at the levels I’m most concerned about now. I’m now going to begin writing, as often as I can, about the system, what principles it is based on, and how it works at high and low levels.
Curveship is a Python framework; to write a fiction file you simply write some Python code, instantiating classes for the most part, writing your own subclasses if you want items to do something unusual. There are a few fairly radical differences between Curveship and existing IF systems, but the two that will probably be most visible are the modeling of actions and the string-with-slots representation that is used for text generation. In Curveship, items do not change their own state. Changes of state, and the movement of items from one place or container to another, are accomplished only by actions. And, when actions are narrated or objects described, this is done based on a formalism that is a bit harder to write than a simple string would be. These are two of the the main aspects of Curveship that, although they demand more work from the IF author, allow for powerful, general ways of narrating.
Ideally, as I continue these posts, I’d like to write in response to your particular interests and curiosities. I’ll be glad to answer questions in comments if there’s a reasonably sort answer; if not, I’ll try to answer them in the context of a longer post.
Great to hear this is finally getting ready for public consumption, Nick. At least two aspects of Curveship– the focus on tools for enabling more sophisticated narration and storytelling, and its integration with an existing and open language, Python– should make it of great interest to IF authors. I’m looking forward to learning more as time goes on.
Totally in agreement with Aaron. One thing I’m hoping Curveship will include is an input/output stream API that would make it straightforward to hook it up to the windowing or console framework of an author’s choice. So much of a tool’s adoption can depend on the presentation of what it creates. Curveship itself wouldn’t have to have any multimedia features, as long as it folds in easily with other modules such as pyglet, wx or Qt.
Exciting to see this come to fruition!