1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-05-16 16:08:38 +03:00
inform7/notes/release/7-1.md
2022-08-08 08:59:55 +01:00

48 KiB

Release notes for Inform v7.1 (build 5Z71)

This release was made on 18 April 2009, 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.

Language

Index

The most visible change in this build is that the Index for a project now has a new look, and has been reworked throughout. We now have much more experience of working with large projects, and have more feedback from users about what they found helpful and not in the old Index.

In general, we have tried to improve navigation within the Index pages - each of which contains several different tables or charts - to pack more information into the existing tables, where sensibly possible, and to improve its visual recognisability - to make it easier to see at a glance where you are. Being lost in the Index is no better than being lost in the source text, the whole problem it's supposed to address.

There are too many changes to itemise, but briefly:

  • links to extensions from the Index pages now have a new icon (in place of the old footnotes like [E1]); clicking them jumps to the documentation for the extension;
  • a new use option, "Use numbered rules", indexes rules with identifying numbers alongside their names, and causes the testing command RULES ALL to show these numbers at run-time - which may help in debugging when "Use memory economy" is enforced, so that RULES ALL is unable to quote rule names in full.

cblorb

This build includes version 1.1 of "cblorb", and matching improvements to Inform's system for releasing projects. "cblorb" is an internal tool which is run at the end of the translation process, but only when the Release button rather than the Go or Replay buttons was clicked. It has two main jobs: to bind up the translated project, together with any pictures, sounds, or cover art, into a single file called a "blorb" which can be given to players on other machines to play; and to produce associated websites, solution files and so on as demanded by "Release..." instruction(s) in the source text.

Previous builds of Inform included a minimal implementation of "cblorb" which, although it mostly worked, was really only a prototype: it was not really flexible or reliable enough to be used in the final system. We have long intended to replace it with a better implementation, and version 1.1 is our first draft of that. It is much faster (running in order N time, where N is the line count of the source text, not order N-cubed), and produces much better HTML. This also gave us the opportunity to reform how "Release" works, and to make it easier to produce tidy collections of release material.

Almost all of the size or complexity limits have been taken out, and in particular:

  • the number of audiovisual files embedded in the blorb, previously limited to about 495 (depending on circumstances), is now limited only by the Blorb specification limit of 32765;
  • the number of auxiliary files, previously at most 50, is now unlimited;
  • the numbers of tables and headings in a project released with source in a website, previously 250 each, are now unlimited;
  • the number of knots in the Skein of a project released with a solution, previously at most 10000, is now unlimited;
  • the story description length, previously at most 1000 characters, is now at most 2047 characters;
  • and all filenames can be up to 2047 characters long, which should help if the project is very, very deep in the file system tree.

Various minor bugs have been removed, of which the most important was a tendency to trim 8 bytes from the end of some audio files when embedding them, which caused some Ogg Vorbis files to be unplayable. The rendering of source text on an accompanying website is also improved somewhat, with various bugs to do with nested comments removed, and support for verbatim I6 code added; text substitutions are also now styled, and hanging indentation for code makes it much easier to read. Particular thanks to David Kinder, who diagnosed the Ogg Vorbis fault, and to Stephen Granade, whose "i7htmltidy.pl" script was a most effective critique of the original "cblorb".

Internal changes include:

  • there are several new placeholders:
    • [PAGENUMBER] and [PAGEEXTENT], for pages in the multi-page source web pages, are such that "page [PAGENUMBER] of [PAGEEXTENT]" produces text such as "page 2 of 7";
    • [TEMPLATE] is the name of the web template in current use;
    • [SMALLCOVER] is the filename of the thumbnail-sized version of the cover art file. (Compare [BIGCOVER], which already exists, and is the filename of the real thing.)
    • [STORYFILE] becomes the "leafname" of the story file, e.g., "Bronze.gblorb"
    • [GENERATOR] becomes the name of the program generating the website, e.g., "cblorb 1.2"
    • [TIMESTAMP] and [DATESTAMP] are the time and date at which cblorb runs
  • new command-line arguments "-trace", "-help";
  • the user interface is now expected to call with the first option being "-osx", "-windows", or "-unix" as appropriate;
  • a new "style" command in Blurb locates the relevant CSS file to use when releasing with a website;
  • <img ...> tags generated by "cblorb" are now self-closing (<img ... />);
  • <br> tags generated by "cblorb" are now self-closing (<br/>);
  • footnote anchors are now closed, preventing link style from spilling;
  • paragraphs generated by "cblorb" are now always in matching <p>...</p> tags;
  • links in the lists of links are now in <li>...</li> list item tags in a surrounding <ul>...</ul>, and similarly for the contents listing in a source website, where nested <ul>s are now used to show the headings hierarchy;
  • halign and valign markers are not used in tables if a CSS file is present to handle table styling better;
  • auxiliary file sizes displayed better, and file size displayed for the Blorb itself;
  • cblorb no longer generates temporary files in the project's Build directory, so it no longer leaves debris behind for the user interface to tidy up.

