1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-05-13 14:38:39 +03:00

Migrated archive of past release notes

This commit is contained in:
Graham Nelson 2022-08-08 08:59:55 +01:00
parent c2916ea620
commit fa6d9f95a5
36 changed files with 20819 additions and 16 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
[Version](notes/versioning.md): 10.1.0-beta+6V37 'Krypton' (5 August 2022)
[Version](notes/versioning.md): 10.1.0-beta+6V38 'Krypton' (8 August 2022)
## About Inform
@ -20,12 +20,13 @@ code is continuously maintained alongside it: see ★ [Inform: The Program](
Software in this repository is [copyright Graham Nelson 2006-2022](notes/copyright.md)
except where otherwise stated, and available under the [Artistic License 2.0](https://opensource.org/licenses/Artistic-2.0).
To consult... | Turn to...
------------------------------- | -----------------------------------------
Brief news about ongoing work | [notes/working_notes.md](notes/working_notes.md)
Licencing and copyright policy | [notes/copyright.md](notes/copyright.md)
Branching and versioning policy | [notes/versioning.md](notes/versioning.md)
Language evolution policy | [https://github.com/ganelson/inform-evolution](https://github.com/ganelson/inform-evolution)
To consult... | Turn to...
--------------------------------- | -----------------------------------------
Brief news about ongoing work | [notes/working_notes.md](notes/working_notes.md)
Licencing and copyright policy | [notes/copyright.md](notes/copyright.md)
Branching and versioning policy | [notes/versioning.md](notes/versioning.md)
Language evolution policy | [https://github.com/ganelson/inform-evolution](https://github.com/ganelson/inform-evolution)
Version history and release notes | [notes/version_history.md](notes/version_history.md)
## Repositories

View file

@ -1,3 +1,3 @@
Prerelease: beta
Build Date: 5 August 2022
Build Number: 6V37
Build Date: 8 August 2022
Build Number: 6V38

11
notes/release/1-1.md Normal file
View file

@ -0,0 +1,11 @@
# Release notes for Inform v1.1 (build 3K27)
This release was made on 30 April 2006, 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](../version_history.md).
## No release note
Inform uses release notes to note changes from previous releases. As v1.1
was the first Public Beta release of Inform, it had no release note as such.

43
notes/release/1-2.md Normal file
View file

@ -0,0 +1,43 @@
# Release notes for Inform v1.2 (build 3K56)
This release was made on 4 May 2006, 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](../version_history.md).
## Language
- Changed the "tieing" action to "tying". (Inform's British author thought
this was an American spelling, and vice versa. Sorry.) This entailed
changes to examples Otranto, Brown, Snip, Snip Snip, and Under Contract.
## Documentation, examples and extensions
- Bug in U-Stor-It example fixed, and Disappointment Bay 12 slightly improved.
- Tidied up documentation of Basic Screen Effects and Plurality extensions.
## Bug fixes
- Fixed the "South is a dead end with printed name "Collapsed Dead End"."
bug causing the Undertomb example in the main text to fail to compile.
- Fixed problem with the "Early Childhood 4" example.
- Fixed compiler hang to do with misunderstood sentences setting the kind
of a kind to itself.
- Fixed internal error on "now X is P", where X is a thing and P an
property which isn't an either/or property.
- Fixed problems with defining a kind which includes the word "object".
- Fixed internal error on sentences using "to have" incorrectly.
- Fixed internal error on assertions giving inexplicit information about
the kinds of things (asserting kind(f(x)) = y where f(x) is unknown).
- Fixed failure to object to malformed sentences caused by misunderstanding
of the punctuation convention about quoted text ending sentences.
- Fixed failure to object to names of things or rooms containing literal
double-quoted text (which then failed to compile through I6).
- Fixed failure to object to negative assertions in the form "The P is not
X.", where P is a property taking a value.
## Mac OS X app
- (Mac OS X only) Support for OS 10.3.9 restored.
- (Mac OS X only) Build number now correct in Finder's Information window
for the application file.

151
notes/release/1-3.md Normal file
View file

@ -0,0 +1,151 @@
# Release notes for Inform v1.3 (build 3L95)
This release was made on 14 May 2006, 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](../version_history.md).
## Language
- Added the implication that something locked is usually lockable. This in
practice means that doors and containers described as being locked at
the start of play are considered to be something which the player
could in principle lock or unlock, given the correct key. (In the
absence of information about that key, the player will still not be
able to lock or unlock them, but will get a more realistic reply
from the game in response to attempts to unlock.)
- Added "persons" as an alternative plural of "person" (the usual one being
"people").
- Fixed nested comments: thus "[This [even so] is all one comment.]"
## Documentation, examples and extensions
- Various minor clarifications added to documentation, and new section 3.24
("Directions") added.
- As the beginnings of a process of adding reviews at the end of each chapter,
brief notes are added to the ends of chapters 9 and 10.
- Added two new Examples: "Feline Behavior" and "Panache".
- Minor changes to Examples:
- Being Prepared, Model Shop, Ballpark: added comments.
- Crane's Leg I and Eddystone: modified because of type-checking bug.
- U-Stor-It: fixed bug to do with cards appearing on all of the chests.
- Fussy Table: added understanding of "chair" as a chair.
- Yolk of Gold: rearranged rule order.
- Fixed bug in extension Plurality by Emily Short which involved noticing the
plurality of items mentioned by the player but not printed in the text.
## Problem messages
- Improved the "hawk is a handsaw" problem message.
- Improved the problem messages for incorrectly specified rules.
- Improved problem messages for "now ..." used with a condition which cannot
be directly arranged during play, such as "now Scene IV is happening",
and for "now ... and ...".
- Improved problem messages for assertions where it seems possible that the
wrong primary verb has been construed.
- Problem message for understand followed by an incorrect action corrected
(it was previously recommended as correct usage something which wasn't).
- More explicit problem message for an attempt to create a "part" of a room.
- Added run-time problem message for using the bare condition "in R" where
R is neither a room nor a region.
## Bug fixes
- Fixed bug whereby an assertion containing three or more consecutive
property adjectives ("a red rough square block is on the table")
would have only the first two acted upon.
- Fixed bug in which rules whose premiss contained an unrecognised action
plus the explicit word "rule" would activate every turn, rather than
produce a problem message.
- Fixed bug to do with rules beginning "Check/report/carry out", then an
action name including "it", then a conditional clause with "when" or
"while".
- Fixed bug in which using a "To say ..." phrase in the middle of a complex
say would cause it to lose track of conditional saying, sometimes
resulting in both "[if ...]" and "[otherwise]" parts being printed.
- Fixed bug in previous fix for failure to object to names of things or
rooms containing literal double-quoted text (which then failed to
compile through I6).
- Fixed bug to do with assigning properties to a null object when "it" is
currently undefined.
- Fixed bug to do with incorrect sorting of rules as between a rule
specifying "going ... in..." and one specifying "going ... from...",
where there are at least three such defined in a particular order.
- Fixed bug in which run-time type-checking did not resolve which phrase
definition to use where they differed only in properties of objects
(for instance, distinguishing "To recite (something - closed container)"
and "To recite (something - open container)").
- Fixed bug which very occasionally caused a "bad check-against in run-time
type check" internal error.
- Fixed crash if a Table is improperly named (or not named at all), and
added checking to enforce the rules on Table names.
- Fixed bug confusing ordinal and cardinal numbers in assertions (so that
"The third man is here." would be misread as if "Three men are here.").
- Fixed bug if a region is created whose name begins with a direction or
other indication of location ("East of Eden is a region.", say, or
"On the Prairie is a region.").
- Fixed crash if a room is created only by implication and with no name.
- Fixed failure of sentences like "East of the Garden is the Gazebo." to
establish which room is currently under discussion (the Garden): this
meant that some source text in the documentation and website failed.
- Fixed bug in which if pronouns would sometimes be assigned to implicitly
created things: for instance, in "A nose is part of every person. ...
George is a man. He wears a shirt and a pair of pants.", "he" was
incorrectly thought to refer to George's nose rather than George.
- Fixed bug (or arguably added feature) so that named rules can be property
values, that is, so that a property can have "rule" as its kind of value.
- Fixed bug in which values that vary, such as "location", were allowed
by I7 as table entries, only to fail to compile through I6; and added
problem message for the special case of "player".
- Fixed bug in which initialising a value that varies to itself, or to another
value that varies, was not reported as a problem, and fell through to
fail in I6.
- Fixed bug in which attempts to manipulate the properties of kinds would
sometimes not be reported as problems, and fall through to fail in I6.
- Fixed bug in which properties of indefinitely described objects, used as
the subjects of verbs, failed to compile in I6.
- Fixed bug in which, in some circumstances, the character "@" used in text
failed to compile in I6 (making it hard to write email addresses).
- Fixed bug in which "(called ...)" used improperly in adjective definitions
was not reported as a problem, and fell through to I6.
- Fixed bug in which doors described both as one- and two-sided would not be
picked up as a problem.
- Fixed bug in which explicitly starting the player in a container which is not
contained in any room would fall through to an error in I6.
- Added a very limited ability to cope with "if X has P greater than N", where
P is a property, and fixed bug whereby uses of "to have P" resulted
in internal errors: those which cannot be compiled now result in better
problem messages.
## Mac OS X app
- (Mac OS X only) Added a "Prune" button to the skein, with a slider control
for the severity of pruning required.
- (Mac OS X only) Added a font size option in the Preferences, affecting all
the panels simultaneously.
- (Mac OS X only) Removed the spurious error on the extensions contents page
about incorrect extension "Standard Rules.zip".
## Windows app
- (Windows only) If compilation fails, index pages from the previous compilation
are kept.
- (Windows only) Invalid characters cannot now be entered into the new project
name field.
- (Windows only) The File/Revert menu item has been removed, as it was
misleading quite a few people.
- (Windows only) Characters input with the AltGr key held down (such as ']' on
a Spanish keyboard) can now be entered in the Source and Game panels.
- (Windows only) Inform 6 code is coloured grey in the Source tab.
- (Windows only) The application now works with IE7 installed.
- (Windows only) The installer would sometimes fail to reinstall a new version
if the old version was not uninstalled, leading to an incorrect install
and two entries in "Add and Remove Programs". This should now be fixed.
- (Windows only) The application should now cope if the "My Documents" path is
something like "G:\".
- (Windows only) Replace now works if the string being searched for is only a
case insensitive match.
- (Windows only) The Source tab now has the standard edit context menu available
if you right click on it with the mouse.
- (Windows only) Fixed mis-addressing of the blue "go to documentation"
links, which always linked two pages after the one intended.

95
notes/release/1-4.md Normal file
View file

@ -0,0 +1,95 @@
# Release notes for Inform v1.4 (build 3M43)
This release was made on 21 May 2006, 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](../version_history.md).
## Language
- By popular demand (two people asked for this) "now X is not P" is now legal,
where P is an either/or property: thus "now the four-poster bed is not
scenery", for instance.
- Extended "let" to allow "rule" as one of the kinds of value allowed.
- Changed rules on the ' character so that it is not translated into " when it
begins text and is immediately followed by s and a space. (This so that
the apostrophe in "[The Kitchen]'s decor is awful." is not converted to
a double-quote.)
- Improved behaviour of "called", so that sentences involving relationships
with objects which are "called" now work: for instance, "The white door
is north of a room called the Hot and Cold Room."
- Unexpectedly capitalised articles following "called" are now no longer read
as articles. Thus, "South of the Passageway is a room called The Great
Hall of Infinity." will preserve the capitalised "The" in the room's name.
- Adjusted priorities in parsing so that table column names are considered less
likely to be intended than kind names. (This affects works where a kind
has its instances created by a table, since column 1 of that table will
quite likely have the same name as the kind.)
- When things are created by table (as in the example to do with Tour de France
jerseys), any articles in front of their names are now recognised, just
as if they had been created by regular sentences.
## Documentation, examples and extensions
- Fixed example "Pink or Blue" to deal correctly with one-letter inputs.
- Added a few words of explanation to example "Crusoe" to help people find the
bit of the action that needs replacing.
- Twelve new Examples added, as straightforward demonstrations:
- "Escape" - the most basic imaginable window.
- "Down Below" - the most basic light switch.
- "Replanting" - changing the results of trying to take an immovable object.
- "Up and Up" - a travel description printed before moving between rooms.
- "Neighborhood Watch" - a door lockable without a key but only on one side.
- "Slightly Wrong" - a room whose description is unusual on the first visit.
- "Laura" - use of a printed name and understand to get around particularly
awkward-named objects.
- "Tamed" - enterable containers and supporters and to explain a few details
of when we might say something was transparent.
- "Grace" - preventing the player from traveling to a distant location
without a vehicle.
- "Verbosity" - using full-length room descriptions.
- "Infiltration" - how to change a room description on each of several visits.
- "MRE" - various timing things, heavily commented.
- Minor changes to examples "Finishing School" and "Lean and Hungry" to address
the complaint that general rules were being written but only really made
sense for specific individual NPCs.
- Minor changes to "Garibaldi" examples to correct a terrible error (the Medlab
being called Sickbay, in violation of the game's nominal setting).
- Typo removed from example "Get Me to the Church on Time".
- Correction of "Hagia Sophia" example to try exiting the chair silently.
- Review sections added to chapters 3 and 17 of the documentation.
## Bug fixes
- Fixed crash on "Yourself is nowhere" (sic).
- Fixed crash sometimes occurring in indexing of rulebooks attached to scenes.
- Fixed crash (or sometimes other misbehaviour) on an over-complicated say.
- Fixed compiler hang when complicated assemblies never end.
- Fixed failure to check incorrect usage of 'called' in defining one-to-one
relations which are not reciprocated.
- Fixed failure to report improper usages of the (supposedly internal use only!)
syntax "...an action corresponding to...".
- Fixed failure to reject matches of vague descriptions against specific
ones in type checking, so that (e.g.) "an open door" would be accepted
against "(D - a door)" in a phrase definition.
- Fixed a bug in which complicated creations of kinds sometimes ignored their
adjectives: e.g., 'A radiant panel is a kind of backdrop which is lit.'
would sometimes silently ignore the "lit" part.
- Fixed a bug - well, arguably clarified an ambiguous specification - so that a
printed name for a kind is now inherited by things (or rooms) of that kind.
- Restored the (nowhere documented and theoretically unofficial) debugging
command RULES to working again.
## Windows app
- (Windows only) Search highlighting in the documentation tab doesn't keep
applying to further pages as you nagivate around.
- (Windows only) If nothing is found when searching, a dialog appears as feedback.
- (Windows only) Replacing text in the source tab no longer goes into an
infinite loop if the new text contains the old text as a substring.
- (Windows only) If the registry string value
"HKCU\Software\David Kinder\Inform\Window\Font Name"
is set, its value is used as the application font.
- (Windows only) If the registry DWORD value
"HKCU\Software\David Kinder\Inform\Window\Font Size"
is set, its value is used as the application font point size.

150
notes/release/1-5.md Normal file
View file

@ -0,0 +1,150 @@
# Release notes for Inform v1.5 (build 3P53)
This release was made on 9 June 2006, 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](../version_history.md).
## Language
- Made a general rewrite of the type-checking machinery: the new version is
more extensively tested than the old (and produces slightly better
Problem messages), but otherwise there should be no perceptible change.
- Made it possible to unset a wider range of relations with "now". For
instance, if "loving" is a one-to-one relation, then "now Elizabeth
does not love Darcy" is now allowed, if sad.
- Added a new text substitution "[conditional paragraph break]".
- New phrase option for "list the contents of...": "with extra indentation",
which increases the left margin by 1 level of indentation - which
simulates the way that the standard inventory listing looks.
- References to tables can now refer to the table in question using a local
or global variable, or a phrase to decide which table to look at.
## Documentation, examples and extensions
### Examples
- "The Abolition of Love" added, as a thorough exploration of all the kinds
of relations which can be set and unset.
- "Beachfront" added to demonstrate finding an object in a room which was
not there before;
- "Van Helsing" added to demonstrate a character who follows the player
from room to room.
- "Exit Strategy" added to demonstrate the beginning of scenes once in more
detail, and to describe what it means when the scene change machinery
is stuck (and how to diagnose and fix the problem).
- "Otranto": dealt with a bug such that a rope tied to a door did not
restrict the player's movement appropriately.
- "Tamed": typo fixed.
- "Up and Up": minor fix for a description assigned to the wrong object.
- "Day One": waiting added to the selection of acceptable activities for
which Freitag will not glare at the player.
- "Stately Gardens": typo fixed.
- "Sybil 1": additional comments and code to demonstrate some expanded
forms of keyword matching.
- "Port Royal 3": fixed a typo that was causing part of the source not to
copy properly into the code window.
- "Odyssey": minor syntax improvement to get rid of ugly legacy form.
### Extensions
- Basic Screen Effects (now version 2):
modified so that local variable names are less likely ever to conflict
with globals or other names in the author's work;
"clear only the status line" added;
"left alignment depth" variable added, allowing the author to print
status elements at a different spacing than 14 spaces from the
left edge of the screen;
- Menus:
added arrow and escape keys as viable means of input;
rule names added to several rules to make modification easier;
local variable names made less likely to conflict.
- Plurality:
changed "acts plural" phrase to apply to all objects, not just "things".
- Complex Listing (now version 2):
corrected erroneous documentation;
added "enumerated listing" option.
## Problem messages
- Problem message added for tables defined with names which already have a
meaning, leading to ambiguity (e.g., "Table of Three", since "three"
is a number), with specific checking for clashes between table and kind
named (e.g. "Table of Rooms").
- Problem message added for use of 'either' on a list of 3 or more possibilities.
- Problem message added where "number of ..." or "total ...", etc., are used
with a determiner which makes this nonsensical ("number of at least three
rooms", etc.).
- Problem message added for contradictory redefinition of global variables.
(Non-contradictory redefinitions are superfluous but legal.)
- Problem message added for incorrect uses of "with", and an explanation
supplied (where previously an internal error would sometimes occur).
- Fixed bug whereby '(called ...)' used incorrectly in a scene beginning
or ending condition could cause an internal error, and added a
suitable Problem message.
## Bug fixes
- Fixed bug whereby certain names consisting only of an article would lead
to an internal error (thus producing the record-holder for shortest
source text breaking I7: "A is a room."); and similarly for a name
which includes parentheses "(" or ")", also not allowed.
- Fixed bug: it's now possible to release a game with a website and cover
art in PNG format, where previously the website assumed JPGs were
used (although the compiled game itself was fine all along).
- Fixed bug to do with return values from activities being lost (with thanks
to Jesse McGrew, who provided the solution).
- Fixed bug whereby a complex listing early in a "say" would cause a
conditional [if] to go wrong later in the "say".
- Fixed bug in the debugging command RELATIONS causing it to print some
relations the wrong way round, and to omit some relationships with
reciprocal various-to-various relations.
- Fixed bug whereby released story files still contained some debugging verbs.
- Also accidentally left in was the I6 verb FULLSCORE: this no longer works,
and is deprecated now that there are better ways to achieve the same
effect. In this build, the action and corresponding grammar are removed,
leaving it open for designers to provide their own versions if they
choose to do so.
- Fixed bug in which "X are not Y" would sometimes complain of unproductive
negative even if Y is such that not-Y is unambiguous, whereas "X is not
Y" would work in similar circumstances.
- Fixed bug where attempts to unlock something with the wrong key produced
the wrong pronouns in the failure message.
- Fixed bug where "each turn" and "check" rules were confused in the Rules
index, and straightened out the spacing of this index.
## Mac OS X app
- (Mac OS X only) Mechanism for installing extensions now added: simply click
the [+] button in the Extensions panel of the application Preferences.
Installed extensions may also be edited using "Open Extension >" in
the File menu.
- (Mac OS X only) The 'Standard' library is now standard for Inform 6 projects.
- (Mac OS X only) Projects with a setting for a version of the Inform 6 compiler
that is not installed no longer crash the application (and choose a
sensible alternative version).
- (Mac OS X only) I6 compiler used internally is now bi-platform 6.31, not 6.30.
- Improved "Help" menu offers short-cuts to the Recipe Book and the Installed
Extensions documentation.
## Windows app
- (Windows only) The Transcript tab is now added - a major feature, and the
only one omitted from the Windows application in the first public
beta release. (There is one caveat: the transcript does not yet underline
differences when the game text does not match the blessed text.)
- (Windows only) Switched to using the NullSoft Installer System to create the
installer. If you have a previous version installed, you should uninstall
it from "Add or Remove Programs" in the Control Panel before installing
this version.
- (Windows only) The "Install Extension" menu item no longer rejects extensions
with Unix-style line endings.
- (Windows only) The "Install Extension" menu item shows the installed extensions
documentation page after a successful install of an extension.
- (Windows only) Clicking on an item in the search results window now always
brings the appropriate tab to the front.
- (Windows only) Compiling a game no longer steals the input focus from the
Source tab.
- (Windows only) It is no longer possible to put the edit windows into "smart
quotes" mode.
- (Windows only) The Game and Build menus have been merged.

163
notes/release/1-6.md Normal file
View file

@ -0,0 +1,163 @@
# Release notes for Inform v1.6 (build 3R85)
This release was made on 26 June 2006, a rapid replacement for a mis-uploaded 3R84,
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](../version_history.md).
## Language
- Two new adjectives, "on-stage" and "off-stage", have been added to the stock
of those built in to Inform. See 7.9 in the documentation, "Removing
things from play", for more on this; in particular, note that the
previous reference in 7.9 to testing whether a thing is "somewhere"
has been withdrawn. (This led to numerous difficulties with ambiguity,
and in any case was not very explanatory.) We now test whether a thing
is "on-stage" or "off-stage".
- Type-checking for conditions has been substantially rewritten. This mainly
affects "if", "when" and "now", but other phrases too, and generally
makes Inform stricter: for instance, "if the time since Escalating Danger
began is greater than 1" used to work - but now I7 points out that a
time cannot be compared with a number, and insists on "1 minute"
rather than "1". This picked up minor errors in "Glass", "Reliques of
Tolti-Aph" and the examples "Underlying" and "The Prague Job".
- The check removing rules have been rewritten. Previously, these duplicated
the check taking rules, almost right down the line: in effect the two
actions did the same thing, though being reported slightly differently.
In the new version, a new rule called the "convert remove to take rule"
actually converts the action from removing into taking at an early
stage: the practical effect of this is that any before or instead
rules written to cover taking now also cover removing. This is good
because it means one no longer needs to remember to cover both these
actions to be sure of handling the case of an actor picking something up.
- The scope of the "removing" action is changed so that if something is part
of X, then it is in scope for "remove -- from X": previously, only
the things inside X qualified. Being in scope for the action does not
mean that the attempt to remove the part will succeed, of course, and
it will normally fail the "can't take component parts rule": but being
in scope does mean that the designer can write rules to allow removal
after all.
## Documentation, examples and extensions
### Examples
- "Abolition of love": removed comment that shouldn't have been there
- "Bruneseau's Journey" slightly modified for tidiness
- Minor errors exposed by the improved type-checker fixed in "Prague",
"Glass", "Crusoe", and "Underlying"
- Extra commentary and new material added to "Laura" to explain parsing of
complex phrases better
- "Would you...?" added to demonstrate checking for the existence of a
property
- "First Name Basis" added to demonstrate how to assign synonyms to objects
- "Tiny Garden" added to demonstrate a very simple implementation of
continuous space
- "Equipment List" added to demonstrate and explain variant inventory styles
- "Tense Boxing" added to demonstrate past and present tense rules more
completely
- "Grilling" added to demonstrate a supporter from which the player cannot
take things
- "Removal" added to demonstrate a revised taking report
- "Nameless" added to demonstrate an ASK verb that works on objects, like
SHOW
- "Stone" added to demonstrate rules used as properties of things
### Extensions
- Documentation on newly installed extensions, not yet used, is now much
fuller. This breaks the impasse of "can't use this until I read the
documentation, can't read the documentation until I use this".
- "Basic Screen Effects": minor errors exposed by the new type-checker fixed
- "Locksmith": added yet more rule names; substantially updated to provide
better defaulting and add a "keychain" kind; advanced to Version 2.
- "Rideable Vehicles": added rules to prevent mounting when already mounted,
and to convert the exiting action to dismounting; added example.
## Problem messages
- Problem messages improved for mysterious problems arising from trying to
use local "let" variables in substituted text which turns up elsewhere
in the source, i.e., in places where those variables do not exist.
- Problem message added if two rules are being added with the same name.
## Bug fixes
- Fixed bug which caused negated conditions in the past and perfect tenses to
fail: I7 would read, e.g., "if the box had not been open" as "if the box
had been not open", which would generally be true much more easily.
- Fixed bug whereby actions declared without any mention of what they applied
to (e.g., "Requesting help is an action out of world." rather than
"Requesting help is an action out of world applying to nothing.")
would sometimes lead to spurious incompatibility Problem messages when
grammar is defined for the action. To clarify: from now on, an action
which does not say what it applies to, applies to nothing. (This is
tacitly assumed by some of the extensions source text already.)
- Fixed bug in which I7 allowed names with double-quoted text in, only to
crash at the I6 stage; when the cause was actually a misunderstanding of
the punctuation rules by the user.
- Fixed bug to do with names beginning with the word "kind", such as "kind
gentleman".
- Fixed bug which caused properties declared by the "(called ...)" text in a
new relation to have not quite the right type, causing odd type-checking
problems elsewhere.
- Fixed bug in which negatively phrased implications would sometimes be read
as if positive (e.g., "Scenery is never cold" is an implication not an
inference because it concerns all things which have a given property
at the start of play, not all things of a known kind; and it was being
misread as if "Scenery is always cold").
- Fixed bug to do with initialising variables whose kind of value is
"miscellaneous-value" or "string-of-text" (though the author of Inform
wishes people wouldn't use hacky internal kinds of value with hyphens
in the name, really).
- Fixed bug in which spurious problem messages occasionally occur when
giving grammar which specifies only one of two required things to
which an action will apply; and generally improved the previously
uninformative "not compatible" grammar Problem message.
- Fixed bug in which "now" does not always set properties correctly.
- Fixed bug whereby Problems in the final chunk of a text with substitutions
used explicitly as a value were not always reported.
- Fixed bug to do with relative clauses in property values (which are not
allowed, but used to cause an internal error rather than a proper problem.)
- Fixed bug in which errors on grammar verbs were sometimes reported quoting
the previous Understand... sentence in the source, not the one in which
the error occurred.
- Fixed bug in sentence-breaking, whereby text ending with sentence-closing
punctuation, immediately followed by a single word sentence in which the
word was capitalised, would cause that single word to be ignored.
- Fixed bug whereby "else" was not always equivalent to "otherwise".
- Fixed bug to do with permissions for the "initially carried" property.
## Mac OS X app
- (Mac OS X only) Direct "Install Extension..." option added to the File menu.
- (Mac OS X only) Extension documentation auto-updated when any file added to
the extensions area, even if dragged by hand in the Finder.
- (Mac OS X only) Bug fixed that was causing Inform projects sometimes to appear
as directories, and to fail to open on double-clicking.
## Windows app
- (Windows only) Differences between the game's current text and the blessed
text in the transcript tab are now underlined.
- (Windows only) The transcript is now saved in the same format as the OS X
application. (This means that any blessed transcript text saved from an
earlier version will have to be recreated.)
- (Windows only) The source tab now correctly colours nested comments.
- (Windows only) Entering a carriage return with the shift key held down no
longer results in text that the compiler rejects.
- (Windows only) Setting the focus on the game tab by clicking in it with the
mouse now keeps the input cursor on the input line being edited.
- (Windows only) Added a warning dialog to the "Bless All" button on the
transcript tab.
- (Windows only) The bless buttons on the transcript tab are now disabled if
there is nothing to do.
- (Windows only) If the registry DWORD value
"HKCU\Software\David Kinder\Inform\Start\Open Last Project"
exists and is not set to zero, then when starting the application just
opens the last project, rather than displaying the splash screen. If the
registry DWORD value
"HKCU\Software\David Kinder\Inform\Window\Clean Up Indexes"
exists and is set to zero, then when closing a project the index files are
not deleted. (Based on patches by Dan Shiovitz.)

124
notes/release/1-7.md Normal file
View file

@ -0,0 +1,124 @@
# Release notes for Inform v1.7 (build 3T38)
This release was made on 10 July 2006, 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](../version_history.md).
## Language
- The "means" and "means that" syntaxes are being withdrawn. These were always
rather crude word-substitution devices: to quote the documentation,
"now deprecated... may be withdrawn". In this release, the Standard Rules
no longer use the syntaxes even internally, and this prevents a number
of slightly odd side-effects related to the words "above" and "below".
In the next release, the ability to use the "means" and "means that"
syntaxes will be removed altogether.
- Two new relations are built in to Inform to handle doors and locks; the
verbal forms "to be through D" and "to unlock D" express these. This
mimics syntax previously achieved using "means that", but works in a
much tidier way, and is more flexible: for instance, "things which
unlock the Great Gate" is now a legal description.
- Type-checking extended further into the descriptions D used in constructions
such as "total P of D" or "a random D", and into complicated descriptions
given as part of the conditions for rules to apply. (For instance,
"Instead of taking a container in 100" - clearly absurd, as how can
a container be inside a number? - now produces a problem message.)
- Unnecessary Inform 6 general parsing routines are no longer compiled for
kinds of value which are not ever parsed: under some circumstances
this can save a significant amount of space at run-time.
- Extended the range of what can be negated using "now", so that, e.g.,
"now Elizabeth does not love anyone" is now allowed. (An obvious feature
whose absence was reported as a bug, but technically it's new.)
## Documentation, examples and extensions
### Examples
- "Uptempo" given a better "fast time rule".
- In some 21 of the examples, the syntax "-- has a property called --" has
been rewritten to be more specific about what kind of value is involved.
(For instance, to say "-- has some text called --" if the property
will hold text.) This is better style, and allows Inform to check
usage more carefully.
## Problem messages
- Problem message added for grammar token trying to understand a kind of
value which cannot be parsed, such as 'rule' or 'scene'.
- Improved problem messages for property declarations, and allowed property
declarations to create properties whose values have to objects of a given
kind.
- Improved problem message for when "Understand the command..." goes bad.
- Improved problem message for incorrect usage of "... condition" names.
- Added problem message if a verb is defined with two present plurals (as
this can't be right, and usually means that someone has tried to define
the past tense using "they" rather than "he", "she" or "it").
- Added problem message for an attempt to "change O to A", where O is an object
and A is an adjective the truth of which can be tested, but not changed
(e.g. "change O to visible").
- Added problem message for creating a kind of value containing "of". (This
never worked, due to all kinds of grammatical ambiguities, but used to
fail with an inexplicable problem message: now it fails with an apology.)
## Bug fixes
- Removed spurious problem message claiming that certain "after" rules would
have no effect.
- Fixed bug whereby arbitrary text could, under some circumstances, match the
"[number]" token of grammar.
- Fixed bug under which rules applying to actions done for the Nth time
might fail to apply if these actions had been interrupted by other
actions earlier in the same turn (e.g., to implicitly take something
before moving on to do something with it).
- Fixed bug whereby specifying that one of the named built-in rules belongs
to another rulebook (i.e., as well as its usual one) would result in
one of the two rulebooks being a partial duplicate of the other.
- Fixed bug causing "item described" (and the thing implicitly meant by a
bare property name) in a text with substitutions to refer to the
wrong thing, when this text is being printed from within another text
with substitutions.
- Fixed bug in which tests such as "if not visited" sometimes lost the
sense of the "not" and instead tested "if visited".
- Fixed bug whereby route-finding and counting steps through reciprocal
various-to-various relations would sometimes give incorrect results if
the relation had been changed from its initial state at run-time.
- Fixed bug by which "everything" was not always equivalent to "every thing",
and similarly for "everyone", "everybody" and "everywhere".
- Fixed bug to do with parsing times of day around midnight and midday.
- Fixed obscure bug to do with editing the player's command. (Well, in fact
Jesse McGrew fixed it.)
- Fixed bug in which a property is being declared as possible but whose name
coincides with a participle of one of the containment verbs. (E.g.,
"A weapon can be worn.")
- Fixed bug whereby a rule about "doing something" (unspecified) to some
specific kind of noun would result in run-time errors if the current
action did not take a noun, e.g., when looking.
- Fixed bug whereby setting the printed plural name of a kind might lead
to a failure to compile through Inform 6 (due to a duplicated "plural"
property).
- Fixed two unrelated bugs to do with apostrophes inside commands leading
to grammar declarations which failed to compile through Inform 6.
- Fixed bug causing spurious problem messages with garbled text: this
affected the examples "Table Foosball" and "Air Conditioning is Standard".
(We believe the bug only manifested itself under Mac OS X running on an
Intel processor.)
- Fixed bug causing scene begin/end conditions to go wrong if they tried to
use the "location of X" phrase.
- Fixed bug causing problems with scene begin/end conditions to be reported
at the wrong sentence of the source text.
- Spurious newline after "That noun did not make sense in this context." removed.
## Windows app
- (Windows only) Boxed quotations are now correctly displayed in the game tab.
- (Windows only) Extensions can be created, opened and edited within the
application.
- (Windows only) If an error occurs in an extension, clicking on the link in the
problem report opens that extension.
- (Windows only) The file dialog for installing extensions now allows multiple
files to be selected at once.
- (Windows only) Undo and redo in the source tab now works correctly with Unicode
characters.
- (Windows only) Added a "Trim skein" button to the skein tab, which removes all
unlocked skein knots.

