Inform is a programming language and design system for interactive fiction originally created in 1993 by Graham Nelson. Inform can generate programs designed for the Z-code or Glulx virtual machines. Versions 1 through 5 were released between 1993 and 1996. Around 1996, Nelson rewrote Inform from first principles to create version 6 (or Inform 6). Over the following decade, version 6 became reasonably stable and a popular language for writing interactive fiction. In 2006, Nelson released Inform 7 (briefly known as Natural Inform), a completely new language based on principles of natural language and a new set of tools based around a book-publishing metaphor.
Z-Machine and Glulx
The Inform compilers translate Inform code to story files for Glulx or Z-code, two virtual machines designed specifically for interactive fiction. Glulx, which can support larger games, is the default.
The Z-machine was originally developed by Infocom in 1979 for their interactive fiction titles. Because there is at least one such interpreter for nearly every major and minor platform, this means that the same Z-code file can be run on a multitude of platforms with no alterations. Originally Inform targeted the Z-machine only.
Andrew Plotkin created an unofficial version of Inform 6 that was also capable of generating files for Glulx, a virtual machine he had designed to overcome many of the limitations of the several-decades-old Z-machine. Starting with Inform 6.3, released February 29, 2004, Inform 6 has included official support for both virtual machines, based on Andrew Plotkin's work. Early release of Inform 7 did not support Glulx, but in August 2006 Glulx support was released.
Inform 6
Inform was originally created by Graham Nelson in 1993. In 1996 Nelson rewrote Inform from first principles to create version 6 (or Inform 6). Over the following decade, version 6 became reasonably stable and a popular language for writing interactive fiction.
The Inform 6 system consists of two major components: the Inform compiler, which generates story files from Inform source code, and the Inform library, a suite of software which handles most of the difficult work of parsing the player's text input and keeping track of the world model. The name Inform also refers to the Inform programming language that the compiler understands.
Although Inform 6 and the Z-Machine were originally designed with interactive fiction in mind, many other programs have been developed, including a BASIC interpreter, a LISP tutorial (complete with interpreter), a Tetris game, and a version of the game Snake.
The Inform 6 compiler
The Inform compiler generates files for the Z-machine or Glulx (also called story files) from Inform 6 source code.
The Inform 6 programming language
The Inform programming language is object-oriented and procedural. A key element of the language is objects. Objects are maintained in an object tree which lists the parent–child relationships between objects. Since the parent–child relationship is often used to represent location, an object which is the parent of another object is often said to "hold" it. Objects can be moved throughout the tree. Typically, top level objects represent rooms and other locations within the game, which may hold objects representing the room's contents, be they physical items, non-player characters, the player's character, or background effects. All objects can hold other objects, so a <code>livingroom</code> object might hold an <code>insurancesaleman</code> object which is holding a <code>briefcase</code> object which contains the <code>insurancepaperwork</code> object.
In early versions of Inform, objects were different from the notion of objects from object-oriented programming, in that there was no such thing as a class. Later versions added support for class definitions and allowed objects to be members of classes. Objects and classes can inherit from multiple classes. Interactive fiction games typically contain many unique objects. Because of this, many objects in Inform do not inherit from any class, other than the "metaclass" Object. However, objects very frequently have attributes (boolean properties, such as <code>scenery</code> or <code>edible</code>) that are recognized by the Inform library. In other languages this would normally be implemented via inheritance.
Here is a simple example of Inform 6 source code.
<syntaxhighlight lang="inform6">
! Square brackets define a routine. This is the Main routine, which takes no arguments.
[ Main;
print "Hello, World!^";
];
</syntaxhighlight>
The procedual parts, statements and operators, are largely borrowed from C, with the notable exception that instead of is used to take array subscripts. Routines are defined in square brackets, as in the routine above,
Inform 6 library
The Inform system also contains the Inform library, which automates nearly all the most difficult work involved in programming interactive fiction; specifically, it includes a text parser that makes sense of the player's input, and a world model that keeps track of such things as objects (and their properties), rooms, doors, the player's inventory, etc.
The Inform compiler does not require the use of the Inform library. There are several replacement libraries available, such as Platypus and InformATE, a library that codes Inform in Spanish. Some games may use no library at all, such as a direct port of Zork into Inform 6.
- Zork: The Undiscovered Underground (1997), written by Marc Blank & Michael Berlyn, programmed by Gerry Kevin Wilson. Given away free by Activision to promote the release of Zork: Grand Inquisitor.
- Anchorhead, by Michael S. Gentry (1998) is a highly rated horror story inspired by H. P. Lovecraft's Cthulhu Mythos.
- Photopia, by Adam Cadre (1998), the first almost entirely puzzle-free game. Won the annual Interactive Fiction Competition in 1998.
- Varicella by Adam Cadre (1999). It won four XYZZY Awards in 1999 including the XYZZY Award for Best Game, and had a scholarly essay written about it.
- Galatea, by Emily Short (2000). Galatea is focused entirely on interaction with the animated statue of the same name. Galatea has one of the most complex interaction systems for a non-player character in an interactive fiction game. Adam Cadre called Galatea "the best NPC ever".
- Slouching Towards Bedlam, by Star C. Foster and Daniel Ravipinto (2003). Set in a steampunk setting, the game narratively integrates meta-game functionality (saving, restoring, restarting) into the game world itself. The game won two XYZZY Awards and received the highest average score of any game in the Interactive Fiction Competition as of 2006.
