Inform

Last updated

Inform
Original author(s) Graham Nelson
Developer(s) Graham Nelson
Stable release
10.1.1 / August 21, 2022 (2022-08-21) [1]
Operating system Microsoft Windows, Mac OS X, Linux, others
Type Interactive fiction development and play
License Artistic 2.0 [2]
Website https://ganelson.github.io/inform-website/

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). [3] 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.

Contents

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 1–6
Paradigm object-oriented, procedural
Designed by Graham Nelson
Developer Graham Nelson
First appeared1993
Stable release
6.32 / 2010
Preview release
6.33 / May 10, 2014 (2014-05-10) [4]
OS Microsoft Windows, Mac OS X, Linux, others
License Freeware and Artistic License 2.0
Website inform-fiction.org
Influenced by
Z-machine, C [5]
Influenced
Inform 7

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 livingroom object might hold an insurancesaleman object which is holding a briefcase object which contains the insurancepaperwork 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 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.

! Square brackets define a routine. This is the Main routine, which takes no arguments.[Main;print"Hello, World!^";];

The procedual parts, statements and operators, are largely borrowed from C, with the notable exception that -->x instead of [x] is used to take array subscripts. Routines are defined in square brackets, as in the Main routine above, [5] but called with round brackets as in C. The character @ is used to escape characters and to invoke raw Z-machine opcodes. [6]

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 [7] 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. [5]

Example game

Here is an example of Inform 6 source code that makes use of the Inform library. The Inform 6 code sample below is usable in Inform 7, but not without special demarcation indicating that it is embedded legacy code.

ConstantStory"Hello Deductible";ConstantHeadline"^An Interactive Example^";Include"Parser";Include"VerbLib";[Initialise;location=Living_Room;"Hello World";];ObjectKitchen"Kitchen";ObjectFront_Door"Front Door";ObjectLiving_Room"Living Room"withdescription"A comfortably furnished living room.",n_toKitchen,s_toFront_Door,haslight;Object->Salesman"insurance salesman"withname'insurance''salesman''man',description"An insurance salesman in a tacky polyester              suit.  He seems eager to speak to you.",before[;Listen:moveInsurance_Paperworktoplayer;"The salesman bores you with a discussion                 of life insurance policies.  From his                 briefcase he pulls some paperwork which he                 hands to you.";],hasanimate;Object->->Briefcase"briefcase"withname'briefcase''case',description"A slightly worn, black briefcase.",hascontainer;Object->->->Insurance_Paperwork"insurance paperwork"withname'paperwork''papers''insurance''documents''forms',description"Page after page of small legalese.";Include"Grammar";

Notable games developed in Inform 6 or earlier versions

Inform 7

Inform 7
Inform 7 IDE Icon.png
Paradigm natural-language, declarative, procedural
Designed by Graham Nelson
Developer Graham Nelson
First appeared2006
Stable release
6M62 / December 24, 2015;7 years ago (2015-12-24) [12]
OS Microsoft Windows, Mac OS X, Linux, others
License Freeware (before 2022); Artistic License 2.0 (since 2022)
Website http://inform7.com/
Influenced by
Inform 6, Natural-language programming

On April 30, 2006, Graham Nelson announced the beta release of Inform 7 to the rec.arts.int-fiction newsgroup. [13] Inform 7 consists of three primary parts: The Inform 7 IDE with development tools specialized for testing interactive fiction, the Inform 7 compiler for the new language, and "The Standard Rules" which form the core library for Inform 7. Inform 7 also relies on the Inform library and Inform compiler from Inform 6. The compiler compiles the Inform 7 source code into Inform 6 source code, which is then compiled separately by Inform 6 to generate a Glulx or Z-code story file. Inform 7 also defaults to writing Blorb files, archives which include the Z-code together with optional "cover art" and metadata intended for indexing purposes. The full set of Inform 7 tools are currently available for Mac OS X, Microsoft Windows and Linux (since 2007).

As of 2023, Inform 7 and its and tools remain under development. [14] Since April 2022, Inform 7 is open source and developed on GitHub. [15]

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." [16]

Inform 7 IDE

The Inform 7 IDE on Mac OS X showing source code and the skein Inform 7 code and skein.png
The Inform 7 IDE on Mac OS X showing source code and the skein
The Inform 7 IDE on Mac OS X showing the Index Map and the transcript Inform 7 map and transcript.png
The Inform 7 IDE on Mac OS X showing the Index Map and the transcript

