Reviewing: Creating Interactive Fiction With Inform 7

Posted:

Veteran interactive fiction (IF) writer Aaron Reed has created an annotated travelog of the creation of one particular game called Sand-dancer written with the “natural language” tool called Inform 7. His book, Creating Interactive Fiction with Inform 7, is geared toward semi-technical writers who want to create IF without getting a degree in computer science. Said another way, this book attempts to teach programming without talking about software or hardware architecture. This is a very tall order, but one that Reed has pulled off to a large degree.

I am not disinterested in this subject. I am professional software developer who is very well versed in the dreary details of computer technology, but who is new to authoring IF. When I learn a new platform, I look for a reference guide that will be complete, organized and well-indexed. Neither the standard Inform 7 manual, Writing with Inform, nor Reed’s book offer a traditional reference experience. Together, however, these two resources do complement each other well.

In the world of Interactive Fiction, opinion is split over what IF should be. One group holds that IF is another medium for telling stories, just as theatre and movies are. Opposing this position is the “text adventure” crowd, whose proponents hold that IF is a game that may or may not have narrative elements. Reed’s work is firmly in the first camp. As such, a good chunk of his text discusses the rudiments of fiction writing. If your interest is in creating “text adventures,” you may find these bits of little use.

What Reed gets right is to introduce early in his text the important mechanisms needed to build a model world with Inform 7. Here I am referring to the basics of room creation, objects and properties. His technique for ensuring that important objects are described and handled appropriately is called BENT (Bracket Every Notable Thing). By making every important object bracketed in descriptions, Inform will throw an error if you do not create that object in the model world. The BENT technique is definitely going to help novice IF writers make higher quality games by avoiding some common description errors. Later, Reed shows that text subsitution can be used for even subtler purposes.

The absolute glory of this book is the combing out of the gnarly details of how rulebooks work; his explaining of how to use before, after, carry out and instead rules effectively; and the detailing the clear differences between actions and activities. These are critical concepts for non-trivial IF and the Inform 7 manual isn’t as clear as Reed on these subjects.

There is great value in showing novices the “design document” for a game, which Reed does. Those familiar with traditional software development will expect this sort of thing, but in the IF world, it is a little different. The design document is more like a short story with some annotations about game mechanics. This is a productive approach to IF design and a good place for novices to start.

Reed also has copious suggestions for debugging IF with various Inform 7 tools. These include in-game commands such as SHOWME, TREE, ACTIONS and RULES; Inform 7 statements like “change library message debug to dbg_on”; and extensive walkthroughs of the Inform 7 IDE using the skein, index and transcript functions. These tools are critical to smoothing out nits in IF and will be re-read often by new IF authors. It is odd though that the Test command, which is introduced early in the Inform 7 documation is not discussed in any detail.

There are many examples and discussions of Inform 7 extension libraries (although there is little details of how to create one). From conversation handling to player navigation, Reed’s tour will help new authors not reinvent the wheel.

As has been said, this book is not designed to be a reference to Inform 7, but an appendix or two of syntax charts and rules tables would not have been unwelcomed. The book is also not very well organized for reference (the same can be said of the Inform 7 manual). For instance, the helpful debugging tips are spread across many chapters. It would be nice to see these collected in once place.

Even after volumnious examples, I still do not have a handle on definitions or relations. Both are introduced very early in the text. These are high level mechanism that should be easy to understand, but the natural language syntax of Inform 7 impedes my apprehension. Reed does provide a helpful table outlining the different kinds of relations, which is a small kindness. However, a good chunk of Sand-dancer depends on these two Inform 7 mechanisms, so I felt a little lost in later places in the book.

If you are even a little curious about creating IF with Inform 7, you really ought to consider reading this book. Reed will not save you from the manual, but he will save you time and a little frustration.