Chapter 26: What's New in Inform?
26.7. What was new in build 5G67 (November 2007)

As this release was being prepared, the 50th anniversary of Sputnik 1 was marked, while Japan's Selene satellite entered lunar orbit; miraculously, all three thousand men trapped underground in an Elandsrand gold mine were rescued; Jason Lewis completed a circumnavigation by bicycle, pedal boat and kayak; the Chicago Marathon ran to a photo finish; the US conceded that it had mistakenly kidnapped a German car salesman; squirrels were declared once again safe to eat in New Jersey; and Albus Dumbledore was outed by J. K. Rowling.

In the world of Inform, build 5G67 extended the range of values which can be handled to include truth states, indexed text and stored actions. Inform was made compatible with Apple's newly-released Mac OS X Leopard (10.5), including suitable QuickLook and Finder plugins for dynamic icons and cover flow showing the contents of ".inform" project bundles. Philip Chimento joined the Inform team as the author of the Gnome user interface for Linux, building on Adam Thornton's work with the underlying tools, and the first easy-to-install packages for Fedora and Ubuntu were made available. This "what's new" chapter was added to the documentation, and further work went into improving the Recipe Book with a view to making it easier to extract general solutions for general problems. All 110 open bug reports were closed: there are now once again no known issues.


* See Ordinary text and indexed text for the introduction of a new chapter on "indexed text": a new kind of value holding text which can be examined and altered character by character

* See Regular expression matching for an Inform implementation of the standard way to search for complicated patterns of text

* See Stored actions for the new "stored action" kind of value: a value which can hold any action, and can be held in variables, table entries and so on, and can be played back in later rounds

* See Conditions and questions for the new "truth state" kind of value, which always holds one of two values: true or false

* See Writing and reading tables to external files for writing and reading table columns holding text, something not possible in earlier builds

* See Indexed text in variables, properties and tables for the ability to specify explicitly the kind of value of a 'let' value or a table column, which are ordinarily created only implicitly - Inform deduces their kinds of value from the initial contents

* See Understanding things by their properties for the ability to declare synonyms for either/or properties like "open" or "closed" being used as part of the name of something understood in a command

* See Units for a clarification of the syntax for writing negative literal values of units, such as a weight like "-4 kg"

* See The SHOWME command for a more detailed SHOWME than on previous builds: it now describes the current properties of what is being shown


221
** Example  Actor's Studio
A video camera that records actions performed in its presence, and plays them back with time-stamps.

RB
404
* Example  Alpha
Creating a beta-testing command that matches any line starting with punctuation.

RB
222
** Example  Anteaters
The player carries a gizmo that is able to record actions performed by the player, then force him to repeat them when the gizmo is dropped. This includes storing actions that apply to topics, as in "look up anteater colonies in the guide".

RB
408
* Example  Blackout
Filtering the names of rooms printed while in darkness.

RB
219
* Example  Bosch
Creating a list of actions that will earn the player points, and using this both to change the score and to give FULL SCORE reports.

RB
220
* Example  Cactus Will Outlive Us All
For every character besides the player, there is an action that will cause that character to wither right up and die.

RB
402
* Example  Capital City
To arrange that the location information normally given on the left-hand side of the status line appears in block capitals.

RB
225
* Example  Celadon
Using the enclosure relation to let the player drop things which he only indirectly carries.

RB
407
** Example  The Cow Exonerated
Creating a class of matches that burn for a time and then go out, with elegant reporting when several matches go out at once.

RB
400
** Example  Endurance
Giving different actions a range of durations using a time allotment rulebook.

RB
410
* Example  Fido
A dog the player can name and un-name at will.

RB
89
* Example  Fine Laid
Making writing that can be separately examined from the paper on which it appears, but which directs all other actions to the paper.

RB
301
* Example  Hymenaeus
Understanding "flaming torch" and "extinguished torch" to refer to torches when lit and unlit.

RB
405
* Example  Identity Theft
Allowing the player to enter a name to be used for the player character during the game.

RB
92
* Example  Lucy
Redirecting a question about one topic to ask about another.

RB
411
** Example  Mr. Burns' Repast
Letting the player guess types for an unidentifiable fish.

RB
401
* Example  Rocket Man
Using case changes on any text produced by a "to say..." phrase.

RB
431
*** Example  Rubies
A scoreboard that keeps track of the ten highest-scoring players from one playthrough to the next, adding the player's name if he has done well enough.

RB
256
*** Example  Savannah
Using the liquid implementation demonstrated in Lemonade for putting out fires.

RB
142
* Example  Situation Room
Printing the time of day in 24-hour time, as in military situations.

RB
381
** Example  Slouching
A system of postures allowing the player and other characters to sit, stand, or lie down explicitly or implicitly on a variety of enterable supporters or containers, or in location.

RB
6
*** Example  Starry Void
Creating a booth that can be seen from the outside, opened and closed, and entered as a separate room.

RB
294
*** Example  Straw Into Gold
Creating a Rumpelstiltskin character who is always referred to as "dwarf", "guy", "dude", or "man" -- depending on which the player last used -- until the first time the player refers to him as "Rumpelstiltskin".

RB
307
*** Example  Terracottissima Maxima
Flowerpots with textual names that might change during play.

RB
241
** Example  What Not To Wear
A general-purpose clothing system that handles a variety of different clothing items layered in different combinations over different areas of the body.

RB
367
*** Example  Xot
Storing an invalid command to be repeated as text later in the game.

RB


5G67 (10 November 2007)

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.

MAC OS X

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

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.


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).
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.
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.

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.


PreviousContentsNext