24
notes/release/10-1-0.md Normal file
View file

@ -0,0 +1,24 @@
# Release notes for Inform v10.1.0
**These are incomplete and draft notes for a release not yet made**
This release was made in August 2022. Bug reports were at this time tracked
at Jira, with issue numbers written I7-NNNN, but Mantis issue numbers
continued to be used for bugs fixed before the move to Jira, so that this
log contains some of each.
## Overview
Not yet written.
## Language
## Documentation, examples and extensions
## Problem messages
## Bug fixes
## Mac OS X app
## Windows app

114
notes/release/2-1.md Normal file
View file

@ -0,0 +1,114 @@
# Release notes for Inform v2.1 (build 3V01)
This release was made on 2 August 2006, 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](../version_history.md).
## Language
- Rather than being a bug-fixing build, this build carries out a number of
significant internal reforms, some outwardly visible and some not.
- For the first time, compilation to the Glulx virtual machine rather than
the Z-machine is possible. As the option on the Settings panel for a
project suggests, we had always intended this to be a possibility,
but too much was involved to get Glulx working in time for the public
beta. In the future, we hope that Glulx will provide a solidly
reliable platform for larger and for multimedia works: at present,
though, our aim is simply to allow larger works to be compiled:
and there are a few restrictions on screen effects, with some code
(particularly to do with coloured text) not yet working.
Glulx support in this build is experimental at best: we ask users
not to send bug report forms yet, and would advise that people avoid
publishing works compiled to Glulx rather than Z. With that said, we
do believe that worthwhile progress is being made.
- The most important change in adapting to Glulx was the switch to an
Inform 6 library derived from library 6/11, the current biplatform
I6 library: up until now, Inform 7 has used a heavily adapted I6
library referred to as "6/10N", derived from both 6/9 and 6/10.
The new library, "6/11N", is the work of Jesse McGrew: our intention,
once Glulx support is stabilised a little, is that this will
eventually become library 6/12 - that is, the standard I6 library
for use by both I6 and I7 authors alike. This should finally bring
together branches of work on the I6 library which have been divergent
for three years now.
For the most part, the change of library will be invisible to I7
users, but the adoption of various I6 bug-fixes and improvements
between 6/9 and 6/11 should subtly improve the behaviour of Inform
story files at run-time.
- Inform now reacts more helpfully to various overflows in Inform 6: thus, if
Inform generates code which overflows the size of the Z-machine or
breaks one of Inform 6's memory settings, rather more useful pages of
advice are displayed.
- As promised, the deprecated "means" and "means that" features have been
withdrawn, and removed from Chapter 19 of the documentation.
- The meanings of "in" and "on" have been made stricter: in past builds, the
test "if A is in B" would pass if, e.g., A was being carried by a person
B: this now fails. "A is in B" requires B to be a room or container;
or else requires A to be a room or region, and B a region. Similarly,
"A is on B" now requires B to be a supporter. The point of these reforms
is that the built-in relations (well, all relations, really) ought to
test as the same relation that they assert: asserting "The spanner is
in the box." implies that "the box" is definitely not a person, so it
is wrong for "if the spanner is in Fred" to succeed where Fred clearly
is a person.
- Because it is, nevertheless, useful to be able to test "by whatever means
A is immediately carried by B", the meaning of "to hold" has been
changed to this relation. This accords with the meaning of the existing
construction "the holder of A": thus "B holds A" if and only if B is
"the holder of" A, and one can talk about "things held by B", and so on.
In previous builds, "to hold" was synonymous with "to carry", and
implied that the holder was a person: clearly, this is no longer true.
A bucket can "hold" sand, a table can "hold" place settings, and so on.
Note that, as with "holder of", the parts of something are also deemed
to be "held" by it.
- Bug fixed so that "now" is able to change variables and properties, e.g. by
writing "now the score is 132" or "now the carrying capacity of the
player is 10". (In general, the "now" mechanism for asserting things
has been rewritten, and should be more capable all round.)
- When Inform deals with descriptions such as "the people who are in lighted
rooms", it compiles code using Inform 6's "objectloop" construct. The
running speed of the result depends in part on the form of objectloop
used, and in general it is fastest to try to minimise the size of the
set of the objects looped through. Inform 7 now does a better job of
minimising this set, and tries to avoid circumstances in which it is
forced to loop through every object in searching for a match to a
pattern. (It is possible that, in a limited number of cases, a
description such as "if a woman (called the shopper) is in a shop, ..."
will now result in a different woman being written into the "shopper"
value than would have happened under previous builds - still a
woman who is in a shop, but maybe not the same one. This might possibly
affect Transcripts being used for testing.)
Because this optimisation trades memory space for time, it is switched
off if "use memory economy" has been requested.
- Values of kind "rule" can now be said - the result being to print their
names: e.g., "can't turn scenery rule". This will probably only be
useful for debugging, or the writing of surrealist competition pieces.
## Documentation, examples and extensions
### Examples
- Minor changes have been made to a small number of examples to reflect
this stricter sense of "in";
- Two new examples, "Bees" and "Zqlran", demonstrate a random maze and
and an exotic time notation respectively.
### Extensions
## Problem messages
- Problem messages in the EPS map-maker generally tidied up.
## Bug fixes
- Bug in listing installed extension documentation fixed.
## Mac OS X app
- The scene icons missing in build 3T38 for OS X have been restored.
## Windows app
- The crash occurring in build 3T38 for Windows to do with "a, b, and c" has
been fixed.

279
notes/release/2-2.md Normal file
View file

@ -0,0 +1,279 @@
# Release notes for Inform v2.2 (build 3Z95)
This release was made on 14 September 2006, 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](../version_history.md).
## Language
- A new toolbar button, Index, (re-)makes the current project, but shows the
revised index rather than the ensuing game. It's useful when, for
instance, laying out rooms and map connections, as it allows for an
easier comparison of the source text with the World map.
- The unsupported types "object-specification" and "object-specification-unsub"
have been withdrawn. In all cases where a phrase takes a description of
a set of objects - for instance as what to list in a "[list of S]",
or as what to repeat through in a "repeat with X running through S" -
this is now called simply "description". Moreover, the operations
"random S", "number of S", "total P of S" and "(superlative) S" -
such as "number of men", "a random man", "total carrying capacity of
men", "the heaviest man" - are all now defined as phrases like any other,
rather than being special constructions inside Inform. (This should ease
slightly odd problems experienced by a few people where Inform's parser
could not cope with phrases whose names were too similar to these four
constructions.) Finally, although "description" is not a kind of value,
it is legal to use "description" in new phrases:
To enumerate (collection - a description):
repeat with the item running through the collection
begin;
say "-- [The item].";
end repeat.
We could then "enumerate lighted rooms", say. Note that "collection"
here stands for whatever description is used when the phrase is invoked:
it can in turn be used wherever a description is needed. We could,
for instance, evaluate "the total carrying capacity of the collection".
- Actions can now require three levels of access to something in order to
work, rather than two:
- "Visible" and "touchable" (the default) are as before, and "carried"
has been added. (E.g., "Assaying is an action applying to one carried
thing.") Carried implies touchable which implies visible, in this sense.
- A new accessibility rule, the "carrying requirements rule", checks that
this requirement is met.
- Should it fail, a new activity, "implicitly taking something", will
attempt to have the actor silently take the item(s) required.
- Should this in turn fail, the action as a whole will fail the "carrying
requirements rule".
- In Understand sentences, the tokens "[something held]" and "[things
held]" have been withdrawn. If used, they now produce an explanatory
Problem message which lays out what must change. In most cases, what
will be needed is for the action's declaration to include the carrying
requirement, and then these tokens to revert to plain "[something]"
or "[things]"; but new tokens "[something preferably held]" and
"[things preferably held]" have been created which, though they can
match anything visible, will prefer items held when ambiguous names
are used.
These changes make little difference to the player's perception of what
is happening. They have two advantages: first, it is conceptually clearer
for the action to be where realism constraints are declared, rather than
in grammar for parsing, and it ensures that all grammar using the same
action follows the same rules; second, it moves implicit taking from the
I6 library into more modern I7 terms, thus making it much easier to adapt
and modify the behaviour of implicit taking: this has been a frequent
request.
- The actions "throwing X at Y" and "showing X to Y" now require Y only to
be visible, not to be touchable. (We envisage daggers thrown across
chasms, security passes shown through windows, and so forth.)
- The "blowing" action, intended for woodwind instruments and perhaps the
occasional siphon, has been withdrawn from the built-in set: it no
longer seems to us part of the essential core of actions. We have
similarly removed praying, digging, jumping over, filling and
swimming. (Our main concern with these was that, besides being of
marginal use, they tended to result in inappropriate text being
produced in the few cases where they were relevant.)
- Finally, "remove X" (as distinct from "remove X from Y") is no longer
understood as referring to the taking action. (It caused confusions
with removing in the sense of removing an item of clothing, and
hardly anybody ever used it.)
- Further work has been carried out on providing Glulx support. We now
believe that any work written without the explicit use of Z-code
assembly language (or extensions themselves containing such) should
compile, run and release correctly in with "Glulx" selected on the
Settings panel.
- Moreover, there is (as yet limited) support for displaying images, which
Inform calls "Figures", following an analogy with book conventions. To
use these:
- Place an image file, which must be a JPEG or PNG, in a subfolder
called Figures of the Materials folder for the project. Suppose
this is "Woodlands.png".
- Add the sentence:
Figure of Woodlands is the file "Woodlands.png".
to the source text. (Figure names can consist of any text so
long as they start with the word "Figure": "Figure 3 - Woodlands",
for instance, or "Figure W" would have been just as good.)
- The phrase
display the Figure of Woodlands;
will now show the image, when the work is compiled to Glulx. When
compiled to the Z-machine (which is the default setting on the
Settings panel, of course), nothing will happen: the phrase will
do nothing. The phrase option
display the Figure of Woodlands, one time only;
causes the image to be shown only the first time this phrase is
reached.
- A list of figures, with thumbnails and dimensions, appears in the
Contents index; a warning triangle is shown for any images in the
wrong format, or which are missing from the Figures folder.
- When a Glulx work is released as a blorb (the default setting for the
way releases occur), any such images are automatically included.
- The new kind of value "figure-name" can be used to define phrases
which work with Glulx pictures:
To do something funny with (F - a figure-name): ...
Figure names compile to resource ID numbers as used in the final
released blorb; these will usually be integers 2, 3, 4, ...,
since picture resource number 1 is reserved for the cover art.
- We would like to thank John Cater for contributing his infglk.h
definitions to the project: these definitions are included in the
I6 source code compiled by I7 on any project set to Glulx.
- In line with the existing text substitutions "[the Thing]", "[The Thing]",
"[a Thing]", "[an Entity]", for the name of something together with the
given article and casing, "[A Thing]" and "[An Entity]" have been added,
providing for a capitalised indefinite article.
- Technically a new feature rather than a bug fix: if an object is established
as a proper noun, in that its name as specified by "called" does not
begin with a standard English article - for instance "A man called your
local vicar is in the Belfry", where "your local vicar" is treated as
a proper noun - then this name will be capitalised if the object's
name is printed with "[The whatever]", "A whatever" or "An whatever".
(Thus "Your local vicar" would be printed instead of "your local vicar".)
- Kinds can now have plural names. This will relatively seldom be useful, but
the result is that the text "A house is a kind of thing. Some windows
are a kind of thing. Some windows are part of every house." - will now
result in a house's windows being deemed to have plural names (which for
instance means they will produce better messages with the Plurality
extension).
- Conversely, fewer plural names are now understood by the run-time parser:
an over-eagerness to recognise plurals of the names of unique, one-off
items was sometimes leading to name clashes and consequently misinterpreted
input.
- The SCENES testing command now summarises the current situation when scene
tracing is switched on - the story so far, as it were.
- Changes in the type-checker should cause Inform to compile slightly more
efficient code: it also checks a few more cases, and notably that the
parameters of an action in a "try" phrase are genuinely of the right
kind of value for the action in question.
## Documentation, examples and extensions
- A new chapter (Chapter 5: Text) has been created in the documentation: this
is made up of material previously in the middle of Chapter 4, with a
variety of sections (on Unicode, quotations, "say" and text substitutions)
pulled in from surrounding chapters.
- More detailed material has been added to the chapter on Rulebooks to cover
the distinction between object- and action-based rulebooks.
- Review sections added to chapters 2, 5, 6, 7, 8 and 9.
### Examples
- "Alpaca Farm" -- modified for new held rules
- "Ballpark" -- added commentary to better explain the function of
the table
- "Beachfront" -- added commentary to explain the order of
operations of the rules
- "Beneath the Surface" -- modified to account for changes to the
held token
- "Big Sky Country" -- modified to account for the removal of the
DIG action
- "Bruneseau's Journey" -- modified for the fact that BLOW has been
removed
- "Bumping into Walls" -- substantially simplified entire example to
demonstrate simpler handling of the problem
- "Cloak of Darkness" -- modified for new held rules
- "Crane's Leg 1" and "Crane's Leg 2" -- removed "a thing has a
thing called the ideal" and replaced this with a relation and some
discussion of why it is better to use relations than object
properties
- "Curare" -- added to demonstrate a possible use of descriptions
- "Dig" -- removed, since it showed how to get around a problem that
is no longer a problem
- "Down Below" -- added a demonstration of >FLIP grammar for the
light switch, and corrected a bug that would have allowed the
switch to be interacted-with from rooms other than the basement
- "Lakeside Living" -- modified to account for the removal of the
swimming action
- "Model Shop" -- added a few extra lines showing how to make
alternative names for the created buttons
- "Morning After" -- comment added to explain the meaning of "carry
out"
- "Pine" -- modified to account for the removal of the swimming action
- "Polarity" -- comment added to explain "first carry out going
rule"
- "Reflections" -- modified to account for the removal of the blowing
action
- "Revenge of the Fussy Table" -- redundancy removed from one
definition
- "Space Patrol - Stranded on Jupiter!" -- modified to account for
the removal of the DIG action
- "Tamed" -- modified also to model the case of a room whose
exterior is visible in another room (ie, nested locations)
- "3 AM" -- modified to reflect the changes to the held token
- "Trachypachidae Maturin 1803" -- modified to reflect changes in
the held token
- "Transmutation" -- added example on group relations, thanks to
Jesse McGrew
- "Under Contract" -- modified for the fact that various actions
have been removed
- "The Unexamined Life" -- modified to reflect changes in the held
token
- "A View of Green Hills" -- comment added explaining what noun
means in this context
- "Waterskin" -- modified to reflect removal of blowing action
- "Would you...?" -- more comment added explaining the behavior of
edible things
- "Zodiac" -- added missing line to the first version of the
scenario
- "Zorn of Zorna" -- modified to reflect removal of blowing action
- A new information-only example has been added to the chapter on Rulebooks,
giving a Backus-Naur form grammar for Inform's rule preambles
### Worked Examples
- "Bronze" -- modified to reflect myriad changes to action definitions
and held tokens
- "Glass", "When in Rome 1", "When in Rome 2" -- modified to remove a few
responses to now-undefined actions
- "Damnatio Memoriae" -- modified to reflect changes to held tokens; fixed
minor bug about thinking on the first turn
- "Reliques of Tolti-Aph" -- modified to reflect action changes
### Extensions
- "Complex Listing" modified to deal with the new specification type, and
advanced to version 3. Please note that "register things marked for
listing" is now not necessary in most cases: see the documentation.
## Problem messages
- Problem messages added for duplicate definitions of verbs or prepositional
usages.
- Problem messages to do with misphrased property declarations improved.
## Bug fixes
- Bug fixed in which phrases to decide if something-or-other would sometimes
not properly be parsed where they naturally begin with "the": so that,
for instance, the condition "if the action requires a touchable noun..."
would sometimes fail because of the "the".
- Bug fixed to do with spurious paragraphs such as "On the mantelpiece is a
brass clock." being produced in room descriptions when the mantelpiece
is scenery, and the brass clock has already been mentioned.
- Bug fixed whereby the creation of three things X, Y and Z with text in the
pattern "an X of Y and a Z" would sometimes cause Z to be created with
no article, i.e., as if its name were a proper noun - ignoring the "a".
- Bug fixed whereby testing if "X is in R", where X is a thing and R is a
region, would always come up negative even if X was in a room inside
that region. It now makes the obviously intended test.
- Bug fixed to do with incorrect casing when printing a literal value in a
pattern which includes words already occurring earlier in the source
with different casing from that in the pattern.
- Bug fixed causing programming errors to appear at run-time when attempting
to push an enterable container between rooms while within it (by
punting down a river, perhaps).
- Bug fixed causing occasional hangs, under Glulx only, when the player
character in inside or on something and also has component parts.
- Bug fixed causing snippet replacement to leave the wrong number of words
behind, under Glulx only.
## Mac OS X app
- (Mac OS X only) A new toolbar gadget, Headings, provides a breadcrumb-style
drop-down menu to navigate the headings and subheadings in the source.
## Windows app
- (Windows only) Clicking on a link in a problem report that points to an
extension does not open a new window if the extension is already open in
another window.

190
notes/release/2-3.md Normal file
View file

@ -0,0 +1,190 @@
# Release notes for Inform v2.3 (build 4B91)
This release was made on 10 November 2006, 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](../version_history.md).
## Language
- The Glulx story file format is fully supported by Inform for textual works,
and we have therefore documented it as a choice available for designers:
see section 2.13, now retitled "Limits and the Settings panel".
- The commonest source of problems with Glulx to date has been to do with
screen effects such as coloured text and menus, and in particular to
do with the extension "Basic Screen Effects", which works only for the
Z-machine formats. Because of this, and because we expect that people
will want to write other extensions providing unusual effects, two
new features have been added:
- An extension can describe itself, in its top line declaration, to
be for a limited range of story file formats. This is displayed in
the "Installed Extensions" documentation chapter, and an attempt to
use an extension with a story file format which does not match will
produce an explanatory problem message.
- Individual headings can specify that they contain material to be
used only with certain story file formats. This allows extensions, in
particular, to provide different implementations of the same idea -
for instance, a Glulx version and a Z-machine version - so that the
user will get the same behaviour whatever the current project Settings.
See the new section 21.6: "Extensions and story file formats".
- The "Release along with an existing story file" option has been improved,
and is now fully documented for the first time: see the new section
20.15, "Republishing existing works of IF". This enables Inform 6
users, or those with old games compiled using Informs 1 to 6, to
repackage them with cover art and bibliographic data for modern
interpreters such as Zoom, Spatterlight or Windows Frotz.
- "When play ends" rules are now run when play ends "in victory"; previously,
they were run on every other outcome but not this one. This is a change
in the design rather than a bug fix, so it may cause existing source
text to change its behaviour: if you are using "when play ends" rules
in a work in progress, you may want to test to see if victory is still
presented as you would wish it.
- If a scene is created with a name such as "Grand Finale", one can now
write rules for "When the Grand Finale begins: ...", etc., equivalently
to "When Grand Finale begins: ...". (This is in effect a bug fix, since
the same text would previously have created a spurious rule called
'Grand Finale begins' which was never invoked, rather mysteriously.)
- The syntax "otherwise if" (or "else if") is now allowed. This divides up
an "if ... begin; ...; end if", for instance as follows:
```
if the player is in the Garden
begin;
say "The wind rustles the long grass.";
otherwise if the player is in the Gazebo;
say "The wind catches at the canvas roof of the Gazebo.";
end if.
```
There can be any number of "otherwise if"s within an "if... end if".
(Note the lack of a "begin" at the end of each "otherwise if" - the "if"
is all one block of phrases.)
This new syntax is somewhat experimental, so will be documented in the
next build rather than this one.
- The limit on the size of a single I6 code inclusion, previously 10K, has
been substantially raised (to 200K): this for the benefit of one or
two complex extensions needing to incorporate very long hand-coded
I6 routines.
## Documentation, examples and extensions
- The use of illustrations is now officially supported. This was implemented
in 3Z95 but documented only in the change log; for this build a new
chapter on illustrations, Chapter 19, has now been added to the
documentation.
### Examples
- "Garibaldi" altered to reflect that colored lettering can be used only
under the Z-machine.
- "Scooby" reworded slightly to avoid a conflict with the new "otherwise if".
### Extensions
- Basic Screen Effects revised to compile correctly under both Glulx and
Z-machine; documentation updated; version number advanced to 3. (Thanks
to Eric Eve for his contributions.)
- Plurality revised to include additional management for pronoun behavior
(providing wrappers for Inform 6's MANUAL PRONOUNS constant and the
PronounNotice() routine), and to print "you" when the item described is
the player, in it/them phrases; documentation updated; version number
advanced to 2.
- Punctuation Removal revised to indicate that it is for the Z-machine only.
## Problem messages
- Problem messages have been added for use of '[if ...]' inside an existing
'[if ...]', and for '[otherwise]' or '[end if]' used with no matching
'[if ...]'.
- Problem message added for actions applying to two non-object values at once,
and bug fixed which (sometimes) caused this to generate a spurious
problem message on the wrong action.
- Problem message added for "...an X with L", where L is a literal value
such as a number, rather than the previous internal error.
- Problem message added for "X is a value that varies", which doesn't say
what kind of value it is, rather than the previous internal error.
- Problem message added for relations created between kinds of value with
an infinite range, in those cases where this is forbidden because
the run-time storage needed would be impracticable.
- Problem message added for compiled descriptions which contain local variables
(which will no longer exist when these descriptions need to be used:
this resulted in enigmatic "subtype of oversized local" internal errors).
- Problem message added for calling a variable simply "variable", as in
"The favourite son is a variable."
## Bug fixes
- Bug fixed in which I7 could sometimes crash on being asked to place rule A
after or before rule B in rulebook R, when B is not in fact in R: an
explanatory problem message has been added to respond to this.
- Bug fixed in which a room could not be called simply "Void".
- Bug fixed in which boxed quotations would sometimes produce array lookup
errors. (A bug introduced only in 3V01: apologies.)
- Bug fixed in which text containing an "[if ...]" and then an "[otherwise]"
but no "[end if]" and finally a substitution containing an ambiguity
not soluble at compile time would sometimes generate I6 code missing
a label definition, causing I6 to reject the output of I7.
- Bug fixed in which number variables initialised to negative numbers would
be created with the wrong value.
- Bug fixed in which attempts to match a snippet against a non-topic would
crash the virtual machine: they now produce a new run-time problem.
- Bug fixed in which reaching inside rules affected removing differently from
taking.
- Bug fixed in which RELATIONS testing command gives incorrect output for
some object-to-value relationships.
- Bug fixed in which actions applying to two values, and using the word "with"
in their names, were not always possible to categorise as named actions.
- Bug fixed whereby "(with nouns reversed)" did not work when applied to actions
whose names consisted of a single word.
- Bug fixed to do with "P of the X of Y", e.g., "price of the bag of sweets",
being misread.
- Bug fixed whereby "let Name be Value" would sometimes create Name with the
wrong kind of value (e.g. a time instead of an object) in cases where
the Value part was susceptible to multiple interpretations.
- Bug fixed causing a value consisting of the lone word "entry" to cause an
internal error.
- Bug fixed whereby setting a description for generic player-characters would
cause I6 to fail to compile I7's output.
- Bug fixed whereby a test scenario specifying that the player must be "in the
Holding Cell", etc., would crash due to misreading "holding" as the
start of a requirement about what is being held; also, if a capital H is
used for Holding, then this ambiguity no longer arises.
- Bug fixed in which the problem message for an object whose name is purely
textual would be followed by a spurious internal error.
- Bug fixed in which a wrongly phrased condition followed by a "try ..."
would sometimes produce an internal error as well as the intended
problem message.
- Bug fixed in which an "accidental clash of names" problem would similarly
sometimes cause an internal error as well.
- Bug fixed in which, once again, a problem reported in a "let X be Y" phrase
might also lead to a bogus internal error later.
- Bug fixed in which 'Definition:' at the end of the source, with no definition,
would crash Inform.
- Bug fixed in which a nameless new phrase, defined by just 'To:', would
cause an internal error.
- Bug fixed causing a close quotation mark to be omitted when quoting an
incorrect "Understand..." sentence in certain problem messages.
- Bug fixed in which definitions wrongly referring to properties would cause
the right problem message to be reported, but on the wrong sentence.
- Bug fixed in which I6 library (as included in 3Z95) failed to compile for
purely I6 projects.
## Mac OS X app
- On both the Mac OS X and Windows applications, documentation searches now
cover the examples as well as the main text, and search results are
more clearly displayed.
## Windows app
- (Windows only) Images now appear in the game tab when running a Glulx game,
rather than the place holder "[Image n]" text. (This brings the Windows
application into line with the OS X one.)
- (Windows only) The right-click menu for the source tab now includes a sub-menu
to change the size of the text.
- (Windows only) Ctrl-Delete and Ctrl-Backspace in the source tab no longer
confuse the undo logic.
- (Windows only) The cursor arrow keys now work in the game tab.
- (Windows only) The toolbar should no longer appear corrupted on 24-bit displays.
- (Windows only) When running Glulx games in the game tab, the
stylehint_Proportional flag is now respected.
- (Windows only) When running Glulx games in the game tab, glk_window_clear()
now works.