Releasing

There are six corresponding changes in Inform itself.

(1) "Release along with..." has a new option - "library card", which is the iFiction record for the project, an XML file conforming to the Treaty of Babel for bibliographic data.

(2) In "Release along with..." sentences, the adjectives "private" and "public" can be used when we release along with any of:

	source text, solution, library card

"Public" means that if we release along with a website then the item in question will appear in the links from the home page; "private" means it will be produced but not be mentioned or linked on the website. If neither one is specified, source text is public but everything else is private, which conforms to Inform's traditional practice. If we aren't releasing along with a website, public vs. private makes no difference.

(3) Suppose Release is clicked in the Inform user interface, and everything works without problem messages. If there are no "Release along with..." sentences in the source text, then the release consists only of a single blorb file. The user interface displays a Save As... dialogue box asking the user where to put this file. But if there are "Release along with..." sentences, then Inform needs to release multiple files, and it puts those in the "Materials" folder for the project. (If the project is, say, "Apricot.inform" then this would be a folder called "Apricot Materials" in the same place.)

All of that is how Inform has always worked. What's new is that the released material is now all put in a subfolder of "Apricot Materials" called "Release". Anything in "Release" can be thrown away at any time, as it can all be replaced; equally, to upload a website to a server, we only need to copy the contents of the "Release" folder. This is much tidier than the old arrangement, in which released files mingled with other working documents in the root of "Apricot Materials", so that it wasn't easy to see at a glance what was part of the released website and what wasn't.

Inform automatically generates the Materials folder and its Release subfolder as necessary if they don't already exist.

(4) Inform has always generated websites using what it calls "templates", and it has always been supplied with a single built-in template called "Standard". This continues to be true, but the new "Standard" is a more modern design, making use of CSS. (The old look is preserved as "Classic", also built-in, in case anyone really wants to keep using it, or needs to generate a website which makes no use of CSS.)

The form of templates has however changed. A template was previously a pair of HTML files - for instance, "Platinum.html" and "Platinum-Source.html" - containing placeholder text like "[AUTHOR]" where the author's name should appear, and so on. A template is now a folder - "Platinum", say - which can contain any of the following four files:

	index.html - the template for the home page
	source.html - the template for source text pages
		(used only when "Release along with a website" is used)
	style.css - the CSS styles needed by the HTML files
	(extras).txt - a catalogue of any other files to be added

If any of these is missing, Inform uses the one in "Standard" instead. In practice, this means the easiest way to create a new template is to supply just a new CSS file, which can change the colour, font, type size, and position of more or less everything in the site.

The optional "(extras).txt" file - note brackets - is a text file which contains a list of named extras to throw in. For instance:

	easter.html
	egg.png

These named files need to be present in the template folder. Files with the extension ".html" go through the placeholder expansion process just like the index and source pages; all other files are copied verbatim. (Extras allow for images, movies, etc., to be added to the template.)

See 22.12 and 22.13 in the documentation, which have been rewritten.

(5) Inform knows templates only by their titles ("Standard", say, or "Platinum"). When it needs to find one, it searches the following places in sequence:

  • (a) the "Templates" subfolder of the project's Materials folder, if this subfolder should exist;
  • (b) the "Templates" folder in the user's own library - on Mac OS X, this is:
    	~/Library/Inform/Templates
    
    and on Windows:
    	My Documents\Inform\Templates
    
  • (c) the built-in stock of templates, currently "Standard" and "Classic".

(6) A file released without cover art now has a generic cover image applied. Most people releasing Inform 7 works do now include cover art, and we would like future interpreters and website designs to be able to assume that an image of some kind can be associated with any I7-produced blorb.

Index

It would not be useful to itemise the changes here, but the design of the Index pages has been heavily revised. The aim is to present more information, but more clearly, and with better navigation and labelling. We'd suggest that anyone used to the old Index might find it worthwhile to explore the new one.

Kinds of value

  • Activity names can now be stored in variables.
  • In previous builds, indexed texts, stored actions and lists could not be properties of values - though they could be properties of objects. This anomaly is removed.
  • Inform now makes more apparent that it allows arithmetic on some kinds of value (numbers, times, etc.) but not others (text, scenes, etc.). The new Kinds index page should clarify which.
  • The rounding-off notation "V to the nearest D" now works for any numerical value V, not just for times, as in previous builds. Thus, for instance:
    	the pressurised volume to the nearest 100 cu m
    	the score to the nearest 25
    
  • Two new operations also act on any numerical value:
    	cube root of V
    	square root of V
    
    The results will necessarily be approximate. Square roots of negative numbers throw a run-time problem.
  • It's now legal to declare multiplication rules for any numerical kinds of value, provided this is done consistently. E.g.:
    	Bus Stop is a room.	
    	Frequency is a kind of value. 40/min specifies a frequency.
    	Bus frequency is a frequency that varies. Bus frequency is 2/min.
    	A frequency times a time specifies a number.
    		When play begins:
    		say "You can expect [bus frequency times 10 minutes] buses to turn
    			up in the next ten minutes."
    
    This would previously have been rejected as involving the built-in KOVs "time" and "number", which Inform was rather over-protective towards.

