26.9. What was new in build 4W37 (27 July 2007)

| Chapter 26: What's New in Inform? |

| 26.9. What was new in build 4W37 (27 July 2007)

As this release was being prepared, Chinese archaeologists remotely sensed an unknown chamber in the Tomb of the Terracotta Army; Corporal Willie Apiata became the only living New Zealander to hold the Victoria Cross, won in Afghanistan; the Ghanaian cedi became the strongest African currency; Live Earth concerts were held worldwide, and the Boeing 787 was unveiled; the US Congress passed the "Honest Leadership and Open Government Act"; prolonged dust storms swept Mars, while floods in Tewkesbury submerged the whole town save only the 12th-century Abbey.

In the world of Inform, build 4W37 made miscellaneous improvements mostly centred around parsing the names of objects. A significant change not linked below, since it was an excision, was the removal of the former "player-character" kind of person: any person can now be the protagonist.

See Understanding things by their properties for a much more general way to allow an object's current properties to be part of its name: whereas in previous builds only either/or and enumerated named properties were allowed, we can now understand properties holding numbers, times, or values of any unit

See Understanding things by their relations for a new way to make object names flexible: by allowing their names to contain the names of other items to which they are related. For instance, we can Understand "box of [something related by containment]" so that BOX OF CRAYONS matches the object when and only when it contains the crayons

See Articles and proper names for two new either/or properties: singular-named and proper-named. These can be used to change the grammar used with object names if an object's name alters during play, for instance if "vase" must change to "smithereens"

See Recorded sounds for the ability to play back music or background sounds in projects using the Glulx virtual machine

See Multiple beginnings and repeats for the new concept of a "recurring scene", one which can begin over again if, after it has ended, the starting conditions are found to hold again. Previously all scenes were recurring: now scenes are by default non-recurring unless declared to be

See Change of properties with values for a phrase to change map connections as if they were properties, or to change them to "nowhere"

See Version numbering for "authorial modesty", a new ability for Extension authors to choose to remain anonymous

300
| Example Aspect Understanding aspect ratios (a unit) in the names of televisions. |
RB

133
| Example Candy One of several identical candies chosen at the start of play to be poisonous. |
RB

212
| Example Carnivale An alternative to backdrops when we want something to be visible from a distance but only touchable from one room. |
RB

304
| Example Channel 1 Understanding channels (a number) in the names of televisions. |
RB

305
| Example Channel 2 Understanding channels (a number) in the names of televisions, with more sophisticated parsing of the change channel action. |
RB

168
| Example Cheese-makers Scenes used to control the way a character reacts to conversation and comments, using a TALK TO command. |
RB

309
| Example Cinco A taco shell that can be referred to (when it contains things) in terms of its contents. |
RB

311
| Example Claims Adjustment An instant camera that spits out photographs of anything the player chooses to take a picture of. |
RB

31
| Example Gopher-wood Changing the name of a character in the middle of play, removing the article. |
RB

130
| Example Lanista 1 Very simple randomized combat in which characters hit one another for a randomized amount of damage. |
RB

282
| Example Lanista 2 Randomized combat in which the damage done depends on what weapons the characters are wielding, and in which an ATTACK IT WITH action is created to replace regular attacking. Also folds a new DIAGNOSE command into the system. |
RB

357
| Example Latin Lessons Supplying missing nouns and second nouns for other characters besides the player. |
RB

164
| Example Night and Day Cycling through a sequence of scenes to represent day and night following one another during a game. |
RB

354
| Example Originals Allowing the player to create models of anything in the game world; parsing the name "model [thing]" or even just "[thing]" to refer to these newly-created models; asking "which do you mean, the model [thing] or the actual [thing]" when there is ambiguity. |
RB

201
| Example Puff of Orange Smoke A system in which every character has a body, which is left behind when the person dies; attempts to do something to the body are redirected to the person while the person is alive. |
RB

310
| Example Puncak Jaya When a character is not visible, responding to such commands as EXAMINE PETER and PETER, HELLO with a short note that the person in question is no longer visible. |
RB

352
| Example Rock Garden A simple open landscape where the player can see between rooms and will automatically move to touch things in distant rooms. |
RB

306
| Example Tilt 1 A deck of cards with fully implemented individual cards, which can be separately drawn and discarded, and referred to by name. |
RB

389
| Example Tilt 2 A deck of cards with fully implemented individual cards; when the player has a full poker hand, the inventory listing describes the resulting hand accordingly. |
RB