Inform 7 comes with an integrated development environment (IDE) for Mac OS X, Microsoft Windows and Linux. The Mac OS X IDE was developed by Andrew Hunter. The Microsoft Windows IDE was developed by David Kinder. The Linux IDE (known as GNOME Inform) was developed by Philip Chimento. [17]

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-code interpreter. The Mac OS X IDE's interpreter is based on the Zoom interpreter by Andrew Hunter, with contributions from Jesse McGrew[ citation needed ]. 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. [13]

Inform 7 programming language

Notable features include strong bias towards declarative rule-based style of programming and ability to infer types and properties of objects from the way they are used. For example, the statement "John wears a hat." creates a "person" called "John" (since only people are capable of wearing things), creates a "thing" with the "wearable" property (since only objects marked "wearable" are capable of being worn), and sets John as wearing the hat.

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 his/her 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). [18]

In early Inform 7, the compiler translates the code to Inform 6, much like CFront did with C++ and C. [16] The current compiler (as of version 10 of 2022) is additionally able to translate the code directly to C for a native executable,[ dubious ] and to generate an "index mini-website" describing the story. [19]

Example game

Statements in Inform 7 take the form of complete sentences. Blank lines and indentation are in some places structurally significant. The basic form of an Inform 7 program is as follows:

"Hello, World!" by "I.F. Author"  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.

"Hello Deductible" by "I.F. Author"  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:   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

Mystery House Possessed (2005), by Emily Short, [20] was the first Inform 7 game released to be public. It was released as part of the "Mystery House Taken Over" project.

On March 1, 2006, Short announced the release of three further games: [21] Bronze [22] (an example of a traditional puzzle-intensive game) and Damnatio Memoriae [23] (a follow-up to her award-winning Inform 6 game Savoir-Faire ) were joined by Graham Nelson's The Reliques of Tolti-Aph [24] (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. [25] [26] [27]

Emily Short's Floatpoint was the first Inform 7 game to take first place in the Interactive Fiction Competition. [28] It also won 2006 XYZZY Awards for Best Setting and Best NPCs. [29] 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 [30] and Cambridge University. [31]

See also

Further reading

Inform 6
Inform 7

Related Research Articles

<span class="mw-page-title-main">Interactive fiction</span> Nonlinear narratives set by audience decisions

Interactive fiction, often abbreviated IF, is software simulating environments in which players use text commands to control characters and influence the environment. Works in this form can be understood as literary narratives, either in the form of interactive narratives or interactive narrations. These works can also be understood as a form of video game, either in the form of an adventure game or role-playing game. In common usage, the term refers to text adventures, a type of adventure game where the entire interface can be "text-only", however, graphic text adventures still fall under the text adventure category if the main way to interact with the game is by typing text. Some users of the term distinguish between interactive fiction, known as "Puzzle-free", that focuses on narrative, and "text adventures" that focus on puzzles.

The Z-machine is a virtual machine that was developed by Joel Berez and Marc Blank in 1979 and used by Infocom for its text adventure games. Infocom compiled game code to files containing Z-machine instructions and could therefore port its text adventures to a new platform simply by writing a Z-machine implementation for that platform. With the large number of incompatible home computer systems in use at the time, this was an important advantage over using native code or developing a compiler for each system.

Text Adventure Development System (TADS) is a prototype-based domain-specific programming language and set of standard libraries for creating interactive fiction (IF) games.

Graham A. Nelson is a British mathematician, poet, and the creator of the Inform design system for creating interactive fiction (IF) games. He has authored several IF games, including Curses (1993) and Jigsaw (1995).

<i>Colossal Cave Adventure</i> 1976 video game

Colossal Cave Adventure is a text-based adventure game, released in 1976 by developer Will Crowther for the PDP-10 mainframe computer. It was expanded upon in 1977 by Don Woods. In the game, the player explores a cave system rumored to be filled with treasure and gold. The game is composed of dozens of locations, and the player moves between these locations and interacts with objects in them by typing one- or two-word commands which are interpreted by the game's natural language input system. The program acts as a narrator, describing the player's location and the results of the player's attempted actions. It is the first well-known example of interactive fiction, as well as the first well-known adventure game, for which it was also the namesake.

Quetzal is a standardised file format for the saved state of Z-machine games, invented by Martin Frost. Prior to the introduction of Quetzal, each Z-machine interpreter saved games in its own format; Quetzal enabled players to save a game using one interpreter and restore it with another. Use of the format is strongly recommended in Graham Nelson's Z-machine standards document, but not obligatory. Most modern Z-machine interpreters have the ability to save Quetzal files.