Scientific Units and Scaled Arithmetic

Inform now allows a spread of alternative notations for units: A weight is a kind of value. 10kg specifies a weight. 1 tonne specifies a weight scaled up by 1000. 1g specifies a weight scaled down by 1000. This enables notations such as "0.45kg" to be used, and causes weights to be stored to an accuracy of 1g. These scale factors are kept consistent in all arithmetic, and in particular when different units are multiplied together or divided.

There can be equivalents on a different scale altogether: 1 ounce specifies a weight equivalent to 0.028kg. 1 pound specifies a weight equivalent to 16 ounce. We can also mark some notations as singular or plural, and give them names: 1 tonne (singular, in tonnes) or 2 tonnes (plural, in tonnes) specifies a weight scaled up by 1000. That enables us to say "[weight of the tank in tonnes]", for instance.

A new built-in extension, "Metric Units by Graham Nelson", makes definitions of kinds of value for most of the scientific quantities needed to make models of the real world: length, mass, elapsed time, electric current, temperature, luminosity, angle, frequency, force, energy, pressure, power, electric charge, voltage, luminance, area, volume, velocity, acceleration, momentum, density, heat capacity, specific heat capacity The extension defines SI standard notations for all of these, allowing both European and American spellings, and gives them the proper dimensional rules for multiplication (for instance, length times length is an area). "Elapsed time" is much more precise than the built-in "time" kind of value - it measures from 1 centisecond up to about 35 weeks, rather than being a count of minutes in the course of a single day. Use of "Metric Units" requires the Glulx story file format rather than the Z-machine, simply in order to hold large enough numbers to make sensible scientific calculations.

Equations

As trailed, somewhat speculatively, in the January 2007 discussion document, Inform now supports displayed equations. Inform imitates the conventions of printed scientific books and papers, just as it does with tables of data. For example: ``` Equation - Newton's Second Law F=ma where F is a force, m is a mass, a is an acceleration.

Equation - Principle of Conservation of Energy
		mgh = mv^2/2
where m is a mass, h is a length, v is a velocity, and g is the
acceleration due to gravity.
```

(These equations are dimensionally checked for correctness.) Inform can then solve them to calculate whatever unknown is missing. For instance, let v be given by the Principle of Conservation of Energy, where h = 10m; is sufficient to determine "v" provided that the quantities other than "v" and "h" are known.

In cases where we simply want a quick way to write an elaborate one-off formula, we don't need to declare an equation - we can just write it in directly: let f be given by V = fL;

Logic

  • It is now legal to use "now" in a way involving more than one varying quantity at a time. For example:

    	Trail Shelter is a room. Fred and George are men in Trail Shelter. The
    	possum, the skunk and the weasel are animals. Dixville Notch is north
    	of the Shelter. Earl is a man in Dixville Notch.
    
    	Suspecting relates various people to various people.
    	The verb to suspect (he suspects, they suspect, he suspected, it is
    	suspected, he is suspecting) implies the suspecting relation.
    
    	Earl suspects the possum.
    
    	Instead of waiting:
    		say "A sinister odour begins to make itself felt.";
    		now every person in Trail Shelter suspects every animal which is not
    			suspected by Earl.
    
    	Test me with "relations / z / relations".
    

    Previous builds would have rejected this use of "now" as too complex.

  • It's now legal to test if something is "everywhere"; this will only be true for backdrops which are indeed everywhere.

  • The Standard Rules now define:

    	The verb to provide (he provides, they provide, he provided, it is provided,
    	he is providing) implies the provision relation.
    

    This in general is a relation. The following are equivalent:

    	if carrying capacity is provided by the player
    	if the player provides carrying capacity
    

    For clarity, "the property ..." can be used, and this is compulsory for either/or properties, since those are otherwise adjectives not nouns:

    	if the player provides the property male
    	if the player provides the property carrying capacity
    

    This makes "to provide" a full verb, whereas previously it was only imitated by a definition of "X provides the property P" in the Standard Rules.

  • It's now legal to assert value relations in relative clauses, e.g.:

    Laboratory is a room. Peter is in the laboratory.
    Colour is a kind of value. Aquamarine is a colour.
    Annoying relates various colours to various people. The verb to annoy (he
    annoys, they annoy, it is annoyed, he is annoying) implies the annoying
    relation.
    Aquamarine is a colour which annoys Peter.
    

Minor new features

A new use option allows the parser to handle large numbers of objects better. For instance, Use maximum things understood at once of 200. enables the parser to handle commands like TAKE ALL to work well in situations where up to 200 items are within view at once. (This number was always 64 in previous builds, and the default level has been raised to 100.)

