• Source language modelled closely on a subset of English, and usually readable as such
• A single sentence grammar handles declarations of the initial situation ("The cat is on the mat"), tests of conditions ("if the cat is on the mat...") and instructions for change during play ("now the cat is on the mat")
• Generalisations have different levels of certainty: "a door is usually open", "a vehicle is sometimes locked"
• Proper nouns ("Henry") and common nouns ("a man")
• Verbs have four tenses: "if the cat is on the mat", "if the cat was on the mat" (at the time when the current action began), "if the cat has been on the mat" (ever), "if the cat had been on the mat" (at some time before the current action)
• WIde range of determiners - "at least five", "almost all", "every", "some", "not more than three" - can all be tested ("if most people are in lighted rooms")
• Adjectives imply comparatives and superlatives (thus defining "A container is large if its carrying capacity is 20 or more" automatically defines "larger" and "largest")
Syntax
• Punctuation follows normal English conventions, e.g., a full stop at the end of quoted text is read as the end of a sentence if the following word is capitalised
• Variable text is represented using square brackets: thus "[The intruder] sits down at the table, growling" causes the name of the actual intruder to be substituted when this text is printed
• Further textual substitution facilities mean that complex changing messages seldom require any explicit programming
Values
• Several standard kinds of value built in: "number", "text", "time"
• New kinds of value easy to create, with named values ("Brightness is a kind of value. The brightnesses are guttering, weak, radiant and blazing.")
• Checking both at translation time and in play that kinds of value match, so that (for instance) a number cannot be used where a time of day is needed
• New numerical kinds of value can be created with their own notations ("10kg specifies a weight", "16:9 specifies an aspect ratio")
• Dimensional checking ensures that different units (say weights and heights) are not confused or added together, while allowing them to be multiplied if we specify this as sensible ("A length times a length specifies an area")
• All kinds of value are automatically interactive: they can be printed during play, and recognised when typed by the player, always in the same form used in the source text
• Simple to find extremal things ("the heaviest container") and totals ("the total weight of things on the platform")
Tables
• Non-textual data is typed up as Tables imitating the typesetting of printed books
• Tables have multiple columns, each of which can hold any kind of value
• Entries or rows can be added or deleted during play
• Easy to iterate through tables, look up corresponding values, and perform other forms of search without explicit coding
• Tables can be used to express people's responses to conversational gambits
• Tables can concisely define numerous things or values simultaneously
Understanding
• The parsing (”understanding”) of the player's commands during play is based directly on the actions, nouns, values, and situations created in the source text
• Standard grammar of commands easily changed or extended
• Scope of noun phrases is flexible
• Forms of commands can be limited to particular circumstances or given scenes
• Certain forms of commands can be recognised as "mistakes", with suitable responses
Appearance of Game
• Command prompt and status line fully customisable
• Pop-up quotation boxes supported
• Extensions supplied make it easy to provide full-screen menu sets
Extensions
• Supports the inclusion of extension sets of rules which can be shared between writers, or published: Inform's equivalent of "plug-ins"
• Extensions identified not by filename but by title and authorship, e.g. "Locksmith by Emily Short"
• Version numbers automatically checked, making it easy to specify that (say) v3 or later is required
• Extensions can require the presence of other extensions
• Extensions have access to lower-level language features, and can interface with (or include) Inform 6 code
• Extensions can include their own documentation, and their own examples, automatically added to Inform’s documentation panel as they are installed