1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-02 23:14:57 +03:00
inform7/notes/release/5-1.md
2022-08-08 08:59:55 +01:00

42 KiB

Release notes for Inform v5.1 (build 5G67)

This release was made on 10 November 2007, before Inform was open-sourced. At that time versions of Inform were identified by build codes in the form NLNN.

This is part of the historical archive of release notes.

Overview

This build presents substantially richer support for handling text: for the first time, arbitrary and manipulable strings of text are first-class values in Inform. Substantial internal reforms, notably a new implementation of the type-checker (now the third such), lead also to other improvements: notably the ability to store and play back entire actions, and a form of boolean type for the first time - "truth state". Finally, Inform is now available for three new operating systems: Mac OS X Leopard (10.5), and Fedora and Ubuntu Linux. We welcome Philip Chimento to the Inform team as the author of the Gnome user interface for Linux.

Language

Indexed Text

  • A new kind of value, "indexed text", exists to hold text which can be internally examined or changed. Ordinary text values are automatically converted to indexed text format when necessary. For instance,
    	if character number 1 in "[score]" is "7", ...
    
    implicitly converts the text of the current score to indexed form, allowing it to be looked at character-by-character, and then examines the first character: so the test passes if the first digit of the score is a 7. Memory is dynamically allocated to allow for such manipulations in a way transparent to the user (and on the Glulx virtual machine 3.1.0 or better, Inform story files can allocate arbitrarily large memory heaps). See the new Chapter 19, "Advanced Text", in the documentation.
  • Indexed text can be accessed by character, word, line or paragraph, with further options to allow for punctuation; and we can search text to see if it contains any other text, and if so, how many times.
  • Moreover, indexed texts can be matched against regular expressions, with replacement also possible. For instance: if V is indexed text, then
    	replace the regular expression "\d+" in V with "roughly \0"
    
    inserts the word "roughly" in front of any number in V. The regular expression language supported by Inform is essentially that of Perl (once multiline mode, a Perl eccentricity, and hooks to embedded Perl code have been removed) and Inform's algorithm has been verified against Perl's own compliance tests: see the notes in section 19.6 for details.
  • A particularly interesting text to manipulate is the command most recently typed by the player. Inform stores such text in a kind of value called a "snippet", and - like "text" - this automatically converts to indexed text when necessary. Moreover, rules in the "reading a command" activity are allowed to rewrite the text and reparse the command - for instance,
    	After reading a command:
    		let T be indexed text;
    		let T be the player's command;
    		replace the text "\p" in T with "";
    		change the text of the player's command to T.
    
    removes any punctuation characters from what the player has typed.
  • Indexed text table columns can be written to, and read in from, external files.