172
notes/release/3-1.md Normal file
View file

@ -0,0 +1,172 @@
# Release notes for Inform v3.1 (build 4F59)
This release was made on 21 December 2006, 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](../version_history.md).
## Overview
The main purpose of this build is to publish a redesigned system for
phrase and rule declarations, fixing a number of miscellaneous bugs,
removing some exceptions and clarifying ambiguities in the existing design.
Chapter 18 of the documentation is substantially rewritten as a result, and
the Rules page of the index has been redesigned. We believe that the new
design is much less ambiguous and, as a result, more fully explained than
the old, but the removal of some of these ambiguities does mean that minor
changes to some existing source text will be needed. If you have a work in
progress nearing its completion, you may need to test that the new rules
system does not change its behaviour.
## Language
- Phrases can be defined by "To ...:" (declaring a new phrase to be used in
the definitions of other phrases), by "Definition:" (defining adjectives),
by "At ...:" (declaring events to happen at given times) or as rules
to go into rulebooks (for instance, "Instead of taking:" goes into the
"instead" rulebook). In order to make it easier to tell immediately
which of these four forms is intended:
- (i) Rulebook names are now forbidden to begin with the words
"To", "At" or "Definition". (So far as we are aware, nobody
has ever done this, so this should not cause inconvenience.)
- (ii) Events happening at a fixed time are written "At 3:02 AM:" or
similar: events happening at some time not yet determined are
now written "At the time when the clock chimes:" rather than,
as in previous builds, just "When the clock chimes:". This
removes the confusing ambiguity with scene start/end rules
(e.g. "When Scene IV begins:") and with "When play begins:", etc.
- When Inform adds rules to rulebooks, it sorts them so that more specifically
applicable rules (say, "instead of taking the fish") come before vaguer
ones ("instead of taking or dropping something"). The method of sorting
used was largely unchanged from 3K27 to 4B91, but has now sharpened
in the following ways:
- (i) being "in" a room is considered more specific than in a region,
- (ii) and in a subregion more specific than in a super-region,
- (iii) "during..." clauses are now taken account of,
- (iv) "in the presence of..." clauses are now taken account of,
- (v) rules attached to a wider range of actions ("taking or dropping")
are less specific than rules attached to a narrower range
("taking"),
- (vi) rules with longer or more complicated "when" conditions are
considered more specific than those with shorter,
- (vii) rules applying in a limited range of turns or for a limited
number of times are considered more specific than other such
rules if the number of turns in which the rule could apply
is smaller.
Though these changes may change the effect of some complicated source
texts now standing, they should only really affect cases where rules
were previously considered equally applicable.
- When the Index shows the contents of a rulebook, it now uses a graphical
notation to show which rules are considered more specific than which
others. Hovering the mouse over one of the icons used in this notation
causes a "tool tip" to be displayed which explains on what basis the
decision was taken.
- The special verb "to be listed", used to specify how named rules are listed
in rulebooks, is now more flexible. The existing syntax remains:
```
The summer breeze rule is listed in the every turn rules.
The summer breeze rule is listed after the chirping magpie rule
in the every turn rules.
The summer breeze rule is listed before the chirping magpie rule
in the every turn rules.
```
And the following possibilities are added:
```
The summer breeze rule is listed first in the every turn rules.
The summer breeze rule is listed last in the every turn rules.
The can't eat unless edible rule is not listed in the check eating rules.
The can't eat unless edible rule is not listed in any rulebook.
The refined palate rule is listed instead of the can't eat unless
edible rule in the check eating rules.
```
The last three possibilities allow rules to be abolished for the whole
game without the need for procedural rules. (A rule abolished in this way
still exists, it merely isn't found in rulebooks at the start of play.)
This will make extensions which carry out large-scale library changes
more efficient.
- A "when/while" clause can now be attached to a rule in an object-based
rulebook not derived from an activity. (These used to be the only
rulebooks whose rules were not allowed a "when" clause, so the change
removes an unnecessary exception.)
- The synonym "final" for "last", in the context of rulebook placements, has
been withdrawn - it was an unnecessary complication. Thus "The last
chirping magpie rule:" still works, but "The final chirping magpie rule:"
does not.
- The new text substitution "[otherwise if ...]" has been added: this can be
used in text, between "[if ...]" and "[end if]" substitutions, in just
the same way that the phrase "otherwise if ..." can be used between
"if ..." and "end if" phrases.
- A new rulebook, "does the player mean", has been added to give the parser
clues on how to disambiguate commands. (This offers facilities analogous
to those provided by ChooseObjects in Inform 6, but applying to whole
actions and not to nouns alone.) See the new section 16.16 in the
documentation.
- File extension for blorbed Glulx-format releases changed from ".zblorb"
to ".gblorb". (Apologies: an oversight.)
- The horizontal compass directions can no longer automatically be referred to
by the word "wall", so that "examine the north wall" no longer generates
the action of examining north. This was an old Infocom convention, carried
over into Inform 6 for some years, but which causes problems more often
than it confers benefits.
## Documentation, examples and extensions
### Examples
- Masochism Deli added to demonstrate "does the player mean..." rules.
- Flotation added to demonstrate an object-based rulebook and named outcomes.
- Being Peter added to demonstrate an action-based rulebook with named
outcomes.
- Bronze, 3 AM, MRE, Mr Spruce's Non-Modal Question, Chronic Hinting
Syndrome, Fifty Times Fifty Ways, Happy Hour, Lakeside Living,
Lemonade, Noisy Cricket, Patient Zero, Y Ask Y modified to show
"otherwise if" better.
- Barter Barter, Bribery, Bruneseau's Journey, The Dark Ages Revisited,
Emma, Fragment of a Greek Tragedy, Mimicry, Minimal Movement,
Nickel and Dimed, Stately Gardens, Under Contract, Waning Moon
modified to get rid of now-unnecessary procedural rules and use
"is not listed..." instead.
- Aftershock, Crusoe, Get Axe, The Hang of Thursdays, Panache, Swigmore U,
Uptempo, Zqlran Era 8 modified to get rid of now-unnecessary
procedural rules and use "is listed instead of..." instead.
- Instant Examine and Look modified to get rid of procedural rule in favor
of a first rule in the turn sequence rules. Commentary added to
explain how the procedural rule might be used and why the first-rule
method might be preferable.
- No Place Like Home reassigned to the Awarding Points section, as being
more relevant there.
- Strictly Ballroom corrected for a missing word.
- Up and Up modified to use after going rather than before, as this is more
reliable.
- Beneath the Surface improved to make the chair a supporter.
- Witnessed 1 expanded to include new "does the player mean..." rules,
improving parsing behavior of the example.
- The Night Before added to demonstrate "does the player mean..." rules to
lower the parsing significance of body parts belonging to the player
compared to those of other people;
- Hudsucker Industries substantially updated to simplify logic, provide
better parsing behavior using "does the player mean..." rules, and
allow the player to refer to sorted letters by property.
- Costa Rican Ornithology given slightly more explanation of the topic
column, since this appears before the format has been fully introduced.
- We, and the two gas diffusion examples, moved to a new location.
- We given slightly more commentary to point users at extensions for
changing library messages if they want to do so wholesale.
- No Relation edited to discuss how Instead of going by... applies to
vehicles and other objects.
- Morning After edited for a typo in the commentary.
- Uptown Girls edited for a typo in the source text.
## Bug fixes
- Bug fixed by which (on Windows only) accented letters sometimes caused
confusion with digits.
- Bug fixed by which a rule which applied e.g. "for the third to eighth time"
(an explicit range of iterations) would generate code which failed to
compile in I6.
- Bug fixed in which rules "listed after" or "listed before" might give
spurious problems if the rulebook named had a name including the
word "with".
- Bug fixed whereby the Glulx interpreter was not checked to see if it could
provide pictures before being instructed so to do, which produced
problems with some text-only Glulx interpreters.

141
notes/release/3-2.md Normal file
View file

@ -0,0 +1,141 @@
# Release notes for Inform v3.2 (build 4K41)
This release was made on 23 January 2007, before Inform was open-sourced.
At that time versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Language
- New activities "clarifying the parser's choice of something" and "asking
which do you mean" allow customisation of the familiar messages:
```
(the mahogany inlaid box)
```
and
```
Which do you mean, the mahogany inlaid box or the icebox?
```
- The rules for the sorting of grammar lines in the grammar for command verbs
have been slightly changed. Few users should notice any difference, but
one change means that grammar added to cover "mistakes" should now no
longer be able to "mask" grammar for non-mistaken commands, something
which had been reported previously as a bug.
- A new rule called the "very unlikely to mean taking what's already carried
rule" improves the parser's handling of TAKE SPLODGE when there are
several splodges in different places, some of them carried.
- Blue "help" icon added to "Does the player mean..." in the Rules index.
## Documentation, examples and extensions
### Examples
- Magneto's Revenge fixed to use "the person reaching" rather than "the
person asked".
- Changes to Waning Moon, Air Conditioning is Standard, and Fifty Times
Fifty Ways to correct typos.
- Veronica added to demonstrate leaving a region.
- Numberless added to demonstrate two ways to emulate a switch statement.
- Pine4 given a tiny fix to make its articles behave better.
### Extensions
- Punctuation Removal made bi-platform (and version number advanced to 2).
- Version 4 of Plurality by Emily Short now responds correctly to
male/female settings even if the items in question are not of the
man/woman kind, and adds several further tokens.
## Problem messages
- Problem message added for attempting to use "Understand the command ... as
... when ...", where some condition follows the "when": this has never
been supported, but in previous builds the "when" clause was silently
ignored.
- Problem message added for attempting to use the "[text]" token in a
table entry or a ... matches ... condition, where it is not allowed.
## Bug fixes
- A long-standing bug fixed whereby things introduced without an article would
sometimes be given one, rather than being consider proper nouns (or mass
nouns): for instance, in "The player carries a small key, a tent, and
Variety Magazine.", the source text clearly suggests that Variety
Magazine is a proper noun, and I7 now recognises this.
- Two bugs fixed to do with "when..." clauses attached to rules in unusual
situations - both bugs having appeared only in 4F59. One related to
rules in the form "check A when B", where A is an action including
the word "it" (such as "telling it about") and B a condition; the
other to "when" clauses attached to object-based rulebooks known never
to run during activities, notably the reaching inside rules. In each
case spurious problem messages were generated.
- Bug fixed so that things are no longer "lockable" by default. (Instead,
locked containers and locked doors are lockable by default.)
- Bug fixed whereby an instruction like "Understand "[any actor]" as James
Bond." would generate I6 code failing to compile through I6.
- Bug fixed whereby one token to match an object making use of another one
would sometimes find the result corrupted: for instance,
```
Understand "leg of [person]" as a leg.
```
would get confused between the leg and the person whose leg it is said
to be.
- Bug fixed whereby some combinations of name words and tokens to match the
names of objects did not work.
- Bug fixed whereby meaningless text would sometimes match a "[number]" token
when parsing. Moreover, "[number]" has been improved so that it now
matches any literal decimal between -32768 and 32767 inclusive (i.e., the
full 16-bit range of signed integers supported by the Z-machine) rather
than duplicating the peculiar behaviour of the I6 number-parser, which
worked only on non-negative numbers up to 10000.
- Bug fixed which caused too many things (and rooms) to have plural forms of
their names recognised: for instance, a "red chair" would be referrable
to in the plural as "red chairs" even if it was the only one, and this
would cause ambiguity if a second object were in the same place and
with its main singular name coincidentally "chairs". The convention
now is that an object can be referred to in the plural with a name
inherited from its kind if and only if it has no name of its own. (This
change sounds substantial, but in fact did not change the behaviour of
any of the examples.)
- Bug fixed whereby large numbers of identical objects could cause mysterious
things to happen if ever 64 of them are in the same place at the same
time. (In fact an I6 library bug: thank due to Martin Bays for his fix,
which is patch L61125.)
- Bug fixed in which two things without names of their own were sometimes
considered "indistinguishable" by the I6 parser, and therefore grouped
into a plural (e.g., "six red blocks"), when in fact they were
distinguishable by virtue of having a visible property which differed
between the two (e.g., some being red, some being blue).
- Bug fixed causing documentation of examples in extensions to have any
Inform 6 fragments in (- ... -) brackets lose the -). In particular,
this affected the example in Menus by Emily Short.
- A limit on the number of different "in the presence of..." clauses
allowed in a single source text has been removed. (Previously it stood
at 100: now there is no limit.)
- A limit on the number of different noun- and scope-filtering tokens
allowed in a single source text has been removed. (Previously it stood
at 100: now there is no limit.)
- A limit on the number of new kinds of value which could be created by a
single source text has been removed. (Previously it stood at 400: now
there is no limit.)
- Two bugs fixed causing crashes in unlikely circumstances after a problem
has been encountered.
## Mac OS X app
- 4K40 contained a bug making it unreliable under Mac OS X on G4 or G5
processors: 4K41 is believed to fix this, with our apologies for the
inconvenience. In all other respects it is identical to 4K40 and
Mac OS X users with Intel processors need not download again.
- (Mac OS X only) The Skein's appearance has been redesigned, and an illustrated
tutorial to the new-look Skein now appears as section 1.8 of the
documentation for the OS X application. (We hope that similar changes
will be made shortly in the Windows application.)
- (Mac OS X only) The Skein panel now has a Layout... button for customising
the width and height proportions of the skein display.
## Windows app
- (Windows only) Documentation links from the Index tab now work with Internet
Explorer 7.
- (Windows only) The size, italic, text colour and background colour style hints
are now supported when running a Glulx game in the game tab.

1004
notes/release/4-1.md Normal file

File diff suppressed because it is too large Load diff

732
notes/release/4-2.md Normal file
View file