Inform has for some time had the phrase the room north from the Ballroom to look up map connections; it now recognises "north of the Ballroom" as being synonymous. This reports the room which somebody would get to if they could go, in an unimpeded way, north from the Ballroom - perhaps through a door. The result is always a room, or nothing. In similar vein, the new phrase: the door D from/of R produces the door which lies in direction D from room R, or else nothing if there's no door there.

It's now legal to set values that vary "usually". For instance: The speed limit is a speed that varies. The speed limit is usually 100 mph. This should help extension writers who are nervous of setting values which their users might want to alter.

Inform usually allows "while" as synonymous with "when", but until now an exception has been that it insists on "Understand... when..." rather than "Understand... while...". Both wordings are now allowed.

Build 5U92 was rather strict about not allowing colons in text substitutions. Usually that's a good thing, as it catches various accidents, and in general text substitutions shouldn't contain punctuation. But that overlooked times of day written with colons, as here: "The stage is [if the time of day is after 8:00 PM]filled[else]empty[end if]." So colons have been allowed again if used in explicit times of day.

New rules have been added to the Standard Rules: standard report preferring abbreviated room descriptions rule standard report preferring sometimes abbreviated room descriptions rule standard report preferring unabbreviated room descriptions rule standard report switching score notification on rule standard report switching score notification off rule so that these out of world actions are reported by the report rules, which can then be modified or pre-empted, just as the corresponding rules can for ordinary actions.

In previous builds, and in keeping with ancient Infocom customs, "leave" was synonymous with "go" when typed as a command. On balance, though, this leads to confusion - especially since "go" often has the sense of "enter", exactly reversing the meaning of "leave". "Leave" is now synonymous with "exit".

Perhaps this is really a bug fix: the phrase option "if absent" for the phrase "add V at entry N in L" (for adding a value to a list in a given position) was claimed to work in the documentation for previous builds, but in fact it has only just been implemented in this build. (Previous builds did allow "if absent" in the case where V is a list, but not where it is a single entry; and in the case where no entry position is specified.)

  • It's hard to say whether this is a bug fix or not; more a slight change in philosophical outlook. Inform previously rejected this sort of thing:
    	Before taking something:
    		if a block is larger than the noun, say "Look out!"
    
    on the grounds that it couldn't know whether the noun was comparable in size to blocks - it would be if the noun were a block, but not otherwise. This generated a problem message. What now happens is that the above compiles to run-time checking, and a run-time problem is generated if the noun ever turns out not to be a block. (This is done because we often have a situation where the source text does guarantee things about the kinds of objects involved, but which Inform is unable to see.)
  • Another one that is arguably a change of design rather than a bug fix: subject-verb inversion in assertions has been withdrawn for prepositions which are also participles. In previous builds, Inform would accept the somewhat Yoda-like sentence
    	Holding the light sabre is the young Jedi.
    
    which is an inversion of
    	The young Jedi is holding the light sabre.
    
    ...yet has the same meaning. Inversions are often perfectly natural in English:
    	On the table is a jar of marmalade.
    
    So we don't want to rule them out altogether. But we do want to prevent these sentences from being misread as inversions:
    	Holding Area is a room.
    	Wearing something is good manners.
    
  • The order of testing the conditions on when a rule applies has been reversed. That sounds a more dramatic change than it really is; it means that a rule such as
    	Instead of X when Y: ...
    
    will test to see if the action is X before testing whether condition Y is also true, rather than vice versa, as happened in previous builds. The main reason for this is so that a rule like
    	Before printing the name of a vehicle (called the car) when the
    		traffic warden cannot see the car: ...
    
    works properly, because the "car" variable is set during the test of X (that the "printing the name" activity is being applied to "a vehicle (called the car)"), and so is available for use in condition Y ("the traffic warden cannot see the car").
  • When one rule is "listed instead of" another one in the same rulebook, previous builds of Inform duplicated the first rule to provide the replacement; this had some advantages but broke the principle, implicit in the syntax and usually helpful (not to mention announced in the manual) that a rule can only occur once in the same rulebook. This build moves rather than duplicates the build. There was some debate about this on rec.arts.int-fiction in February 2009, and opinions were divided; we changed our own minds in the making of this new build; but in end, what lawyers call a bright-line test - a simple easily-stated principle - seemed for the best.
  • When an actor other than the player tries an action which needs him to be able to touch one of the objects involved, Inform normally applies the basic accessibility rule (and thence the accessibility rulebook) to make the decision about whether this should be allowed, just as it would if the player tried the same thing. In previous builds, an exception was made for doors and backdrops, whose ability to be present in multiple rooms made it difficult to determine accessibility for third parties. Erring on the side of caution, the item would be assumed accessible. In this build, that leniency is narrowed so that it applies only in the case of third-party actors in a different location from the player.
  • When Inform tests to see if an action applies, and it finds a region where it might have expected a room, it reads this as any room in that region. This is why:
    	Instead of going from the Great Tundra, ...
    
    matches going from any room in the Great Tundra region, and since an action cannot apply to a region, there's no ambiguity here. But 5U92 also applied the same room to activities, which can apply meaningfully to regions in their own right, and this was a bug. It has been fixed.
  • In previous builds, it was legal but futile to try actions like this one:
    	try asking Xerxes about "Athenians";
    
    futile because command text is always reduced to lower case, so that the capital A in Athenians makes it guaranteed not to match anything Xerxes knows about. In this build, command snippets like this in a "try" are automatically reduced to lower case.