Stored Action

  • A new kind of value, "stored action", holds actions - not action names, but fully-specified actions, including the information about who does what and with what. (The default value is the player waiting.) If V is any value of this kind, then
    	try V
    	try silently V
    	silently try V
    
    all work in the obvious way. The phrase
    	current action
    
    returns the action currently under way. Stored actions can do anything that actions can do: in particular, they remember, if necessary, the exact wording of the player's command at the time they were stored - so that actions like "looking up 'x100' in the code book" can be stored and tried later on. Stored actions can be used in "let" variables, in table columns, in global variables, and also in properties. See the new section 12.20 in "Writing with Inform".
  • To make an explicit stored action, we use the form of words "action of ...": for example,
    	The best idea yet is a stored action that varies.
    	The best idea yet is the action of pushing the button.
    
  • When making comparisons, we can of course compare any two stored action values:
    	let C be the current action;
    	if C is the action of pushing the button, ...
    
    Although "action of ..." specifies an exact action, we can omit this if we want to write a vague description of an action instead - but only when writing it in a condition:
    	if C is taking something, ...
    	if C is doing something to the lever, ...
    
    (If we had written
    	if C is the action of taking something, ...
    
    Inform would have thrown up a Problem, because "taking something" is not a single, definite action, so cannot be a stored action.)
  • The constituent parts of a stored action can be accessed with the phrases:
    	action-name part of S
    	noun part of S
    	second noun part of S
    	actor part of S
    
  • As a convenient abbreviation for testing these, the condition
    	S involves X
    
    is true if the object X appears as any of the noun, second noun or actor in S, and false otherwise.
  • The "try" and "action of" constructions are now allowed to specify explicit text in place of a topic in actions such as asking. (Beginners to Inform often think this must be possible, but up to now it hasn't been, because of the difference between a snippet and a text, etc.) For instance,
    	Instead of asking Biggles about "German flying machines":
    		try asking Biggles about "aircraft".
    
  • The kind of value "action-name", used to denote not a complete action but simply what form of action it is ("taking", "throwing it at", etc.) can now be said for the first time.
  • The premiss for a rule about actions can now make use of variables which exist only inside action rules: for instance,
    	Check an actor waving when the noun is not held by the actor: ...
    
    which was previously not allowed because the second mention of "the actor" referred to an action variable which, in a strict reading of the Inform syntax, existed only inside the rule (i.e., after the colon). This seemed an unnatural restriction.
  • The change log for build 4U65 claimed that:
    	the can't go through concealed doors rule has been renamed the
    	can't go through undescribed doors rule.
    
    This turns out to have been completely untrue. We meant to, but forgot. The name change has now been effected. (For the reason why, see 4U65.)
  • Lastly, either a bug fix or a redefinition, according to taste: an action description using "... in ..." refers to the room where the action is to happen; up to now this has always meant the room where the player is, but that went contrary to the principle that actions ought to treat people equally. "... in ..." clauses now refer to the room which is the actor's location. Thus
    	Instead of an actor going east in the Vast Nothingness, ...
    
    now has effect if the actor tries this in the V. N., not if the player happens to be there at a time when the actor (who might be anywhere) tries going east. This sounds a complicated change, but it's clearly much more logical, and we doubt if anyone relied on the old behaviour.

Other Changes to Do With Kinds of Value

  • A new kind of value, "truth state", represents one of two possible values: the constants "true" and "false". (By default, truth state variables and properties are false.) We can convert any condition to a truth state thus:
    	let victory be whether or not all the treasures are in the cabinet;
    
    We can then examine a truth state by comparing it against true or false:
    	if victory is true, ...
    
    In fact, this kind of value is not new, but is merely coming out into the open. If we try to write (say)
    	To decide what truth state is time is short: ...
    
    then Inform will tell us to rewrite it in the more traditional form:
    	To decide if time is short: ...
    
    A phrase to decide if something-or-other is exactly the same thing as a phrase to decide a truth state, and indeed, if we want to then we can use "decide on T", where T is a truth state, in its definition. For instance:
    	To decide if time is short:
    		if the time of day is after 10 PM, decide on true;
    		...
    		decide on whether or not Jennifer is hurried.
    
    "Decide on true" is exactly equivalent to the more normally used "decide yes", and of course it is optional. The last line is more interesting since it effectively delegates the answer to another condition.
  • The kind of value "object-based-rulebook" has been withdrawn: instead, such a value is now called an "object-based rulebook" and is a special case of a "rulebook". (The double hyphen was generally found to be clumsy, and often led to mistakes.)
  • The deprecated kind of value "string-of-text", which behaved identically to "text" in recent builds, has been withdrawn. It was mentioned in one example ("Panache") through a historical accident, but was otherwise undocumented.
  • A "let" variable can now optionally be created by giving its kind of value rather than its initial value - the initial value is then the default value for that kind. For instance,
    	let T be an indexed text;
    
    creates a "let" variable called "T" to hold indexed text, and which is initially holding the blank text "".
  • A table column name can now optionally give its kind of value in brackets. Thus "darts tally (a number)" would create a column called "darts tally" whose contents were required to be numbers.
  • A phrase to decide a value is now checked to make sure that doesn't try to return a type which is not a value (something which typically produced problem messages in earlier builds, too, but less helpful ones).
  • Where a value property is declared for one kind of object as holding a value of kind of value X, and for another as holding kind of value Y, X and Y now have to agree: previously they were allowed to differ as long as they were each kinds of object, but this was not quite type-safe, and led to subtle bugs.
  • In previous builds of Inform, values of units had to be positive or zero: thus defining
    	An elevation is a kind of value. 100 cubits specifies an elevation.
    
    creates a kind of value where -10 cubits, say, would not be a legal expression. Owing to a bug, however, no problem message was produced, and the minus sign was simply ignored - the value "-10 cubits" was read as if it were "10 cubits". This bug has been fixed, and a new convention adopted: if the initial specification of the unit is negative, then negative values are permitted, and otherwise not. Thus:
    	An elevation is a kind of value. -100 cubits specifies an elevation.
    
    means that (say) "6 cubits" and "-3 cubits" are both legal.
  • When U is a numerical value - a number or a unit, that is - the phrase "random U from X to Y" now gives truer results for very large ranges in the Glulx virtual machine.
  • Bug fixed whereby "random U from X to Y" would sometimes seed the random number generator as a side-effect when X was greater than Y. This is now a symmetrical phrase - "a random number from 5 to 2" now has the same effect as "a random number from 2 to 5". (The phrase "seed the random-number generator with..." is the proper way to seed the RNG.)
  • If U is a unit, the phrases "random U", "U after X" and "U before X" have been withdrawn - these don't really make sense for unbounded ranges. (What is a random height? It's a question which can only be answered in context - a random height for buildings is quite unlike a random height for people.)
  • Problem message added to catch literal numbers (and literal units) which are too numerically large to fit into the Z-machine: for instance,
    	An RGB value is a kind of value. 255-255-255 specifies an RGB value.
    	Scarlet is an RGB value which varies. Scarlet is 255-0-0.
    
    ...is fine in projects compiled for Glulx, but would overflow the 16-bit word size on the Z-machine.
  • Bug fixed whereby nameless properties ("conditions" - not in the sense of "if", but in the sense of something being in good or bad condition, say) specified for kinds but only at the "usually" level of certainty would sometimes have such sentences ignored.
  • Problem message added for unit specifications which overlap or make ambiguous existing ways to write constant kinds of value; for instance,
    	"250" specifies a weight.
    
    clearly clashes with Inform's existing notation for text.
  • Problem message added to catch the case of multiple initialisations of the same variable, for instance,
    	Foobar is a number which varies. Foobar is 1. Foobar is 2.
    
  • Bug fixed whereby no problem was detected if a property required to hold one kind of object as a value (for instance, a property holding a room) was initialised by an assertion with another kind of object altogether (for instance, a container).
  • Bug fixed whereby spurious typechecking problems would be produced if the same kind of value was used both as a self-named property of one kind of thing, and also as the value of other-named properties of other kinds.
  • Bug fixed whereby conditions used for the start and end of a scene would not always be fully typechecked, if it appeared at least syntactically valid. For instance,
    	Fairytale Wedding begins when the player is kissing the frog.
    
    looks superficially right, but in fact involves comparing an object (the player) with an action (kissing the frog) - something we may one day legalise in Inform, but which at present should be rejected. In builds before this one, it compiled but to a condition which was always false.
  • A number of subtle bugs have been fixed in handling ambiguous multiple-phrase text; if a phrase can be read as A or B, then A wins if
    • it has more fixed words;
    • they have the same number of fixed words, but A has more tokens;
    • taking fixed words alone, A is lexicographically earlier;
    • A is a subschema of B in the sense that each value of a token in B can be coerced to the corresponding kind of value in A;
    • A was created earlier than B in the source text;
    • fixed words of A occur earlier than B in the actual text parsed. In practice these changes cured some bugs, but did not change the interpretation of any text in the examples, and we expect they will probably not be noticed as changes by users. The final rule is notable for making phrases "right associative" when iterated, so for instance
    	two minutes before three minutes before 12:00 AM
    
    is read as
    	two minutes before (three minutes before 12:00 AM)
    
    rather than
    	(two minutes before three minutes) before 12:00 AM
    
    and thus evaluates to 11:55 PM, not 11:59 PM.