Glulx is a 32-bit portable virtual machine intended for writing and playing interactive fiction. It was designed by Andrew Plotkin to relieve some of the restrictions in the venerable Z-machine format. For example, the Z-machine provides native support for 16-bit integers, while Glulx natively supports 32-bit integers.

<span class="mw-page-title-main">Andrew Plotkin</span> Interactive fiction programmer and writer

Andrew Plotkin, also known as Zarf, is a central figure in the modern interactive fiction (IF) community. Having both written a number of award-winning games and developed a range of new file formats, interpreters, and other utilities for the design, production, and running of IF games, Plotkin is widely recognised for both his creative and his technical contributions to the homebrew IF scene.

The XYZZY Awards are the annual awards given to works of interactive fiction, serving a similar role to the Academy Awards for film. The awards were inaugurated in 1997 by Eileen Mullin, the editor of XYZZYnews. Any game released during the year prior to the award ceremony is eligible for nomination to receive an award. The decision process takes place in two stages: members of the interactive fiction community nominate works within specific categories and sufficiently supported nominations become finalists within those categories. Community members then vote among the finalists, and the game receiving a plurality of votes is given the award in an online ceremony.

Blorb is a package format for interactive fiction games. Many such games incorporate resources such as sound effects, music, or pictures. Blorb's purpose is to bind these together into one file. The format was devised by Andrew Plotkin and is used in both the Z-machine and Glulx virtual machines, as well as by the Glk library.

<i>Slouching Towards Bedlam</i> 2003 video game

Slouching Towards Bedlam is an interactive fiction game that won the first place in the 2003 Interactive Fiction Competition. It is a collaboration between American authors Daniel Ravipinto and Star Foster. Slouching Towards Bedlam was finalist for eight 2003 XYZZY Awards, winning four: Best Game, Setting, Story, and Individual NPC. The game takes place in a steampunk Victorian era setting. Its title is inspired by a line from "The Second Coming", a poem by W. B. Yeats.

<i>Curses</i> (video game) 1993 video game

Curses is an interactive fiction computer game created by Graham Nelson in 1993. Appearing in the beginning of the non-commercial era of interactive fiction, it is considered one of the milestones of the genre.

<span class="mw-page-title-main">Emily Short</span> Interactive fiction writer

Emily Short is an interactive fiction (IF) writer.

Jon Ingold is a British author of interactive fiction and co-founder of inkle, where he co-directed and co-wrote 80 Days, and wrote Heaven's Vault and Overboard!. His interactive fiction has frequently been nominated for XYZZY Awards and has won on multiple occasions, including Best Game, Best Story and Best Setting awards for All Roads in 2001. Ingold's works are notable for their attention to the levels of knowledge that the player and player character have of the in-game situation, with the effect often depending on a player who understands more than the character or vice versa. Ingold has also written a number of plays, short stories and novels.

<i>Anchorhead</i> 1998 video game

Anchorhead is a Lovecraftian horror interactive fiction game, originally written and published by Michael S. Gentry in 1998. The game is heavily inspired by the works and writing style of H.P. Lovecraft, particularly the Cthulhu mythos.

<i>Jigsaw</i> (video game) 1995 interactive fiction computer game

Jigsaw is an interactive fiction (IF) game, written by Graham Nelson in 1995.

Shade is a psychological horror interactive fiction game written and published by Andrew Plotkin in 2000.

The history of releases of the Inform programming language for interactive fiction dates back to 1993. The Inform 6 compiler and Library have always been separately maintained and released.

The Interactive Fiction Technology Foundation (IFTF) is a nonprofit charitable organization founded in June 2016 working to maintain, improve, and preserve tools and services used in the creation and distribution of interactive fiction.