Performance

The Inform 7 compiler is now more economical on memory usage. Previously it consumed around 43MB on a small run, and 78MB on "Bronze", a typically-sized complete work; those figures are now 9MB and 25MB respectively. (This may make Inform more viable on low-memory netbooks.)

Inform's use of temporary files is more or less abolished in this build; thus a typical problem-free run on a large source text now involves around 100 file writes, almost all index pages, where previous builds might make around 1400 file writes. (This may speed Inform up on slow media such as memory sticks.) Internally, Inform now makes use of flexible-sized memory buffers instead, and as a side-effect it should be much harder for maliciously-constructed source text to crash Inform by means of buffer overruns - though nobody at present is trying this, so far as we know.

The upper limit of 500,000 words of source text has been removed; there is now no upper limit. This once seemed unthinkably large, but the recent release of Aaron Reed's 385,000-word "Blue Lacuna" changed our minds. "A la recherche du temps perdu" is about 1,500,000 words, "Clarissa" about 1,000,000, and "War and Peace" about 500,000, so it's not impossible for novels to grow to such sizes.

"Blue Lacuna" provided some real-world profiling information on how Inform handled very large source texts. Although no major bottlenecks were found, a little tuning produced about a 10% speed gain on these larger projects.

Inform now takes advantage of a March 2009 extension to the Glulx virtual machine specification which causes certain I6 veneer routines (called very frequently during play) to be implemented natively rather than in Glulx emulation. This can result in speed-ups of a factor of 2 or 3, though those gains will only be realised on a Glulx interpreter which supports the new "acceleration" feature. (The Glulx interpreters built into Inform as the Game panel do support it, and work is under way in making stand-alone Glulx interpreters support this too.)

Options and Telemetry

When Inform starts up, it now looks for a file called Options.txt inside the user's home folder for Inform. (On Mac OS X, this is "~/Library/Inform"; on Windows, "My Documents\Inform", and so on.) If the file is present, then the text in it is added to the source text of everything Inform translates.

