CHANGES-6.12.txt 11 KB

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