1 Life and Times of the Inform Library Release 6/12
2 =================================================
4 This release of the Inform Library marks the first release of the Inform
5 6 library after custody was taken over by David Griffith. This release
6 focuses mainly on bugs reported at
7 http://www.inform-fiction.org/patches/library.html. A few significant
8 enhancements have been added as well.
12 New things added in Release 6/12
13 ================================
15 First-person and third-person narrative voices are now natively
16 supported. See voices_and_tenses.txt for information on how to use
19 The default mode is now VERBOSE.
21 Added infglk.h for more convenient programming for the Glulx virtual
24 There is now a Global "no_infer_message" which can be used in the
25 ChooseObjects() routine to suppress an inference message for a
26 particular match. This global is reset to false after the turn is
29 There is now a Global "no_implicit_actions" which can be used to tell
30 the library not attempt to do things that implicitly must be done. For
31 example, the PC is holding a sack containing an apple and the command
32 "DROP APPLE" is typed. With no_implicit_actions set to true, the
33 Library will complain instead of taking the apple out of the sack before
34 dropping it. Once this global is set, it stays set.
36 If you add "Constant NO_INITIAL_LOOK;" to the beginning of your code,
37 the library will not do an initial LOOK at the beginning of your
40 There is now an optional Epilogue() function. This will execute when
43 TAKE ALL has been modified such that scenery or animate objects will not
44 be taken. To revert back to traditional behavior, add "Constant
45 TRADITIONAL_TAKE_ALL;" at the beginning of your program.
47 If you want to use color in your game, you must add "Constant COLOUR;"
48 or "Constant COLOR;" to the beginnning of your code. This was required
51 To deal with L61126, a new global has been introduced:
52 parser_inflection_func. Whenever parser_inflection is set as a
53 function, parser_inflection_func must be set to true. When the parser
54 is done with it, parser_inflection_func is set back to false. Under the
55 Z-machine, it is possible to tell if a global is a common property or a
56 function. This is not so with the Glulx VM. This change goes for both
57 Z-machine and Glulx. For background on how one might use
58 parser_inflection, see Section 35 of the DM4.
61 Issues addressed in Release 6/12
62 =========================================
65 each_turn property causes runtime error.
66 Problem: An each_turn property with both a local routine and a routine
67 inherited from a Class causes a runtime error in Strict mode.
71 GET IN now matches Compass object
72 Adding "in_obj.&name-->0 = '.ignore';" to Initialise() reverts back to
73 the previous behavior.
77 "statusline time;" statement isn't recognized
78 Problem: When I compile Greystone with 6.30 and 6/11 my statusline time;
79 statement is seemingly ignored; the game runs by moves and not a clock.
80 If I revert back to 6.21 and 6/10 the statusline is indeed a clock again
81 and not a move counter.
82 Status: Unable to reproduce
85 ListMaker doesn't support 'serial' commas
86 Problem: The WriteListFrom() listmaker doesn't support 'serial' commas
87 (aka Oxford or Harvard commas): Tom, Dick, and Harry.
91 'Game uses colour' bit is always set.
92 Problem: Every game compiled with the 6/11 library has the 'game uses
93 colour' bit set in the Flags2 header word.
94 Fixed: From now on, if you want a game to use color, add "Constant
95 COLOUR;" or "Constant COLOR;" to the beginning of your code.
99 Improvement to LibraryExtensions.RunUntil
100 Problem: The LibraryExtensions.RunUntil property (new at 6/11 and not
101 currently used by the library) should return simply true or false if it
106 (The) with 'proper' should capitalise object name
107 Problem: In the case of an object with the 'proper' attribute and a
108 lower-case name (such as "your nose", "your corduroy trousers", "your
109 mother's purse"), the (The) print rule should capitalise the first
110 letter of the object name, so that library messages such as (The) x1, "
111 ", (isorare) x1, " empty." correctly produce "Your mother's purse is
116 indef_mode not restored
117 Problem: When printing an object with the proper attribute, the
118 functions IndefArt( ) and CIndefArt( ) temporarily modify -- but do not
119 restore -- the value of the global variable indef_mode (see lines 6305
120 and 6315 in parserm.h).
124 Problem with 'Give reverse' grammar
128 Inference message inconsistency
129 Problem: In a pile of several indistinguishable objects, taking them
130 from the floor does not generate an (inference) message, but it does
131 when the final one is taken. (See also Suggestion 48)
135 Multiple AGAINs treated as one
139 WITHOUT_DIRECTIONS causes compilation error
140 Problem: Version 6/11 of the Inform Library fails to compile if the
141 constant WITHOUT_DIRECTIONS is set and the objects 'u_obj' and 'd_obj'
142 aren't defined, because a few library routines expect those objects to
147 Size of upper window not restored properly on UNDO
148 Problem: Compile and run a trivial game with Nitfol. When the game
149 begins, type WAIT and then UNDO. Nitfol displays the message [ERROR:
150 output]: illegal line for set_cursor (1) 46968 (1,1) This happens in
151 DrawStatusLine() and the reason is that the upper window has height 0,
152 but the Library tries to position the cursor at (1,1).
153 Comment: I couldn't get Nitfol to complain like this, but applied the
158 Numbers in the name property
159 Problem: Code such as this would cause "GET 1" to not match the box:
160 Object -> box1 "box marked 1"
161 with name 'box' 'marked' '1//',
162 description "It's a wooden box marked with the number 1.";
163 Object -> box2 "box marked 2"
164 with name 'box' 'marked' '2//',
165 description "It's a wooden box marked with the number 2.";
169 'multiheld' can match unholdable objects
170 Problem: Contrary to the DM4, multiheld sometimes matches objects that
171 are not held. This would be OK if the objects were then implicitly
172 taken, like they are for held, but they are not.
176 Poor response from WAVE SELF
177 Problem: The message produced by WAVE SELF -- "But you aren't holding
178 you" -- makes little sense.
182 Problem with <action> statements in Infix
186 'thedark.initial' is never called
187 Problem: The library thoughtfully provides thedark.initial, but it is
188 never called unless you are diabolical enough to make thedark contained
189 by some location, which I'm sure is not what it was meant for. The DM is
190 a bit contradictory about the purpose of thedark.initial, but the
191 functionality that makes the most sense is that it is called at the
192 transition from lighted to darkened. This makes up a gap in
193 functionality: NewRoom() is called on light-to-light and dark-to-light;
194 DarkToDark() is called on dark-to-dark, but absolutely nothing is called
199 TRACE should distinguish matched and inferred tokens
200 Problem: When the parser partially matches a phrase, the TRACE command
201 should not say "token resulted in success" for terms that it did not
202 match but sucessfully inferred; instead it should state that those
203 terms were inferred. This would avoid the phrase "token resulted in
204 success" phrase meaning two different things -- actually matching and
206 Status: Won't fix. Maybe will fix in 6/13.
209 Preposition parsing is too simplistic
210 Status: Fixed (by way of L61127)
213 add_to_scope of parentless object causes error
214 Problem: Consider an object which has no parent, and is brought into
215 scope by an add_to_scope property. An attempt to take that object causes
217 [** Programming error: tried to test "has" or "hasnt" of nothing **]
218 [** Programming error: tried to test "has" or "hasnt" of nothing **]
219 That's hardly portable.
223 Conflict between 'describe' and 'initial' properties
224 Problem: This object displays its 'initial' message even though it has a
225 'moved' attribute; this is because of the presence of the 'describe'
226 property, even though it returns false.
230 Minor problem with parse_name
231 Problem: A (rather minor) error with the parse_name routine. On page
232 209, the DM4 states: ...
236 Spurious space with 'articles' property
237 Problem: The rarely-used articles property defines an array of strings.
238 (The property is provided for non-English languages where irregular
239 nouns may have unusual vowel-contraction rules with articles.) The DM4
240 gives an example appropriate for a French game, with three strings in
243 with name 'haricot' 'legume',
244 articles "Le " "le " "un ",
246 Note that each string includes its individual trailing space, if
247 appropriate. This is important, because a definite article like l' must
248 be followed immediately by the object's name, without any intervening
249 space. However, in fact a space does appear.
253 match_list and match_scores over-run
254 Problem: The problem is that match_list-->number_matched is being
255 accessed, when match_list has length only number_matched (that is,
256 entries 0..number_matched-1). In particular this causes errors when the
257 match_list is of full length (64 entries). Similarly for match_scores.
261 parser_inflection requires common properties in Glulx
262 Problem: Glulx cannot distinguish between a global that is a function or
263 a common property. They must be addressed differently. Code has been
264 introduced to require the author to explicity declare if
265 parser_inflection is a function or a common property.
269 Improve multiexcept look-ahead
270 Problem: When the parser processes a grammar line that uses multiexcept
271 or multiinside, it jumps ahead to match the second noun in order to
272 provide context for the first one. However, in doing so, it skips over
273 all the prepositions in the input, without caring whether they match the
274 prepositions in the grammar line. If the second noun is ambiguous, this
275 means the player may be asked a disambiguation question for a grammar
276 line that has no chance of succeeding, whereas the grammar line that
277 eventually succeeds might not even need disambiguation (thanks to a
278 different token type or ChooseObjects).
279 This also fixes L61120
281 I have also applied a fix submitted by Nathan Schwartzman at
282 http://inform7.com/mantis/view.php?id=636.
285 OOPS sometimes changes wrong word
286 Problem: The OOPS command doesn't necessarily change the faulty word. In
287 the examples below, 'ZZZ' should be corrected to 'RUBY'. This happens in
288 the first example, but not the second.
292 Results from 'grammar' property are misplaced.
293 Problem: An animate or talkable object's grammar property can return 1
294 to mean (quoting from DM4) "you can stop parsing now because I have done
295 it all, and put the resulting order into the variables action, noun and
296 second". However, the library code to handle this return value does not
302 Other bugs fixed in Release 6/12
303 ================================
305 WAVE AT has been improved.
306 Handling of ambiguous orders given to NPCs has been improved.
307 Fixed a problem with misparsing caused by incomplete orders.