This should be used only to set use options, and given the potential for confusion (it's easy to forget that the Options.txt file is there), should only be used if really necessary.

A new use option, "Use telemetry recordings.", causes Inform to copy its outcome and problem messages to files in the home folder (see above) as they occur. These files are dated, so that for instance Telemetry 2009-03-25.txt contains all of the recorded activity on 25 March 2009. Telemetry only records the contents of the "Problems" panel - notes of success or failure, and problem messages - and (see below) nothing is transmitted via any network, so it isn't really surveillance. The user can deliberately add a note to the current telemetry file by writing something like this in source text: * "I don't get it! What's a kind? Why can't the lamp be lighted?" (This is a way to make a note for the benefit of someone who will read the telemetry file - for instance, to comment on a problem message that has just appeared. Note the double-quotes. Otherwise, it's meant to look like the standard way that beta-testers mark up IF transcripts.)

These two features have been added in response to requests from education users. Let's suppose that Mr Lebling, who teaches 5th grade in Minnesota, wants to set things up just right for his class. He installs Inform on the ten computers they will use, and also copies an Options.txt file from his memory stick onto each one. The Options.txt file reads: Use serial comma. Use American dialect. Use telemetry recordings. Now Mr Lebling's class won't be confronted with English spellings, and so on. And most of the kids are happy, but Mr Lebling gets the feeling that young Marc wasn't really paying attention, so after class he checks that day's Telemetry file for that computer to see what Marc was up to, and whether he was stuck on something.

(The Telemetry feature was originally devised to help with testing the response of real users to problem messages, and to find out which problems are most often generated. Telemetry systems like this are often built in to large applications - for instance, Microsoft Word - and the name implies that data can be sent back to the manufacturers, who thus get to look over their users' shoulders. But Inform transmits nothing at all, even if the use option is set, which by default it is not. So this feature really can't invade anyone's privacy. But we would, if people are willing, be very interested to see telemetry files resulting from genuine classroom use, and use by complete newcomers - we'd really like to know which problem messages puzzle people, and what the stumbling blocks are.)

Documentation, examples and extensions

Recipe Book

  • Slightly expanded the section on start up features in order to include the idea of doing some game initialization, as necessary.
  • Added a section "Other Built-in Actions" to the Commands section, which provides some explanation and cross-referencing for a number of types of action.
  • Extensively rewrote the "Actions on Multiple Objects" section to provide a clearer explanation of how the multiple objects list works.
  • Expanded the "Modifying Existing Commands" section to explain more clearly how to change the carrying requirements and related rules, and cross-referenced this segment from "Barter and Exchange", "Taking, Dropping, Inserting and Putting", and several sections that pertain to locking or placement.
  • "Room Descriptions" section added to the "Place" chapter, which mostly contains material formerly under "Commands > Looking". Looking now points to this section; this organization change is due to assorted user feedback about where people were looking for material most often (and not finding it).
  • "Going, Pushing things between rooms" expanded to explain the behavior of pushing more clearly; to offer more examples of how to write conditional rules governing pushing; and to lay out the details of meddling on room descriptions produced specifically in the context of going actions (as opposed to in response to LOOK). The previously under-documented "the room-describing action" variable used by the looking rulebooks is also explained in this section.
  • "Scoring" expanded to explain the NOTIFY ON and NOTIFY OFF commands, to exemplify how to modify their behavior, and to refer the player to default message extensions in order to change the wording of such messages as "[Your score has just gone up by two points.]"
  • "Saving and Undoing" expanded to mention undo prevention and warn against some of the dangers of using it.
  • "Glulx Multimedia Effects" expanded to discuss in more detail what is and isn't at least theoretically possible under Glulx, in terms of sounds and images. (Several people on the newsgroup have asked recently whether it is possible to have multi-channel sounds or fade-ins and fade-outs under Glulx. The answer is yes, but it is not easy. The section suggests the prospective author check out the latest tools from the Inform extensions site.)
  • "Settings and Status Checks During Play" section added to the Out of World chapter; this is largely a pointer to other sections of the manual (verbosity under Looking, notification under Scoring), but it also explains the other more obscure out of world actions. This is in response to an outstanding request that the unusual out of world actions be better documented.
  • "Background, Memory and Knowledge" divided into two, considerably expanding the discussion of ways to track player character knowledge and use that tracking to affect descriptions, object names, and scope.

Examples

  • Added "The Speed of Thought" to demonstrate unit conversions.
  • Added "Hatless" to spell out some details of how "now" works with randomness.
  • Added "Slogar's Revenge" to demonstrate unlocking a door with a key can be worn instead of carried (and thus how to manipulate the carrying requirements rules)
  • Added "The Facts Were These" to demonstrate giving multiple objects at once, with different results than if the player offered them separately
  • Added "Oyster Wide Shut" to offer an alternate (and more flexible) way to handle the inventory listing of properties such as "(closed)"; it also allows the author to add his own properties to the standard list.
  • Added "Whither?" to illustrate letting the player refer to a door as "the west door" or "the east door" under the appropriate circumstances.
  • Added "Widget Enterprises" to demonstrate equations.
  • "The Abolition of Love" and "What Not To Wear" changed to reflect the new flexibility of "now".
  • "Zorb" updated to deal with a sentence of explanation that stopped without ending, and also to make it possible for the player to ride in the Zorb.
  • "Identity Theft" given extra commentary to explain the different effects of compiling under Z- or Glulx.
  • "Four Cheeses" improved with more refinement of scope-handling for interacting with a distant person who should not be visible.
  • "Verbosity" slightly tweaked to give more information about how defaults work.
  • "Verbosity 2" added to demonstrate how to force the player always to use full-length room descriptions (rather than merely setting the default and allowing him to modify it).
  • "Only You" simplified and moved to an earlier section because Inform now pre-defines the adjective "even".
  • "Channel 2" typo fixed.
  • "Peeled 2" error fixed, and the documentation slightly expanded.
  • "Dinner is Served" revised to make the sample code more safely portable into a larger game, and to remove a procedural rule that is no longer necessary.
  • "Puncak Jaya" edited to improve behavior with revised accessibility rules, and to deal with the case where a ghost is the second noun rather than the noun.

Extensions

  • New built in extension, "Metric Units": see above.
  • Documentation for "Menus" substantially rewritten and the version number advanced to 3.
  • "Basic Screen Effects" and "Complex Listing" adjusted to be more safely compatible with "Case Management": all three were defining a printed_text array but not consistently, with the result that some compilation effects varied depending on which extension was included first.
  • "Rideable Vehicles" tidied up to be more consistent in handling how actors other than the player are treated; version number advanced to 3. The rules here have been more cleanly arranged, but with some renamings as a result - for instance, the "no person mounting a mounted animal rule" used to apply only to non-player actors, while the corresponding rule for the player was anonymous. There is now a single "can't mount when mounted on an animal rule". So any source text making use of the old rule names in this extension will need tidying up, or will need to use version 2. The actual functionality of the extension has not changed except that commands like "tanya, get on mystery" are now correctly understood; a cosmetic blemish in descriptions when multiple people are riding the same animal has been fixed.

Problem messages

  • A process of trying to improve the quality of problem messages is under way, though it's certainly not complete. Here the aim has been to be clearer and more direct, with hints typographically separated from their messages to reduce the tendency of long paragraphs to resist the tired eye. Most problem messages are now accompanied by blue documentation-link icons to relevant passages of the manual.
  • Attempts to determine "the time since Alien Landing began" or "the time when World Obliteration ended" are not possible if these scenes have, in fact, never begun or ended. In previous builds, these questions would produce misleading answers. They now produce run-time problem messages.
  • Problem message added to explain why doors cannot be "part of" other things, and how to achieve the same effect in other ways.
  • Problem message added, in place of an internal error, if directions are created by complex rather than simple sentences (in defiance of the instruction in the documentation not to do this).
  • Problem message added, in place of an internal error, if the source tries to assign properties to all kinds (e.g. by "A kind can be cool or lame.").
  • Problem message clarified when the source tries to use the name of a kind of value as a 'let' variable name (e.g., "let the number be 10").
  • Problem messages improved when lists are rejected because the spacing before commas is missing.
  • Problem message added to be more helpful if "out of play" is used instead of "off-stage".
  • Problem messages added when Inform 6 code is Included in place of template files which don't exist, or parts of them which don't exist.
  • Problem message added, in place of an internal error, for attempts to construct a phrase in a vague way, like so:
    	The factorial of a number is a phrase.
    
  • Problem message added, in place of an I6 error, when a property name containing bizarre textual matter is created, usually as a result of missed punctuation: for instance, because of the missing full stop after "climbed" in:
    	The Tree can be climbed "There is a tree in the middle of the lawn." 
    
  • Problem message added, in place of an internal error, for attempts to give definitions to phrases like "To try (the feat - an action): ..." which treat "feat" as if it were a value. (Inline definitions can use this, but not as a value, and nobody else can use it all. "Stored action" would be fine, as the problem message explains.)
  • Problem message added to catch attempts to say that whole kinds of backdrop are "everywhere". (You can say a backdrop is everywhere, but only one backdrop at a time.)
  • Problem message added to catch certain name-clashes between new values created as table entries, and other values already existing.
  • Problem message added to catch "a random X" where X describes something with a domain which can't sensibly be searched - "a random text", for instance.
  • Problem message added to prevent defining a rulebook, activity or action variable with a name which already has a meaning as something else.

Bug fixes

  • Bug fixed whereby a hidden limit of 255 grammatically different command verbs was being applied. Exceedingly this limit (which is quite hard, in fact) resulted previously in inexplicable mix-ups between the command verbs at run-time, clearly a very bad thing. Inform now enforces the limit on the Z-machine, where it's inherent, and lifts it on Glulx, where there can now be 65535 grammatically different command verbs. (Applying this fix required changes to the I6 compiler; we'd like to thank Brian Rapp, who posted issue C63010 to the I6 support pages, for putting us on the right track.)
  • Bug fixed whereby releasing an existing story file (for instance to publish an old I6 project with new cover art and bibliographic data) would generate a spurious I6 error.
  • Bug fixed whereby a bogus "too many activities" run-time problem message would appear once an "[any ...]" token in parsing produced a particular kind of parser error message on more than 20 different turns during play.
  • Bug fixed whereby a condition property with three or more names, which was also given an explicit property name, would have the last name wrongly taken down: thus
    	A fruit can be unripened, ripe, overripe, or mushy (this is its
    	squishiness property).
    
    would lead to "mushy" not properly being defined.
  • Bug fixed whereby lengths of time (though not times of day) mixed up hours and minutes, so that
    	let T be 8 hours 3 minutes;
    
    would in fact set T to 3 hours 8 minutes. (Blushes all round.)
  • Bug fixed whereby route-finding wasn't working through one-to-one relations. (It seems we just forgot this case: one-to-various, various-to-one, and various-to-various all worked.)
  • Bug fixed whereby, if two actions look the same except that one takes two objects rather than one, then check/carry out/report rules can sometimes apply to the wrong one. For instance, given actions "tying" and "tying it to", a rule such as "Check tying something to: ..." could wrongly apply to the one-object form "tying" rather than to the two-object form.
  • Bug fixed whereby a stored action property attached to a kind of object will be such that all instances of that kind which do not define their own value for this property will forever after share the default value, even if it is changed for some instances and not others.
  • Bug fixed whereby mysterious run-time problems to do with your former self not having properties would appear in situations where the player is named as a character, and a property has been given to all people.
  • Bug fixed whereby a list of ordinary texts being copied into a list of indexed texts would lose their contents, or be corrupted.
  • Bug fixed whereby it would sometimes be possible to reach inside a closed container, if that container were part of something else which could be touched by the person concerned.
  • Bug fixed whereby a person asked to perform an out of world action will silently do nothing. The reply is now something like this:
    	> CLARK, SAVE
    	[That command asks to do something outside of play, so it can only
    	make sense from you to me. Clark cannot be asked to do this.]
    
    (This is a new library message - Miscellany number 74.)
  • Bug fixed whereby "does the player mean" rules would sometimes not apply in several cases where the grammar in question involves two nouns, and the second noun either follows immediately on the first or has some stipulation applied to it (such as that it be "[someone]"), or where the first noun has some stipulation applied but which the second noun does not share.
  • Bug fixed whereby, relatedly, the definition of the "block tying rule" in the Standard Rules was loosely worded and could catch one-object forms of tying, as well as the two-object form in the Standard Rules for which it was intended.
  • Bug fixed whereby Glulx programmers creating additional Glk windows would find that sound channels were improperly created, and that random-number generation would not necessarily be "fixed" on debugging runs. (Many thanks to Eliuk Blau, for both finding and correcting this.)
  • Bug fixed whereby units set up to imitate decimal places would print values wrongly if in between 0 and -1; e.g., given "A weight is a kind of value. -99.999 specifies a weight.", the value "-0.123" would print as "0.123".
  • Bug fixed whereby table entries initially set to unspecified lists, with a column entry described only as (say) "a list of times", would then during run-time appear sometimes to be lists of numbers regardless of what they had been intended to contain.
  • Bug fixed whereby optional clauses in descriptions of actions would not always be checked for sense - or rather, they would, but would fail with an internal error instead of a helpful problem message.
  • Bug fixed whereby setting or testing the "to be through" relation, for talking about the far side of one-sided doors, silently failed during play.
  • Bug fixed whereby a various-to-various relation where one of the two domains was a kind with no instances would sometimes produce I6 errors in translation.
  • Bug fixed whereby, if the player gets into an enterable container on top of a pushable between rooms enterable supporter, and then tries to push that supporter to another room, a spurious programming error is displayed as well as the (thoroughly merited) reproof.
  • Bug fixed whereby a supporter which held only an undescribed item would sometimes be mentioned in a broken-off sentence in a room description; e.g.
    	An easel is a supporter in the studio. "An old fashioned easel is
    	here." A painting is on the easel. It is undescribed.
    
    would produce
    	An old fashioned easel is here.
    	On the easel .
    
  • Bug fixed whereby confusion could occur between actions which have similar names except that one takes two nouns and the other only one, e.g., as between "pointing at" and "pointing it at".
  • Bug fixed whereby the use of brackets in heading names - e.g. "Section 2(c)1" - could cause bracketed stipulations like "(for use with...)" to be unrecognised.
  • Bug fixed whereby matching the names of extensions in headings (those "for use with E by A", for instance) was performed case-sensitively - so that unless the exactly correct casing was used, the heading would behave unexpectedly. (Sorry: some people thought this was us being pedantic, but in fact it was an accident.)
  • Bug fixed whereby the SHOWME testing command would incorrectly claim that some items were "initially carried".
  • Bug fixed whereby the serial comma would be missed out of some lists produced by "say", even when "Use serial comma" was in force.
  • Bug fixed whereby mapping tips given to improve the World index map would not always work where room names included the words "of" or "from".
  • Bug fixed whereby the Kinds index would sometimes doubly list an either/or property ("Usually... drab not colorful, colorful not drab").

