Roger Firth's IF pages

Home

Inform 6: Frequently Asked Questions

Email
Back up

Setting
the scene

So, what is Inform?
Where do I begin?
How is Inform related to Infocom?
When did Inform appear?  UPDATED
What's the best way to learn Inform?
Does anybody teach Inform?
How popular is Inform?
Where are all these games you mention?
Can I play Inform games on my handheld?
I've seen Inform games played on the web... can I do that too?
I'm blind -- is there any way I can play Inform games?

Preparing
to program

What do the various file extensions like 'Z5' signify?
Where should I store the various Inform files?
How do I compile on a PC running XP?
How do I compile on a Mac running OS X?
What can I expect when I try to compile my program?
Why does my game start off so big?
How do I change the compiler settings?
Does it matter how I structure my game file?
Does it matter how I organize my object definitions?
Does it matter how I lay out my code?
How does a game begin?
How does a game end?
Is there a good Integrated Development Environment?
How do I use Modules?
Can I write a game in French?

Learning
the lingo

When are upper and lower case differentiated?
When do I use commas (,) and semicolons (;)?
When do I use apostrophes (') and quotes (")?
What does a string "..." as a statement by itself mean?
What are the circumflex (^) and tilde (~) characters used for?
How do I concatenate strings?
What's the difference between MyRoutine and MyRoutine()?
What's the difference between a Directive and a Statement?
What's the difference between Include and #Include?

Dabbling
in data

How do constants and variables differ?
What can be stored in a variable?
What about fractions and decimals?
How do global and local variables differ?
What does an array provide?
What's an 'unsigned' number?
What exactly are 'true' and 'false'?
How do I return data values from a routine?
Where do 'random' numbers come from?

Operating
on objects

Is a 'room' a special sort of object?
How does Inform distinguish nouns from adjectives?
When should I use scenery/static/concealed attributes?
How can I tell that one object is 'within' another?
How do I get rid of an object in mid-game?
What are the various 'description' properties for?
How are plural objects managed?
Why do my pronouns keep changing?
How do I define a new object property?
How do I use my new object property?
Do I need to understand private properties?
How do I define a new object attribute?
How can I use individual properties as attributes?
What does class inheritance do for me?
When is a Dynamic class useful?
How can I reconfigure the Player Character (PC)?
Why does my game crash when I use move in an objectloop?
Can I loop through all of an object's dependents?

Verbal
versatility

How do I define a new verb?
When should I use before/react_before properties?
Where do life and orders fit in?
Surely the syntax of these properties is a little odd?
How do I change an existing verb?
Can I remove an existing verb?
Why are actions labelled Group 1, Group 2 or Group 3?
How do I detect the player entering a room, or trying to leave?
Where have I been?
How can I parse a number?
Which action is triggered by each verb?
Can I distinguish SIT ON BED from LIE ON BED?
Which verb did the player use?
How do 'meta' verbs work?

Bothered
by bugs

What can I expect when I run my first program?
Help! What's wrong with my code?
Why do I get spurious 0s and 1s in my printout?
What's the difference between Squared(x) and (Squared) x?
How can I make the debugging process easier?
Why does my game mention "a apple"?
What were Vile Zero Errors From Hell?
I've found an Inform problem -- what should I do?

History and
hereafter

Where's this Archive that's mentioned so often?
Glulx? What's that all about?
Who, or what, is Platypus?

Worldly
woes

(advanced)

How can I get rid of those damn walls?
How can I embed object details in a room's description?
Is it possible to disable TAKE ALL?
Can I avoid printing "(which is empty)" after a container?
Can I avoid printing "(the objectname)" after certain commands?
How does the list-maker work?
Could you explain what "in scope" means?
What's the easiest way to shine light everywhere?
Why is water so difficult to model?
How does everybody know where the north is?

Inside
information

(advanced)

What's a Library entry point?
Where are all those Library files used?
Can I use Inform without the standard Library files?
What's all this stuff about message-passing?
What actually happens at the start and end of each turn?
What's the difference between a Daemon and a Timer?
What's the difference between a Daemon and an each_turn property?
Why don't my daemons run at the start of a game?
How do I compile a game as Version 3?
Can I combine a game and an interpreter in a single file?
Could you explain how character sets are handled?
Little-used features: what's a low string?
Little-used features: what's an abbreviation?
Little-used features: what's a fake action?
How is the parse array structured?
How are the standard print rules implemented?

Tips and
techniques

(advanced)

What's the associativity of ~/~~?
How do I write an XOR function?
Can I use expressions in <...>?
Is there a Library routine to print direction names?
Can I introduce a short time delay?
Why can't I address "Dr.Jekyll" or "Mr.Hyde"?
How do I right-align printed numbers?
Can an 'achieved task' have a negative score?
Are the points awarded by a 'scored' object adjustable?
ChooseObjects() is messing up TAKE ALL. What can I do?
Can ChooseObjects() tell if it's evaluating noun or second?
How can I change the size of a string or table array?
Can I prompt the player to key in some information?
How do I put single characters into the dictionary?
Why doesn't 'my' work in a name property?
How can the player input numbers bigger than 10000?  NEW

You're reading a set of answers to Frequently Asked Questions about the Inform 6 programming language, intended especially to help those who are novices in this arena. Unless you are planning to write a piece of Interactive Fiction -- a text adventure game -- using Inform, you might as well go right to the Ifaq for more general assistance.

Note that the questions here are all about Inform 6. There is almost nothing in these pages about Inform 7 -- Graham's radical new approach to IF authorship.

This FAQ aims to address topics which commonly cause confusion among newcomers. However, you shouldn't set your expectations too high; it isn't an Inform tutorial, it pre-supposes that you've got a copy of the Inform Designer's Manual and it assumes at least a little knowledge of computer programming. Very rarely will these answers give you the full story. Generally, they're designed as introductory tasters, providing just enough information to illustrate the general principles, and to point you towards the appropriate material in the definitive Designer's Manual.

In addition to the online format, the FAQ can be downloaded as a 1Mb zipped PDF document; I'm deeply grateful to Sonja Kesserich for making this possible, and for her invaluable collaborative enthusiasm in the whole enterprise.

Many people helped in the creation of this document, sometimes unwittingly; my thanks for all of the assistance. The Inform FAQ is copyright of and maintained by Roger Firth, who is always pleased to receive your comments and contributions. First posted in July 2001 and last updated: 24 May 2006.

There are other good sources: make sure that you know about the Inform Beginner's Guide (available, like the Designer's Manual, from the Inform website), and about these more general FAQ pages:

  • The Ifaq gives a very brief overview: Interactive Fiction (IF) from ten thousand feet;
  • The ifwiki FAQ covers much the same ground, but in greater depth;
  • The FAQ for the rec.arts.int-fiction (RAIF) Usenet newsgroup covers the authorship of IF in many systems, not just Inform.

Also, these excellent Q&A sites may resolve your more detailed or sophisticated Inform concerns:

Finally, there's a very old Inform FAQ which relates to Inform 5 and DM2. None of the downloads work and some of the information is unreliable, life having moved on since 1995; tread carefully here.