439
| Example Tilt 3 Displaying the card suits from our deck of cards with red and black colored unicode symbols. |
RB

    4W37 (27 July 2007)

    This build adds 21 new examples and provides miscellaneous new features.
    Chief among these are substantial improvements to the parsing of names:
    nouns can now be recognized by their number or unit properties, and also by
    their relations, so that 'Understand "bottle of [something related by
    containment]" as the bottle' will parse BOTTLE OF SAND if and only if the
    sand is contained in the bottle. We have also made a tentative beginning on
    support for sound effects to match the existing support for illustrations.
    As usual a number of bugs are fixed, and although a few issues still remain
    (the current tally of open issues stands at 13, as compared with a peak of
    about 330 earlier this year) none are severe and most users seem to find
    that Inform is fairly reliable, so recent effort has gone into advancing
    the language rather than maintaining the compiler.

    INFORM FOR WINDOWS

    All tabs (save the settings tab) have a row of buttons at the top of the
    	tab, allowing navigation and access to common functionality,
    	similar to the OS X application.
    Fixed a bug preventing the installation of an extension with brackets in
    	its name.
    Added support for multiple windows to the game tab. Any combination of
    	text, grid and graphics windows can be opened by a game running
    	within the application.
    Added support for graphics windows to the game tab. As a result, games
    	using Emily Short's "Simple Graphical Window" and "Location Images"
    	extensions will now work when run within the application.
    Added support for timer events to the game tab. Combined with the above,
    	games using the "Graphical Window Animation" extension will now work
    	when run within the application.
    If saving a project fails, the application now shows an error message.
    	If the project was being saved as part of being closed, then
    	after the error you get a chance to save to a different place.

    GENERAL

    >--> The kind "player-character" has been abolished. Previously, this was a
    	kind of person able to be the player's persona in the model world: for
    	most games, there was only one player-character in existence, the one
    	automatically created by Inform and called "yourself". From this point
    	onwards, any "person" can be the player, and indeed "player" is now
    	a person variable, not a player-character variable. This means that the
    	player object can now be any man, woman or animal in the source text,
    	and these can be switched between freely in play. Moreover, we can
    	much more simply specify who the protagonist is:
    		Lord Bowler is a man in the Pavilion. The player is Lord Bowler.
    	If we do not specify the player's identity, the "yourself" is still
    	created and used as before.
    	This change will affect only works which create "player-characters" in
    	their source text: to adapt them to work again, it should be enough
    	simply to change every usage of the kind name "player-character" to
    	"person", "man", "woman" or "animal" as appropriate.
    	This change implements proposal (6.56) from the January 2007 consultation
    	document.
    >--> Up to now, all scenes have been able to take place many times: if a
    	scene ends, and then later on its starting conditions once again hold,
    	then it will start all over again. This is sometimes very useful, but
    	also a source of confusion, and it has led to people writing "S begins
    	when ... for the first time" over and over to stop S from recurring.
    	As from this build, a scene can be declared either as recurring or not
    	when it is first created. So for instance:
    		Hourly Patrol is a recurring scene.
    		Apocalyptic End is a scene.
    	makes one of each kind of scene. (An ordinary scene can also be declared
    	as a "non-recurring scene" for clarity's sake.) Note that any scene
    	declared as just "scene", and in particular any scene declared in
    	source text for previous builds of Inform, is now non-recurring: so if
    	you need a scene to recur in a work-in-progress, you need to insert the
    	word "recurring" into its definition.
    	This change implements proposal (6.52) from the January 2007 consultation
    	document, though in a slightly different way from that proposed.
    Partial sound support has been added to Inform: see the new sections 19.6
    	and 19.7 of the documentation. As with picture support, Inform provides
    	the groundwork and leaves it for more sophisticated extensions to go into
    	more elaborate facilities. The present state of completion is that Inform
    	can, on all platforms, read Ogg Vorbis or AIFF sound files from the
    	Materials/Sounds folder for a project, and embed them correctly into a
    	Blorbed Glulx story file, compiling correct code for the Glulx machine
    	to play the sounds back at the appropriate moment. However, these
    	sounds will only be audible in Windows Inform, or when playing a
    	released Glulx story file in Windows Glulxe or Spatterlight for OS X:
    	Glulx support for sound has been implemented in the glulx interpreter
    	used in both Inform and Zoom for OS X, so that placeholder text is
    	printed instead.
    	Sound support was proposal (6.61) from the January 2007 document.
    Up to now, the only properties which could be used as part of an object's
    	name for parsing purposes were either/or properties and enumerated named
    	properties. This restriction has been almost completely lifted: we
    	can now understand properties whose kind is number, time, or a unit.
    	For example:
    		An aspect ratio is a kind of value. 16:9 specifies an aspect ratio.
    		A television is a kind of thing. A television has an aspect ratio.
    		The widescreen TV is a television in the Office. The fifties TV is
    		a television in the Office. The widescreen TV is 16:9. The fifties
    		TV is 4:3. Understand the aspect ratio property as referring to
    		a television.
    	...allows us to type EXAMINE 16:9 TV, for instance.
    	In addition, further grammar used to specify unusual values is now
    	recognised in such situations: for instance if we wrote...
    		Understand "European standard" as 16:9.
    	the EXAMINE EUROPEAN STANDARD TV would also work. (Previously this did
    	not work, because the implementation was incomplete.)
    	Finally, a problem message has been added for the (now fairly few) cases
    	where the property still does have a kind which cannot be parsed:
    	previously no problem was issued in cases Inform could not handle, and
    	the feature simply did not work.
    	(This change did not appear in the January document, but has been much
    	requested since.)
    A new form of grammar token has been added to enable names of objects (and
    	rooms) to include names of other objects (and rooms) related to them.
    	For instance, if we write:
    		A box is a kind of container. Understand "box of [something related
    		by containment]" as a box. The Toyshop is a room. The red box is a
    		box in the Toyshop. Some crayons are in the red box.
    	then TAKE BOX OF CRAYONS will work, because CRAYONS matches against
    	"[something related by containment]" for the red box - or it does for
    	as long as the crayons are there. We can have similar matches against
    	relations of all kinds, but have to name the relation explicitly, using
    	its one-word name. We can also reverse the sense:
    		A box is a kind of container. Understand "box in [something related
    		by reversed containment]" as a box. The Toyshop is a room. The crate
    		and the hammock are in the Toyshop. In the crate is a box. In the
    		hammock is a box.
    	makes TAKE THE BOX IN THE HAMMOCK work. (Where more than one object
    	matches the criterion, for instance if the original box contained both
    	crayons and chalk, any of the names can be used.)
    Inform normally decides whether an object has a singular or plural name,
    	or whether it has a proper name, by looking at how it is first
    	introduced. This mainly works well, but people have also asked for
    	more explicit control, especially to cope with changes in an object
    	during play. Accordingly, there are now two new either/or properties
    	for all things:
    		A thing can be plural-named or singular-named.
    		A thing can be proper-named or improper-named.
    	This change implements proposal (6.46) from the January 2007 document.
    The phrase for changing the exits of a room can now accept "nothing" or,
    	equivalently, "nowhere" as the new exit, thus allowing map connections
    	to be explicitly deleted in play. For instance:
    		change the east exit of Stage to nowhere;
    	Bugs in type-checking to do with the handling of "nothing" have been
    	removed.
    Some authors have recently asked for the facility to make extensions go
    	uncredited in the VERSION command output, since this might give away
    	story details, or generally produce verbosely self-laudatory output.
    	A new "authorial modesty" use option has been created for this purpose.
    	Inform has to tread a careful line here, because people make extensions
    	available under a Creative Commons licence which requires that they be
    	credited: so you can only be modest about your own work. If the sentence:
    		Use authorial modesty.
    	is found in an extension, then its credit line is omitted from the VERSION
    	output of any game using it. If the same sentence is found in the main
    	source text of a work, then credits are omitted for every extension with
    	the same author's name as the work itself. (In other words, it credits
    	everyone else's extensions, but suppresses mention of your own.)
    	The "say" phrase "[list of extension credits]" uses the same convention,
    	but the new "say" phrase:
    		"[complete list of extension credits]"
    	ignores all these efforts at modesty and prints the whole list. (An
    	otherwise modest author might want to print this posthumously after the
    	end of play, for instance, or in response to a secret debugging command.)
    The the ambient odour rule, the ambient sound rule and the block vaguely
    	going rule now apply to actions by all actors, not just the player, so
    	that (for instance) the command XERXES, LISTEN will be read as a
    	request to listen to the ambient location, rather than printing out a
    	parseresque objection such as "What do you want Xerxes to listen to?"
    The grammar "switch on [something]" has been added to the standard rules,
    	and has the same effect as "switch [something] on". This is more consistent
    	with switching off.
    The maximum length for an extension rubric has been increased from 250 to
    	500 characters. (Rubrics exceeding that length are silently truncated
    	in extension documentation.)
    It is now allowed to create a temporary value (i.e., a local variable) with
    	"let" whose name coincides with that of a thing, room or property.
    	Previously this triggered problem messages, and was a particular problem
    	for extensions and the Standard Rules, which had to avoid "let" names
    	that might hit any of the things created by the user. (For instance,
    	several people reported it as a bug that creating a property called
    	"target" caused problems - this was because the Standard Rules use a
    	"let" variable called "target" in places.)
    The resolution of noun phrases has been slightly changed so that a single-word
    	kind of value name will take precedence over the name of a thing or room
    	in an assertion sentence. For instance:
    		The scene script is in the wardrobe.
    		Grand Finale is a scene.
    	would previously have read "scene" as a reference to the scene script,
    	a physical thing, not the kind of value "scene". (This in practice makes
    	it easier to have rooms and things whose names include the names of
    	kinds such as "number", "time" and so on.)
    Examples:
    	"Lanista" parts 1 and 2 added to demonstrate randomized combat, first in
    		a simple form and then with weaponry and an ATTACKING IT WITH action
    	"Night and Day" added to demonstrate recurring sequences of scenes
    	"Candy" added to demonstrate making a randomly selected item poisonous
    	"Puff of Orange Smoke" added to demonstrate redirecting all actions from
    		one object to another
    	"Disappointment Bay" examples changed to the more geographically accurate
    		Disenchantment Bay; typo fixed in the final, finished example
    	"Entrapment" modified to correct a bug due to changed handling of actions
    		in recent releases of Inform
    	"Terror of the Sierra Madre", which demonstrates player-switching,
    		greatly simplified as a result of the abolition of player-character
    	"Exit Strategy", demonstrating how to set up non-recurring scenes, removed
    		(since all scenes are now non-recurring unless otherwise stated)
    	"Pine 3", "Pine 4", "The Prague Job", and "Space Patrol" modified to
    		reflect the usage of "recurring" scenes
    	"Snip" modified to remove bugs and make use of the new ability to
    		understand unit properties; "Snip Snip" withdrawn, as the hack it
    		demonstrates is no longer needed and the same functionality was
    		achieved instead by a single line added to "Snip"
    	"Totality" (example about scheduling an eclipse) given a "test me" script,
    		and a syntax bug removed
    	"Dinner is Served" revised to work better when the object reached for
    		is the second noun rather than the noun, and also to have less
    		cryptic syntax; the test for the example has been extended
    	"Tilt" added to demonstrate an implementation of a deck of cards using
    		individual card objects, in which ranks and suits of cards are
    		automatically parsed
    	"Tilt 2" added to demonstrate an implementation of poker hands, where
    		the cards in a player's inventory are described according to their
    		value; illustrates use of a complex rulebook
    	"Tilt 3" added to demonstrate use of text colors to make poker suit
    		symbols appear in red, under both Glulx and the Z-machine
    	"Aspect" added to demonstrate the automatic parsing of unit properties
    	"Channel" added to demonstrate the automatic parsing of number properties
    	"Channel 2" added to demonstrate a combination of advanced parsing
    		features, in the creation of tunable televisions
    	"Cheese-makers" added to demonstrate a TALK TO action tied to a
    		scene-structured plot
    	"Alias" added to demonstrate telephone-number-sized units functioning
    		under Glulx
    	"Claims Adjustment" added to demonstrate a camera that produces instant
    		photographs of things; the photographs can then be referred to as
    		in X PHOTOGRAPH OF APPLE
    	"Puncak Jaya" added to demonstrate characters who can be referred to in
    		their absence
    	"Cinco" added to demonstrate containers referred to by their contents
    	"Originals" added to demonstrate disambiguating objects from models of
    		those objects
    	"Removal" simplified to use action variables rather than the more
    		complicated source
    	"Gopher-wood" added to demonstrate the use of the proper-named attribute
    		to change someone's name during play
    	"Carnivale" added to demonstrate the simple scoping case of a large object
    		that should be visible from other rooms
    	"Rock Garden" added to demonstrate the simple scoping case of multiple
    		rooms that can see into one another (as opposed to the rather more
    		complex "Stately Gardens" which autogenerates a lot of room
    		description as well)
    	"Latin Lessons" added to demonstrate supplying a missing noun when the
    		action is being performed by someone other than the player
    	"Uber-Complete Clavier" (the big Unicode test) slightly changed so that
    		it can now be compiled for Glulx as well as the Z-machine
    	Paragraph breaking adjusted in "In Fire or in Flood", "Misadventure",
    		"Goat-Cheese and Sage Chicken", "Owen's Law"
    	Minor typos removed from "Wight", "Alpaca Farm", "Apples"
    Extensions:
    	"Glulx Text Effects" modified to make it easier to set custom colors
    		for text in Glulx; this appropriates the color-management source from
    		the extension "Simple Graphical Window" by Emily Short, so those
    		using Simple Graphical Window should update to version 4 of the
    		extension in order to avoid overlap. Advanced to version 2.
    	"Punctuation Removal" revised to include a phrase that corrects
    		instances of "mr.", "mrs.", etc., to "mr", "mrs", and the like, to get
    		around parsing frustrations commonly encountered with these titles.
    		Also added the means to remove apostrophes as well as the other
    		punctuation marks; example added for parsing such phrases as "Jack's
    		tie" if and only if Jack is currently wearing the tie object. Version
    		number advanced to 3.
    	A bug fixed in "Complex Listing to deal with the marking of regions";
    		version number advanced to version 5.
    	Bug fixed in the screen-width-determining routine of "Basic Screen Effects".
    Bug fixed whereby past tense conditions in the form "in ... for the first time"
    	would sometimes have the temporal requirement ignored, particular in the
    	preambles to rules like:
    		Every turn when in the Hall of Mists for the first time;
    Bug fixed whereby rules which depend on action taking place at the same time
    	as a compound condition would sometimes produce spurious problem messages:
    	for instance,
    		Check turning the dial to  when the number understood < 0 or the
    		number understood > 99:
    	...is valid but generated a problem message in 4U67.
    Bug fixed whereby "otherwise if ... begin" (which is incorrect since otherwise
    	if divides the existing code block, rather than beginning a new one) led
    	to I6 errors rather than a problem message.
    Bug fixed whereby using "(called ...)" to create temporary named values at
    	a time in the past such that they could not survive to the present
    	would lead to I6 errors rather than a problem message.
    Bug fixed whereby rules taking effect if "doing something to ..." and some
    	description would sometimes false take effect when the action took a
    	non-object as its noun, when the value which happened to have been
    	typed coincided with the internal object number of an item matching
    	the description.
    Bug fixed whereby changing player to someone else and then back again, and
    	then using the short name of the player, would crash both the Z and
    	Glulx virtual machines at run-time.
    Bug fixed whereby I7 would crash if told to understand empty text as something.
    	(This is not allowed, and a problem message has been added.)
    Bug fixed whereby scenes predicated on past tense actions ("Mayhem begins when
    	we have waited") would cause an internal error.
    Bug fixed whereby the condition "we have taken inventory" gave false positives
    	after the first turn.
    Bug fixed whereby nameless variables attached to activities gave internal
    	errors rather than a problem message.
    Bug fixed whereby creating an object called "nowhere" caused a crash rather
    	than a problem message.
    Bug fixed whereby grammar introducting alternative textual names for numbers
    	(e.g. 'Understand "a/b/c" as 2.') could lead to I6 errors.
    Bug fixed whereby vaguely named properties in adjective definitions would
    	result in internal errors rather than a problem message.
    Bug fixed whereby naming actions which happen to include "with" can create
    	spurious out-of-play things (doing no harm, but doing no good either):
    	for instance, "Unlocking the box with the key is bizarre behaviour."
    	would create an object called "Unlocking the box", in addition to doing
    	what it was supposed to do.
    Bug fixed whereby matching the player's command against text rather than a
    	topic would cause an interpreter crash at run-time.
    Bug fixed whereby verbs defined as auxiliaries required participles to be
    	named unnecessarily, contrary to the documentation: thus "The verb to be
    	able to approach implies the approachability relation." would fail for
    	no good reason.
    A bug introduced by the actions rewrite in 4U65 caused player's holdall
    	objects not to work properly if they were being worn rather than carried
    	(as in the documentation's example "Sackcloth"). This is fixed: apologies.
    In past builds the grammar token "[a number]", in Understand sentences, has
    	required the number in question to be something which can be stored in
    	a signed 16-bit variable, that is, to be between -32768 and 32767. This
    	is correct for story files running on all versions of the Z-machine, but
    	the Glulx virtual machine has 32-bit variables, so for Glulx the
    	restriction is unnecessary. It has now been lifted: thus on Glulx, we
    	can parse numbers in the range -2147483648 to 2147483647 inclusive.
    The Inform 6 debugging verb DAEMONS (aka TIMERS), which is undocumented and
    	meaningless in I7 since this lacks either daemons or timers in the crude
    	I6 sense, could under some circumstances crash if tried in an I7 game.
    	The verb is now removed altogether.

Previous | Contents | Next