Miscellaneous Other Changes

  • In order to reduce namespace clashes, a fairly significant change has been made to the way Inform reads noun phrases in the source text. Objects can, of course, be referred to using abbreviated names: for instance, if we write
    	The Great Hall of Infinity is a room.
    
    then we can also write
    	The Panjandrum is a man in the Hall.
    
    where "Hall" is a read as referring to the Great Hall of Infinity. This convention of course remains. However, the same is no longer allowed with names of kinds. Thus:
    	A Scrabble piece is a kind of thing. The Q is a piece.
    
    will no longer work: the second assertion must be written out in full as
    	The Q is a Scrabble piece.
    
    This led to tiny changes in six of the Examples (and detected a typo in a seventh), but in all cases the change was easily made and the result more legible or no worse than the original, so we hope that users will not find this change to the rules too inconvenient. The point of it is so that text such as:
    	Beautiful scenery is a kind of thing. A wall is a kind of thing.
    	A wall is usually scenery.
    
    will now work: previously the "scenery" in "A wall is usually scenery" was taken as referring to the "beautiful scenery" kind, not the built-in "scenery" property. (And so on for many other cases.)
  • An ambiguity has been removed from the syntax for actions. The convention when indicating an action by a character other than the player is that the full form reads like so:
    	Miss Hodges trying taking the lime
    
    Inform, however, allows the usually redundant word "trying" to be omitted where this leads to no ambiguity. The change is that, for safety's sake, Inform now forbids this abbreviation where the object's name includes a participle (or indeed any word ending in "...ing"). This prevents, for instance,
    	Mr Geoffrey Taking
    
    from being read as an action rather than a noun phrase, or (a case which actually arose for one of our users)
    	newspaper cutting
    
    being read as the newspaper itself doing some cutting.
  • The accessibility rules have had one anomalous case removed. Previously, an object in another room was considered inaccessible, yet an object out of play was not. The only reason this rarely caused trouble was that actions involving such objects were seldom generated, because the parser's scope rules would prevent it from recognising commands referring to them. But it could occasionally happen, if a command such as TAKE ALL fired off a run of actions, and the outcome of an earlier take caused the object from a later take to be moved out of play; and with stored actions this sort of thing becomes much more likely to happen. At any rate the anomaly has been removed, but this had the consequence that a few examples which used physical things to represent abstract concepts went wrong. For instance,
    	An emotion is a kind of thing. Envy and gratitude are emotions.
    
    is likely to produce a world in which "envy" and "gratitude" both exist as physical things but are permanently out of play. If we then write
    	Understand "experience [any emotion]" as experiencing.
    
    then commands like EXPERIENCE ENVY will be recognised, but what happens next depends on how the action is defined. If like so:
    	Experiencing is an action applying to one thing.
    
    then I7 will now strictly apply the rule that the thing must be touchable, that is, with no physical barriers between it and the player: which means EXPERIENCE ENVY will now fail accessibility. To get around this, define
    	Experiencing is an action applying to one visible thing.
    
    instead: this weakens the requirement to the point where being allowed to refer to the object is enough. ("Visible" here means visible in the sense of parser scoping rules, not with one's own eyes: they are almost always the same thing, but "[any emotion]" overrode that.)
  • Another change which will probably make little difference, but which clears up an ambiguity: given two descriptions in the form (adjectives) plus (kind), which are of different kinds, and where Inform cannot prove that either is necessarily a special case of the other, then the one with more adjectives is now considered more specific - and this affects rule ordering. So, for instance,
    	Instead of examining an open door: ... (A)
    	Instead of examining a vehicle: ... (B)
    
    rule (A) is now considered more specific than (B), whereas in previous builds they were equally specific and so would appear in rulebooks in source text order. (This change made no difference to the behaviour of any of the examples, or any other of our test cases: it's pretty esoteric, but we are trying to reduce the number of ways source text ordering is used, where sensible.)
  • We can now give unusual or alternative names for the understanding of either/or properties, when these are used to describe objects. For instance, if we have:
    	The box is a container which is carried by the player.
    	It is openable and closed.
    	Understand the open property as referring to the box.
    
    then EXAMINE OPEN BOX will work only if the box is open, and so forth. But we can now add:
    	Understand "opened" as open. Understand "shut/sealed" or "tightly
    	sealed" as closed.
    
    and now EXAMINE TIGHTLY SEALED BOX, etc., will work only when the box is closed.
  • "now T is X", to change the value of a table entry T to a value X, now works as might be expected. (This case seems to have been overlooked before: it wasn't intentionally left out of the design, and consistency clearly requires it.)
  • Previous restrictions on the use of "let" names, phrase parameters and table entries in text being written or appended to external files have been lifted. Thus:
    	The currently erased jotter is an object that varies.
    	To erase (pad - a jotter):
    		now the currently erased jotter is the pad;
    		write "[heading of the currently erased jotter][paragraph break]"
    			to the text file of the pad.
    
    can now be done more simply thus:
    	To erase (pad - a jotter):
    		now the currently erased jotter is the pad;
    		write "[heading of the pad][paragraph break]" to the text file of the pad.
    
    This affects both "write ... to ..." and "append ... to ...".
  • The location of external files written or read by Glulx story files now uses the same convention on both OS X and Windows. (In 4X60, Inform for OS X differed from this.) Such ".glkdata" files are now always stored in the same folder as the project "Whatever.inform", unless the user has created a "Files" subfolder of a "Whatever Materials" folder, in which case that will be used as the location.
  • The Kinds index now presents the initial state of either/or properties associated with kinds in a more legible way, avoiding double negatives. Thus
    	Not normally portable not fixed in place.
    
    (which admittedly looks worse without the italic) is now written
    	Usually fixed in place not portable.
    
  • The SHOWME testing command is now more detailed, and shows what properties an item or room currently possesses. For instance:
    	>showme guide
    	Guide to Desert Fauna - book
    	location: in Death Valley
    	unlit; inedible; opaque; portable; singular-named; improper-named
    	printed name: Guide to Desert Fauna
    	printed plural name: books
    	contents: Table of Critters
    
    (This brings it roughly into line with the old I6 verb SHOWOBJ, but has much more legible output, since property values can be printed better.)
  • The syntax of phrases to access tables has tended to be annoyingly picky about prepositions: it has been liberalised a little, so that one can now write "from T" equivalently to "in T" in phrases like
    	choose a random row from the Table of Soft Fruit
    
    Similarly, in the phrases with the form "choose ... row ...", either the definite or indefinite article can be used, or omitted altogether: there will be times when any of these may seem clearest. So any of these (for instance) will be allowed:
    	choose a random row from T
    	choose the row with citrus entry of 5 from T
    	choose blank row from T
    
  • Use options can now specify numerical values, along with default values which the source text can choose to raise: this should help extension-writers who want to provide "enough" storage for the user's needs, since the user can now use such an option to tell the extension exactly how much he does need.
  • Bibliographic data text normally doesn't recognise text substitutions, for obvious reasons: it has to be literal text supplied to outside programs. (The story title, author's name, and so on.) It is now allowed to contain just one text substitution: ['] for a literal apostrophe. (This allows titles like "Summer of [']69" to be handled properly.)
  • The previous maximum of 500 I6 inclusions and use options used all at once in any single source text has now been removed.
  • Inform now chooses further contrasting colours for World Index maps which include more than 10 different regions, and now cycles through its colours rather than reverting to grey for subsequent regions when the shades run out.
  • Bug fixed whereby complicated descriptions involving the contents of a region would fail to work: for instance, "the number of rooms in R", where R is the name of a region, or "a random room in R", would return 0 and nothing respectively.
  • Bug fixed whereby releasing along with a custom website was not working (NI was issuing the wrong instructions to cBlorb, the packaging agent. Standard websites did work: only those with custom templates failed.)
  • Bug fixed whereby assemblies which involved properties as well as kinds would sometimes not always have those properties set, particularly if multiple assemblies took place with similar circumstances. For instance:
    	A box is a kind of container. An open box is in every room. A closed
    	box is in every room.
    
  • Bug fixed whereby a player's holdall which is a part of the player - rather than being carried or worn by the player - will now function correctly. (This was requested by someone wanting to implement "a robot or marsupial".)
  • Bug fixed whereby recent changes to table-handling caused properties of values to be wrongly read and written. (Typically a property of V would be confused with a property of the value whose numerical form at run-time was one less than V's.)
  • Bug fixed whereby route-finding (and counting shortest distances) through one-to-various relations would give wrong results, usually false claiming that no route existed.
  • Bug fixed whereby the phrase "direction of (D - door) from (R1 - room)" didn't work at all, really (it returned the I6 direction property, not the compass direction object - an elementary I6 mistake).
  • Bug fixed whereby after rules were being applied to out of world actions, in spite of the documentation's clear statement that they would not be. It is just possible that some authors might have relied on this working: to give after-effects to out of world actions, use the report rules.
  • Bug fixed whereby "change ... to ..." would sometimes cause I6 errors where the thing changed was a variable holding an object, and the value changed to was something other than an enumerated property-value constant.
  • Bug fixed whereby "if ...; otherwise if ... begin;" would cause I6 errors rather than produce a Problem message (to point out that "begin" should not be used with "otherwise if ..." clauses).
  • Bug fixed whereby placing items by referring to the currently discussed room as "here" would sometimes give strange results if (i) the current subject of discussion when the sentence is first read is not what will prove to be a room, and also (ii) the room being discussed most recently was created some time ago and other rooms had been created since then. The new interpretation of "here" should be more robust and predictable.
  • Bug fixed whereby restrictions applied to headings, such as
    	Volume 1 - not for release
    	Volume 1 - for Glulx only
    
    would be ignored (but only for Volume headings, not for headings of any other level).
  • Bug fixed whereby implications (such as "A locked thing is usually lockable.", an implication in the Standard Rules) are ignored if the thing to which they apply cannot have the property which is given as the consequence; previously, a somewhat mysterious problem message would be produced.
  • Bug fixed whereby implications would sometimes override definite statements made negatively (e.g. "A locked thing is usually openable" overriding "The safe is locked. The safe is not openable"); again, the symptom was usually a mysterious problem message.
  • Bug fixed whereby the use of a relation in an indirect clause with a value of a kind which is also used as a property, and has the same name as that property, would cause I6 errors.
  • Bug fixed whereby grammar using a newly defined token for a value belonging to a new kind of value, would cause I6 errors.
  • Bug fixed whereby giving alternatives in grammar for understanding specific times of day (e.g. 'Understand "lunch" or "lunch time" as 11:30 am.') would cause an internal error.
  • Bug fixed whereby a few malformed assertions involving impossible callings (e.g. 'X (called Y) and X has Y.') produced an internal error rather than a problem message.
  • Problem message added for attempts to create multiple objects with a single 'called' clause ('Bill and Ben are men in the Garden.').
  • Bug fixed (or, in a sense, feature added) so that "X is a backdrop which is everywhere" will now successfully create an omnipresent backdrop; previously one had to write "X is a backdrop. X is everywhere."
  • Bug fixed whereby actions sometimes continued and reported even if the carry out rules had already killed the player.
  • Bug fixed whereby 'Understand ... as a mistake' would produce the mistake reply even when the text was being addressed to another person, rather than being intended as a command by the player.
  • Bug fixed whereby tokens for understanding names which involved various-to-one relationships to other objects would not work in concert with specific additional names made using 'Understand'. For example,
    	Understand "[something related by loyalty]" as a team.
    	Understand "Glasgow Rangers" as a team.
    
    would correctly match the token, but not the additional name, which would be ignored.
  • Bug fixed whereby "now the player is X" would be read differently from "change the player to X", and would not properly change perspective.
  • Bug fixed whereby an assertion sentence setting the description of the player caused a contradiction with the default setting for this made in the Standard Rules. For instance,
    	The description of the player is "Frankly harrassed-looking."
    
    is now legal again. (It was legal in early builds of Inform, too.)
  • Slight anomaly resolved (it wasn't really a bug) in the determination of which items are concealed, using the "deciding the concealed possessions" activity: previously the activity would test items belonging to the player even though a subsequent rule would force them to be unconcealed regardless of the activity's decision - an actor can't conceal something from himself, since concealment in I7 by definition means concealment from the view of other people. Now, the activity is not asked about such items.
  • Bug fixed whereby "( -" was sometimes read as "(-", opening a passage of literal I6 code, which was unfortunate if it had actually been part of a calculation ("let X be ( -1 * count )", say).
  • Various bugs fixed to do with the use of the I6 string escape characters , @, ~, ^ in I7 source text and quoted text (for instance, these followed by digits would in some cases cause I6 compilation errors).
  • Bug fixed whereby the parser would give slightly misleading replies if pronouns other than "her" were used in commands before they had ever been set.
  • Bug fixed whereby scenery items, never mentioned in room descriptions, could nevertheless silently become pronoun values. (Thus "it" might mean the sky in a room where the sky was scenery.)
  • Bug fixed whereby the parser would reply "That noun did not make sense in this context." in response to certain scope-filtering tokens where nonsense had been typed, but without a proper paragraph break.
  • Bug fixed whereby duplicate problem messages would result from a phrase defined with alternate wordings, but also defined incorrectly. (The problems would be repeated for each possible wording.)
  • Bug fixed whereby the "Use serial comma" option did not result in a serial comma being used in clarification questions like
    	Which do you mean, the fish, the fowl, the chalk, or the cheese?
    
  • Documentation bug fixed whereby the "return to contents" links in Writing with Inform would sometimes return to the contents of the Recipe Book instead.
  • Problem message added to catch situations where the source text would require ridiculous lengths of time to parse, using Inform's normal algorithms: this is something which seems only ever to have happened to one user, through the accidental omission of lots of punctuation, but it had the effect of Inform apparently never completing compilation, which is inconvenient to recover from on some platforms.
  • Problem message added to clarify why some mixtures of actions like 'dropping the CD or inserting the CD into the jewel box' are not allowed as the premiss of a rule; and bug fixed whereby other illegal mixtures, such as 'inserting the CD into the jewel box or dropping the CD' were previously miscompiling rather than producing a problem.
  • Problem message added to help diagnose a common mistake with 'if' phrases, missing out the 'begin' at the end.
  • Problem message added to explain why sentences like
    	Understand "take [things]" as "drop [things]".
    
    are not allowed.
  • Problem message added to explain why sentences like
    	Understand "trevor, look" as looking.
    
    are not allowed.
  • Problem message to catch attempts to use "carry out", "report" or "check" rules applied to named action patterns rather than specific actions; previously these would sometimes be allowed provided that some subset of their names coincided with the name of some actual action (but with unhappy results, since the rule would end up applying to that action, which would certainly not have been what the user intended).
  • The problem message produced by sentences like
    	The coin is in the strongbox.
    
    (where "coin" is a kind of thing, so that this is too vague) has been lifted in the case of writing sentences like
    	One coin is in the strongbox.
    
    since, after all, higher multiplicities like
    	Two coins are in the strongbox.
    
    have always been allowed.
  • Problem message added for trying to define the same test name to mean two different tests.
  • Problem message added for trying to use a kind of thing to relate multiple objects to single values in single sentences. (Ideally this would work, but there are awkward implementation reasons why it doesn't, for the moment, and the problem message replaces a less polite internal error.)
  • Problem message clarified when trying to make a property which must hold an object of a given kind, when no objects of that kind exist anywhere, so that this property can never have a legal value.
  • Problem message added for contradictory indications of where something initially is, for instance,
    	Fred is in the Kitchen. Fred is in the Dining Room.
    
    (How we overlooked this obvious case in four years of testing...)
  • Problem message added for an Understand attempting to give a name to an object qualified by a relative clause or properties. (The same effect can be achieved by other means - the problem message explains how.)
  • Problem message added for an attempt to test if a vaguely described past action succeeded. (Previously these apparently compiled, but gave usually wrong answers.)
  • Problem message added to give more helpful diagnosis if an action definition incorrectly gives a past participle longer than a single word.
  • Problem message added (rather than an internal error) for using a relation which relates objects to values in a "[something related by...]" token in an 'Understand' sentence.

Documentation, examples and extensions

Examples

  • "Xot" added to demonstrate storing an erroneous command and replaying it later, as seen in Infocom's HHGttG.
  • "Terracottissima Maxima" added to demonstrate understanding an indexed text property.
  • "Fido" added to demonstrate a dog that the player is allowed to name and re-name.
  • "Pre-alpha" added to demonstrate a beta-testing command that allows the player to preface any line with a punctuation mark to show it is a comment.
  • "Blackout" added to demonstrate replacing letters in a printed name under certain circumstances.
  • "Identity Theft" added to demonstrate asking the player for a name at the start of play.
  • "Mr. Burns' Repast" added to demonstrate a fish that renames itself depending on how the player refers to it.
  • "Endurance" added to demonstrate a way of modeling time so that it depends flexibly on the actions undertaken during a turn.
  • "Uncommon Ground" tweaked to repair a couple of cosmetic flaws held over from earlier versions of the extension
  • "Panache" corrected to remove a reference to the elderly (and now withdrawn) type "string-of-text"
  • "Disenchantment Bay 12" corrected to remove a reference to the captain as "transparent", which was a holdover from a time (before the first public beta of Inform) when characters could be opaque or transparent and this quality would determine whether their possessions could be seen.
  • "Straw Into Gold" added to demonstrate a character whose name is concealed until the player guesses it.
  • "Celadon" added to demonstrate extending DROP to apply even to objects the player is carrying inside a container or on a supporter.
  • "Northstar" added to demonstrate modifying the player's command using a regular expression, so that ASK JOSH TO TAKE INVENTORY will be understood as JOSH, TAKE INVENTORY.
  • "Burning", "Gelato", "Originals", "Solitude", "Stately Gardens", "Tilt 2", and "Tilt 3" revised to make use of the new truth state kind of value.
  • "Cactus Will Outlive Us All" added to demonstrate stored actions and characters who respond when they occur.
  • "Anteaters" added to demonstrate stored actions that include topics.
  • "Bosch" added to demonstrate an alternative full score system using stored actions.
  • "Kyoto" revised to reflect the current state of the actions rules.
  • "Dinner is Served" revised to change the way closed containers are described.
  • "Chronic Hinting Syndrome" "Ferragamo Again", "Being Peter", "The Problem with Edith", and "Introduction to Juggling" revised to reflect new restrictions about acting on out-of-play objects.
  • "Broughton" revised to fix a very tiny bug in which "greeting" was not specified as a subject.
  • "Lucy" added to demonstrate redirecting the ASK command to a new topic other than the one the player typed.
  • "Fine Laid" added to demonstrate redirecting most actions from one object to another.
  • "Mirror, Mirror" revised to use indexed text rather than an external file, which means that it can be used in z-machine games as well.
  • "Actor's Studio" added to demonstrate a video camera that records actions occurring in its presence, then plays them back later.
  • "Capital City" added to demonstrate capitalized text in the status line.
  • "Rocket Man" added to demonstrate sentence- and title-casing for any to-say phrase.
  • "Rubies" added to demonstrate a scoreboard of high-scoring players.
  • "Witnessed", "Sand", "Modern Conveniences", "Hot Glass Looks Like Cold Glass", "Model Shop", "Nickel and Dimed" slightly changed to spell out kind names in full rather than use abbreviations.
  • "Situation Room" added to provide 24-hour time printing.
  • "Tamed" revised to get rid of the magician's booth being closed.
  • "Starry Void" added to demonstrate a simple case of a room whose exterior is visible from another room.
  • "The Cow Exonerated" added to demonstrate matches for starting fires, using indexed text to make the reporting more elegant.
  • "Savannah" added to demonstrate liquid used to put out fires.
  • "Slouching" added to demonstrate sitting, standing, and lying down postures for the player and other characters.
  • "Costa Rican Ornithology", "Crusoe", "Farewell", "Juggling", "Nickel and Dimed", "Money for Nothing", "Aftershock", "Channel 2" edited to make it easier to extract the generalizable portions for use in other games.
  • "Four Cheeses" edited for portability and to clean up a few clumsy phrasings due to the age of the example.
  • "Bogart" edited for portability and to remove a special-case bug.
  • "What Not To Wear" added to demonstrate a more complete clothing system combining layers with a concept of different regions of the body, for whole classes of shirts, trousers, etc.
  • "Port Royal 1" and "Port Royal 2" edited for length and clarity.

Extensions

  • "Basic Screen Effects" edited for a small bug that prevented the "show current quotation" phrase from being available under Glulx. Version advanced to 5.
  • "Glulx Entry Points" changed to treat glulx replacement command as indexed text, which means that it can be edited more flexibly or even constructed through multiple hyperlinks. Version advanced to 3.
  • "Locksmith" changed to make the "you lack a key..." message more flexible and keyed to individual objects. Version advanced to 4.
  • Minor one-line addition to the documentation of "Basic Help Menu" to clarify how to replace the enclosed menu with one of our own.

Mac OS X app

  • Mac OS 10.5 (Leopard) incompatibilities corrected; support added for QuickLook viewing of Inform projects, and for content-reflecting icons.
  • Bug fixed whereby replay and double-clicking in the skein sometimes failed to do anything.
  • Provisos such as "(for Glulx only)" are now removed from extension titles when making filenames for newly installed extensions.
  • The '+' button now works when adding Inform 6 extensions: in previous versions the only way to install a new Inform 6 extension was by dragging it to the window. Additionally, a bug has been fixed that was making it hard to add ORLib as a complete directory: in this new release it should be possible to just drag the ORLib directory to the Extensions pane and then use it by switching it on in the Settings tab of an Inform 6 project.
  • CocoaGlk 1.0.4 adopted, which includes a number of fixes:
    • Fixed an issue that could cause a crash if a text grid window ends up with a negative size
    • Fixed a problem that was causing games to crash under Leopard
    • Various stream calls will now produce a warning when they are passed a NULL stream instead of crashing with an error. (The old behaviour was technically correct, but gwindows was passing in NULL streams quite often)
    • Fixed an issue that was causing script files to be left empty until the user typed "script off"
  • Other minor changes:
    • (I6 projects) "Add breakpoint" in the main menu now works in either pane
    • Extensions are now displayed in alphabetical order
    • The "Open Extensions" menu can now view built-in extensions
    • Bug fixed whereby Glulx games were not saving transcripts correctly

Windows app

  • Fixed an intermittent crash in the I7 application, where it would stop with a dialog complaining about a "pure virtual function call". Thanks to Maryam Gousheh-Forgeot for helping track this problem down.
  • Added a headings menu to the source tab, following the similar menu on OS X. The menu initially shows the top-level headings in the source. Select a heading to go to it, or click on an arrow to see the sub-headings below that heading.