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-machine or Glulx virtual machines. Versions 1 through 5 were released between 1993 and 1996. Around 1996, Nelson rewrote Inform from 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.
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.
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.
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 scenery or edible) 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.
print "Hello, World!^";
];
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, but called with round brackets as in C. The character is used to and to invoke raw Z-machine opcodes.
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.
Include "Parser";
Include "VerbLib";
[ Initialise;
Object Kitchen "Kitchen";
Object Front_Door "Front Door";
Object Living_Room "Living Room"
Object -> Salesman "insurance salesman"
Object -> -> Briefcase "briefcase"
Object -> -> -> Insurance_Paperwork "insurance paperwork"
Include "Grammar";
, Inform 7 and its and tools remain under development.
Also archived at
Since April 2022, Inform 7 is open source and developed on GitHub.
Inform 7 was named Natural Inform for a brief period of time, but was later renamed Inform 7. This old name is why the Inform 7 compiler is named "NI".
The Inform 7 IDE includes a text editor for editing Inform 7 source code. Like many other programming editors it features syntax highlighting. It marks quoted strings in one color. Headings of organizational sections (Volumes, Books, Chapters, Parts, and Sections) are bolded and made larger. Comments are set in a different color and made slightly smaller.
The IDE includes a built-in z-machine interpreter. The Mac OS X IDE's interpreter is based on the Zoom interpreter by Andrew Hunter, with contributions from Jesse McGrew. The Microsoft Windows IDE's interpreter is based on WinFrotz.
As a developer tests the game in the built-in interpreter, progress is tracked in the "skein" and "transcript" views of the IDE. The skein tracks player commands as a tree of branching possibilities. Any branch of the tree can be quickly re-followed, making it possible to retry different paths in a game under development without replaying the same portions of the game. Paths can also be annotated with notes and marked as solutions, which can be exported as text walkthroughs. The transcript, on the other hand, tracks both player commands and the game's responses. Correct responses from the game can be marked as "blessed". On replaying a transcript or a branch of the skein, variations from the blessed version will be highlighted, which can help the developer find errors.
The IDE also provides various indices into the program under development. The code is shown as a class hierarchy, a traditional IF map, a book-like table of contents, and in other forms. Clicking items in the index jumps to the relevant source code.
The IDE presents two side-by-side panes for working in. Each pane can contain the source code being worked on, the current status of compilation, the skein, the transcript, the indices of the source code, a running version of the game, documentation for Inform 7 or any installed extensions to it, or settings. The concept is to imitate an author's manuscript book by presenting two "facing pages" instead of a multitude of separate windows.
Another notable aspect of the language is direct support for relations which track associations between objects. This includes automatically provided relations, like one object containing another or an object being worn, but the developer can add their own relations. A developer might add relations indicating love or hatred between beings, or to track which characters in a game have met each other.
Inform 7 is a highly domain-specific programming language, providing the writer/programmer with a much higher level of abstraction than Inform 6, and highly readable resulting source code. General-purpose logical and arithmetic statements are written in natural language (see e.g. the "Physics" example in The Inform Recipe Book).
In early Inform 7, the compiler translates the code to Inform 6, much like CFront did with C++ and C. The current compiler (as of version 10 of 2022) is additionally able to translate the code directly to C for a native executable, and to generate an "index mini-website" describing the story.
The world is a room.
When play begins, say "Hello, World!"
The following is a reimplementation of the above "Hello Deductible" example written in Inform 7. It relies on the library known as "The Standard Rules" which are automatically included in all Inform 7 compilations.
The story headline is "An Interactive Example".
The Living Room is a room. "A comfortably furnished living room."
The Kitchen is north of the Living Room.
The Front Door is south of the Living Room.
The Front Door is a door. The Front Door is closed and locked.
The insurance salesman is a man in the Living Room. The description is "An insurance salesman in a tacky polyester suit. He seems eager to speak to you." Understand "man" as the insurance salesman.
A briefcase is carried by the insurance salesman. The description is "A slightly worn, black briefcase." Understand "case" as the briefcase.
The insurance paperwork is in the briefcase. The description is "Page after page of small legalese." Understand "papers" or "documents" or "forms" as the paperwork.
Instead of listening to the insurance salesman:
On March 1, 2006, Short announced the release of three further games:
Bronze (an example of a traditional puzzle-intensive game) and Damnatio Memoriae (a follow-up to her award-winning Inform 6 game Savoir-Faire) were joined by Graham Nelson's The Reliques of Tolti-Aph (2006). When the Inform 7 public beta was announced on April 30, 2006, six "worked examples" of medium to large scale works were made available along with their source code, including the three games previously released on March 1.
Emily Short's Floatpoint was the first Inform 7 game to take first place in the Interactive Fiction Competition.
It also won 2006 for Best Setting and Best NPCs. Rendition, by nespresso (2007), is a political art experiment in the form of a text adventure game. Its approach to tragedy has been discussed academically by both the Association for Computing Machinery and Cambridge University. According to writer Aaron A. Reed, Inform 7's friendlier syntax and IDE allowed Jeremy Freese to create Violet (2008).
Inform 6 library
Example game
location = Living_Room;
"Hello World";
];
with
description "A comfortably furnished living room.",
n_to Kitchen,
s_to Front_Door,
has light;
with
name 'insurance' 'salesman' 'man',
description "An insurance salesman in a tacky polyester
suit. He seems eager to speak to you.",
before [;
Listen:
move Insurance_Paperwork to player;
"The salesman bores you with a discussion
of life insurance policies. From his
briefcase he pulls some paperwork which he
hands to you.";
],
has animate;
with
name 'briefcase' 'case',
description "A slightly worn, black briefcase.",
has container;
with
name 'paperwork' 'papers' 'insurance' 'documents' 'forms',
description "Page after page of small legalese.";
Notable games developed in Inform 6 or earlier versions
Published as
Inform 7
Inform 7 IDE
Inform 7 programming language
Example game
say "The salesman bores you with a discussion of life insurance policies. From his briefcase he pulls some paperwork which he hands to you.";
move the insurance paperwork to the player.
Notable games written in Inform 7
See also
Further reading
|
|