References

  1. "Release notes for Inform v10.1.0 and v10.1.1". github.com. Retrieved August 26, 2022.
  2. "Inform 7 v10.1.0 is now open-source". April 28, 2022. Retrieved April 28, 2022.
  3. 1 2 "The SPAG Interview: Graham Nelson and Emily Short on Inform 7". SPAG #44. The Society for the Promotion of Adventure Games. April 30, 2006. Retrieved November 7, 2015.
  4. "Release v6.33". GitHub . Retrieved February 26, 2015.
  5. 1 2 3 Plotkin, Andrew (April 17, 2019). "What is ZIL anyway?". Zarf. I6 follows C very closely, in this example.
  6. "The Inform Designer's Manual, v4, Contents". www.inform-fiction.org.
  7. Turner, Anson (March 14, 2002). "Inform Platypus release 4" . Retrieved January 4, 2007.
  8. Alan De Smet (March 14, 2006). "Curses (Interactive Fiction Reviews)" . Retrieved November 1, 2006.
  9. Of the 1219 games rated at "Interactive Fiction Ratings", Anchorhead was the highest rated game as of January 4, 2007. ( "IF Rating Stats". Archived from the original on May 11, 2008. Retrieved January 4, 2007.)
  10. Montfort, Nick; Stuart Moulthrop (August 2003). "Face It, Tiger, You Just Hit the Jackpot: Reading and Playing Cadre's Varicella". Archived from the original (PDF) on November 6, 2009. Retrieved November 6, 2009. Published as Montfort, Nick; Moulthrop, Stuart (August 2003). "Face It, Tiger, You Just Hit the Jackpot: Reading and Playing Cadre's Varicella". Fine Art Online. Mississippi State University. 17 (8). Archived from the original on October 13, 2007.
  11. "Photopia is a short story, Varicella is a world". L’avventura è l’avventura. January 2002. Retrieved January 4, 2007.
  12. "Download". Inform 7. Archived from the original on February 27, 2015. Retrieved March 15, 2016.
  13. 1 2 Graham Nelson (April 30, 2006). "Inform 7: Public Beta". Newsgroup:  rec.arts.int-fiction. Usenet:   1146419288.944486.157150@i39g2000cwa.googlegroups.com . Retrieved January 4, 2007.
  14. Emily Short (February 18, 2007). "Inform 7: Possible future developments". Newsgroup:  rec.arts.int-fiction. Usenet:   1169164007.311210.64650@a75g2000cwd.googlegroups.com . Retrieved March 30, 2007. Also archived at Short, Emily; Graham Nelson (January 2007). "Inform 7: Possible future developments". Archived from the original on September 5, 2008. Retrieved March 31, 2007.
  15. Nelson, Graham (January 13, 2023). "Inform 7 Version History". GitHub .
  16. 1 2 Graham Nelson (March 30, 2007). "Re: "Inform 7" is the wrong name". Newsgroup:  rec.arts.int-fiction. Usenet:   1175250734.801804.199340@y80g2000hsf.googlegroups.com . Retrieved March 30, 2007.
  17. "GNOME Inform 7 SourceForge project page". February 2008. Now moved to GitHub at Chimento, Philip (December 27, 2022). "ptomato/inform7-ide". GitHub .
  18. "10.1. Gases". ganelson.github.io.
  19. "Structure of the Inform 7 compiler". ganelson.github.io.
  20. "Mystery House Taken Over". Archived from the original on May 4, 2006. Retrieved January 4, 2007.
  21. Emily Short (at the request of Graham Nelson) (March 1, 2006). "Three games in Inform 7". Newsgroup:  rec.games.int-fiction. Usenet:   1141259182.610660.185360@p10g2000cwp.googlegroups.com . Retrieved January 4, 2007.
  22. Short, Emily (2006). "Bronze" . Retrieved January 4, 2007.
  23. Short, Emily (2006). "Damnatio Memoriae" . Retrieved January 4, 2007.
  24. Nelson, Graham (2005). "The Reliques of Tolti-Aph" . Retrieved January 4, 2007.
  25. Short, Emily (2006). "Bronze". Archived from the original on February 10, 2007. Retrieved January 4, 2007.
  26. Short, Emily (2006). "Damnatio Memoriae". Archived from the original on December 12, 2006. Retrieved January 4, 2007.
  27. Nelson, Graham (2005). "The Reliques of Tolti-Aph". Archived from the original on February 6, 2007. Retrieved January 4, 2007.
  28. "12th Annual Interactive Fiction Competition". 2006. Retrieved May 12, 2007.
  29. "XYZZY Awards: Winning Games of 2006". Archived from the original on May 15, 2007. Retrieved May 12, 2007.
  30. "ACM Hypertext 2007 conference slides (PDF)" (PDF).
  31. "Cambridge University lecture slides".
  32. "Download the Inform Designer's Manual". April 1, 2006. Retrieved January 4, 2007.
  33. "About the Inform Designer's Manual". April 1, 2006. Retrieved January 4, 2007.
  34. "Download the Inform Beginner's Guide". April 1, 2006. Retrieved January 4, 2007.Firth, Roger; Sonja Kesserich (August 2004). "The Inform Beginner's Guide: Third Edition" (PDF). Retrieved January 4, 2007.
  35. Graham Nelson (April 10, 2006). "Natural Language, Semantic Analysis, and Interactive Fiction" (PDF). Archived from the original (PDF) on March 14, 2018. Retrieved January 4, 2007.{{cite journal}}: Cite journal requires |journal= (help)