Mac OS X app

  • A new option on the Advanced panel of the Preferences allows the user to choose between Git and Glulxe as the interpreter used in the Game panel to play back Glulx-format projects.
  • A new option on the Format menu, "Enable elastic tabs", causes Tables in the Source to be shown with elastic-width tabbed columns, which are the right width for their content. (Typing a single tab is enough to mark the end of the contents of a table entry; it's as if the tab is made of something elastic, because it stretches as needed.)
  • Various minor bugs have been removed.

Windows app

  • The spell check dialog now lets the user choose the dictionary language, and whether or not all text is checked, or just the text in quotes.
  • Spell check dictionaries for different languages can be installed by copying the ".aff" and ".dic" files into the "Dictionaries" sub-directory of the Inform 7 installation. Dictionaries can be downloaded from the OpenOffice project at
    	http://wiki.services.openoffice.org/wiki/Dictionaries
    
  • In the Source tab's Replace dialog, selecting "Replace All" will also replace the currently selected word, if it matches.
  • The interpreter in the Game tab can now play MOD music files.
  • Sounds playing in a game in the Game tab are stopped when the game stops.
  • Interpreter command files (containing a list of commands entered by the user into a game, as recorded by a game interpreter such as Frotz) can be imported into the skein with the File menu item "Import into Skein".
  • There is now a choice of Glulx interpreters for the Game tab: either Glulxe or Git. If there are any problems with games under Git that do not show up under Glulxe, we would be interested to hear of it.
  • The directory that Inform uses to store extensions, documentation, etc, which defaults to the user's "My Documents" folder, can be changed by creating a text file "home.txt" in the same directory as the Inform executable, containing the path to the required home directory.
  • More options added to the preferences dialog.
  • Alt-cursor left and right are now mapped onto the tab's back and forward actions, rather than the web browser's history.

Linux app

  • Colour now works in the Game tab.
  • The Game tab now has a choice of two Glulx interpreters: in addition to the traditional Glulxe, which has been brought up to date with version 0.4.4, one can now test one's Glulx projects in Git 1.2.2.
  • "Elastic tabstops" have been added as an optional way to display the source   text - this makes table columns the right width regardless of where tab   positions lie. This feature can be enabled in the Preferences window.