Merge tag 'upstream/6.12_dfsg.1'
[debian_inform6-library.git] / CHANGES-6.12.txt
blob253383d4574ecead0507fabb9d004fbd124d91cf
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
17 them.
19 The default mode is now VERBOSE.
21 Added infglk.h for more convenient programming for the Glulx virtual
22 machine.
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
27 complete.
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
38 program.
40 There is now an optional Epilogue() function.  This will execute when
41 the game ends.
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
49 to fix L61105.
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 =========================================
64 Issue L61101
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.
68 Status: Fixed
70 Issue L61102
71 GET IN now matches Compass object
72 Adding "in_obj.&name-->0 = '.ignore';" to Initialise() reverts back to
73 the previous behavior.
74 Status: Fixed
76 Issue L61103
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
84 Issue L61104
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.
88 Status: Fixed
90 Issue L61105
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.
96 Status: Fixed
98 Issue L61106
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
102 does nothing.
103 Status: Fixed
105 Issue L61107
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
112 empty."
113 Status: Fixed
115 Issue L61108
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).
121 Status: Fixed
123 Issue L61109
124 Problem with 'Give reverse' grammar
125 Status: Fixed
127 Issue L61110
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)
132 Status: Fixed
134 Issue L61111
135 Multiple AGAINs treated as one
136 Status: Fixed
138 Issue L61112
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
143 exist.
144 Status: Fixed
146 Issue L61113
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
154 fix anyhow.
155 Status: Fixed
157 Issue L61114
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.";
166 Status: Fixed
168 Issue L61115
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.
173 Status: Fixed
175 Issue L61116
176 Poor response from WAVE SELF
177 Problem: The message produced by WAVE SELF -- "But you aren't holding
178 you" -- makes little sense.
179 Status: Fixed
181 Issue L61117
182 Problem with <action> statements in Infix
183 Status: Fixed
185 Issue L61118
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
195 on light-to-dark.
196 Status: Fixed
198 Issue L61119
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
205 inferring.
206 Status: Won't fix.  Maybe will fix in 6/13.
208 Issue L61120
209 Preposition parsing is too simplistic
210 Status: Fixed (by way of L61127)
212 Issue L61121
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
216 error messages:
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.
220 Status: Fixed
222 Issue L61122
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.
227 Status: Fixed
229 Issue L61123
230 Minor problem with parse_name
231 Problem: A (rather minor) error with the parse_name routine. On page
232 209, the DM4 states: ...
233 Status: Fixed
235 Issue L61124
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
241 the array:
242 Object  "haricot"
243     with  name 'haricot' 'legume',
244           articles "Le "   "le "   "un ",
245           ... ;
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.
250 Status: Fixed
252 Issue L61125
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.
258 Status: Fixed
260 Issue L61126
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.
266 Status: Fixed
268 Issue L61127
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
280 Status: Fixed
281 I have also applied a fix submitted by Nathan Schwartzman at
282 http://inform7.com/mantis/view.php?id=636.
284 Issue L61128
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.
289 Status: Fixed
291 Issue L61129
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
297 work correctly.
298 Status: Fixed
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.