@ -0,0 +1,732 @@
# Release notes for Inform v4.2 (builds 4U65 and 4U67)
This release was made on 7 May 2007, before Inform was open-sourced.
At that time versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This build once again fixes all bugs reported up to 22 April, but in fact
few were found in 4S08; and it removes a hole in the type-checking system,
to do with phrases to make decisions, but this will have affected few users.
The main aim is an across-the-board reform of how actions are handled and
implemented in Inform. Proposals (6.33), (6.35), (6.37) and (6.39) from the
January 2007 consultation document are all carried through. It is now much
easier to create actions which work equally for all actors, and which need
a complicated interaction of rules to work.
## Language
## Documentation, examples and extensions
### Examples
- New example "Croft" added to demonstrate action variables.
- The now usually unnecessary word "trying" (see above) has been removed from
most of the examples involving actions.
## Mac OS X app
- Build 4U67, for Mac OS X only, is identical to 4U65 except for the OS X user
interface, in which the secondary controls in the various different panels
have been harmonised into new-style bar icons. (In addition, new forward
and back arrows provide the long-requested "browser-style history buttons".)
We are releasing this now rather than waiting because it also fixes the
minor but annoying bug to do with selecting detail pages in the Actions
index (see the 4U65 release notes).
- A minor bug in the OS X application means that viewing the new details
pages for actions in the index will cause the application to think we
have switched to the Documentation panel, with the effect that the tabs
normally present for switching between index pages will disappear:
switching panel and going back to the Index will cure this. Apologies
for the inconvenience: the bug will be fixed in the next release.
- Fixed bug in 4S08 for OS X only which caused Inform to create spurious empty
Materials folders in cases where this was not really necessary (although
this did no harm, and could not damage any existing Materials folder).
## Windows app
- Skein and Transcript improvements:
- A single click on a red badge in the skein is enough to go to the knot
in the transcript, rather than a double click as before.
- Any knot can be shown in the transcript by selecting "Show in
transcript" from the context menu or clicking on a red badge, not just
knots in the current thread.
- A knot selected in the above way is now indicated in the transcript by
having a thin blue border around it.
- The last played knot is now indicated in the transcript by having a
yellow border around it.
- The thick line in the skein now always shows the thread that is visible in
the transcript.
- The new menu item "Play All Blessed" plays through all threads that end in a
knot with an expected transcript.
- If the expected text in the transcript tab is double clicked on, the window
goes into edit mode, in which the expected text can be amended.
- When editing the expected text in the transcript tab, holding Ctrl+Enter
adds a carriage return to the expected text.
## Linux app
- i7 now has the -r story-directory and -c story-directory command-line options.
These force it into non-interactive mode, where it compiles or releases
the story file and exits. They can be combined with -s (for settings)
and -p (for prefix of installed inform7 package); see the man page for
details. It is hoped that these options will be useful for IDE authors.
### Rulebooks
- Variables can now be given to rulebooks. For instance:
```
The every turn rulebook has a number called accumulated bonus.
```
creates a variable called "accumulated bonus", which holds a number.
Such variables are initialised to the default values for the relevant
kind when the rulebook starts, and are accessible only within rules
belonging to that rulebook (or which have historically belonged to it,
but been displaced by a "listed in... instead" sentence). Rulebook
variables have a namespace of their own: so their names can freely
clash with those of things, rooms, etc.) If the rulebook should
recursively start again within itself, each new run-through of the
rulebook has its own set of variables. In short, they behave exactly
like "let" values except that they last for a whole rulebook, not an
individual rule or To phrase. (This was (6.33) in the January document.)
- As we can now add a potentially unlimited number of new clauses to the
descriptions of actions to say whether or not rules apply (see below),
Inform must refine its method for sorting rules in order of how specific
they are. The rules on "going" are unchanged and we believe that no pair
of existing rules not using the new features will have their orderings
changed in any rulebook. Rules which do use new clauses are now subject
to a new sorting principle, "III.2.4 - Action/Where/Other Optional
Clauses". This follows the standard conventions.
### Activities
- Variables can also now be given to activities. These are created just
before the "before" rules for the activity begin, and destroyed when
the "after" rules end (or when the activity is abandoned, though this
is a rare occurrence). They are visible to the rules for that activity,
and nowhere else, and again they have their own namespace; again, if
the activity should happen a second time within its first run, that
second occurrence gets its own copies of the variables. A simple
example of an activity variable:
```
Analysing something is an activity.
The analysing activity has a text called first impression.
Before analysing: now the first impression is "unremarkable".
Rule for analysing someone: now the first impression is "living tissue".
After analysing something (called the sample):
say "Your professional opinion of [the sample] is that it is
[first impression]."
Instead of examining something (called the sample):
carry out the analysing activity with the sample.
```
- If an activity is called X, we can now also refer to it as "the X activity"
for clarity's sake. (As with rulebooks called Y, which can already be
called "the Y rulebook". This has been done in order to make the syntax
for creating activity variables more explicit in its intentions.)
### Actions
- Variables can also now be given to actions. These are created just before
the "before" rules for the action begin, and destroyed when the action ends
(by whatever means that should happen). If one action is interrupted by
another, the new action gets its own copies of these variables.
The names of action variables are visible only within rules in action-based
rulebooks ("before", "carry out", etc.).
But note that every action's variables are visible to every such rule -
as has to be true, because we can have "before" rules which take effect
for many different actions, for instance, and such rules might need
access to any of their variables. In consequence, there is only one
namespace for all action variables: if two different actions name
a variable "item", say, clashes will occur. As a result, action variables
should be named in a way marking out to which action they belong, and we
recommend including the past participle of the action name - so for
instance, "vehicle gone by", "door gone through", "sticky item taken", etc.
A simple example of an action variable:
```
The singing action has a text called the lyric sung.
Before singing: now the lyric sung is "Destruction of the empty spaces
is my one and only crime."
The block singing rule is not listed in any rulebook.
Carry out singing: say "You cheerfully warble: [quotation mark]
[lyric sung][quotation mark][paragraph break]".
```
One more warning: since any action-based rule can see all the action
variables, it's possible to refer to the variables for an action which
is not actually happening. For instance:
```
Before doing something when the lyric sung is "Yesterday..."
```
would compile without problems, but fail at run-time when any action
other than singing was tried.
- In the above example, the variable "lyric sung" was set in a before rule.
In practice, though, it might be needed by other before rules, and then
the order of operation of before rules would become uncomfortably
important. To get around this, a new rulebook has been created: the
"setting action variables" rulebook. For instance, we could write:
```
Setting action variables for singing:
now the lyric sung is "Mystifying eyes."
```
This rulebook is run through before even the before rules, and could be
used to detect the context and set variables accordingly: but it does
not have any power to stop or change the action, and its rules should
ideally say nothing and do nothing other than set rulebook variables,
please. (Such a rulebook must work for any actor, not just the player:
so if the idea is to set variables based on the local situation where
the action will take place, look to see where the "actor" is, not
where the "player" is.)
- There is a new kind of value built into Inform: "action-name". (As its
hyphenated name suggests, this is primarily intended for internal use,
but there are no restrictions on it.) An action-name identifies the
particular action but none of the nouns attached: it corresponds to
numerical Inform 6 values such as ##Go. When an action called X is
created, the constant value "the X action" is also created: thus
"the looking action", "the putting it on action", etc., are all valid
constant values of this kind. (For those who wish to make variables
properties, table columns, etc., of this kind, the default value is
"the waiting action", that being a sort of zero among actions.)
- It is now legal to declare a "specification text" for an action, analogously
with kinds, and this is used in the Actions index.
### Action-Based Rules
- Inform source text describes actions with so-called "action patterns", and
these specify among other things who the actor must be. Up to now, there
have only been two ways to specify the actor, as in these examples:
```
taking a container
X trying taking a container
```
The former means the actor must be the player: the latter allows any
description X so long as X is not the player. Thus,
```
someone trying taking a container
```
allows the actor to be any person in play except the player. This made
it impossible to write a single rule applying to any actor equally.
A new third form has been added to allow for this:
```
an actor taking a container
```
For instance, we could write:
```
Instead of an actor jumping: ...
```
This implements proposal (6.35) in the January document.
- The second form of actor description above is often found to be clumsy:
```
Before X trying taking a container...
try X trying eating the cake...
```
Here the word "trying" is cumbersome. In a few cases it is needed to
make the text unambiguous, and if the description of the actual action
is the name of a kind of action, it is positively a good thing:
```
Before X trying risky behaviour...
```
but very often it is a nuisance. The word is now optional provided that:
- (a) the actor is described using a description ("someone", say, or
"Captain Haddock") or a variable name;
- (b) the eventual action is something explicit (like "taking...") rather
than a named kind of action (like "risky behaviour");
- (c) the action is being used in a "try" (or other phrase with an action
as its parameter) or as the premiss for a rule.
In other cases, "trying" will remain obligatory, but in practice they will
be very few. The Examples for 4S08 contained some 120 uses of "trying"
between them: this reform enabled every "trying" to be removed except one,
```
Instead of someone trying disorderly conduct in the presence of
the policeman:
```
where it would clearly not be grammatical to remove it anyway.
- As mentioned above, every action variable is visible from every action rule.
But so far they have all been specific in nature to particular actions:
for instance "lyric sung" makes no sense for non-singing actions. But
we can also make general action variables, also visible from all action
rules, by creating variables for the "action-processing rulebook".
This is really a concept which has always existed - "noun" and "second
noun" are exactly such variables. Joining them henceforth is "actor":
the person trying the action.
- Thus if existing source text contains references to something called
simply "actor", perhaps in a work of IF about the theatre, it may now
fail to work. (Something like "stage actor" or indeed "thespian" would
of course work instead. When we made this change it affected only one of
the Inform examples: Ballroom, which was previously using "actor" as a
let value in just such a rule - we changed it to read "dancer" instead.)
- Although the following is a bug fix, it is worth recording as a change in
behaviour. The room description at the end of a going action to a new
location is not technically the result of a looking action. (It doesn't
quite do a LOOK: for instance, it suppresses the body text for a room
visited before, and the paragraph spacing is different, etc.) In principle,
then, during such a room description the action ought still to be "going",
but that means that a rule such as
```
After printing the name of a person while looking: ...
```
would not take effect, which is clearly incorrect. This bug has been
fixed and such a rule now takes effect.
- It has always been the case up to now that the "going" action had a special
status in Inform: it allowed special clauses such as "... through ..."
(for the door gone through) not allowed for any other action, and this
behaviour was hard-wired into the syntax of the language. The ability
to create such clauses is now available to any action. For instance,
the following adds "...into..." and "...onto..." to Inform's syntax
for writing rules about dropping:
```
The dropping action has an object called the container dropped into
(matched as "into").
The dropping action has an object called the supporter dropped onto
(matched as "onto").
Rule for setting action variables for dropping:
if the actor is in a container (called C), now the container dropped
into is C;
if the actor is on a supporter (called C), now the supporter dropped
onto is C.
```
What's new here is the "(matched as...)" clause attached to the action
variable. We have declared that "... into X" should test to see if the
action variable "container dropped into" matches X, and similarly for "onto".
As a result, we can now write:
```
Instead of dropping something onto something, say "Don't drop things
onto platforms or ledges."
Instead of dropping something into an open container, say "Don't drop
things into open containers."
```
(Note that these clauses are only descriptions of the action: it makes no
sense to write
```
try dropping A onto B;
```
since the question of whether or not B is dropped onto depends on where the
player is, and is not something we can choose. Note that this is exactly
the same position as "going" was in before: for instance,
```
try going east from the Ballroom;
```
was and is not allowed, because the question of whether it's from the
Ballroom or not depends on where the player happens to be.)
This change implements proposal (6.37) in the January document.
- In previous builds, Inform has used a messy compromise in its handling of
check, carry out and report rules. These sometimes look to the user as
if they are single rulebooks: as if "check", for instance, is on a par
with "before" (which is indeed a single rulebook). In fact, for efficiency
reasons, there are individual check rulebooks for each action, as shown
by the diagram at 12.2 in the documentation.
Up to now, it has been legal to write a rule like
```
Check doing something: ...
```
even though this clearly can't belong to any rulebook in the diagram at
12.2. What was actually happening was that the checking stage used _both_
a single generic "check" rulebook _and_ a family of rulebooks with names
like "check taking". Rules defined in the Standard Rules would always go
into the individual rulebooks, but most (not quite all) rules created by
the user would end up in the generic "check" rulebook. While this gave a
pretty convincing illusion that all was well, it led to violations of
the rule-sorting principle that specific rules come before generic ones
("check doing something" would come before "check taking an open
container in the presence of a vehicle when the time of day is 11:13 AM",
say), and attempts to explicitly list rules into these rulebooks could
have odd consequences because of misunderstandings between "check" and
"check taking", say. Moreover, for implementation reasons, the actions
in the Standard Rules created check, carry out and report rulebooks
with funny properties which no other rulebooks had.
All of this has been abolished:
- the position is now strictly as shown in the diagram at section 12.2:
there are now no generic "check", "carry out" or "report" rules.
- all such rules are now placed into rulebooks specific to the actions
they belong to. Thus, e.g.,
```
Check an actor going: ...
```
is filed in the "check going" rulebook.
- problem messages now result from creating rules such as
```
Carry out doing something: ...
Report dropping or taking a container: ...
```
which cannot be filed into single unambiguous rulebooks;
- the Standard Rules now use the same action-creating syntax and
semantics as anyone else.
The one respect in which "check A", "carry out A" and "report A" rulebooks
are unlike other rulebooks is that rules in them do not check that the
action is indeed A. This is partly because there is no need (if we are
looking at the check taking rulebook, the action must be taking) but
mostly so that a single rule can be explicitly placed in the check (etc)
rules for more than one action at once. For instance, if we write:
```
Check an actor taking (this is the hypothetical rule): ...
```
and then say
```
The hypothetical rule is listed in the check removing it from rulebook.
```
the rule can be effective in both rulebooks: if it tested to see that the
action was taking, it would never have any effect in the check removing
it from rulebook, and thus it would be impractical to share rules between
more than one of these rulebooks - which would be inconvenient to the
Standard Rules, and also to extensions wanting to consider or abide by
rules from one action while processing another.
- We appreciate that this will cause a small amount of pain (we had to change
7 not-specifically-action-worded rules in the Inform examples) but we
think the pain is worth it for the simplification resulting, and most
such rules are fairly easy to recast. For instance,
```
Carry out doing something: ...
```
can probably become
```
Instead of doing something:
...
continue the action.
```
without any practical change in the outcome.
- Detailed index pages on individual actions now appear in the Index. We hope
these give a truer picture of what happens to any given action, by
showing every rule which can affect it, and making the sequence more
explicit.
- Problem message added to catch action descriptions which name unknown actors
(e.g. "Xerxes the Otherwise Never Mentioned examining the bucket" was
being read as simply "examining the bucket").
### The Built-In Actions
- Inform provides about 70 built-in actions which form part of the model world.
(That is, not counting out-of-world actions such as saving the game.)
In previous builds these have been implemented using a special action
definition syntax reserved for use of the Standard Rules only, and
consisting essentially of tables of rule names against I6 identifiers:
all the rules involved were implemented by I6 code. This was bad because
it meant that the built-in actions were treated as special in all sorts
of ways (not a very clean design technique) and because it was quite
hard to work out how the built-in actions worked, since one needed to
be able to puzzle out the I6 code at the bottom of all this. On the
other hand, it had the advantage of speed, since Inform did not have
to read and compile the built-in action rules from I7 source text.
As discussed in the January document at (6.39), there are trade-offs
here, but we have now bitten the bullet and reimplemented all of the
(not out of world) actions in I7 source text.
### The Going Actions
- The "going" action is the second most complex in Inform ("looking" probably
takes the palm) and the re-implementation in I7 has turned up two bugs
which have also been fixed. In addition, numerous rules have been
renamed or removed:
- the can't go through concealed doors rule has been renamed
the can't go through undescribed doors rule ("undescribed" being
the I7 word for what I6 called "concealed");
- the following rules have been abolished:
```
set up going rule
check to see if in a vehicle rule
determine direction property rule
print textual map connections rule
consult routine map connections rule
determine what's through door rule
```
These all clumsily worked out what we now regard as action variables,
except for the textual and routine map connections rules, which were
to provide backwards compatibility with traditional I6 use of the map
properties, which I7 doesn't recognise or use; however, we retain the
```
determine map connection rule
```
whose purpose now is to recalculate the "room gone to" variable
immediately before the "can't go" check. (This is done because people
often use before rules to modify the map, in order to make dynamic
map structures which respond to movement.)
- in the check rules, the can't go that way rule has been moved to after
the rules checking on undescribed and closed doors: after all how is
one to know that a door leads nowhere if it is closed? But if you do
succeed in opening such a door and try going through it, the
traditional I6 response "You can't, since the X leads nowhere."
has been restored in place of I7's recent practice of simply saying
"You can't go that way."
- A bug has been fixed which caused a person other than the player getting
off something to be reported as if he were getting out of it.
### The Looking Actions
- The following rules have been abolished:
```
consult LookRoutine entry point rule
standard searching rule
```
The former provided vestigial I6 support; the latter in all cases did
nothing.
### The Object Movement Actions
- Under the taking action, actors other than the player can now also use a
"player's holdall" (if carried) to overcome carrying capacity limits.
- The following rules have been abolished:
```
default inventory style rule
check let-go-before rule
check let-go-after rule
check receive-before for supporter rule
check receive-after for supporter rule
check receive-before for container rule
check receive-after for container rule
```
These provided vestigial I6 library support and are irrelevant for I7.
- The following rules for the removing it from action have been abolished:
```
can't remove from closed containers rule
check after-rules for taking too rule
standard report removing rule
```
They had no effect in 4S08, having been pre-empted for some time by the
automatic conversion of removing to taking: they had been left in the
Standard Rules by accident but could never have any effect.
- Similarly: the
```
can't insert component parts rule
```
was redundant in 4S08 and has been removed.
### The Actions Which Change the State of Things
- When the opening action by the player is successful, Inform shows the contents
of what was opened, provided it was opaque (so that the contents were
previously not visible) and provided that the player is not inside it.
The rule causing this was called the
```
reveal any newly visible exterior rule
```
which is a misleading - it has been renamed the
```
reveal any newly visible interior rule
```
### The Actions Involving Other People
- The following rules have been abolished:
```
check life property for giving rule
check life property for showing rule
check life property for waking rule
check life property for throwing at rule
check life property for attacking rule
check life property for kissing rule
check life property for answering rule
check life property for telling rule
check life property for asking rule
check thrown-at rule
```
These provided vestigial I6 library support and are irrelevant for I7.
- As for the do-nothing actions (see below), these are now also handled
symmetrically for all actors. (Thus, for instance, the block attacking
rule now blocks any actor attacking any other.)
### The Do Nothing Actions
- The actions indexed as "Actions which always do nothing unless rules
intervene", which consist only of a single checking rule to block them,
behaved asymmetrically in previous builds since they blocked the
action for the player, but allowed it to run through untouched and
with no rules applying for any other actor. This could result in odd
transcripts such as:
```
> SING
Your singing is abominable.
> PETER, SING
>
```
...because no rules at all fire for Peter trying singing, so the
action succeeds by default, and nothing is said or done.
In this build, the blocking rules for do-nothing actions now block
all actors. Thus:
```
> PETER, SING
Peter is unable to do that.
```
or with ACTIONS switched on:
```
> PETER, SING
[asking Peter to try singing]
[(1) Peter trying singing]
[(1) Peter trying singing - failed the block singing rule]
Peter is unable to do that.
[asking Peter to try singing - succeeded]
```
This affects the actions:
```
Saying yes, Saying no, Burning, Waking up, Thinking, Smelling,
Listening to, Tasting, Cutting, Jumping, Tying it to, Drinking,
Saying sorry, Swearing obscenely, Swearing mildly, Swinging,
Rubbing, Setting it to, Waving hands, Buying, Singing,
Climbing, Sleeping
```
- While this is much more logical, and means that every (non-out-of-world)
action in the Standard Rules now works equally for all actors, it does
mean that a rule in the form:
```
After Peter trying singing: ...
```
will no longer work, because Peter's singing action will be blocked and
never reach the "after" stage. To get around this:
```
Instead of Peter trying singing:
...
the rule succeeds.
```
Note the last line, forcing the action to be considered a success: actions
stopped by instead rules are normally deemed to fail, but making this
succeed means that no "Peter is unable to do that." text will be printed.
### Phrases
- Inform has been made a little stricter in when it allows certain phrases
to be used. For instance, the phrase "decide on X", which chooses a
value X, is now only allowed in a phrase "To decide which ..." - of
course it didn't make sense anywhere else, but this is now policed.
Similarly, "decide yes" is now restricted to phrases which need to
decide if something is or isn't true, and so on. (We're pretty certain
that this new check only rejects uses which do not at all achieve what
they look as they ought to do.)
- Similarly, "decide on X" now checks the kind of X to see if it matches the
required kind. This may produce problems either at compile time, or
at run-time. Note in particular that "nothing" is forbidden as a
value to decide on if we are required to produce a particular kind
of object such as, say, a "room", but is allowed if we are only required
to produce an "object". (This agrees with the conventions used for
variables.)
- Finally, phrases to decide a value now return the default value of the
appropriate kind if execution runs through to the end of the definition
without having reach any "decide on X" phrase.
- Problem message added to explain why two bracketed phrase terms immediately
next to each other, with no word in between, is against the rules -
e.g. "To combine (X - a number) (Y - a number)". (Previously Inform
would allow the definition, but then never recognise it in source text,
which was not a very helpful way of rejecting it.)
- Bug fixed whereby setting up a phrase "To decide what X is ..." might
read X as a description of a thing rather than a kind of value in
cases where X is both the name of such a kind, and also part of the
name of a thing. (For instance, if there is an object somewhere called
"number puzzle", then a phrase "To decide what number is ..." was
being misread as if its type had to be always the number puzzle object,
not a number.)
### Properties
- Two changes have been made to the way that assertions about either/or
properties of kinds are read. To demonstrate, consider the sentence in
the Standard Rules which reads
```
A thing is usually inedible.
```
What if we want to contradict this? In previous builds, we could write:
```
A thing is never inedible.
```
This worked, but owing to a bug,
```
A thing is always edible.
```
did not work - this bug has now been fixed. In either of these sentences,
we undo the sentence in the Standard Rules by writing a sentence which is
more definite - certain ("never", "always") rather than merely likely
("usually"). But what if we don't want extra certainty? In previous builds,
writing
```
A thing is usually edible.
```
would have no effect, because when two inferences are drawn about the
same property which contradict but which are each uncertain, the original
first-drawn inference is allowed to stand, and the second is ignored.
This convention has been reversed in the case of inferences drawn about
properties of kinds:
```
A later uncertain assertion about a property of a kind beats
an earlier uncertain assertion about the same property.
```
- Problem message added for saying that a kind has an either/or property
without previously having said that it can have that property. This
would usually not work anyway, but in previous builds, saying "K is
usually openable." would make it so: Inform now insists that we write
"K can be openable. K is usually openable.", as the documentation implies.
(The examples A Haughty Spirit and Disappointment Bay 12 needed to be
corrected in just this way.)
- Problem message added (rather than internal error) to reject implications
where the implied outcome is a value property rather than a simple
either/or property like open/closed.
- Problem message added to explain why "D can be X or Y" makes no sense if
D is something qualified by adjectives - e.g. "An open door can be
rickety or sturdy" makes no sense because the door still has to have the
property even at times when it is not open. (Previously Inform simply
ignored the adjectives, and assigned the property to the underlying kind.)
- Bug fixed whereby saying "now X is P" could be misconstrued if P refers to a
property but does so inexplicitly: for instance, "now X is the colour of
the button" would try to change X to be equal to this colour whereas
"now X is green" would simply change the colour of X. Both forms now
change the properties, not the identity, of X.
- Bug fixed whereby large numbers of either/or properties created for things,
followed by an either/or property being created for rooms, would sometimes
lead to bogus programming errors at run time.
- Bug fixed whereby creating a new either/or property but giving its antonym
as an existing one would sometimes wrongly be allowed, leading to
peculiar run-time problem messages. (E.g. writing "The Catwalk can be
flaming or unlit." causes this, because "unlit" is already the antonym
of "lit", a property of things.)
- Bug fixed whereby certain complicated forms of property assignment in
assertions could cause an internal error (e.g., "Blinky is an ephemeral
ghost with reaction "Boo!".").
### Miscellaneous
- Problem messages added for creating table columns whose names are articles
or existing values such as literal numbers.
- Problem message added (rather than internal error) for initialising a
K that varies (where K is a kind) to the value "nothing". This is legal
for an object that varies (though in 4S08 a bug blocked this), but not
where the variable always has to hold something of a given kind.
- Problem message added (rather than internal error) for an attempt to total
the column of a table rather than a property.
- Problem message added (rather than eventual I6 errors) for defining plurals
using quotation marks, e.g., writing 'The plural of "coin" is monies.'
rather than 'The plural of coin is monies.'
- Better problem message added for close square brackets used wrongly as
literals in quoted text.
- Bug fixed whereby continuations of tables would sometimes wrongly be reported
as containing columns not found in the original tables, and would
sometimes (even when they worked) have their columns incorrectly matched
up to the original table, in cases where the columns had been reordered.
- Bug fixed whereby a compound sentence asserting a relationship both with a
new specific object and also a new object described only generically by
naming its kind, as in:
```
The big box contains a container and Peter.
```
...would fail complaining of an overly complicated relationship.
- Bug fixed whereby the word "visible", redundantly used in a grammar token
as in e.g.
```
Understand "inspect [any visible thing]" as examining.
```
would cause a hang because I6 scope loops can't be nested.
- Bug fixed whereby hanging dependent clauses which depended on local variables
would sometimes be construed unexpectedly. (This really only affected
descriptions which were not very useful anyway, e.g., "the number of
things worn by X which fit Y", which is not good style since it in
fact evaluates the number of things worn by an X-which-fits-Y - that
is, the "which fit Y" clause appends to X and not the things.)
- Bug fixed whereby the "after reading a command" rulebook would sometimes
fail to be able to replace matched text in a command in cases where it had
been rewritten as a result of a "Which do you mean...?" question.
- Bug fixed whereby the character @ could not be parsed at run-time, and an
attempt to write something like 'Understand "@" as the giant at-symbol'
would produce I6 errors.
- Bug fixed whereby expressions containing more than one bracketed subexpression
would sometimes be misparsed: e.g. "let a be (x + y) / (x - y)" would
produce spurious problem messages despite being legal syntax.
- Bug fixed whereby Definitions involving looking up entries in tables would
sometimes compile through I7 but cause I6 errors.
- Bug fixed whereby calculations of the other side of a door, or the direction
taken by a door, would sometimes be incorrect in darkness.
- Bug fixed whereby problems to do with variable initialisation were
reported at the correct sentences but under the wrong headings.

377
notes/release/4-3.md Normal file
View file

@ -0,0 +1,377 @@
# Release notes for Inform v4.3 (build 4W37)
This release was made on 27 July 2007, before Inform was open-sourced.
At that time versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
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.
## Language
- 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.)
## Documentation, examples and extensions
### 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 fixes
- 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.
## Windows app
- 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.

367
notes/release/4-4.md Normal file
View file

@ -0,0 +1,367 @@
# Release notes for Inform v4.4 (build 4X60)
This release was made on 23 August 2007, before Inform was open-sourced.
At that time versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This build adds 19 new examples and modernises a dozen others, and presents
a new volume of built-in documentation: the Inform Recipe Book. It also
provides new features for variable text, improves and extends table-handling,
allows Glulx-format games to read and write files and communicate with
external programs, and allows extensions to create more readable and
useful documentation.
## Language
- The "[one of]" text substitution previously provided by Jon Ingold's
extension "Text Variations", which built on code by Andrew Plotkin and
Roger Firth, has now been adopted into Inform's core language. Examples
of its use include:
```
say "You flip the coin. [one of]Heads[or]Tails[purely at random].";
say "[one of]The phone rings[or]The phone rings a second time[or]The
phone rings again[stopping].";
say "You turn the light switch [one of]off[or]on[cycling]. Nothing
happens.";
say "The newspaper headline is: [one of]War Casualties
[or]Terrorists[or]Banks[sticky random] [one of]Continue To Expand
[or]Lose Out[sticky random].";
say "The light changes randomly again; now it's [one of]green
[or]amber[or]red[at random].";
say "Zorro strides by, [one of]looking purposeful[or]grim-faced[or]deep
in thought[or]suppressing a yawn[or]scratching his ribs[or]trying
to conceal that he has cut himself shaving[as decreasingly
likely outcomes].";
say "You dip into the chapter on [one of]fish[or]mammals[or]birds
[or]reptiles such as the black salamander[in random order]."
```
See the new section 5.6 in the documentation: note that "[as decreasingly
likely outcomes]" and "[in random order]" are new options, the former
using a tapering probability distribution, the latter a random permutation.
- It should be noted that the new implementation of this substitution is
completely different to the one provided by the extension. The previous
method involved printing all the text to a buffer array, then hash-coding
it and taking choices based on this hash, which meant that the same
sequence of choices occurring twice in the same text would be effectively
the same (because of having the same hash code); thus
```
"This is [one of]A[or]B[at random] versus [one of]A[or]B[at random]."
```
could never print "This is A versus A." or "This is B versus B." The new
implementation treats each "[one of]..." individually. To get around this,
define
```
To say A-or-B: say "[one of]A[or]B[at random]".
```
and then change the text to
```
"This is [A-or-B] versus [A-or-B]."
```
Furthermore, there is no buffer array, no hash code, and it is no longer
possible to extract state information by deliberately printing the text
with an incomplete "[one of]" construction. (To quote the Text Variations
documentation: "a terrible way to solve that kind of problem", so we don't
feel too bad about withdrawing it.) Thus the phrases "the index of the
last buffer" and "the index of the buffer" no longer exist.
In any case, the new implementation polices the use of the construction
so that leaving it incomplete is no longer possible. "[one of]" must be
matched by one of its possible conclusions "[purely at random]",
"[stopping]", ..., or problem messages will be generated; similarly,
"[or]" can only legally be used inside the construction. On the other
hand, the new implementation does allow the construction to be nested, both
explicitly in a single text and also implicitly (where a text substitution
inside one of the options itself does something which also involves a
"[one of]"), where the old implementation would silently have failed.
As an explicit example:
```
"[one of]A palace on the [one of]Nile[or]Euphrates[purely at random]
delta[or]A hovel by the [one of]Tigris[or]Rhine[purely at random]
river[purely at random]."
```
In practice, if a work in progress used "Text Variations" and did not
try to use "the index of the last buffer" then there is a good chance
that simply deleting the line
```
Include Text Variations by Jon Ingold.
```
will be the only change required.
We thank Jon Ingold and his collaborators for donating their design. The
extension "Text Variations" will continue to be available from the website
for the time being, but marked as no longer needed or compatible with
builds from here onwards. We suggest that users uninstall it once they
are sure that any works in progress continue to work without.
This change implements proposal (6.20) from the January 2007 consultation
document.
- The run-time code for handling tables has been rewritten to improve its
reliability and efficiency. A number of minor bugs have been fixed in
the process, notably a failure to sort correctly on tables which contain
mixed blank and non-blank rows, and a rarely occurring problem to do with
storing the number 32739 in table entries under the Z-machine.
- Table sorting is now carried out using a hybrid algorithm: insertion sort
from 1 to 11 rows, and in-place mergesort for 12 rows and up. This is
much faster on even medium-sized tables (e.g. about ten times faster on
tables of 200 rows), and is also stable in all cases: that is, if
two rows have the same value in the X column of a table, and that
table is then sorted (forwards or backwards) on the X column, then
they will stay the same side as each other. As a consequence, all sorts
are idempotent, that is, performing the same sort operation twice always
results in the second operation making no changes at all. (The previous
algorithm was idempotent but, owing to a bug, not in all cases stable.)
Insertion/in-place mergesort was chosen because we needed stability,
O(n log n) average running time (together with good performance
on nearly-sorted tables, which are the commonest usage cases in
actual Inform source text), O(1) storage overhead (the Z-machine is
extremely short of table space), and reasonably predictable stack usage.
- Projects compiled for Glulx rather than the Z-machine now have the ability
to make use of external files. Like sound effects and figures, these
are declared and given names before use:
```
The File of Glaciers is called "ice".
```
This creates a new named constant "File of Glaciers" (whose kind of value
is "external-file") for use in file contexts. (The prefix "binary file"
rather than "file" can be used to make the file binary in the Glk sense,
but the default is to use text files for all purposes.) Each file is
considered to be owned by some project, identified by its IFID. By
default, a newly declared file is owned by its own project, but we can
also specify that we want to use somebody else's file, either explicitly
or vaguely:
```
The file of Spectral Sequences (owned by project
"4122DDA8-A153-46BC-8F57-42220F9D8795") is called "adams".
The file of Boundaries (owned by another project) is called "milnor".
```
We can write or append to a file owned by anyone, but can only read a
file whose ownership matches this description.
External files are indexed in the Contents index, alongside figures and
sound effects.
Files sometimes exist, and sometimes do not: they are sometimes complete,
sometimes only partly written. (For a file shared between two games
running simultaneously, one might try to read a file the other is still
in the middle of writing.) We can test this with:
```
if the file of Invariants exists...
if ready to read the file of Invariants...
```
A file cannot be ready if it does not exist, so the latter is a stronger
condition.
- Tables can be saved to external files, and loaded them back in again, during
play: all file-handling is done automatically. The user only needs to use
the phrases:
```
read the File of Glaciers into the Table of Antarctic Features;
write the File of Glaciers from the Table of Antarctic Features;
```
Blank entries are preserved; it is legal to write a small file into a
large table, and if so, all unwritten entries are blanked; a run-time
problem is shown if the file contains more rows or columns than will
fit into the table which it is being loaded into; similarly, a run-time
problem is shown on trying to write a table which contains data not
safely exchangeable with other story files (or other compilations of
itself).
- Text can also be saved to a file, and again all file-handling is automatic:
```
write "Jackdaws love my big sphinx of quartz." to the file of
Abecedary Wisdom;
append "Jinxed wizards pluck ivy from the big quilt." to the file of
Abecedary Wisdom;
```
The quoted text can, of course, contain substitutions, so can be
long and complex if need be. On an append, the file is created if it does
not already exist.
- Text from a file is printed back with the text substitution:
```
"[text of the File of Abecedary Wisdom]"
```
To copy one file to another, for instance,
```
write "[text of the file of Abecedary Wisdom]" to the file of
Secondary Wisdom;
```
- The implications to do with lockability have been improved:
```
A locked thing is usually lockable.
A locked container is usually closed.
A locked door is usually closed.
A lockable container is usually openable.
A lockable door is usually openable.
```
Thus writing "The ballot box is a locked container." will now deduce that
the box is probably lockable, closed but openable. These are only guesses
by Inform, and can be overridden by giving explicit instructions to the
contrary: "The ballot box is a locked unopenable container."
- Definitions of adjectives, which previously had to refer to their subjects
only by the pronoun "it" (or in some cases "his", "her", etc.), can now
make callings. For instance:
```
Definition: a direction (called thataway) is viable if the
room thataway from the location is a room.
```
is a good deal easier to read than
```
Definition: a direction is viable if the room it from the location
is a room.
```
which was previously the only way to write this. Only a single calling
can be made, and it must refer to the specific object to which the
definition applies.
- A new rule in the Standard Rules, the "can only take things rule", prevents
the taking of objects which are not things - for instance, rooms or
directions. (Such an action can never normally be generated by the
grammar for typed commands, but if Understand sentences are written
to open the possibility then the player will see ugly "programming error"
messages: the new rule prints a more suitable reply.)
-Extension documentation can now request "paste into the source text" icons
like those found in the main documentation and its examples. If an
indented paragraph of quoted source text begins with an asterisk and
then a colon, like so...
```
*: A dog is a kind of animal.
```
...then the asterisk-and-colon are replaced in the final documentation
by a paste icon: clicking this will insert the copy which follows into
the source text. The text to be pasted is considered to begin after the
colon, and to continue until the next unindented text, i.e., it can
run for many quoted paragraphs, but as soon as the quotation is broken
the paste extent will end. Any tables within the quoted range should
be safely rendered with tabs in between the columns.
- Large extensions which need to include a large amount of documentation
can now subdivide it using headings and/or subheadings, like so:
```
Chapter: Pesky Meddling Kids
Section: Dog Food
```
A suitable table of contents with navigation links will be automatically
added to the extension documentation, if so.
- The Extensions chapter of the documentation has, appropriately enough, been
extended: it now opens up a limited number of previously restricted
syntaxes to public use. These will only be useful to experienced Inform 6
programmers.
- Fixed a further namespace clash: a "let" name can now coincide with the
column name of a table. (This was preventing John Clemens's extension
"Scheduled Activities" from working in recent builds.)
## Documentation, examples and extensions
- A new manual, The Inform Recipe Book, has been added to the application. It
sits alongside the previous manual (Writing with Inform) and presents
the examples thematically, with connecting advice and comparisons of
techniques to achieve a wide range of IF effects. This should make the
(now 357) examples much easier to browse and to borrow from.
### Examples
- "Radio Daze" example from Jon Ingold's Text Variations extension brought
into the main documentation.
- "Camp Bethel" added to demonstrate several other common applications of
text alternatives.
- "Chanel version 1" added to demonstrate paired "[i]...[/i]" and
"[b]...[/b]" italic and boldface tags, similar to HTML's.
- "Blink" added to demonstrate creating one's own text variations keyed
to values, using the special terminology explained in the Extensions
chapter.
- "Uncommon Ground" added to demonstrate creating one's own text variations
keyed to the identity of the player character.
- "Labyrinth of Ghosts" added to demonstrate recording the deaths of all
previous players of the story file by storing them in a file.
- "Alien Invasion Part 23" added to demonstrate saving preference files
from one game in a series for use in the next episode.
- "Flathead News Network" added to demonstrate communicating with a simple
Unix script running in the background, in order to provide live news
headlines (drawn from RSS feeds) inside a story file.
- "Ferragamo Again", "Straw Boater" slightly cleaned up to be better filed
in the Recipe Book.
- "Cinco" edited to fix a particularly bone-headed bug that vitiated the
whole point of the example.
- "When?" adjusted to slightly improve the way the example is described.
- "Modern Conveniences" added to demonstrate standard kitchen and bathroom
appliances.
- "Do Pass Go" added to demonstrate a pair of dice.
- "Mirror, Mirror" added to demonstrate remembering the current room
description by preserving it in an external file.
- "The Unbuttoned Elevator Affair" added as an example of a simpler lift
than the elaborate one in "Dubai".
- "Further Reasons Why All Poets Are Liars" added as an example of using
action variables for an action which moves a box around internal
positions inside a location; a much thinner version of this example,
"A pushable box", has been removed.
- "M. Melmoth's Duel" added, similarly to replace "Tinted wallpaper".
- "The Second Oldest Problem" added to demonstrate using action variables
to make the going action react to moving between dark rooms.
- "Saint Eligius" added to demonstrate an additional comment added to a
room description when the player first enters.
- "Baritone, Bass" added to demonstrate defining the character at the
start of play.
- "Bic" added to demonstrate testing whether any defined objects are missing
description properties.
- "Meet Market" added to demonstrate relations involving multiple values.
- "Depth" rewritten to improve the simulated geometry used to test whether
an item could fit inside a container.
- "Patient Zero," "Today Tomorrow," "Reporting rules for other characters'
behavior," "Uptown Girls", "Full Moon" edited to take advantage of
new text variation features.
- "Belfry", "Bikini Atoll", "Dearth and the Maiden", "Hayes Code",
"Lies", "Safety", "Undertomb" and "Weathering" all made into formal
numbered examples rather than, as in previous builds, appearing in
the running text of the manual.
### Extensions
- "Basic Screen Effects" very slightly updated so that the documentation
is clearer about the lack of colored letters in Glulx, and suggests
that the author turn to Glulx Text Effects for these capabilities
instead; also given a new example to demonstrate forcing the player
to type what we want him to type (since this is becoming something
of a frequently-asked question); chapter and section headings and
paste-able examples added.
- "Basic Help Menu", "Glulx Text Effects", "Locksmith", "Menus",
"Punctuation Removal" tagged so that the example can be pasted.
- "Complex Listing", "Plurality" tagged and given chapter and section
headings.
## Problem messages
- Problem message added for trying to use "[something related by...]" to
understand something which can have no relations.
## Bug fixes
- Bug fixed (or, if you prefer, feature added) whereby sentences providing
alternative names for times of day, like:
```
Understand "lunch time" as 11:30 am.
```
...now work as might be expected.
- Bug fixed whereby Understand ... as a person would fail with I6 errors.
(Apologies for this: an oversight in 4W37's abolition of the
player-character kind, which had the same flaw, but nobody noticed
because it was so little used.)
- Bug fixed whereby "if S is not happening", for S a scene, would incorrectly
think that a completed once-only scene was still happening.
- Bug fixed whereby implications would in some cases be ignored in circumstances
which it would be tiresome to write out, but to do with multiple things
being simultaneously present, some qualifying and some not.
- Bug fixed whereby using I7 to rerelease an existing I6 story file in
blorbed format with bibliographic data would fail because of the lack
of a room (needed to initialise certain room variables).
- Bug fixed whereby a few either/or properties could not be changed in play
without spurious run-time problems being produced. (In particular,
"now X is transparent" or "now X is opaque" caused problems.)
- Bug fixed whereby declaring that the player is a person who happens to be
initially somewhere other than in the earliest-created room, or outside
the map altogether, would cause programming errors or other strange
phenomena at run-time.
- Bug fixed where a player attempting to UNLOCK a door which is "locked" but
which, unbeknownst to the player, has no matching key, would cause a
run-time problem complaining about the lack of a "matching key" property.
## Windows app
- (Windows only) Added support for Glulx mouse events and hyperlinks to the
game tab.
- (Windows only) The justification style hint is now supported when running
a Glulx game in the game tab. As a result, games using Emily Short's
"Glulx Image Centering" will now work when run within the application.

856
notes/release/5-1.md Normal file
View file

@ -0,0 +1,856 @@
# Release notes for Inform v5.1 (build 5G67)
This release was made on 10 November 2007, before Inform was open-sourced.
At that time versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This build presents substantially richer support for handling text: for the
first time, arbitrary and manipulable strings of text are first-class values
in Inform. Substantial internal reforms, notably a new implementation of
the type-checker (now the third such), lead also to other improvements:
notably the ability to store and play back entire actions, and a form of
boolean type for the first time - "truth state". Finally, Inform is now
available for three new operating systems: Mac OS X Leopard (10.5), and
Fedora and Ubuntu Linux. We welcome Philip Chimento to the Inform team as
the author of the Gnome user interface for Linux.
## Language
### Indexed Text
- A new kind of value, "indexed text", exists to hold text which can be internally
examined or changed. Ordinary text values are automatically converted to
indexed text format when necessary. For instance,
```
if character number 1 in "[score]" is "7", ...
```
implicitly converts the text of the current score to indexed form, allowing
it to be looked at character-by-character, and then examines the first
character: so the test passes if the first digit of the score is a 7.
Memory is dynamically allocated to allow for such manipulations in a way
transparent to the user (and on the Glulx virtual machine 3.1.0 or better,
Inform story files can allocate arbitrarily large memory heaps).
See the new Chapter 19, "Advanced Text", in the documentation.
- Indexed text can be accessed by character, word, line or paragraph, with
further options to allow for punctuation; and we can search text to see
if it contains any other text, and if so, how many times.
- Moreover, indexed texts can be matched against regular expressions, with
replacement also possible. For instance: if V is indexed text, then
```
replace the regular expression "\d+" in V with "roughly \0"
```
inserts the word "roughly" in front of any number in V. The regular
expression language supported by Inform is essentially that of Perl
(once multiline mode, a Perl eccentricity, and hooks to embedded Perl
code have been removed) and Inform's algorithm has been verified against
Perl's own compliance tests: see the notes in section 19.6 for details.
- A particularly interesting text to manipulate is the command most recently
typed by the player. Inform stores such text in a kind of value called a
"snippet", and - like "text" - this automatically converts to indexed text
when necessary. Moreover, rules in the "reading a command" activity are
allowed to rewrite the text and reparse the command - for instance,
```
After reading a command:
let T be indexed text;
let T be the player's command;
replace the text "\p" in T with "";
change the text of the player's command to T.
```
removes any punctuation characters from what the player has typed.
- Indexed text table columns can be written to, and read in from, external files.
### Stored Action
- A new kind of value, "stored action", holds actions - not action names,
but fully-specified actions, including the information about who does what
and with what. (The default value is the player waiting.) If V is any
value of this kind, then
```
try V
try silently V
silently try V
```
all work in the obvious way. The phrase
```
current action
```
returns the action currently under way. Stored actions can do anything
that actions can do: in particular, they remember, if necessary, the exact
wording of the player's command at the time they were stored - so that
actions like "looking up 'x100' in the code book" can be stored and tried
later on. Stored actions can be used in "let" variables, in table columns,
in global variables, and also in properties. See the new section 12.20
in "Writing with Inform".
- To make an explicit stored action, we use the form of words "action of ...":
for example,
```
The best idea yet is a stored action that varies.
The best idea yet is the action of pushing the button.
```
- When making comparisons, we can of course compare any two stored action values:
```
let C be the current action;
if C is the action of pushing the button, ...
```
Although "action of ..." specifies an exact action, we can omit this if
we want to write a vague description of an action instead - but only when
writing it in a condition:
```
if C is taking something, ...
if C is doing something to the lever, ...
```
(If we had written
```
if C is the action of taking something, ...
```
Inform would have thrown up a Problem, because "taking something" is not
a single, definite action, so cannot be a stored action.)
- The constituent parts of a stored action can be accessed with the phrases:
```
action-name part of S
noun part of S
second noun part of S
actor part of S
```
- As a convenient abbreviation for testing these, the condition
```
S involves X
```
is true if the object X appears as any of the noun, second noun or actor
in S, and false otherwise.
- The "try" and "action of" constructions are now allowed to specify explicit
text in place of a topic in actions such as asking. (Beginners to Inform
often think this must be possible, but up to now it hasn't been, because
of the difference between a snippet and a text, etc.) For instance,
```
Instead of asking Biggles about "German flying machines":
try asking Biggles about "aircraft".
```
- The kind of value "action-name", used to denote not a complete action but
simply what form of action it is ("taking", "throwing it at", etc.) can
now be said for the first time.
- The premiss for a rule about actions can now make use of variables which
exist only inside action rules: for instance,
```
Check an actor waving when the noun is not held by the actor: ...
```
which was previously not allowed because the second mention of "the actor"
referred to an action variable which, in a strict reading of the Inform
syntax, existed only inside the rule (i.e., after the colon). This seemed
an unnatural restriction.
- The change log for build 4U65 claimed that:
```
the can't go through concealed doors rule has been renamed the
can't go through undescribed doors rule.
```
This turns out to have been completely untrue. We meant to, but forgot.
The name change has now been effected. (For the reason why, see 4U65.)
- Lastly, either a bug fix or a redefinition, according to taste: an action
description using "... in ..." refers to the room where the action is to
happen; up to now this has always meant the room where the player is, but
that went contrary to the principle that actions ought to treat people
equally. "... in ..." clauses now refer to the room which is the actor's
location. Thus
```
Instead of an actor going east in the Vast Nothingness, ...
```
now has effect if the actor tries this in the V. N., not if the player
happens to be there at a time when the actor (who might be anywhere)
tries going east. This sounds a complicated change, but it's clearly much
more logical, and we doubt if anyone relied on the old behaviour.
### Other Changes to Do With Kinds of Value
- A new kind of value, "truth state", represents one of two possible values:
the constants "true" and "false". (By default, truth state variables and
properties are false.) We can convert any condition to a truth state thus:
```
let victory be whether or not all the treasures are in the cabinet;
```
We can then examine a truth state by comparing it against true or false:
```
if victory is true, ...
```
In fact, this kind of value is not new, but is merely coming out into the
open. If we try to write (say)
```
To decide what truth state is time is short: ...
```
then Inform will tell us to rewrite it in the more traditional form:
```
To decide if time is short: ...
```
A phrase to decide if something-or-other is exactly the same thing as a
phrase to decide a truth state, and indeed, if we want to then we can use
"decide on T", where T is a truth state, in its definition. For instance:
```
To decide if time is short:
if the time of day is after 10 PM, decide on true;
...
decide on whether or not Jennifer is hurried.
```
"Decide on true" is exactly equivalent to the more normally used "decide
yes", and of course it is optional. The last line is more interesting
since it effectively delegates the answer to another condition.
- The kind of value "object-based-rulebook" has been withdrawn: instead, such
a value is now called an "object-based rulebook" and is a special case
of a "rulebook". (The double hyphen was generally found to be clumsy, and
often led to mistakes.)
- The deprecated kind of value "string-of-text", which behaved identically to
"text" in recent builds, has been withdrawn. It was mentioned in one
example ("Panache") through a historical accident, but was otherwise
undocumented.
- A "let" variable can now optionally be created by giving its kind of value
rather than its initial value - the initial value is then the default
value for that kind. For instance,
```
let T be an indexed text;
```
creates a "let" variable called "T" to hold indexed text, and which is
initially holding the blank text "".
- A table column name can now optionally give its kind of value in brackets.
Thus "darts tally (a number)" would create a column called "darts tally"
whose contents were required to be numbers.
- A phrase to decide a value is now checked to make sure that doesn't try to
return a type which is not a value (something which typically produced
problem messages in earlier builds, too, but less helpful ones).
- Where a value property is declared for one kind of object as holding a value
of kind of value X, and for another as holding kind of value Y, X and Y
now have to agree: previously they were allowed to differ as long as they
were each kinds of object, but this was not quite type-safe, and led to
subtle bugs.
- In previous builds of Inform, values of units had to be positive or zero:
thus defining
```
An elevation is a kind of value. 100 cubits specifies an elevation.
```
creates a kind of value where -10 cubits, say, would not be a legal
expression. Owing to a bug, however, no problem message was produced,
and the minus sign was simply ignored - the value "-10 cubits" was read
as if it were "10 cubits". This bug has been fixed, and a new convention
adopted: if the initial specification of the unit is negative, then
negative values are permitted, and otherwise not. Thus:
```
An elevation is a kind of value. -100 cubits specifies an elevation.
```
means that (say) "6 cubits" and "-3 cubits" are both legal.
- When U is a numerical value - a number or a unit, that is - the phrase
"random U from X to Y" now gives truer results for very large ranges
in the Glulx virtual machine.
- Bug fixed whereby "random U from X to Y" would sometimes seed the random
number generator as a side-effect when X was greater than Y. This is now
a symmetrical phrase - "a random number from 5 to 2" now has the same
effect as "a random number from 2 to 5". (The phrase "seed the
random-number generator with..." is the proper way to seed the RNG.)
- If U is a unit, the phrases "random U", "U after X" and "U before X" have
been withdrawn - these don't really make sense for unbounded ranges. (What
is a random height? It's a question which can only be answered in context -
a random height for buildings is quite unlike a random height for people.)
- Problem message added to catch literal numbers (and literal units) which are
too numerically large to fit into the Z-machine: for instance,
```
An RGB value is a kind of value. 255-255-255 specifies an RGB value.
Scarlet is an RGB value which varies. Scarlet is 255-0-0.
```
...is fine in projects compiled for Glulx, but would overflow the
16-bit word size on the Z-machine.
- Bug fixed whereby nameless properties ("conditions" - not in the sense of
"if", but in the sense of something being in good or bad condition, say)
specified for kinds but only at the "usually" level of certainty would
sometimes have such sentences ignored.
- Problem message added for unit specifications which overlap or make ambiguous
existing ways to write constant kinds of value; for instance,
```
"250" specifies a weight.
```
clearly clashes with Inform's existing notation for text.
- Problem message added to catch the case of multiple initialisations of the
same variable, for instance,
```
Foobar is a number which varies. Foobar is 1. Foobar is 2.
```
- Bug fixed whereby no problem was detected if a property required to hold one
kind of object as a value (for instance, a property holding a room) was
initialised by an assertion with another kind of object altogether (for
instance, a container).
- Bug fixed whereby spurious typechecking problems would be produced if the
same kind of value was used both as a self-named property of one kind of
thing, and also as the value of other-named properties of other kinds.
- Bug fixed whereby conditions used for the start and end of a scene would not
always be fully typechecked, if it appeared at least syntactically valid.
For instance,
```
Fairytale Wedding begins when the player is kissing the frog.
```
looks superficially right, but in fact involves comparing an object
(the player) with an action (kissing the frog) - something we may one day
legalise in Inform, but which at present should be rejected. In builds
before this one, it compiled but to a condition which was always false.
- A number of subtle bugs have been fixed in handling ambiguous multiple-phrase
text; if a phrase can be read as A or B, then A wins if
- it has more fixed words;
- they have the same number of fixed words, but A has more tokens;
- taking fixed words alone, A is lexicographically earlier;
- A is a subschema of B in the sense that each value of a token
in B can be coerced to the corresponding kind of value in A;
- A was created earlier than B in the source text;
- fixed words of A occur earlier than B in the actual text parsed.
In practice these changes cured some bugs, but did not change the
interpretation of any text in the examples, and we expect they will
probably not be noticed as changes by users. The final rule is notable
for making phrases "right associative" when iterated, so for instance
```
two minutes before three minutes before 12:00 AM
```
is read as
```
two minutes before (three minutes before 12:00 AM)
```
rather than
```
(two minutes before three minutes) before 12:00 AM
```
and thus evaluates to 11:55 PM, not 11:59 PM.
### Miscellaneous Other Changes
- In order to reduce namespace clashes, a fairly significant change has
been made to the way Inform reads noun phrases in the source text.
Objects can, of course, be referred to using abbreviated names: for
instance, if we write
```
The Great Hall of Infinity is a room.
```
then we can also write
```
The Panjandrum is a man in the Hall.
```
where "Hall" is a read as referring to the Great Hall of Infinity. This
convention of course remains. However, the same is no longer allowed
with names of kinds. Thus:
```
A Scrabble piece is a kind of thing. The Q is a piece.
```
will no longer work: the second assertion must be written out in full as
```
The Q is a Scrabble piece.
```
This led to tiny changes in six of the Examples (and detected a typo in
a seventh), but in all cases the change was easily made and the result
more legible or no worse than the original, so we hope that users will
not find this change to the rules too inconvenient. The point of it is
so that text such as:
```
Beautiful scenery is a kind of thing. A wall is a kind of thing.
A wall is usually scenery.
```
will now work: previously the "scenery" in "A wall is usually scenery"
was taken as referring to the "beautiful scenery" kind, not the built-in
"scenery" property. (And so on for many other cases.)
- An ambiguity has been removed from the syntax for actions. The convention
when indicating an action by a character other than the player is that
the full form reads like so:
```
Miss Hodges trying taking the lime
```
Inform, however, allows the usually redundant word "trying" to be omitted
where this leads to no ambiguity. The change is that, for safety's sake,
Inform now forbids this abbreviation where the object's name includes
a participle (or indeed any word ending in "...ing"). This prevents, for
instance,
```
Mr Geoffrey Taking
```
from being read as an action rather than a noun phrase, or (a case which
actually arose for one of our users)
```
newspaper cutting
```
being read as the newspaper itself doing some cutting.
- The accessibility rules have had one anomalous case removed. Previously,
an object in another room was considered inaccessible, yet an object out
of play was not. The only reason this rarely caused trouble was that
actions involving such objects were seldom generated, because the parser's
scope rules would prevent it from recognising commands referring to them.
But it could occasionally happen, if a command such as TAKE ALL fired off
a run of actions, and the outcome of an earlier take caused the object
from a later take to be moved out of play; and with stored actions this
sort of thing becomes much more likely to happen. At any rate the anomaly
has been removed, but this had the consequence that a few examples
which used physical things to represent abstract concepts went wrong.
For instance,
```
An emotion is a kind of thing. Envy and gratitude are emotions.
```
is likely to produce a world in which "envy" and "gratitude" both exist
as physical things but are permanently out of play. If we then write
```
Understand "experience [any emotion]" as experiencing.
```
then commands like EXPERIENCE ENVY will be recognised, but what happens
next depends on how the action is defined. If like so:
```
Experiencing is an action applying to one thing.
```
then I7 will now strictly apply the rule that the thing must be touchable,
that is, with no physical barriers between it and the player: which means
EXPERIENCE ENVY will now fail accessibility. To get around this, define
```
Experiencing is an action applying to one visible thing.
```
instead: this weakens the requirement to the point where being allowed
to refer to the object is enough. ("Visible" here means visible in the
sense of parser scoping rules, not with one's own eyes: they are almost
always the same thing, but "[any emotion]" overrode that.)
- Another change which will probably make little difference, but which
clears up an ambiguity: given two descriptions in the form (adjectives)
plus (kind), which are of different kinds, and where Inform cannot prove
that either is necessarily a special case of the other, then the one with
more adjectives is now considered more specific - and this affects rule
ordering. So, for instance,
```
Instead of examining an open door: ... (A)
Instead of examining a vehicle: ... (B)
```
rule (A) is now considered more specific than (B), whereas in previous
builds they were equally specific and so would appear in rulebooks in
source text order. (This change made no difference to the behaviour of
any of the examples, or any other of our test cases: it's pretty esoteric,
but we are trying to reduce the number of ways source text ordering is
used, where sensible.)
- We can now give unusual or alternative names for the understanding of either/or
properties, when these are used to describe objects. For instance, if we
have:
```
The box is a container which is carried by the player.
It is openable and closed.
Understand the open property as referring to the box.
```
then EXAMINE OPEN BOX will work only if the box is open, and so forth. But
we can now add:
```
Understand "opened" as open. Understand "shut/sealed" or "tightly
sealed" as closed.
```
and now EXAMINE TIGHTLY SEALED BOX, etc., will work only when the box is
closed.
- "now T is X", to change the value of a table entry T to a value X, now works
as might be expected. (This case seems to have been overlooked before: it
wasn't intentionally left out of the design, and consistency clearly
requires it.)
- Previous restrictions on the use of "let" names, phrase parameters and
table entries in text being written or appended to external files have
been lifted. Thus:
```
The currently erased jotter is an object that varies.
To erase (pad - a jotter):
now the currently erased jotter is the pad;
write "[heading of the currently erased jotter][paragraph break]"
to the text file of the pad.
```
can now be done more simply thus:
```
To erase (pad - a jotter):
now the currently erased jotter is the pad;
write "[heading of the pad][paragraph break]" to the text file of the pad.
```
This affects both "write ... to ..." and "append ... to ...".
- The location of external files written or read by Glulx story files now uses
the same convention on both OS X and Windows. (In 4X60, Inform for OS X
differed from this.) Such ".glkdata" files are now always stored in the
same folder as the project "Whatever.inform", unless the user has created
a "Files" subfolder of a "Whatever Materials" folder, in which case that
will be used as the location.
- The Kinds index now presents the initial state of either/or properties
associated with kinds in a more legible way, avoiding double negatives.
Thus
```
Not normally portable not fixed in place.
```
(which admittedly looks worse without the italic) is now written
```
Usually fixed in place not portable.
```
- The SHOWME testing command is now more detailed, and shows what properties
an item or room currently possesses. For instance:
```
>showme guide
Guide to Desert Fauna - book
location: in Death Valley
unlit; inedible; opaque; portable; singular-named; improper-named
printed name: Guide to Desert Fauna
printed plural name: books
contents: Table of Critters
```
(This brings it roughly into line with the old I6 verb SHOWOBJ, but has
much more legible output, since property values can be printed better.)
- The syntax of phrases to access tables has tended to be annoyingly picky
about prepositions: it has been liberalised a little, so that one can
now write "from T" equivalently to "in T" in phrases like
```
choose a random row from the Table of Soft Fruit
```
Similarly, in the phrases with the form "choose ... row ...", either
the definite or indefinite article can be used, or omitted altogether:
there will be times when any of these may seem clearest. So any of
these (for instance) will be allowed:
```
choose a random row from T
choose the row with citrus entry of 5 from T
choose blank row from T
```
- Use options can now specify numerical values, along with default values which
the source text can choose to raise: this should help extension-writers
who want to provide "enough" storage for the user's needs, since the
user can now use such an option to tell the extension exactly how much
he does need.
- Bibliographic data text normally doesn't recognise text substitutions, for
obvious reasons: it has to be literal text supplied to outside programs.
(The story title, author's name, and so on.) It is now allowed to contain
just one text substitution: ['] for a literal apostrophe. (This allows
titles like "Summer of [']69" to be handled properly.)
- The previous maximum of 500 I6 inclusions and use options used all at once
in any single source text has now been removed.
- Inform now chooses further contrasting colours for World Index maps which
include more than 10 different regions, and now cycles through its
colours rather than reverting to grey for subsequent regions when the
shades run out.
- Bug fixed whereby complicated descriptions involving the contents of a region
would fail to work: for instance, "the number of rooms in R", where R
is the name of a region, or "a random room in R", would return 0 and
nothing respectively.
- Bug fixed whereby releasing along with a custom website was not working
(NI was issuing the wrong instructions to cBlorb, the packaging agent.
Standard websites did work: only those with custom templates failed.)
- Bug fixed whereby assemblies which involved properties as well as kinds
would sometimes not always have those properties set, particularly if
multiple assemblies took place with similar circumstances. For instance:
```
A box is a kind of container. An open box is in every room. A closed
box is in every room.
```
- Bug fixed whereby a player's holdall which is a part of the player - rather
than being carried or worn by the player - will now function correctly.
(This was requested by someone wanting to implement "a robot or marsupial".)
- Bug fixed whereby recent changes to table-handling caused properties of
values to be wrongly read and written. (Typically a property of V would
be confused with a property of the value whose numerical form at run-time
was one less than V's.)
- Bug fixed whereby route-finding (and counting shortest distances) through
one-to-various relations would give wrong results, usually false claiming
that no route existed.
- Bug fixed whereby the phrase "direction of (D - door) from (R1 - room)"
didn't work at all, really (it returned the I6 direction property, not the
compass direction object - an elementary I6 mistake).
- Bug fixed whereby after rules were being applied to out of world actions,
in spite of the documentation's clear statement that they would not be.
It is just possible that some authors might have relied on this working:
to give after-effects to out of world actions, use the report rules.
- Bug fixed whereby "change ... to ..." would sometimes cause I6 errors where
the thing changed was a variable holding an object, and the value changed
to was something other than an enumerated property-value constant.
- Bug fixed whereby "if ...; otherwise if ... begin;" would cause I6 errors
rather than produce a Problem message (to point out that "begin" should
not be used with "otherwise if ..." clauses).
- Bug fixed whereby placing items by referring to the currently discussed room
as "here" would sometimes give strange results if (i) the current subject
of discussion when the sentence is first read is not what will prove to
be a room, and also (ii) the room being discussed most recently was
created some time ago and other rooms had been created since then. The
new interpretation of "here" should be more robust and predictable.
- Bug fixed whereby restrictions applied to headings, such as
```
Volume 1 - not for release
Volume 1 - for Glulx only
```
would be ignored (but only for Volume headings, not for headings of any
other level).
- Bug fixed whereby implications (such as "A locked thing is usually lockable.",
an implication in the Standard Rules) are ignored if the thing to which
they apply cannot have the property which is given as the consequence;
previously, a somewhat mysterious problem message would be produced.
- Bug fixed whereby implications would sometimes override definite statements
made negatively (e.g. "A locked thing is usually openable" overriding
"The safe is locked. The safe is not openable"); again, the symptom
was usually a mysterious problem message.
- Bug fixed whereby the use of a relation in an indirect clause with a value
of a kind which is also used as a property, and has the same name as
that property, would cause I6 errors.
- Bug fixed whereby grammar using a newly defined token for a value belonging
to a new kind of value, would cause I6 errors.
- Bug fixed whereby giving alternatives in grammar for understanding specific
times of day (e.g. 'Understand "lunch" or "lunch time" as 11:30 am.')
would cause an internal error.
- Bug fixed whereby a few malformed assertions involving impossible callings
(e.g. 'X (called Y) and X has Y.') produced an internal error rather
than a problem message.
- Problem message added for attempts to create multiple objects with a single
'called' clause ('Bill and Ben are men in the Garden.').
- Bug fixed (or, in a sense, feature added) so that "X is a backdrop which is
everywhere" will now successfully create an omnipresent backdrop;
previously one had to write "X is a backdrop. X is everywhere."
- Bug fixed whereby actions sometimes continued and reported even if the
carry out rules had already killed the player.
- Bug fixed whereby 'Understand ... as a mistake' would produce the mistake
reply even when the text was being addressed to another person, rather
than being intended as a command by the player.
- Bug fixed whereby tokens for understanding names which involved various-to-one
relationships to other objects would not work in concert with specific
additional names made using 'Understand'. For example,
```
Understand "[something related by loyalty]" as a team.
Understand "Glasgow Rangers" as a team.
```
would correctly match the token, but not the additional name, which would
be ignored.
- Bug fixed whereby "now the player is X" would be read differently from
"change the player to X", and would not properly change perspective.
- Bug fixed whereby an assertion sentence setting the description of the player
caused a contradiction with the default setting for this made in the
Standard Rules. For instance,
```
The description of the player is "Frankly harrassed-looking."
```
is now legal again. (It was legal in early builds of Inform, too.)
- Slight anomaly resolved (it wasn't really a bug) in the determination of
which items are concealed, using the "deciding the concealed possessions"
activity: previously the activity would test items belonging to the player
even though a subsequent rule would force them to be unconcealed regardless
of the activity's decision - an actor can't conceal something from himself,
since concealment in I7 by definition means concealment from the view
of other people. Now, the activity is not asked about such items.
- Bug fixed whereby "( -" was sometimes read as "(-", opening a passage of
literal I6 code, which was unfortunate if it had actually been part of
a calculation ("let X be ( -1 * count )", say).
- Various bugs fixed to do with the use of the I6 string escape characters
\, @, ~, ^ in I7 source text and quoted text (for instance, these followed
by digits would in some cases cause I6 compilation errors).
- Bug fixed whereby the parser would give slightly misleading replies if
pronouns other than "her" were used in commands before they had ever
been set.
- Bug fixed whereby scenery items, never mentioned in room descriptions, could
nevertheless silently become pronoun values. (Thus "it" might mean the
sky in a room where the sky was scenery.)
- Bug fixed whereby the parser would reply "That noun did not make sense in
this context." in response to certain scope-filtering tokens where
nonsense had been typed, but without a proper paragraph break.
- Bug fixed whereby duplicate problem messages would result from a phrase
defined with alternate wordings, but also defined incorrectly. (The
problems would be repeated for each possible wording.)
- Bug fixed whereby the "Use serial comma" option did not result in a serial
comma being used in clarification questions like
```
Which do you mean, the fish, the fowl, the chalk, or the cheese?
```
- Documentation bug fixed whereby the "return to contents" links in Writing
with Inform would sometimes return to the contents of the Recipe Book
instead.
- Problem message added to catch situations where the source text would require
ridiculous lengths of time to parse, using Inform's normal algorithms:
this is something which seems only ever to have happened to one user,
through the accidental omission of lots of punctuation, but it had the
effect of Inform apparently never completing compilation, which is
inconvenient to recover from on some platforms.
- Problem message added to clarify why some mixtures of actions like 'dropping
the CD or inserting the CD into the jewel box' are not allowed as the
premiss of a rule; and bug fixed whereby other illegal mixtures, such as
'inserting the CD into the jewel box or dropping the CD' were previously
miscompiling rather than producing a problem.
- Problem message added to help diagnose a common mistake with 'if' phrases,
missing out the 'begin' at the end.
- Problem message added to explain why sentences like
```
Understand "take [things]" as "drop [things]".
```
are not allowed.
- Problem message added to explain why sentences like
```
Understand "trevor, look" as looking.
```
are not allowed.
- Problem message to catch attempts to use "carry out", "report" or "check"
rules applied to named action patterns rather than specific actions;
previously these would sometimes be allowed provided that some subset
of their names coincided with the name of some actual action (but with
unhappy results, since the rule would end up applying to that action,
which would certainly not have been what the user intended).
- The problem message produced by sentences like
```
The coin is in the strongbox.
```
(where "coin" is a kind of thing, so that this is too vague) has been
lifted in the case of writing sentences like
```
One coin is in the strongbox.
```
since, after all, higher multiplicities like
```
Two coins are in the strongbox.
```
have always been allowed.
- Problem message added for trying to define the same test name to mean two
different tests.
- Problem message added for trying to use a kind of thing to relate multiple
objects to single values in single sentences. (Ideally this would work,
but there are awkward implementation reasons why it doesn't, for the
moment, and the problem message replaces a less polite internal error.)
- Problem message clarified when trying to make a property which must hold an
object of a given kind, when no objects of that kind exist anywhere, so
that this property can never have a legal value.
- Problem message added for contradictory indications of where something
initially is, for instance,
```
Fred is in the Kitchen. Fred is in the Dining Room.
```
(How we overlooked this obvious case in four years of testing...)
- Problem message added for an Understand attempting to give a name to
an object qualified by a relative clause or properties. (The same effect
can be achieved by other means - the problem message explains how.)
- Problem message added for an attempt to test if a vaguely described past
action succeeded. (Previously these apparently compiled, but gave
usually wrong answers.)
- Problem message added to give more helpful diagnosis if an action definition
incorrectly gives a past participle longer than a single word.
- Problem message added (rather than an internal error) for using a relation
which relates objects to values in a "[something related by...]" token
in an 'Understand' sentence.
## Documentation, examples and extensions
### Examples
- "Xot" added to demonstrate storing an erroneous command and replaying it
later, as seen in Infocom's HHGttG.
- "Terracottissima Maxima" added to demonstrate understanding an indexed text
property.
- "Fido" added to demonstrate a dog that the player is allowed to name and
re-name.
- "Pre-alpha" added to demonstrate a beta-testing command that allows the
player to preface any line with a punctuation mark to show it is a comment.
- "Blackout" added to demonstrate replacing letters in a printed name under
certain circumstances.
- "Identity Theft" added to demonstrate asking the player for a name at the
start of play.
- "Mr. Burns' Repast" added to demonstrate a fish that renames itself
depending on how the player refers to it.
- "Endurance" added to demonstrate a way of modeling time so that it depends
flexibly on the actions undertaken during a turn.
- "Uncommon Ground" tweaked to repair a couple of cosmetic flaws held over
from earlier versions of the extension
- "Panache" corrected to remove a reference to the elderly (and now
withdrawn) type "string-of-text"
- "Disenchantment Bay 12" corrected to remove a reference to the captain as
"transparent", which was a holdover from a time (before the first public
beta of Inform) when characters could be opaque or transparent and this
quality would determine whether their possessions could be seen.
- "Straw Into Gold" added to demonstrate a character whose name is concealed
until the player guesses it.
- "Celadon" added to demonstrate extending DROP to apply even to objects the
player is carrying inside a container or on a supporter.
- "Northstar" added to demonstrate modifying the player's command using a
regular expression, so that ASK JOSH TO TAKE INVENTORY will be
understood as JOSH, TAKE INVENTORY.
- "Burning", "Gelato", "Originals", "Solitude", "Stately Gardens", "Tilt 2",
and "Tilt 3" revised to make use of the new truth state kind of value.
- "Cactus Will Outlive Us All" added to demonstrate stored actions and
characters who respond when they occur.
- "Anteaters" added to demonstrate stored actions that include topics.
- "Bosch" added to demonstrate an alternative full score system using
stored actions.
- "Kyoto" revised to reflect the current state of the actions rules.
- "Dinner is Served" revised to change the way closed containers are described.
- "Chronic Hinting Syndrome" "Ferragamo Again", "Being Peter", "The Problem
with Edith", and "Introduction to Juggling" revised to reflect new
restrictions about acting on out-of-play objects.
- "Broughton" revised to fix a very tiny bug in which "greeting" was not
specified as a subject.
- "Lucy" added to demonstrate redirecting the ASK command to a new topic
other than the one the player typed.
- "Fine Laid" added to demonstrate redirecting most actions from one object
to another.
- "Mirror, Mirror" revised to use indexed text rather than an external file,
which means that it can be used in z-machine games as well.
- "Actor's Studio" added to demonstrate a video camera that records actions
occurring in its presence, then plays them back later.
- "Capital City" added to demonstrate capitalized text in the status line.
- "Rocket Man" added to demonstrate sentence- and title-casing for any to-say
phrase.
- "Rubies" added to demonstrate a scoreboard of high-scoring players.
- "Witnessed", "Sand", "Modern Conveniences", "Hot Glass Looks Like Cold
Glass", "Model Shop", "Nickel and Dimed" slightly changed to spell
out kind names in full rather than use abbreviations.
- "Situation Room" added to provide 24-hour time printing.
- "Tamed" revised to get rid of the magician's booth being closed.
- "Starry Void" added to demonstrate a simple case of a room whose exterior
is visible from another room.
- "The Cow Exonerated" added to demonstrate matches for starting fires, using
indexed text to make the reporting more elegant.
- "Savannah" added to demonstrate liquid used to put out fires.
- "Slouching" added to demonstrate sitting, standing, and lying down postures
for the player and other characters.
- "Costa Rican Ornithology", "Crusoe", "Farewell", "Juggling", "Nickel and
Dimed", "Money for Nothing", "Aftershock", "Channel 2" edited to make
it easier to extract the generalizable portions for use in other games.
- "Four Cheeses" edited for portability and to clean up a few clumsy
phrasings due to the age of the example.
- "Bogart" edited for portability and to remove a special-case bug.
- "What Not To Wear" added to demonstrate a more complete clothing system
combining layers with a concept of different regions of the body, for
whole classes of shirts, trousers, etc.
- "Port Royal 1" and "Port Royal 2" edited for length and clarity.
### Extensions
- "Basic Screen Effects" edited for a small bug that prevented the "show
current quotation" phrase from being available under Glulx. Version
advanced to 5.
- "Glulx Entry Points" changed to treat glulx replacement command as indexed
text, which means that it can be edited more flexibly or even
constructed through multiple hyperlinks. Version advanced to 3.
- "Locksmith" changed to make the "you lack a key..." message more flexible
and keyed to individual objects. Version advanced to 4.
- Minor one-line addition to the documentation of "Basic Help Menu" to
clarify how to replace the enclosed menu with one of our own.
## Mac OS X app
- Mac OS 10.5 (Leopard) incompatibilities corrected; support added for
QuickLook viewing of Inform projects, and for content-reflecting icons.
- Bug fixed whereby replay and double-clicking in the skein sometimes failed to
do anything.
- Provisos such as "(for Glulx only)" are now removed from extension titles when
making filenames for newly installed extensions.
- The '+' button now works when adding Inform 6 extensions: in previous versions
the only way to install a new Inform 6 extension was by dragging it to the
window. Additionally, a bug has been fixed that was making it hard to
add ORLib as a complete directory: in this new release it should be
possible to just drag the ORLib directory to the Extensions pane and then
use it by switching it on in the Settings tab of an Inform 6 project.
- CocoaGlk 1.0.4 adopted, which includes a number of fixes:
- Fixed an issue that could cause a crash if a text grid window ends up with
a negative size
- Fixed a problem that was causing games to crash under Leopard
- Various stream calls will now produce a warning when they are passed a NULL
stream instead of crashing with an error. (The old behaviour was
technically correct, but gwindows was passing in NULL streams quite often)
- Fixed an issue that was causing script files to be left empty until the
user typed "script off"
- Other minor changes:
- (I6 projects) "Add breakpoint" in the main menu now works in either pane
- Extensions are now displayed in alphabetical order
- The "Open Extensions" menu can now view built-in extensions
- Bug fixed whereby Glulx games were not saving transcripts correctly
## Windows app
- Fixed an intermittent crash in the I7 application, where it would stop
with a dialog complaining about a "pure virtual function call".
Thanks to Maryam Gousheh-Forgeot for helping track this problem
down.
- Added a headings menu to the source tab, following the similar menu on
OS X. The menu initially shows the top-level headings in the
source. Select a heading to go to it, or click on an arrow to
see the sub-headings below that heading.

146
notes/release/5-2.md Normal file
View file

@ -0,0 +1,146 @@
# Release notes for Inform v5.2 (build 5J39)
This release was made on 1 December 2007, before Inform was open-sourced.
At that time versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This build introduces lists as first-class values. For any kind of value K,
"list of K" is now also a kind of value, and rich support is provided for
building and iterating over lists, which are dynamically resized as
necessary. Otherwise little is new, but once again all known bugs have
been fixed.
## Language
- For any kind of value K, "list of K" is now also a kind of value. Lists
resize automatically, can be iterated through, sorted, searched,
reversed or rotated, and they have a notation enabling constant lists
to be written down concisely: for instance,
```
let L be {2, 3, 5, 7, 11};
```
gives the temporary variable L the kind of value "list of numbers",
and sets it initially to this sequence of five values, whereas
```
let M be the list of open doors;
```
gives M the kind of value "list of objects", and sets its initial
contents to be all the doors which are currently open. (Lists can also
be used in global variables, in properties, or table entries, and can
include each other: "list of lists of numbers", say, is a kind of value.)
Values can be added or removed at any point in a list; lists can be merged,
or compared for differences; and examples are presented to show the
use of lists as queues, stacks, rings, sets, arrays, and so forth.
(All memory management is automatic and all bounds are automatically
checked.) See the new Chapter 20 ("Lists").
- The previous restriction whereby TEST scripts could not exceed 255 characters
in length has been withdrawn. The new maximum is 9999 (a cap intended
only to catch accidental runaway cases where the closing quote has been
forgotten).
## Documentation, examples and extensions
### Examples
- "Eyes, Fingers, Toes" added to demonstrate a multi-number safe using
lists to create a log of dialed numbers.
- "Robo 1" added to demonstrate a programmable robot that will replay the
player's behavior.
- "Robo 2" added to demonstrate a robot that can learn multiple stored
action scripts with command names determined by the player.
- "Rock Garden" reformatted to give the general material at the top.
- "The Fibonacci Sequence" added to demonstrate using lists as arrays.
- "I Didn't Come All The Way From Great Portland Street" added to
demonstrate using lists as sets.
- "Lugubrious Pete's Delicatessen" added to demonstrate using lists as
queues.
- "Sieve of Eratosthenes" added to demonstrate using lists as sieves.
- "Circle of Misery" added to demonstrate using lists as ring buffers.
- "Lanista 1" corrected to fix a truncated sentence in the commentary.
- "Leopard-skin" added to demonstrate a log of stored actions.
- "What Makes You Tick" added to demonstrate building a fishing rod from
component parts.
- "Your Mother Doesn't Work Here" added to demonstrate using a list as a
stack to plan character behavior.
## Problem messages
- Problem message added to prevent the UNDO command being used in a TEST
script (which can't safely be done since it undoes progress in the test
itself), and also to prevent individual commands in TEST scripts from
exceeding 100 characters (since the I6 library would choke on those).
- Problem message improved for namespace clashes between variable names and
descriptions.
- Problem message added (in place of previous I6 errors) when a
description of an action, used as a condition, refers both to the past
and to values in the present (by means of "called").
- Problem message improved for an ambiguity in rule premisses as between
a description of an actor followed by an action, and an action name
with no actor attached. (This arose in the case of "standing using ...",
where "standing" had also been defined so as to describe certain people:
was the action here "standing using", done by nobody in particular, or
"using", done by a person matching "standing"?)
- Infelicity fixed whereby the problem message about minus signs being
wrongly used in unit constants could be repeated (sometimes quite a
few times) for the same mistake.
- Problem message added (rather than I6 error or mysteriously incorrect
behaviour) for the case of a phrase so ambiguous that at compile-time
it is not possible to tell how many values it takes as arguments.
The problem explains this, shows the phrases it cannot choose between,
and invites the author to reword one of them.
## Bug fixes
- Bug fixed whereby pastes of Example text for examples including backslashes
(such as those arising from the introduction of regular expression
matching) and, in some cases, other unusual characters would cause
the text to be pasted incomplete - so that it did not work as it
was claimed to do.
- Bug fixed whereby two or more consecutive double-quoted texts in a single
table entry would lead to an internal error rather than a problem
message; something which can happen easily if pasted text converts
tabs to spaces, when two adjacent table columns are both supposed to
contain text.
- Bug fixed whereby a rule whose premiss involved clauses of several different
sorts, one of them "when", could sometimes produce an internal error.
- Bug fixed - or, really, feature added, but the lack of it was regarded as
peculiar - whereby an action description used in a rule was not allowed
to give the name of a kind of value to mean "any value of this kind":
for instance, "Instead of dialing something to a code symbol", where
"code symbol" is a kind of value and "dialing it to" is an action
applying to one thing and one code symbol.
- Bug fixed whereby "[']" for apostrophe wasn't being allowed in titles given
as the opening text of a bibliographic heading.
- Bug fixed whereby indexed text and stored action variables were not working
properly if they belonged to rulebooks, activities or actions.
- Bug fixed whereby "if there is a [table-reference]" was not working in the
case of columns holding indexed text.
- Bug fixed whereby spurious "no such entry" run-time problems would occur if
a table with a column holding indexed text was created with blank rows.
- Bug fixed whereby ambiguous phrases requiring run-time checking on some
arguments would sometimes go wrong if other arguments were stored
actions or indexed text.
- Bug fixed whereby if several "let" variables in a single phrase needed to
be indexed text or stored actions, they would sometimes have their kinds
of value rearranged between them, with occasionally bizarre results.
- Bug fixed whereby the dynamic memory allocator would print up debugging
information such as "1+128+256+512+1024+2048+4096+8192+16384+65536"
after successfully allocating memory via Glulx's @malloc mechanism.
Apologies for this.
- Bug fixed whereby a compound phrase which looks as if it might be in the
form "total ...", counting the total of some property - but which isn't -
would generate an internal error rather than being rejected in favour
of some other interpretation.
- Bug fixed whereby a rule predicated on a condition about something being
listed (or not) in a table would cause I6 errors.
- Bug fixed whereby an internal error rather than a problem message would
sometimes be issued when a condition was used which had no active verb
but could be taken as a description of things (typically arising if
"is" had been mistyped as "in").
- Bug fixed whereby the old I6 debugging commands CHANGES and ROUTINES, which
are no longer implemented in I7, still had their grammar visible in
I7-compiled games, so that it was possible (but usually quickly fatal)
to try using these commands.

1426
notes/release/6-1.md Normal file

File diff suppressed because it is too large Load diff

717
notes/release/6-2.md Normal file
View file

@ -0,0 +1,717 @@
# Release notes for Inform v6.2 (build 5U92)
This release was made on 10 September 2008, 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](../version_history.md).
## Overview
This build makes a set of related improvements to the way adjectives, nouns
and verbs combine in descriptions. This lifts many restrictions which made
talking about values less flexible than talking about objects, and shows the
language gradually becoming more general. This brings only subtle (if nice
to have) improvements for authors, but improves the coherence of the design
of Inform. In addition, directions can now be created freely, fulfilling the
last outstanding promise made in the January 2007 consultation document.
There are miscellaneous minor improvements, and five months' worth of
maintenance changes. All 110 issues arising from bug reports received up to
7 September 2008 have been closed out.
## Language
## Documentation, examples and extensions
### Recipe Book
- Expanded the contents of the section on ending the game to lay out more
of the ways in which the final text can be altered.
### Examples
- Added "Fabrication" to demonstrate the use of values which themselves have
properties.
- Added "Bowler Hats and Baby Geese" to demonstrate the use of scenes with
properties.
- Added "Elsie" to demonstrate a sliding door that closes automatically
after being open for one turn.
- Added "Versailles" to demonstrate a mirror the player can look into.
- Added "Pizza Prince" to demonstrate a near-infinite supply from which
the player can go on taking instances.
- Added "Extra Supplies" to demonstrate a supply from which the player
can take one instance at a time.
- Added "North by Northwest" to demonstrate compass directions between
the usual set, and how to deal with the nine-character limit on names.
- Added "The World of Charles S. Roberts" to demonstrate a hexagonal
direction system.
- Modified "Copper River", "One Short Plank", "Mr. Burns' Repast", "Yolk
of Gold", "Depth", and "Xylan" to use the new "there is..." syntax in
places where the old syntax seemed a bit stilted.
- Modified "Solitude" to correct some errors in the comments caused by an
over-zealous search and replace when truth states were introduced.
- Modified "Copper River" to list all objects explicitly while taking
inventory, even if they are otherwise referred to as "assorted dull
items".
- Modified "Bumping into Walls" to get rid of some inelegant grammar in
the definition of viable directions, which is no longer necessary
because of syntax improvements.
- Rewrote "Fore" completely to take advantage of new direction-defining
abilities, rather than presenting the rather hackish methodology
originally on offer.
### Extensions
- "Glulx Text Effects" updated to deal with an indentation bug. The version
number is now 3.
- "Glulx Entry Points" updated to handle a bug introduced by the treatment
of templates. The version number is now 6.
- "Locksmith" edited to bring conditional syntax in line with the new
Pythonesque standard, and (more importantly) to give explicit names
to a couple of rules that still lacked them. Version number is now 7.
## Problem messages
- Problem messages added for attempts to write constant values in notations
where the second or subsequent numerical element runs out of the legal
range, or where the total value exceeds the maximum or minimum range
which Glulx can hold. (There was already a similar check for Z-machine
projects - for Glulx, of course, the bounds are larger.)
- Similarly, run-time parsing of values in such notations is also checked
more carefully to see that it remains in range.
- Finally, the Kinds page of the Index now quotes the maximum possible
value for both Z-machine and Glulx use. (It previously quoted this only
for Z, thus giving a misleading answer if Glulx was used.)
- Problem message added to explain what's wrong when the source text tries to
provide command grammar for a word reserved as an Inform testing command,
such as SHOWME. (And the indexing of these reserved commands on the
Actions index page has also been improved.)
- Problem message improved when "try" is applied to something which ought to
be a valid action, but which isn't for type-checking purposes - for
instance,
```
try taking 22;
```
- Problem message added (in place of an internal error) to catch cases where
a verb is missing from a condition so that it otherwise forms a
description with no obvious subject:
```
if the player not carrying a thing, ...
```
(which of course is missing an "is".)
- Problem message added to block the use of "called" when it is being used
only to rename one specific item, e.g.,
```
if the Z-Boson Destructorator (called the gun) is carried, ...
```
Previously this sometimes worked, but sometimes didn't, and in any case
wasn't ideal from a stylistic point of view.
- Problem message added to block the use of implications based on information
not available at compile-time, such as:
```
A room in the Garden is usually lighted.
```
(Previously this disregarded the relation information - the "in the Garden"
part - and therefore wrongly read the sentence as "A room is usually
lighted", a valid but different implication.)
- Problem message added to catch attempts to equate two kinds of variable, as in:
```
The stored actions variable is a truth state that varies.
```
(This has happened because the user didn't realise that "stored actions
variable" was a general category of variables, and thus not a good name
to choose for a specific one. In 5T18 it produced an internal error.)
- Problem message added to object to saying that things are to be defined by
a table, but also saying how many there are (which may of course be in
conflict with the number of rows in the table):
```
Three berries on the bush are defined by the Table of Tasty Berries.
```
The word "three" is either redundant or contradicts what the Table says,
and the problem message says it should be removed, e.g., by writing:
```
Some berries on the bush are defined by the Table of Tasty Berries.
```
- Run-time problem message added to explain why only things can be moved during
play (not for instance rooms, regions or directions). (Although people very
seldom try this deliberately, they do sometimes accidentally ask for it
because of misunderstandings about short forms of names of rooms.)
## Bug fixes
- Bug fixed whereby a small number of rules formed like this one:
```
Before printing the name of an object: say "Print."
```
would cause a spurious internal error; and similarly for rules such as
```
Before listening to nothing: ...
```
which can't in fact be useful (because "listening" always takes a noun),
but ought not to trip over the compiler; and similarly for clauses
such as:
```
Instead of going east by nothing: ...
```
in which optional details are added to an action (and these can indeed
be useful: this example means going east on foot, i.e., with no vehicle).
This was all one single bug, and was the one most experienced by users
of 5T18 - apologies.
- Bug fixed whereby and "[end if]" adjacent to an "[or]" in text, as here:
```
"[one of][if the location is Lab]Lab[end if][or]blah[at random]"
```
would cause an I6 compilation error. This was another very popular one.
- Bug fixed whereby "try" with an action which applies to a topic would not
work if applied to a snippet variable, so, for instance,
```
try asking Bob about the topic understood;
```
would fail.
- Bug fixed whereby large rulebooks would in some cases misfile rules which
depended on a single action _not_ being the current one, such as:
```
Before doing something other than examining to the mercenary: ...
```
(While this was a serious bug, it occurred only rarely, depending on
complicated combinations of other rules also being in force.)
- Bugs fixed to do with table columns holding indexed text, so that some attempts
to look for corresponding values, or to search for values, or to copy a
non-blank value into a blank, would fail with spurious run-time problem
messages.
- Bug fixed whereby sections replacing those in extensions:
```
Section 1 - New foo (in place of Section 1 - Foo in Bar by Tina Banana)
```
were not in fact always doing so in 5T18; and relatedly, when such
heading tricks were used, were sometimes causing source text to be lost
from the main text, resulting in spurious problem messages complaining
that no room had been created. (It had, but in a sentence wrongly removed.)
- Bug fixed whereby paragraph spacing would go wrong - usually with the expected
gap between paragraphs going missing - in cases where a text substitution
is defined which itself includes a "[paragraph break]" substitution. For
instance, redefining:
```
To say p -- running on:
say paragraph break.
```
ought to give "[p]" exactly the same effect as "[paragraph break]", but in
5T18 the spacing after "[p]" would in some cases go missing.
- Bug fixed whereby "resume the game", a phrase to be used in the "when play
ends" rulebook to cause it not to end but to carry on after all, had
stopped working. Particular apologies for this: we hadn't realised that
nothing in the 5T18 test suite verified its behaviour.
- Bug fixed whereby the "carrying capacity" for a container or supporter could
not be read without run-time problem messages if it was not set explicitly
in the source text. (It should have, and now does, default to 100.)
- Bug fixed whereby a container called "sack" would sometimes wrongly be treated
as if it were a player's holdall, if it were carried alongside a genuine
player's holdall.
- Bug fixed whereby a rule depending on something having happened for a small
number of times only would not always apply if the action is silent, e.g.,
```
Instead of taking the top hat less than three times:
say "The top hat resists!"
```
...would fail to apply if the top hat were being taken silently as a
result of a command like WEAR HAT. (Apologies: this bug was introduced
inadvertently as part of a bug fix made in 5T18, and did not occur in
earlier builds.)
- Bug fixed whereby the Standard Rules read
```
A door is never pushable between rooms.
```
instead of
```
A backdrop is never pushable between rooms.
```
(Both are true. In 5T18, the sentence was given for doors twice and for
backdrops not at all.)
- Bug fixed whereby the Standard Rules wrongly put the "switch the story
transcript off rule" in the "carry out switching the story transcript
on rulebook", not the one for "...off", so that in 5T18 the transcript
once started couldn't be stopped.
- Bug fixed whereby table sorting might fail if the table contained consecutive
blank rows within the body of non-blank rows.
- Bug fixed whereby the phrase
```
let maximum score be a number;
```
which fails because "maximum score" is already a global variable, so can't
be a temporary one as well, would give both a problem message and also an
internal error. It now just gives the problem message.
- Bug fixed whereby source text such as:
```
The Lab is a room. The barrel is a vehicle in the Lab. Sir John is a
man in the barrel. The player is Sir John. The player is in the barrel.
```
would create a bogus "yourself" object in the barrel, other than Sir John.
- Bug fixed whereby Understand grammar using "[any ...]" would wrongly match
all items within those specified, as well as the items themselves. For
instance, "[any adjacent room]" would match not just the rooms, but also
their contents. Apologies for this bug, which was introduced by accident
in the template rewrite for 5T18.
- Bug fixed whereby rules depending on actions which involve the text of the
player's command would sometimes throw internal errors if they also
required the use of named "Understand" tokens which weren't used in any
of the ordinary command verb grammar. For instance:
```
Understand "i7" or "inform" or "inform 7" as "[inform]".
After asking Edsger about "[inform]":
say "Projects promoting programming in 'natural language' are
intrinsically doomed to fail."
```
- Bug fixed whereby "does the player mean" rules would sometimes disambiguate
the second noun of an action as if it were the first, in cases where
the action uses "[things inside]" or "[other things]" as the first token
(which the inserting action does, in particular). The documentation does
warn that this might not work; it will now sometimes work, with care.
- Bug fixed whereby a table with a number but not a name (say, "Table 5") could
not be referred to elsewhere in the source in the same form (e.g.,
"The utensils are defined by Table 5").
- Bug fixed whereby "does the player mean" rules would not be applicable to
going actions implied by commands consisting of a direction alone, such
as SOUTH.
- Bug fixed whereby, in complicated circumstances, two ordinarily identical
things are wrongly considered still identical even after one has
changed its property value for a property declared as describing them.
(But only where this property is inherited from a mutual kind, which
in turn has other "Understand" grammar defining it.)
- Bug fixed whereby releasing a project with both a website and auxiliary files
would produce links in the website which, though working for some browsers,
failed for others, and which were local "file:" links rather than "http:",
so that the result would not work when uploaded.
- Bug fixed whereby an UNDO which takes us back to a position where the player
is in darkness would print the location as "(darkness object)" rather
than running the appropriate activity to describe darkness.
- Bug fixed whereby "Use authorial modesty" did not always work when given
in the main source text of a work by an author wanting to be modest
about his own extensions, included from it.
- Bug fixed whereby negative values of literals would sometimes be printed
incorrectly (e.g., "-10.123" might be printed "-10.00-123").
- Bug fixed whereby in rare cases the text of previous commands might be
mingled with the text of a literal value being read in the current
command.
- Bug fixed whereby conditions for start and end of scenes would not properly
work if they needed to manipulate indexed text, lists or stored actions,
either throwing spurious problem messages or simply failing to match.
- Bug fixed whereby, similarly, conditions for start and end of scenes would
throw spurious internal errors if they contained table lookups.
- Bug fixed whereby complex specifications of "in the presence of" people
which involve callings or manipulate similarly complicated values would
cause internal errors.
- Bug fixed whereby relations applied to kinds rather than instances would in
some cases throw an internal error rather than generate a problem message
as being too unspecific:
```
A supporter usually allows sitting.
```
- Bug fixed whereby memory allocation would sometimes fail, in Glulx, when
existing memory was sufficient but too fragmented to hold a large single
block of data.
- Bug fixed whereby Inform would refuse to create "let" variables called "nd",
"st" or "th". (Exercise for the reader: can you guess why?)
- Bug fixed whereby "Understand ... when ..." sentences would sometimes, if
the condition was invalid, throw an internal error as well as a problem
message.
- Bug fixed whereby the sentence
```
Here is everywhere.
```
would crash Inform rather than produce an outraged problem message.
(Yes, somebody tried this.)
- Bug fixed whereby extension documentation would be wrongly punctuated around
displayed example source text which contained explicit I6 inclusions,
with a spurious "-)" to close the I6 inclusion, added at the wrong point.
- Bug fixed whereby spurious "details" icons appeared after the names of kinds
in the Lexicon index.
- Bug fixed to do with the status line sometimes disappearing on the Z-machine.
- Bug fixed to do with cursor movements in unusual font sizes in v6 of the
Z-machine.
- On Glulx works only, the "emphasised" type style now has the style hints
weight 0 and oblique 1 set automatically when Glulx starts up: the point
of this is that I7 uses this style to implement the text substitution
"[italic type]". (Yes, yes, so the 5T18 change log made the same promise.
But with any luck it will work this time.)
## Windows app
- Added a preferences dialog, allowing the tab size in the source panel to be set.
- Drag and drop in the source panels now follows the usual Windows conventions:
by default the operation is a move, and holding down the 'Ctrl' key
during the drag makes it a copy.
- Fixed a bug in the built-in Glulx interpreter that generated
spurious timer events.
- Accented characters in the user's name should no longer cause the compiler
to crash.
## Linux app
- Internationalized all the strings in the user interface, so that translators
can if they wish translate these. (A Spanish translation has been started,
thanks to Ángel Eduardo.)
- The Documentation text will now still be visible when using a light-on-dark
desktop theme.
- The dialog that appears when you start the program can now be closed, in case
you started the program by accident.
- Bugs fixed that caused some preferences to revert to their default values
every time the application started.
- Bug fixed that caused a crash when deleting some items from the Skein.
- Various minor bugs and crashes fixed.
### Natural Language
- Descriptions and adjectives have each been expanded in scope, so that many
kinds of value can now be handled in ways which previously only worked
for objects. Specifically:
- Either/or and value properties can now be given to any kind of value
with named, enumerated outcomes. So for instance:
```
A scene can be thrilling or dull.
A scene has a text called cue speech.
```
or:
```
Colour is a kind of value. The colours are red, blue and green.
A colour has a number called frequency. The frequency of a colour
is usually 130.
```
As with objects, the names of either/or properties act as adjectives
describing a scene.
- Descriptions can now talk about values as well as objects. So:
```
if N is an even number, ...
if the score is positive, ...
let L be the list of thrilling scenes;
repeat with S running through non-recurring scenes: ...
if more than three scenes are dull, ...
```
all now work. Repeating through and listing require that the possible
range of the kind of value is finite - so you can't write
```
let L be the list of numbers;
```
(which would have to be infinite). See the chart at the bottom of the
redesigned Kinds index page to see when repeating and listing are allowed.
- The same adjective can now have multiple independent meanings, and there is
no difficulty provided that these apply to different things. Thus a
definition of "fancy" for a colour would not obstruct a definition of
"fancy" for a door, for instance.
- The Standard Rules now define the following adjectives for values as built-in:
```
even, odd, positive, negative - for numbers
empty, non-empty - for texts, indexed texts, tables, rulebooks,
activities, and lists
recurring, non-recurring, going on - for scenes
```
(Note the six independent definitions of "empty" depending on context.)
"Recurring" used to be an adjective which could be used only when creating
a scene, as in:
```
Train Stopping is a recurring scene.
```
It is now an either/or property, which means we can change it at run-time:
```
now Train Stopping is non-recurring;
```
- Now that scenes can be described in flexible ways, we can use the "during ..."
clause of a rule flexibly, too. For instance:
```
Before going north during a dull non-recurring scene, ...
```
(Previously "during" could only name a single explicit scene.)
- There is now a short-hand way to define the antonym of an adjective, that is,
the name of its opposite. For instance, the Standard Rules include:
```
Definition: a number is even rather than odd if the remainder after
dividing it by 2 is 0.
```
The optional part here is "rather than odd", which saves us writing:
```
Definition: a number is odd if it is not even.
```
(Note that different meanings of an adjective can have different opposites.
We could, if we wanted, write
```
Definition: a stored action is empty rather than purposeful if ...
```
and then the opposite of "empty" would be "purposeful" in the context
of stored actions, but "non-empty" for the other cases above.)
- Inform has always supported a convenient quick way to create a property,
sometimes specific to a single thing, which have three or more named
possibilities:
```
A fruit can be citrus, berry, melon, or pome.
```
This actually makes a property called "fruit condition" and creates a
new kind of value whose possibilities are enumerated as "citrus", "berry"
and so on. The author often never needs to use the name "fruit condition",
because the adjectives "citrus", "berry", ..., are convenient enough by
themselves.
But because Inform forms the property name in this way, there's a
collision if two different ranges are created:
```
A fruit can be unripened, ripe, overripe, or mushy.
A fruit can be citrus, berry, melon, or pome.
```
In previous builds this prevented two such conditions from existing at once
for the same thing or kind. Inform now allows any number of conditions to
exist independently of each other; if the author supplies an explicit name,
that's used, and otherwise Inform automatically makes names. Thus:
```
A fruit can be early, summer or late.
A fruit can be unripened, ripe, overripe, or mushy (this is its
squishiness property).
A fruit can be citrus, berry, melon, or pome.
```
creates three properties, called "fruit condition", "squishiness" and
"fruit condition 2" respectively.
This means that an extension author can write, say,
```
A vehicle can be brand new, roadworthy, battered or wrecked (this is
its serviceability property).
```
without "using up" the eventual user's ability to make his own "vehicle
condition".
Conditions like these can be created for anything which can have a property,
and in particular for scenes and enumerated kinds of value as well as
for objects (see above).
- It is now possible to use "there", as in "there is" or "there are", to
talk about whether or not something exists. Here are some examples in
assertion sentences:
```
There is a room called the Shadow World.
There is a box in the Shadow World.
There is a jigsaw puzzle in the box.
A coin is a kind of thing. There are two coins on the crate.
Incrimination relates various things to various people. The verb to
incriminate (he incriminates, they incriminate, he incriminated, it is
incriminated, he is incriminating) implies the incrimination relation.
There is a man called Mr Darcy. There is a pair of boxer shorts which
incriminates Mr Darcy. There is a fishing rod incriminating Mr Darcy.
```
And here are some examples in conditions:
```
if there is a man, ...
if there are vehicles, ...
if there is nothing in the box, ...
if there are three coins in the box, ...
if there are exactly three coins in the box, ...
if there are at least three coins in the box, ...
if there is something incriminating Mr Darcy, ...
if there is nothing incriminating Mr Darcy, ...
if there are fewer than two things which incriminate Mr Darcy, ...
```
Note that
```
if there are three coins in the box, ...
if there are at least three coins in the box, ...
```
have the same meaning: if the number of coins in the box is four, then
there do exist three coins in the box, which is what these are testing.
"Exactly" is more precise:
```
if there are exactly three coins in the box, ...
```
- As some of these examples suggest, the handling of "nothing" has been
improved so that it can be used in a wider range of contexts, and a few
bugs have been fixed in the process. For instance, the following now works:
```
now nothing incriminates Mr Darcy;
```
And similarly for "nowhere", "nobody", "no-one" and even "no one" -
```
now nobody in the Temple is surprised;
if nowhere is dark, ...
if no one is in the Temple Annexe, ...
```
- It has always been legal to use "not all" in a condition - for instance,
```
if not all of the coins are in the box, ...
```
"Not every" has been added, so that this has the same meaning:
```
if not every coin is in the box, ...
```
And similarly, we can now if we wish write
```
if not more than four coins are in the box, ...
```
or (equivalently)
```
if not fewer than six coins are in the box, ...
if not less than six coins are in the box, ...
```
Those are the only determiners to which "not" can be applied. So this,
for instance, continues not to be allowed:
```
if not some of the coins are in the box, ...
```
- There was previously a hard limit of 32 on the maximum number of relations
"in groups" which could be created in any single compilation: this has
been removed and there is now no limit.
- The relation which tests whether two things are equal now has a name: it is
the "equality" relation. So for instance it's now possible to define -
```
The verb to be identical to implies the equality relation.
```
(There's no obvious reason for doing this, but it was anomalous that it
couldn't be done before.)
- When a verb is created in the form "to be able to...", as the Standard Rules
does with the line:
```
The verb to be able to see (he is seen) implies the visibility relation.
```
then the following prepositional forms can be used:
```
"to be able to see"
"to be unable to see"
"to be able to be seen by"
"to be unable to be seen by"
```
The last of these, "to be unable to be seen by", did not work in previous
builds, having been overlooked. So it is now possible to write, e.g.,
```
if Peter is unable to be seen by Paul, ...
if Peter had not been unable to be seen by Paul, ...
```
### Directions
- Directions have been reformed. In earlier builds it was difficult to create new
directions (and the documentation officially said that this could not be
done at all); I6 hacks were needed, and the results sometimes failed.
Directions can now be created freely, or at any rate pairs of them can:
```
Turnwise is a direction. The opposite of turnwise is widdershins.
Widdershins is a direction. The opposite of widdershins is turnwise.
```
- To create a direction, a simple sentence in the form "X is a direction."
must be given.
- Each direction has to have a value for the "opposite" property, which
has to be another direction; these must be in matched opposing pairs.
- The maximum length of a direction name used to be 1 (i.e., they had to
be single words); now it is 3.
- The maximum number of directions used to be 16; now it is 100.
- New directions are exactly as good as old ones: for instance we can
write "to be mapped turnwise of", or use route-finding through new
directions.
- Each direction automatically makes a relation, the "mapping-turnwise
relation" (or similar), which is the meaning of "to be mapped
turnwise of". This enables us to define prepositional forms; for
instance, the Standard Rules includes the line:
```
The verb to be above implies the mapping-up relation.
```
- The I6 implementation beneath the surface is new: there are no "n_to",
"s_to", etc., I6 properties any longer; the "door_dir" property for
doors now holds a direction object, not a direction property as it did
in the I6 library; the map is stored in a flat array instead. See
the template file "WorldModel.i6t".
### Minor New Features
- Scenes can now be said - that is, if X is a scene, then "[X]" now expands
to the name of the scene.
- It is now possible to have "let" and global variables of the kind of value
"sound-name", which hold sound effects. (The default value for this is
a special silent sound, the playing of which has no effect, but which
is present in all compilations regardless of whether they use sounds
or not.) And similarly for "figure-name" and "external-file". "Scene",
which up to now could be held in a global but not a local variable
(an oversight) can now be either.
- Truth states (both of them) can now be understood, so actions can be made
which are applicable to them, and "[truth state]" is a valid Understand
token.
- The Understand token "[a time]" matches a time of day, such as "10:15 AM"
or "midnight". But the "time" kind of value can hold relative times as
well as absolute ones -- for instance, 10 minutes is a time, but it is
not recognised by "[a time]" since it isn't a specific moment in the day.
A new Understand token called "[a time period]" has been added for this,
so for instance
```
Understand "wait for [a time period]" as ...
```
would match WAIT FOR AN HOUR or WAIT FOR TWO HOURS 12 MINUTES.
- The handling of mixed-case notations has been improved - for instance, given
```
Acidity is a kind of value. pH 7 specifies an acidity.
```
the "p" will always be printed in lower case, and the "H" upper case.
Printing back always respects the case in the original specification;
but parsing is always case-insensitive.
- Repeating through tables used to carry the risk that if something in the body
of the loop changed the row selection, the loop would break, since it used
the row selection itself as an iterating variable. This has been corrected.
A "repeat through" loop can now be nested inside other "repeat through"
loops; the body of the loop can change the row selection without harm;
moreover, a "repeat through" loop preserves the row selection, so that
on exit, the same row (if any) is selected as was selected before the
loop began.
- When tables are sorted "in random order", blank rows are now automatically
moved to the bottom. The non-blank rows occur in a uniformly random order
at the top of the table.
- When "Include ... instead of ..." is used to replace a part or segment from
the I6 template, a subsequent "include... instead..." on the same part or
segment now overrides an earlier one. (In 5T18 both would be applied, but
this almost never led to valid I6 code, and it's hard to think of
circumstances when users would want that behaviour.) It continues to
be the case that "Include ... after ..." and "... before ..." allow
multiple inclusions attached to the same part or segment.
### Interface to I6 Internals
- There are now two ways to specify that an adjective is defined at the I6 level:
```
Definition: a rulebook is empty rather than non-empty if I6 routine
"RulebookEmpty" says so (it contains no rules, so that following
it does nothing and makes no decision).
```
The part in brackets does nothing, but is the text used in the Phrasebook
index for the user's benefit; it should be a brief definition. The I6
routine should take one parameter, the value on which the adjective is
being tested, and should return true or false as appropriate.
```
Definition: a rulebook is exciting if I6 condition
"excitement_array-->*1==1" says so (it is really wild).
```
The condition is given as a "schema", in which the escape "*1" is
expanded to the value on which the adjective is being tested. (This is
usually faster than calling a routine, but in case of side-effects, the
*1 should occur only once in the condition, just as with a C macro.)
- The "translates into I6 as" verb now has another possible use: for Understand
tokens. This is how the Standard Rules sets up the new "[a time period]"
token, for instance:
```
The Understand token a time period translates into I6 as
"RELATIVE_TIME_TOKEN".
```
(The I6 routine of this name can be found in the Time.i6t template file.)
This might be of use to extensions which want to add very rich parsing
possibilities which break existing conventions.
### Performance
- The run-time storage of relations, kind membership and the map has been
made slightly more efficient. The gain has been used to make projects with
"use memory economy" in force run a little faster - previously, memory
economy blocked Inform from generating faster searches through objects
by using precompiled linked lists. That still leaves a memory saving of
around 2.5K in a completely full Z-machine story file. This is not as
ridiculous as it sounds, since the Z-machine has only 64K of dynamic
memory to play with, and this tends to be the limiting factor on the
size of projects which Z can handle. A minimal I7 project needs 24K of
this, so a saving of 2.5K out of the remaining 40K represents room for
maybe a 6% larger design. (Of course for Glulx projects this is all
irrelevant - there are really no size limits at all.)
- Some users observed that the 5T18 build compiled more slowly, and this was
a large enough effect to make a considerable difference to novel-sized
projects (with 200,000-word source texts). This proved to be an accidental
side-effect of internal consistency checks only really needed when
debugging Inform itself. This has been fixed, and large projects should
once again compile at roughly the same speed as in 5J39 and previous
builds.

978
notes/release/7-1.md Normal file
View file

@ -0,0 +1,978 @@
# 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](../version_history.md).
## 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.

2322
notes/release/7-2.md Normal file

File diff suppressed because it is too large Load diff

3026
notes/release/8-1.md Normal file

File diff suppressed because it is too large Load diff

276
notes/release/8-2.md Normal file
View file

@ -0,0 +1,276 @@
# Release notes for Inform v8.2 (build 6E72)
This release was made on 1 Jul 2010, before Inform was open-sourced.
At that time bugs were tracked by a Mantis server, with seven-digit issue numbers,
and versions of Inform were identified by build codes in the form NLNN.
Suggestion numbers, also large but not starting with a 0, referred to tickets at
a Uservoice forum then in use.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This minor release of Inform contains no new features, and simply corrects a
number of bugs reported in build 6E59. We would like to thank Jesse McGrew,
especially, for setting up the Mantis-powered bug tracker on the Inform
website; but also, of course, all of the people who registered to use the
tracker, and who filed reports. The case numbers below, alarmingly in seven
digits, are references to this database at www.inform7.com/bugs.
## Documentation, examples and extensions
### Examples
- "WXPQ": Corrected the commentary portion of the example, which continued to
refer to outdated (as of 6E59) syntax for detecting parser errors.
- "North by Northwest": updated to mention "Use DICT_WORD_SIZE of..." as an
option to raise the nine-letter dictionary limit when compiling to Glulx.
### Extensions
- "Plurality": updated to remove deprecated "using... option" phrases; see
report 0000073.
- "Locksmith": updated to version 10 to remove deprecated "using... option"
phrases.
- "Complex Listing": updated to version 7 to remove deprecated "using... option"
phrases.
## Bug fixes
### Source text and punctuation
Bug fixed (0000045) whereby phrases defined in the form "(list) ... words ...
(list)" couldn't then be used with constant lists.
Bug fixed (0000064) whereby hard line breaks typed in the middle of text
with substitutions would cause problems.
Bug fixed (0000110) whereby Inform would sometimes not allow "otherwise"
clauses in "if" phrases whose condition ended with a digit, and whose first
character of the succeeding phrase began with one.
### Headings
Bug fixed (0000051) whereby heading cues for problem messages weren't very
nicely spaced, vertically.
### Extensions
Bug fixed (0000063) whereby installing an extension whose name contains a
full stop would cause all kinds of unfortunate results, such as Inform refusing
to compile projects altogether. (Full stops aren't allowed in extension names.)
Bug fixed (0000098) whereby the use of sections replacing sections found in
extensions would mask any problem messages about those extensions having the
wrong version.
Bug fixed (0000116) whereby variables in "unindexed" sections of extensions
would nevertheless be included in extension documentation (not technically
speaking the index; still, it must be right to exclude them).
### Assertions and creations
Bug fixed (0000130) whereby confusions of the start location with a direction
were reported with a cryptic problem message.
Bug fixed (0000112) whereby Inform could crash if asked to define objects using
a table, and one of the objects exists already with a different meaning.
Bug fixed (0000046) whereby the compiler might go into an endless loop issuing
problem messages in response to lines such as
```
There are 5 numbers in Home.
```
Problem message reporting such errors improved.
### Model world
Bug fixed (0000038) whereby examining enterable supporters sometimes
produced odd text.
Bug fixed (0000039) whereby a room whose name included the word "scene"
provoked spurious problem messages.
### Properties
Bug fixed (0000035) whereby assertions like "A tennis court has numbers called
length and width." would make one property, called "length and width", not
two, "length" and "width".
Bug fixed (0000037) whereby "X provides the property P" wouldn't always work
if P were a property whose name coincides with that of a kind of value.
Bug fixed (0000082) whereby adjective definitions based on the value of a
property would produce spurious problem messages if that property were
non-arithmetic, e.g., a truth state.
Bug fixed (0000117) whereby rooms not explicitly declared as such could not
be used as values of a property required to hold only rooms.
### Relations
Bug fixed (0000104) whereby one-to-one relations of values couldn't always
be tested directly.
Bug fixed (0000141) whereby conditions implicitly involving searches could
not be used in definitions of relations, and produced a spurious internal
error if they were.
Bug fixed (0000043) whereby Inform was not making sensible assumptions about
the valencies of relations when these weren't explicitly given; e.g. in
```
Pet ownership relates various animals to a person (called the owner).
```
it's clear that this is various-to-one, but Inform was assuming v-to-v.
Bug fixed (0000041) whereby relations defined using a named property, but
for values not able to take properties, resulted in obscure run-time problem
messages rather than a helpful compile-time one.
Bug fixed (0000042) whereby equivalence relations of unbounded kinds, such
as numbers, weren't working properly.
Bug fixed (0000049) whereby constant names of relations couldn't be used as
values of variables or table entries, etc., if those relations were over
unbounded kinds.
Relation memory usage slightly reduced in a few cases (see 0000059).
### Actions
Bug fixed (0000057) whereby requesting an actor to end the story resulted in
an "unable to do that" message.
### Rules and rulebooks
Bug fixed (0000143) whereby Inform could crash on the name of a rule which
contained parentheses.
Bug fixed (0000071) whereby phrases to invoke value-producing rulebooks didn't
work with lists or some other complicated values.
Bug fixed (0000072) whereby phrases which produce values didn't always work if
those values were to be lists or some other complicated values.
Bug fixed (0000070) whereby spurious programming errors about the "MStack"
would appear during start-up in some cases if rulebooks had variables which
contained lists.
### Lists
Bug fixed (0000074) whereby constant lists were constrained to no more than
127 entries. (The most serious bug in 6E59, and the main reason for this early
bug-fixing re-release.)
### Tables
Bug fixed (0000076) whereby self-referential constant lists didn't work in
tables defining a kind of value.
### Scenes
Bug fixed (0000075, 0000077) whereby the scene change machinery rule would
always succeed, rather than end without result, which made it impossible to
have rules working after it in the scene changing rulebook.
### Phrases and functional programming
Bug fixed (0000033) whereby definitions such as
```
To say foo (X - text): ...
```
could not then be used.
Bug fixed (0000079) whereby the text substitution "[a list of ...]" would
sometimes list the wrong things if the description included a negated relative
clause, e.g., "a list of things in the cupboard which are not dishes".
Bug fixed (0000102) whereby "Definition:"s of adjectives given in the longer,
phrasal form would always be compiled as if they applied to objects, whatever
the specified domain of the adjective, with usually unfortunate results.
Bug fixed (0000050) whereby descriptions used as phrase tokens would sometimes
be disallowed on grounds of their specificity, but wrongly - e.g., "all open
doors" wouldn't be allowed as a description of things, when in fact it's fine
as such because doors are things.
Bug fixed (0000105) whereby phrase tokens which had to match specific list
values, and possibly other complicated values, didn't work.
Bug fixed (0000111) whereby phrase tokens involving relative clauses, such
as "(X - a number that is four)", would fail.
Bug fixed (0000107) whereby "if" phrases using cases would sometimes reject
constant names of other phrases on spurious type-checking grounds, if a
specific kind of phrase was required.
Bug fixed (0000087) whereby the problem message would be rather unhelpful
if a phrase were used to decide a value of a kind whose domain of values
was in fact empty.
Bug fixed (0000085) whereby invoking a phrase that cannot be applied
unambiguously produced unhelpful problem messages in some cases.
Bug fixed (0000099) whereby "now" could not be used to move backdrops.
Bug fixed (0000083) whereby using "decide on nothing" outside of a phrase -
clearly a mistake - produced an internal error instead of a helpful problem
message.
Bug fixed (0000032) whereby testing "if the player was on the holder of the
player" always came true during the first turn.
Bug fixed (0000033) whereby "say" phrases whose tokens included text could
not always be used. (An unusual thing to want to do, but legal.)
### Equations, units and arithmetic
Bug fixed (0000044) whereby Inform could sometimes crash while trying to
produce problem messages in reply to things like
```
showme the square root of "hello"
```
### Indexing
Bug fixed (0000054) whereby the Scenes index had various arguable deficiencies,
and could have been laid out better; this was really a suggestion, but was
acted on anyway.
Bug fixed (0000061) whereby the Kinds index incorrectly listed which properties
a kind typically held; and generally improved the coverage of properties on
the Kinds index page.
Bug fixed (0000068) whereby phrases with kinds including arrows would have
boldface misused.
Bug fixed (0000142) whereby the Phrasebook index subheadings would be wrong
if indexing phrases defined in an extension, under headings in that extension
which contained two hyphens.
### Releasing, bibliographic data, and cBlorb
Bug fixed (0000040) whereby play-in-browser pages using Parchment would
sometimes hang in Google's "Chrome" browser.
Bug fixed (0000058) whereby apostrophes couldn't be used edges of words in
the story title.
Bug fixed (0000146) whereby one-page source web pages would be "page 1 of 0"
rather than "page 1 of 1".
## Mac OS X app
The issue in which the Index became inaccessible after a run producing
Problem messages has been fixed.
## Linux app
Bug fixed (0000127) whereby the documentation for installed extensions
didn't work.
Bug fixed (0000144) whereby the main window couldn't be resized
smaller than a certain size.
Bug fixed (0000145) whereby installing the program for the first time
on a fresh Ubuntu system caused all sorts of problems.

14
notes/release/8-3.md Normal file
View file

@ -0,0 +1,14 @@
# Release notes for Inform v8.3 (build 6F92)
This release was made on 17 October 2010, before Inform was open-sourced.
At that time bugs were tracked by a Mantis server, with seven-digit issue numbers,
and versions of Inform were identified by build codes in the form NLNN.
Suggestion numbers, also large but not starting with a 0, referred to tickets at
a Uservoice forum then in use.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This is a private test build released a few days in advance of v8.4, and the
change log is given in full [there](8-4.md).

1107
notes/release/8-4.md Normal file

File diff suppressed because it is too large Load diff

216
notes/release/8-5.md Normal file
View file

@ -0,0 +1,216 @@
# Release notes for Inform v8.5 (build 6G60)
This release was made on 23 December 2010, before Inform was open-sourced.
At that time bugs were tracked by a Mantis server, with seven-digit issue numbers,
and versions of Inform were identified by build codes in the form NLNN.
Suggestion numbers, also large but not starting with a 0, referred to tickets at
a Uservoice forum then in use.
This is part of the [historical archive of release notes](../version_history.md).
## Overview
This release of Inform leaves the core language unchanged, except for the
correction of a small number of bugs, and its main purpose is to provide
an improved Index. Better maps are drawn on the World Index, and there's
more detail across several other pages.
## Index
Although we have given the Index a comprehensive revision, the effect is more
evolutionary than revolutionary. Most of the changes are refinements aimed at
people with larger source texts. We'd like to thank everyone who made
suggestions on the forum at inform7.uservoice.com, whether we accepted these
or not.
The major change in this build is to the World Index page, where the method
used to deduce the positions of rooms has been replaced by a more sophisticated
algorithm, producing better-laid-out rooms for a variety of source texts;
and where maps are also better rendered. A text-only change log is not the
best place to explain what has been done, so we have prepared a PDF file to
accompany the new build, illustrating what's new.
Otherwise, there are changes as follows:
### Actions Index
Acting on suggestion 1163485, we have provided a new index of the Understand
tokens which are built-in (like "[things]") or defined in the source, or in
extensions. Definitions are shown, with source links, and there are
documentation links.
The general actions rulebooks - before, after, instead, and so on - used to
be indexed at the foot of this page. They have moved, and are now at the top
of the Rules Index page.
### Contents Index
The contents listing by heading now opens with the title and author rather
than the word "Contents".
The memory usage estimates are now shown only for projects with the Z-machine
setting, since they're irrelevant for Glulx, and are hidden behind a (+) icon.
Acting on suggestion 1238573, there's now an index of the use options which
are currently set for a project; there are source links as usual, and also
paste icons for setting currently unset options.
### Kinds Index
This was overhauled back in the summer, so not much has changed in this
one. However, the sometimes distractingly long lists of objects belonging
to each kind have been shaded in grey or (in cases where they become long
enough to make it worthwhile) hidden behind a (+) icon. On very large
projects, this makes a big difference to legibility.
### Phrasebook Index
The table of "Relations" now has column headings.
The table of "Verbs used in descriptions" now includes the meanings of
verbs (i.e., which relations they correspond to), and links to the source text
definitions of any new verbs. Prepositional usages such as "To be adjacent to"
are also listed for the first time (see bug report 0000395, though this wasn't
really a bug as such).
### Rules Index
Acting on suggestion 1099933, the rules index is consolidated onto a single
page which shows the names of all of the rulebooks; actual contents of each
rulebook are hidden behind a (+), but the number of rules in the book can be
seen without opening it, and in particular empty rulebooks or activities are
shaded grey. The "Detail view" sub-pages of the Rules Index are therefore
no longer needed.
Also following 1099933, there are now source links to the creations of rulebooks
and activities in the source text.
The groups of rulebooks have been reordered to put the ones most useful to
working Inform authors at the top, and the technicalities down at the bottom.
In particular, the action rulebooks have moved here from the Actions Index.
### Scenes Index
This is unchanged. It was perfect already.
### World Index
As noted above, the map-making algorithm is entirely overhauled, but in ways
we won't detail here. In addition, each room and thing has a (+) icon hiding
a new panel of details, including the properties and where they are set;
the kind, and where it is set; map connections and region (for rooms), and
where they are set; and a list of rules in the source text which make
specific reference to the room or thing in question.
Following suggestion 1109933, the World Index map now follows the same room
colouring as the EPS map, where this has been specified. So, for example:
```
Index map with room-colour of Zoo set to "Navy" and room-name-colour of
Zoo set to "White".
```
will now affect both maps. (The only settings recognised by the World Index
map are "room-colour" and "room-name-colour", and only for named individual
rooms and for regions.)
## Bug fixes
### Source text and punctuation
Bug fixed (0000381) to improve problem messages for doubtful phrase punctuation.
Bug fixed (0000400) to improve problem message for text substitutions using
exotic Unicode characters as part of their names.
Bug fixed (0000373) whereby improperly using brackets to define an antonym,
like so:
```
Definition: a room is home (rather than house) if ...
```
would cause an internal error rather than a problem message. (Removing the
brackets makes this work as intended.)
### Assertions and creations
Bug fixed (0000370) whereby Inform wasn't allowing words long enough to hold
enormous URLs, or the longest word in James Joyce's Finnegans Wake.
Bug fixed (0000375) whereby very deeply recursive assemblies would spuriously
produce problem messages for composite names which were too long.
### Model world
Bug fixed (0000432) whereby the problem message for a three-sided door wasn't
giving source text links.
Bug fixed (0000372) whereby the BRIEF printing mode was still being described
as "normal", when in fact it's no longer the default.
### Properties
Bug fixed (0000390) whereby misleading problem messages were issued for
attempts to create properties of actions, activities or rulebooks.
Bug fixed (0000397) whereby Inform produced an internal error rather than a
problem message for attempts to use "player" as a constant property value.
(The "player" is not constant, because point of view can switch during play.)
### Rules and rulebooks
Bug fixed (0000405) whereby rules written like so:
```
Carry out an actor dead end reaching: ...
```
would cause spurious problem messages if (a) the action had its participle,
in this case "reaching", as other than the first word; and (b) the text "an
actor" was given to specify who would be doing it.
### Scenes
Bug fixed (0000415) whereby Inform could hang if told that scene S begins
when scene T ends and also vice versa.
### Phrases and functional programming
Bug fixed (0000398) whereby Inform produced an internal error instead of a
problem message for an attempt to use "otherwise if" incorrectly.
Bug fixed (0000404) whereby attempts to use descriptions rather than explicit
values in the phrase "place ... in scope" would cause an internal error rather
than a problem message.
### Equations, units and arithmetic
An embarrassing one, this: bug fixed (0000370) whereby, when printing numbers
in words, Inform printed billions as "millions".
### Indexing
Bug fixed (0000363) whereby kinds were listed as kinds of themselves in the
Lexicon (as for instance "animal... noun, a kind of animal").
Bug fixed (0000351) whereby an EPS map, if output, didn't respect instructions
to map non-standard directions like "starboard".
Bug fixed (0000371) whereby regions on the World Index weren't being
coloured as they should have been, and whereby disconnected components
were being superimposed in some cases.
## Windows app
The preferences dialog now allows the font and font size to be changed.
If a window is brought to the front, and its underlying source file has
been changed by another program, then the source file is re-loaded. The
only exception to this is if the source has been changed in Inform 7
but not saved, in which case there is no re-load.
The settings file is only now updated if the user changes any of the
project's settings, and the settings file format has been adjusted to
be closer to the latest version of the OS X Inform front-end.
## Linux app
Fixed the same bug as on the other platforms (0000394) which caused
incorrect highlighting of Unicode quotation marks.
Made some other minor improvements to syntax highlighting.

3997
notes/release/9-1.md Normal file

File diff suppressed because it is too large Load diff

503
notes/release/9-2.md Normal file
View file

@ -0,0 +1,503 @@
# Release notes for Inform v9.2 (build 6L38)
This release was made on 30 August 2014, before Inform was open-sourced.
At that time bugs were tracked by a Mantis server, with seven-digit issue numbers,
and versions of Inform were identified by build codes in the form NLNN.
This is part of the [historical archive of release notes](../version_history.md).
## Introduction
Unlike its predecessor, build 6L02, this release of Inform is aimed almost
entirely at maintenance: it fixes around 150 bugs, most of them minor and
related to recent changes. Users of 6L02 should be able to upgrade with
no preparation needed; users of earlier builds, though, would be well
advised to read the notes on the big changes in 6L02 before proceeding.
But there is one major development, all the same: for the first time
Inform is released for a mass-market mobile operating system - Android.
## Minor new features in the language
It was realised soon after the release of 6L02 that the text substitutions
"[those]" and "[Those]" were ambiguous, since if they're applied to an
object which is a man or woman then they would have to be different in the
accusative and nominative cases. Consider the two texts:
```
"But [we] [aren't] holding [regarding the noun][those]."
"But [regarding the noun][those] [aren't] available."
```
and suppose the noun is Andrew. Then "[those]" needs to expand as "him" in the
first case but as "he" in the second. To distinguish these,
```
"[those in the nominative]"
"[those in the accusative]"
```
and similarly for Those. But what should plain "[those]" and "[Those]" do?
We note that the Standard Rules used "[those]" in 7 responses, all accusative,
and "[Those]" in a further 12, all nominative. Accordingly, Inform now defines
"[those]" as equivalent to "[those in the accusative]" and "[Those]" as
"[Those in the nominative]". This fixes bug 0001232, and though it's not a
perfect solution, it's intended to be something we might revisit when Inform
has a better idea of noun cases (as it will need for, say, adaptive German).
Note that "nominative" and "accusative" are the two values of the kind
"grammatical case"; "nominative" existed in 6L02, but "accusative" is new in
this build.
The real square root function can now be applied to any numerical quantity
for which the dimensions (in physics terms) are a perfect square. Thus, if
we're using the Metric Units extension,
```
the real square root of 4 sq m
```
produces the length "2.0m". This also means that equations such as:
```
Equation - Pythagoras's Theorem
a = root (b^2+c^2)
where a is a length, b is a length, c is a length.
```
can be solved for "a"; this previously failed because "root" could be applied
only to dimensionless numbers. (See also bug report 0001264.)
The following are now equivalent:
```
[1] A food is a kind of thing which is edible. [2] A food is a kind of edible thing.
```
(Previously [1] was allowed, but [2] was disallowed.)
Action descriptions like the following are now rejected:
```
Instead of taking seven things: ...
Instead of taking the teddy bear on the dresser: ...
```
The first case is rejected because a single noun can't be "seven things", and
the second because "the teddy bear", a proper noun, is being used as if it
were a common noun. ("a thing on the dresser" would be fine.) Previous builds
of Inform allowed these, but compiled misleading tests: e.g. the latter
would simply test whether the teddy bear was on the dresser, regardless
of whether or not it was the thing taken.
It is now officially illegal to create something new with one of the
following reserved names:
```
action, condition, list-entry, now-condition, phrase, property-value,
storage, table-reference, variable
```
These all have internal meanings and it's unlikely to be safe to create
anything with these names, though in some cases one might be lucky. (The
example "Greater Variety", for instance, created a table column named
"action" in 6L02 and got away with it; this column has been renamed.
See bug report 0001347.)
It is now officially illegal to define a phrase which looks like "X is
(a relationship) Y". For example,
```
To decide whether (X - testval) is less than (Y - testval):
```
is now disallowed, because there's already a meaning of "To be less than".
(See bug report 0001230.)
When replacing a heading from an extension, it is now possible to put the
heading name in quotation marks for clarity. For example:
```
Section - Another Questions fix (in place of "Section 4 - Phrase used to
ask questions in closed mode" in Questions by Michael Callaghan)
```
(Without quotation marks, the grammar is ambiguous, because of the "in" in
the name of the heading. See bug report 0001239.)
It's now legal to test actions against kinds of actions in a more flexible
way. For example:
```
Attacking is aggressive behaviour.
Examining is inquisitive behaviour.
[1] Before aggressive behaviour: ...
[2] Before doing something other than aggressive behaviour: ...
[3] Before aggressive behaviour or inquisitive behaviour: ...
[4] Before aggressive behaviour or jumping: ...
```
Previously only rule [1] would have been allowed. (This was prompted by
bug report 0001244, though that was arguably a suggestion in disguise.)
The "backtrace" problem messages arising from ambiguous possible phrases,
which list what Inform was trying to read, have been redesigned a little.
The default contents of the following two responses have changed:
```
list writer internal rule response (R)
list writer internal rule response (T)
```
in each case to remove an open bracket at the beginning; this open bracket
is instead displayed using list writer internal rule response (A) first. The
practical effect of this is that only two changes are needed to make the
list writer always use, say, square brackets instead of round ones:
```
The list writer internal rule response (A) is " [bracket]".
The list writer internal rule response (B) is "[close bracket]".
```
(See bug report 0001344, to which this is related.)
I6 template files can now be installed in Inform's external resources
folder, in a subfolder called "I6T". Inform first looks for these in
Project.materials/I6T, then in (external)/I6T, and lastly in its own
built-in reservoir. This is a change nobody actually asked for, but it makes
everything consistent since the same convention is followed for Language
bundles, website Templates and Extensions.
## The Inform application
### Inform for Mac OS X
6L02 introduced an almost entirely rewritten user interface, and inevitably
there were a few bugs: the Installed Extensions list redrew awkwardly,
flashing content (0001238); entering full screen mode could leave the Find
dialog stranded behind (0001252); save panels from the Welcome window were
not sufficiently explanatory (0001273); clicking on extension names to
bring up their documentation worked badly (0001237); unchecking the "bind up
into a Blorb file on release" option on the Settings pane had no effect
(0001306); Inform crashed on launch under Snow Leopard (0001271); IFIDs
were not persistent, defeating their purpose (0001278); headings at the
top of the source text were not correctly rendered on screen (0001331).
These are all fixed.
### Inform for Windows
A new option, "Generate Inform 6 debugging information", has been added to the
preferences dialog. This option controls whether the command line used to run
Inform 6 specifies that the debugging output file should be created, and
defaults to "off".
The Extensions tab is now implemented, providing access to the Public Library.
"Create new project" buttons are present in the documentation, next to example
projects.
The elastic tab-stops option is now "Auto-space table columns" in the
preferences dialog, to match better how things work on OS X.
Bugs 0000210 and 0001362 have been fixed.
### Inform for Linux
We would like to thank Vincent Petry, who has helpfully contributed packages
for OpenSUSE Linux.
### Inform for Android
For the first time, this build of Inform is available for Android:
specifically, for Android 2.1 (Eclair) or later.
## Maintenance
### Core Inform maintenance
Around 100 bug fixes are made in this build, and once again all known issues
have been resolved.
The following lists only the more significant bug fixes: it excludes those
categorised by the bug tracker as "cosmetic", mostly small improvements to
problem messages, or which affect only the documentation. I'm nevertheless
grateful to all those who submitted these bugs, and in particular this build
benefits from reports 0001229, 0001234, 0001246, 0001251, 0001259, 0001262,
0001263, 0001281, 0001289, 0001295, 0001299, 0001303, 0001308, 0001311,
0001316, 0001318, 0001321, 0001324, 0001327, 0001333, 0001334, 0001341,
0001342, 0001345, 0001352, 0001388.
(A special mention to 0001336 and 0001337 for some close proof-reading of the
manuals, and another to 0001275 for pointing out that we confused the Swedish
country code (SE) with its language code (SV) when putting together icons to
indicate the language of play, which resulted in the flag of San Salvador
making an appearance.)
#### Uncategorisable
- Bug fixed (0001339) whereby a really large source text might compile to I6
code containing spurious space characters which, with bad luck, might
fall in the middle of a keyword and thus cause I6 errors. (This is only
ever known to have occurred on a 3.6 million word source.)
- Bug fixed (0001249) whereby headings with multiple bracketed stipulations
```
Section - Fruit (for use with Locksmith by Emily Short) (not for release) (for Glulx only)
```
would produce spurious problem messages.
#### Assertions and creations
- Bug fixed (0001309) whereby assertions to set rule responses would be
misread if the rule names included the word "with" or "having".
- Bug fixed (0001247) whereby assertions moving rules in rulebooks would
sometimes be misread if the rule or rulebook names included the word "in".
- Bug fixed (0001373) whereby "The Attic is above the Parlor" would work,
but "The Attic is a room above the Parlor" would make a connection
the wrong way (up from the Attic to the Parlor rather than vice versa).
- Bug fixed (0001290) whereby some attempts to make map connections to
constant values which aren't objects would be ignored (which is fair
enough) but with no problem message (which isn't).
- Bug fixed (0001260) whereby an oddly-phrased sentence such as
```
X with the printed name "Cross" is a thing.
```
would be read even more oddly as a declaration that all things have
this printed name.
- Bug fixed (0001361) whereby the assertion "X is on top of Y" would sometimes
be read as "X is on (top of Y)".
#### Model world
- Bug fixed (0001292) whereby the reaching inside/outside rules would not
properly set the "person reaching" variable if the test were run
other than via an action.
- Bug fixed (0001363) whereby "the direction of D from R" would produce
a bogus result for a one-sided door.
- Bug fixed (0001243) whereby making scenery parts of a person would lead to
a strangely worded problem message.
- Bug fixed (0001359) whereby the text substitution "[the player's surroundings]"
would produce empty text before play begins.
#### Properties
- Bug fixed (0001228) whereby attempts to refer to an impossible property
of an object (a property, that is, which can only belong to an object
of a different kind) would not always be caught at compile time.
#### Relations
- Bug fixed (0001364) whereby a relation defined by a condition involving a test which,
to resolve, would require the expansion of a text substitution, would
fail with an internal error. (Such a relation is quite legal and now
compiles properly.)
- Bug fixed (0001285) whereby route-finding through a various-to-one relation
would fail to work in some configurations of the relationship. (That's
probably being generous - when it did work, that was mostly luck.)
#### Rules and rulebooks
- Bug fixed (0001329) whereby a condition limiting the applicability of a rule
might not be properly type-checked, causing internal errors in some cases.
- Bug fixed (0001280) whereby an attempt to put just a "value" into a rule's
preamble would cause an unclear problem message.
- Bug fixed (0001323) whereby rules such as...
```
Before doing something other than listening to or examining the creature:
```
...would be misunderstood as (listening) to (or examining the creature)
rather than (listening to or examining) (the creature).
- Bug fixed (0001296) whereby
```
[1] Instead of taking the rock or looking: ...
[2] Instead of looking or taking the rock: ...
```
[1] was reported as a problem (the actions can't mix because "looking"
can't apply to the rock), but [2] wasn't. To avoid ambiguities, both
forms are illegal.
- Problem message improved (0001389) for getting the 'for...' and 'when...'
clauses attached to a rule about actions in the wrong order.
- Bug fixed (0001328) whereby rules based on a parameter which happens to
end with the word "rule" would sometimes have the parameter ignored,
making them more widely applicable than intended.
#### Lists
- Bug fixed (0001387) whereby Inform wasn't preventing constant lists or
texts from being modified using text replacement, list sorting and
so forth. All such attempts now result in problem messages.
#### Tables
- Bug fixed (0001322, 0001338) whereby creating objects via a table which contained
additional blank rows would generate spurious I6 errors.
- Bug fixed (0001360) whereby attempting to access a table row, where no row
was selected, could cause TableLookUpEntry() to crash at run time. There's
now a run-time problem message instead.
- Bug fixed (0001255) whereby looking up texts, lists, etc., in a table which
contained a blank row before the match would sometimes cause memory
out of range crashes at run time.
- Bug fixed (0001250) whereby it was possible to create the same column in
two different tables with different kinds, provided that both columns
started out empty; this resulted in mysterious type-checking problem
messages.
- Bug fixed (0001390) whereby attempting to read a blank entry of a table as
if it held a value would throw a run-time problem (as it should) but
then also in some circumstances crash the virtual machine.
#### Equations, units and arithmetic
- Bug fixed (0001302) whereby real-valued constants of some kinds, notably
those defined by the Metric Units extension, couldn't be written with
a minus sign.
- Bug fixed (0001268) whereby local variables were not being promoted implicitly
from "number" to "real number" when used in an equation. (The documentation
half-promised that this would happen; well, now it does.)
- Bug fixed (0001310) whereby comparisons between values of a kind other than
"real number", but nevertheless stored as floating-point quantities,
would wrongly be made using integer comparisons.
- Bug fixed (0001257) whereby comparisons between real numbers and numbers
would not always implicitly promote the numbers to reals before making
the comparison.
#### Understanding
- Bug fixed (0001369) whereby a declaration of "Understand... as a mistake",
with no error message text supplied, would sometimes crash Inform.
- Bug fixed (0001265) whereby an "Understand... when..." condition would
throw a problem about referring to the current action even when it
in fact tested whether actions had taken place in the past.
- Bug fixed (0001313) whereby a runtime error is thrown when the player's
command is matched against the text "me", which doesn't qualify,
on early turns only.
- Bug fixed (0001325) whereby the Understand token "[any K]", where K is
a kind of value but not a kind of object, could sometimes produce
an internal error.
- Bug fixed (0001301) whereby single-letter elements of literal patterns
would fail to parse at the command line under Glulx if written in
upper case. (Thus a command such as "heat the water by 5c" would work,
but not "heat the water by 5C".) Note that this only affected commands
typed by hand, because the TEST command flattens to lower case
automatically.
#### Text, spacing and printing
- Bug fixed (0001242) whereby "blouse" and its derivations pluralized as
"blmice", not "blouses".
- Bug fixed (0001231, but see also 0001396) whereby the text substitution "[A
list of...]" would only capitalise the first word of the output if it were an
article, so for example it could produce "four gold coins" rather than "Four
gold coins". And similarly for "[The list of...]", which could be fooled by
proper nouns in lower case.
- Bug fixed (0001258) whereby printing unusual indefinite articles using the
"[A ...]" text substitution would produce a "library error 2" at
run-time.
- Bug fixed (0001319) whereby a text substitution defined with a slash to
indicate alternate phrasings on the opening word would lose its case
sensitivity.
- Bug fixed (0001291) whereby string comparisons in the background would cause
"[first time]..." text substitutions to behave unexpectedly when used
in certain properties of rooms or things.
- Bug fixed (0001370) whereby the string "[one of]..." compares as equal to the
empty text "" before being first printed, even if it's never possible for
it to be empty. For comparison purposes, it now is equal to the text
value it will have when next printed.
- Bug fixed (0001368) whereby spurious line breaks would sometimes appear in
room descriptions including paragraphs arising from "writing a paragraph
about" rules.
- Bug fixed (0001365) whereby grouping items under a given text would not
always work if that text included substitutions. It now does, and
automatically performs the substitution at grouping time.
- Bug fixed (0001344) whereby two oddball cases in the list-writer printed
a close round bracket ")" directly, rather than printing it with the
list writer internal rule response (B).
- Bug fixed (0001283) whereby the past tenses of regular English verbs ending
-ay, -ey or -oy were incorrect: thus play was plaied, annoy was annoied,
and so forth.
- Bug fixed (0001396) to do with capitalising "ÿ" in the Z-machine (Queensrÿche
fans, beware).
#### Indexing
- Bug fixed (0001300) whereby the text "This text is not actually used" is
actually used in the Actions detail view.
- Bug fixed (0001335) whereby the adjective "substituted" was wrongly defined
in the Lexicon index.
- Bug fixed (0001332) whereby the Contents index was miscounting the number of
words under some headings.
#### Testing commands
- Bug fixed (0001256) whereby the RESPONSES testing command would list responses
from some extensions in more than one numbered chunk.
- Bug fixed (0001236) whereby run-time problem messages would sometimes be
hidden on screen if they occurred during the expansion of a text
substitution.
#### Releasing, bibliographic data, and cBlorb
- Bug fixed (0001293) to make HTML generated by cBlorb slightly better
at passing validators.
- Bug fixed (0001253) whereby releasing along with the "introductory booklet"
or "introductory postcard" had stopped working.
### Extension maintenance
Glulx Text Effects by Emily Short (now maintained by Dannii Willis) has been
updated to give comprehensive support for all Glk text features, and to
simplify how colours are set, by using web (CSS) colours like #8800FF.
See the extension documentation for more details. An issue to do with
deprecated phrases in the examples has been resolved (see 0001367).
This update is not fully backwards compatible, but any changes will be
easy to make.
Metric Units: removed documentation references to the limitations which
existed before we switched to floating-point arithmetic in 6L02.
Epistemology by Eric Eve: Updated to version 8. This fixes a bug (which has
oddly only just come to light after all this time, unless its a by-product of
6L02) by which backdrops werent being marked as seen. It also adds an (A) to
label the response of the report epistemic status rule.
### Examples maintenance
Examples in the documentation which contained ampersands now paste correctly
into the source panel (see 0001312).
Small revisions have been made to the examples Lethal Concentration 1 and 2
(see 0001341), Persephone (see 0001346), Terror of the Sierra Madre (0001340),
Olfactory Settings (see 0001305).
The example "Lollipop Guild" has been rewritten to demonstrate removing
implicit takes from a different action (since eating no longer mandates
these); and it is more dentist-friendly into the bargain.
The tiny example "We" has been removed: responses and adaptive text have
overtaken it (see 0001245).
The example "Greater Variety" has been renamed "Variety 2" to emphasise its
sequelness (see 0001284).
### Interpreter maintenance
Inform comes with browser interpreters built in, so that it can act on release
instructions such as "Release along with an interpreter.", which tell Inform
to make a website in which the current story is immediately playable.
Parchment, Quixe and Vorple, all included by default, are unchanged from
their 6L02 versions.

1036
notes/release/9-3.md Normal file

File diff suppressed because it is too large Load diff

40
notes/version_history.md Normal file
View file

@ -0,0 +1,40 @@
# Version history
See [versions](versions.md) for details of Inform's version numbering.
The next version to be released will be 10.1.0, and its [draft release note is here](release/10-1-0.md).
Links in the following table are to the archive of release notes past.
Codename | Version | Build | Date | Highlights
---------- | --------------------------- | ----- | -------------- | ----------
Aluminium | [1.1](release/1.1.md) | 3K27 | April 2006 | Public launch
... | [1.2](release/1.2.md) | 3K56 | May 2006 | --
... | [1.3](release/1.3.md) | 3L95 | May 2006 | --
... | [1.4](release/1.4.md) | 3M43 | May 2006 | --
... | [1.5](release/1.5.md) | 3P53 | June 2006 | --
... | [1.6](release/1.6.md) | 3R85 | June 2006 | --
... | [1.7](release/1.7.md) | 3T38 | July 2006 | --
Beryllium | [2.1](release/2.1.md) | 3V01 | August 2006 | Glulx support
... | [2.2](release/2.2.md) | 3Z95 | September 2006 | --
... | [2.3](release/2.3.md) | 4B91 | November 2006 | --
Carbon | [3.1](release/3.1.md) | 4F59 | December 2006 | Reform of phrase definitions
... | [3.2](release/3.2.md) | 4K40 | January 2007 | --
Dysprosium | [4.1](release/4.1.md) | 4S08 | March 2007 | Added Linux platform
... | [4.2](release/4.2.md) | 4U65 | May 2007 | --
... | [4.3](release/4.3.md) | 4W37 | July 2007 | --
... | [4.4](release/4.4.md) | 4X60 | August 2007 | Recipe Book
Europium | [5.1](release/5.1.md) | 5G67 | November 2007 | Indexed text, stored actions
... | [5.2](release/5.2.md) | 5J39 | December 2007 | Lists
Fluorine | [6.1](release/6.1.md) | 5T18 | April 2008 | Pythonesque indentation rules
... | [6.2](release/6.2.md) | 5U92 | September 2008 | Adjectives applied to all values
Gallium | [7.1](release/7.1.md) | 5Z71 | April 2009 | Better releasing, new-look Index
... | [7.2](release/7.2.md) | 6E36 | April 2010 | --
Hydrogen | [8.1](release/8.1.md) | 6E59 | June 2010 | Parchment support, functional programming
... | [8.2](release/8.2.md) | 6E72 | July 2010 | --
... | [8.3](release/8.3.md) | 6F92 | October 2010 | --
... | [8.4](release/8.4.md) | 6F95 | October 2010 | Quixe support
... | [8.5](release/8.5.md) | 6G60 | December 2010 | --
Iron | [9.1](release/9.1.md) | 6L02 | May 2014 | Language reforms, unifying text
... | [9.2](release/9.2.md) | 6L38 | August 2014 | Added Android platform
... | [9.3](release/9.3.md) | 6M62 | December 2015 | Extension projects, unifying actions
Krypton | [10.1.0](release/10.1.0.md) | ---- | August 2022 | Inter, open source

View file

@ -20,7 +20,11 @@ source it was compiled from. This one is clearly unstable:
## State of play in August 2022
The repository currently contains only unstable versions, but the first release
Altogether 30 release versions of Inform were issued in the period 2006-22,
but that was before the software moved to Github, and so those are not available
as Releases in this repository. See [notes/version_history.md](notes/version_history.md) for the full catalogue.
So this repository currently contains only unstable versions. The first release
version of the open-source age, `10.1.0`, will be made in early August 2022.
Going forward, we will mostly not provide binaries of the apps for unstable versions - only for releases.

View file

@ -24,12 +24,13 @@ code is continuously maintained alongside it: see {WEBICON} [Inform: The Program
Software in this repository is [copyright Graham Nelson 2006-2022](notes/copyright.md)
except where otherwise stated, and available under the [Artistic License 2.0](https://opensource.org/licenses/Artistic-2.0).
To consult... | Turn to...
------------------------------- | -----------------------------------------
Brief news about ongoing work | [notes/working_notes.md](notes/working_notes.md)
Licencing and copyright policy | [notes/copyright.md](notes/copyright.md)
Branching and versioning policy | [notes/versioning.md](notes/versioning.md)
Language evolution policy | [https://github.com/ganelson/inform-evolution](https://github.com/ganelson/inform-evolution)
To consult... | Turn to...
--------------------------------- | -----------------------------------------
Brief news about ongoing work | [notes/working_notes.md](notes/working_notes.md)
Licencing and copyright policy | [notes/copyright.md](notes/copyright.md)
Branching and versioning policy | [notes/versioning.md](notes/versioning.md)
Language evolution policy | [https://github.com/ganelson/inform-evolution](https://github.com/ganelson/inform-evolution)
Version history and release notes | [notes/version_history.md](notes/version_history.md)
## Repositories