12008-05-01 Simon Baldwin <simon_baldwin@yahoo.com> 2 3 * Release 1.3.10. 4 5 * Fixed a CR/LF problem that prevents a game that contains rogue 6 newline or carriage return characters (ones that don't precede a 7 newline) from loading. 8 * Corrected a (probably rare to trigger) bug in TAF file decompression 9 related to leaving the decompression loop before the zlib inflation 10 output buffer had been completely consumed. 11 * Amended status line handling for better results with game room 12 names and status strings that are blank. 13 * Corrected two bugs in the Cyrillic codepage 866 to gost 16876-71 14 ascii conversion tables. 15 * Removed use of labs() on sc_int types, to better decouple sc_int 16 from intrinsic C long types. 17 * Cleaned up action on zero-byte allocations, undefined in ANSI/ISO C. 18 * Improved hints iterator functionality by splitting it into two 19 separate functions, one for the first hint, and one for the next; this 20 is a minor SCARE API change. 21 * Yet more "adjustments" to tasks triggered by NPC and/or player 22 movement. These are still not right, but the change at least fixes 23 breakage in The PK Girl introduced with release 1.3.9. 24 * Minor code refactoring and formatting changes. 25 262008-03-12 Simon Baldwin <simon_baldwin@yahoo.com> 27 28 * Release 1.3.9. 29 30 * Fixed disambiguation problem with "go to the <location>". If a 31 location was both, say, "south" and "out", "go to the <location>" would 32 previously be reported as ambiguous. 33 * Ignore attempts to move player to "hidden". Possible where a task 34 moves the player to same location as an NPC and that NPC is hidden. 35 Reported by ElliotM, with bug triage by Mark J. Tilford. 36 * Eliminated some memcpy calls and memory shuffling, leading to a 37 slight increase in performance. 38 * Added a new SCARE-specific system variable, %scare_version%, that 39 allows a game to query the version of SCARE. This variable overrides 40 any user-defined variable of the same name, provided that variable's 41 value is zero. 42 * Switched to a more efficient exponentiation implementation, based on 43 the Russian Peasant algorithm. 44 * Changes to NPC walks to try to better replicate Adrift's somewhat 45 inscrutable actions in this area. 46 * Fixed a couple of bugs found by gcc's Mudflap, including a rather 47 nasty one involving object accessors called on building a gamestate. 48 * Changed from platform ctype functions (isspace, toupper, etc) to 49 specialized internal ones for codepage 1252 or codepage 1251, depending 50 on the game locale. Again, a slight performance gain here. 51 * Added codepage 1252 to iso 8859-1 conversion to the Glk interface for 52 status lines; until now, only main window text had been converted. 53 * Improved codepage 1252 conversions for characters not supported by a 54 Glk library, and added codepage 850 conversions for courier and 55 terminal fonts. 56 * Added Unicode output for Glk libraries that support it. This should 57 help to further hide the differences between Windows codepages and 58 Glk output, especially codepage 850 output. 59 * Added codepage 1251 and 866 Cyrillic codepage support to the Glk 60 interface for Russian games, automatically selected if SCARE detects a 61 Russian language game on starting the Glk interface. 62 * Added cancellation of <wait x.x> tags in the Glk interface; pressing 63 space or return cancels the delay. 64 * Assorted code tidy up and style changes. 65 662007-09-14 Simon Baldwin <simon_baldwin@yahoo.com> 67 68 * Release 1.3.8. 69 70 * Fixed a bug with "Also here is the" message and plural objects. 71 Thanks to Nick Rogers for the bug report. 72 * Added error handling for unterminated quoted strings in expressions. 73 * Implemented printfilter escaping, so that player input that is routed 74 to %text% and then subsequently displayed does not trigger <> tags, 75 & entities, or variable substitions. 76 * Added static_unmoved to the field comparisons in the debugger. 77 * Reworked room name and description code so that it correctly uses 78 alternate description strings when required by game states. Added a 79 new testcase for these features. Thanks to Sam Trenholme for the 80 report and bug triage. 81 * Assorted small code tidy up and style changes. 82 832007-06-26 Simon Baldwin <simon_baldwin@yahoo.com> 84 85 * Release 1.3.7. 86 87 * Corrected a printfilter bug that could let > and other characters 88 through into game ouput untranslated under certain circumstances. 89 * Fixed a bug that could cause incorrect object descriptions to appear 90 for objects moved by anything other than the player, and another that 91 failed to ignore "stale" task reverse commands. Thanks once more to 92 Nick Rogers for the reports and test cases. 93 * Added the ability to take objects from named NPCs to the parser. 94 * Implemented "get off" as a way to move the player from on supporter 95 object to on the ground. 96 * Added "go to room_name" as a way to move to a named adjacent room. 97 * Assorted relatively wide-ranging changes to standard system messages 98 and a couple of new standard commands, to align more closely with the 99 Runner. No prizes for guessing who reported the differences. 100 * Added several new test cases to handle new commands, updated system 101 messages, and some test cases missed in prior releases. 102 * Some code tidy up and style changes. 103 1042007-01-28 Simon Baldwin <simon_baldwin@yahoo.com> 105 106 * Release 1.3.6. 107 108 * Removed "move" as a synonym for "go". Having this extra command may 109 confuse games that otherwise expect to override all movement. 110 * Fixed a small object disambiguation bug. 111 * Corrected a problem that occurred when listing objects that would not 112 fit in a container when using multiple object targets. 113 * Improved object disambiguation. The parser should now allow, for 114 example, "drop book" to cope with two books, one held but the other 115 not. Also, tightened "all" object generators to ignore static objects 116 moved to player inventory by events. Thanks to Nick Rogers for the 117 suggestions. 118 * Changed (again) the way game tasks with failing restrictions and 119 library commands interact. It seems that Adrift treats "take" in a 120 special way that doesn't always let a game override, and some games 121 appear to require this. 122 * Added "+percent+" as a '%' character entity. This appears to be an 123 undocumented Runner feature. 124 * Fixed a tricky bug with complex task commands. Yet again, thanks to 125 Nick Rogers for the report and test case. 126 * Minor tidy up and performance improvements. 127 1282006-12-16 Simon Baldwin <simon_baldwin@yahoo.com> 129 130 * Release 1.3.5. 131 132 * Fixed a crash caused by using referenced text in task restrictions on 133 the very first game turn (before any referenced text set). Thanks to 134 Mark J. Tilford for the diagnosis. 135 * Fixed an embarrassing crash that showed up when entering a line that 136 contained two or more spaces and no other text, and another caused by 137 failure to trap division by zero adequately. 138 * Updated to Zlib 1.2.3. 139 * Reworked game task handling to match the current understanding of how 140 the Adrift Runner selects between multiple tasks that match player 141 input. Thanks (yet again) to Mark J. Tilford for the analysis and 142 reverse engineering work. 143 * Fixed a text formatting problem that showed up when examining an NPC 144 that is both wearing and holding objects. Thanks to Richard Otter. 145 * Changes to score notifications to match the Runner a little better, 146 and generally behave more usefully. 147 * Implemented Adrift's "count" (alias "num") command, for querying the 148 status of weight and size limitations for carried objects. 149 * Fixed NPC task restriction off-by-one error in the version 3.8 to 150 version 4.0 game conversions done on parsing a TAF file, an object 151 worn task restriction error, and a win/lose game endian problem. 152 * Improved the way tasks are run when NPCs encounter objects and other 153 NPCs on walks, trying for closer agreement with the Adrift runner, 154 and a walk bug that made NPCs move more often than they should in 155 roomgroup walks. Thanks to Todd Watson for the report. 156 * Fixed an alternate room description problem, an event timing problem, 157 a task override failure, and a task action ordering issue. Thanks to 158 Nick Rogers for the reports. 159 * Corrected the way static objects moved to hidden by events behave. 160 * Fixed a status line display ordering bug that showed up on game end 161 with non-windowing Glk libraries. 162 * Removed the generally useless os_flush() function from the interface. 163 * Fixed a parser bug that prevented optional "{...}" words and wildcards 164 from working correctly if placed last on a list. 165 * Added period to the existing comma to period for characters used to 166 separate elements on a multi-command input line. This improves the 167 match with the Adrift Runner. 168 * Added lower-level game saving and loading functions, to allow 169 interpreters such as Gargoyle to save and load game states directly to 170 files or callbacks. Added "-r FILE" to glkscare to restore a saved 171 game directly the interpreter starts up. 172 * Added a built-in random number generator that will produce a stable 173 and repeatable sequence on all platforms. Useful for scripted game 174 testing, it may be selected in place of the platform's rand(). 175 * Improved memory allocations in the parser for better performance, and 176 generally reduced strlen() calls on constant strings throughout. 177 * Improved the printfilter, adding paths without allocate-and-copy for 178 strings that don't use tags or other HTML-like formatting. 179 * Updated event restarting to correctly reproduce Adrift's handling of 180 this situation in version 3.9 and 3.8 Runners (bug compatibility?), 181 and added other general event handling compatibility fixes. 182 * Altered expression handling to accurately reproduce Adrift's rounded 183 division, and also its apparently sequential and/or comparison. 184 * Assorted refactoring and code format and style cleanups, including an 185 effort at NPC accessors and mutators, removal of int16 types, 186 rationalization of use of unsigned variables, and byte instead of 187 short for boolean types. 188 * Made code 64-bit clean (specifically, LP64, but probably also ILP64). 189 * Added a control to allow the player to override the count of turns 190 consumed by 'wait'. This helps with games that set one value but 191 assume another. Several Runner releases are broken and always add one 192 to turns on 'wait', no matter what the game requests. 193 * Increased undo from a single turn to 17 total. Added a command 194 history, addressable with '!' (somewhat like the c-shell). 195 * Improvements to 'it', 'him', and 'her' handling to try to better match 196 the Adrift Runner. Also, added an attempt at guessing whether objects 197 are plural or singular, for correct "...is" and "...are" messages. 198 Thanks to David Whyld for the report and test case. 199 * Improved the parser, adding "...object {and object...}" and "...all 200 except object {and object}..." to take, drop, and wear and remove. 201 Rationalized assorted other commands, making "everything" synonymous 202 with "all" and "apart from" synonymous with "[except/but] {for}". 203 * Added a parser extension to logically interpolate %...% variables 204 into task command patterns before matching them to user input. 205 * Fixed getdynfromroom() for task command functions so that it works 206 believably with 'Humbug'. 207 * Added an automated test program, and a suite of test scripts aimed at 208 verifying core interpreter features and regression testing games by 209 comparing against transcripts created by the genuine Runner. 210 2112007-07-12 Simon Baldwin <simon_baldwin@yahoo.com> 212 213 * Release 1.3.4. 214 215 * Updated the Glk interface to match improvements made to the Glk 216 interfaces of other IFP interpreters. 217 * Fixed errors in quit jump buffer handling across game restore that 218 could cause sc_quit_game() to crash. 219 * Added a "quit" command to the debugger. 220 * Suppressed inflate() error message when trying to restore a file that 221 is not a valid saved game. 222 * Slightly improved sc_str{n}casecmp() efficiency. 223 * Added end-of-file handling to os_ansi.c, so that it's now useful in 224 pipelines and for scripted game testing. 225 * Readability and code style update for the core interpreter, but very 226 few functional changes. (Translation: if you're not using the Glk 227 interface, there is little reason to update from version 1.3.3). 228 2292005-01-21 Simon Baldwin <simon_baldwin@yahoo.com> 230 231 * Release 1.3.3. 232 233 * Fixed a game crash with version 3.8 games when trying to lock an 234 openable object with "lock <object>". 235 * Avoided a possible (theoretical) crash where large negative numbers 236 are used in Adrift expressions. 237 * Now silently ignores empty HTML-like tags, "<>". Prior versions 238 would issue a warning. 239 * Use monospaced output in Glk when the game uses either 'courier' or 240 'terminal' fonts. Originally only 'courier' was recognized. This 241 improves performance with 'Humbug'. 242 * Set %text% to the player input line before printing game command 243 error ("dontunderstand") messages, again for 'Humbug'. 244 * Fixed a hang on loading 'The Cat in the Tree' and 'Ice Cream'; 245 thanks to David Kinder for the error report. 246 * Minor fix to kiss NPC message, and corrected "north_west" to be 247 "north-west" in movement command. 248 * Fixed an abort when an NPC with a walk is initialized to "hidden"; 249 thanks to Richard Otter for uncovering the error. 250 * Minor cleanup of input parser error handling, and change in 251 debugger to stop debug refusal from consuming a game turn. 252 * Changed function sc_game_hint_iterate() to sc_iterate_game_hints() 253 for better naming symmetry with other interface functions. 254 * Performance optimizations to scprops.c, giving a 20-30% improvement. 255 * Added error trap for pathological games that define no rooms. 256 * Added %room% variable, accidentally omitted from earlier releases. 257 * Implemented raise-to-power (^) operator in expressions, and fixed a 258 pair of subtle bugs with unary minus and plus operators (incorrect 259 associations, and missing comparisons in unary minus and plus 260 determinations). 261 * Added "lay" as a synonym for "lie", and fixed NPC entry/exit 262 message where NPC enters or exits from above or below. 263 * Fixed %version% to contain values that correctly indicate the level 264 of Adrift runner emulation. 265 * Corrected NPC walk tasks for meeting player, object, and other NPCS; 266 thanks to Robert Goodwin for the error report. 267 * Documented battle system TAF file fields in sctafpar.c, in case the 268 occasion ever arises to implement the battle system. 269 * Minor structure tweaks to save memory via better field alignments. 270 * Fixed a silly bug that failed to enable trace/debugger for Windows. 271 * Fixed a bug that prevented player positions from being set up 272 correctly on game loads. Thanks to Eric Mayer for the report. 273 * Added "ex" and "exam" as additional synonyms for "examine". 274 * Corrected handling of argumentless <wait> tags, and made a few small 275 performance improvements (strlen elimination). 276 * Upgraded handling of "get", "drop", "get all" and "drop all" command 277 handlers to check for game overrides for each object. 278 * Added a couple of casts to correct gcc 3.3.4 compilation warnings. 279 * Minor tidy up of Glk style resetting in os_glk.c. 280 * Fixed a failure to load Unfortunately.taf. Thanks to David Kinder 281 for the report. 282 * Added Glk interface functions to print a status line even if the Glk 283 library in use lacks windowing capabilities (cheapglk). 284 * Added a workround for Xglk resizing problems. It should have no 285 effect on Glk libraries that don't have Xglk's deficiencies. 286 2872004-05-06 Simon Baldwin <simon_baldwin@yahoo.com> 288 289 * Release 1.3.2. 290 291 * Fixed a reverse engineering bug that prevented 'Doomed Xycanthus' from 292 running in SCARE. 293 * Added the ability to run Adrift 3.8 games. 294 * Integrated David Kinder's Windows Glk code into the main Glk 295 interface. 296 * Updated game title and author query functions to avoid ALR clashes. 297 * Minor updates to library output to avoid clashes with game ALRs. 298 * Fixed an object and NPC referencing problem that caused SCARE to fail 299 to distinguish between things such as "table leg" and "table". 300 * Updated the way room lists are stored in properties to reduce heap 301 memory requirement and improve game load performance, a 25% to 35% 302 improvement on average games, and 50% on some. 303 * Fixed a bug that caused SCARE to crash when trying to lock a container 304 that has no key (not lockable). 305 * Fixed an omission that caused object alternate descriptions requested 306 where a task is not completed to show the wrong description. 307 * Added score change notifications, and commands and interface functions 308 to control notification messages. 309 * Corrected an omission where SCARE failed to use changed descriptions 310 for NPCs on character walks, and a bug that noted meetings between 311 NPCs on walks and objects or other NPCs too often. 312 * Fixed a bug in task handling, one that shows up with the rubber ball 313 in 'The Woods are Dark'. Thanks to Emily Short for finding and 314 reporting this. 315 * Corrected a bug that prevented the version 3.9 game 'The Caves of 316 Morpheus' from loading, and another that caused 'The Test' to 317 virtually hang (caused by its use of repeated wildcards). 318 * Fixed a bug with version 3.9 openable objects. Those initially open 319 were being reported by SCARE as instead being locked. 320 * Added a function to retrieve any preferred default font from the game. 321 3222004-03-30 Simon Baldwin <simon_baldwin@yahoo.com> 323 324 * Release 1.3.1. 325 326 * Added the ability to run Adrift 3.9 games as well as 4.0 ones. 327 * Added code and interface functions to provide the interface with a 328 game's use of sound and/or graphics resources. See PORTING for 329 sc_does_game_use_sound(), sc_does_game_use_graphics(), and for the 330 os_play_sound(), os_stop_sound(), and os_show_graphic() functions. 331 * Many and drastic output message changes in an attempt to align with 332 the Adrift runner for ALR matching (damn you, ALRs). 333 * Implemented player size and weight checks, and container size and 334 contained object count checks. 335 * Added standard responses to game actions such as "jump", "dance", 336 and profanity, giving ALRs something to chew on. 337 * Created "score" and "turn" verbs, "kiss", "smell", "push", "pull", 338 and assorted others. 339 * Added automatic listing of objects in a container when opened. 340 * Implemented listing of NPC objects worn and held on "examine <npc>". 341 * Added first person responses for games that request this mode. 342 * Updated to Zlib 1.2.1, which offers somewhat faster operation. It's 343 distributed in .zip format, so the SCARE Makefile no longer needs to 344 maintain extracted Zlib sources, as it did with the gzipped tar 345 distribution of Zlib 1.1.4. 346 * Fixed a bug in run_player_input() that left unused input line data 347 buffered across game end undo. 348 * Corrected game tidy up after calls to sc_quit_game(). 349 * Corrected checks on object get to reject "get <object>" where the 350 object is either held or worn by a NPC. 351 * Removed TAF line pushback functionality from the TAF file module, 352 and implemented it locally inside the TAF file parser. 353 * Mapped 'font face="courier"' in os_glk.c, os_print_tag(), to Glk 354 preformatted text style. 355 * Improved os_glk.c so that it copes with "buggy" games that do not 356 correctly nest markup tags (for example "<i><font ...>mumble 357 </i></font"). 358 * Refactored os_glk.c slightly to facilitate non-UNIX Glk builds. 359 * End of game delay os_glk.c now happens only on 'restart' selection. 360 * Fixed a bug in run_main_loop() that caused waits to consume one 361 turn too many. 362 * Included a required second variable interpolation pass to pf_filter(), 363 which needs to replace %...% both before and after ALRs, and a second 364 ALR pass after the second variable interpolation, with flags to let 365 each ALR fire only once. 366 * Added printfilter function to indicate a new sentence, provoking 367 uppercasing of the next buffered character. 368 * Modified object name printing in lib_print_object_np() to include 369 any significant parts of the object prefix, and to switch "a" or "an" 370 for "the" when (apparently) appropriate. 371 * Added interface functions to obtain a game's hints. See PORTING for 372 sc_game_hint_iterate(), sc_get_game_hint_question(), 373 sc_get_game_subtle_hint(), sc_get_game_unsubtle_hint(), and 374 os_display_hints(). Added SC_CONF_VIEW_HINTS. 375 * Added a %version% variable. 376 * Substantial improvements to expression handling. SCARE now fully 377 handles all 4.0.42 expression formulae correctly, including the 378 freedom to mix string and integer expression elements. All 379 expression handling is now in scexpr.c, and scstrexp.c is dead and 380 buried. 381 * Fixed a minor bug in conversation topic matching. The older code 382 would match substrings (for example "hat" before "hatchet"). 383 * Improved "it", "him" and "her" handling so that they now work with 384 game commands that use %object% and %character% references. 385 * Fixed a program crash seen when trying to wear a static object. 386 * Added a reasonably useful game (and SCARE) debugger, accessible, when 387 enabled, using the "debug" command. 388 * Fixed the NPC listing loop for the "look" command, which was printing 389 NPCs in an odd fashion. 390 * Altered the ordering of output for "examine", to print object state 391 before, rather than after, container and surface content. 392 * Fixed an ugly bug in game saving, present since the dawn of time but 393 substantially worsened with a change made in 1.1e. 394 * Aligned the %theobject%, %on_, %in_, and %onin_ variables with the 395 formats printed by the library. 396 * Added getdynfromroom() handling for so-called task command functions. 397 * Moved trace output produced by SC_TRACE_FLAGS from stdout to stderr. 398 * Fixed an NPC bug that prevented NPCs from moving about if they don't 399 wait for a start task. This one should have been fixed long, long 400 ago, as Thomas Payerle had the right extra code in SCARE 1.2.1 401 (thanks, Thomas). 402 * Changed version naming convention, by popular request. 403 4042004-02-03 Simon Baldwin <simon_baldwin@yahoo.com> 405 406 * Release 1.1e. 407 408 * Fixed minuscule memory leak in gs_destroy(). 409 * Fixed incorrect condition ordering in taf_append(). 410 * Added tag stripping for game author and title, to neaten the title 411 line first displayed for 'To Hell in a Hamper'. 412 * Fixed bug in pf_strip_tags() that caused it to miss consecutive tags. 413 * Added sc_get_game_max_score() interface query function. 414 * Changed return type of os_read_line() from void to sc_bool. Return 415 of TRUE indicates data buffered, FALSE ignore and re-call. 416 * Fixed a bug in run_player_input() that caused it to try to use old 417 input or stack junk when an input line ended with a comma. 418 * Substantial rewrite of os_glk.c to handle Microsoft codepage 1252 419 characters, and provide transcripts, reading input from a file, and 420 player input logs. 421 * Improved alignment with newer jAsea code (objects worn by player/NPC 422 on startup, turn based unmoved flag updates, game won text). 423 * Fixed bug in uip_parse_list() that caused input pattern matches to 424 fail against task commands where patterns had consecutive 425 '[...]' or '{...}' elements without intervening spaces. This shows 426 up with 'To Hell in a Hamper'. 427 * Relaxed running requirements for sc_undo_game_turn(), sc_load_game(), 428 sc_save_game(), and sc_restart_game(). 429 * Adding RUNNING text file, with notes on running SCARE. 430 43120003-12-10 Simon Baldwin <simon_baldwin@yahoo.com> 432 433 * Release 1.1d. 434 435 * Fixed an endian problem that prevented correct builds on big endian 436 systems. Thanks to Jan-Erik Karlsson for isolating and reporting 437 this problem, along with its fix. 438 * Redesigned TAF file decompression to place far less stress on malloc 439 and free functions. The old TAF file decompression module caused 440 significant performance problems with AmigaOS malloc. Again, thanks 441 to Jan-Erik Karlsson for this problem report. 442 * Fixed omission in sc_free_game(), which used to fail to free memory 443 allocated to holding raw TAF data. 444 * Fixed omission in prop_destroy_node() which used to fail to free 445 memory allocated to the child list. 446 * Added preallocation of properties nodes, in pools, to scprops.c, 447 further greatly reducing stress on malloc. With this change and the 448 redesigned TAF compression, 'The PK Girl' becomes fully playable with 449 SCARE through IFP. IFP's garbage collection now adds only around 6% 450 to game load time. 451 * Added handling for stateful objects and alternate room descriptions, 452 combined with a few small tweaks to accommodate them. 453 4542003-06-26 Simon Baldwin <simon_baldwin@yahoo.com> 455 456 * Release 1.1c. 457 458 * Fixed decompression problem exposed by the post-comp02 release of 459 Robert Goodwin's 'The PK Girl'. 460 * Added undo functionality; "Undo" verb, sc_undo_game_turn() function, 461 and sc_is_undo_available() query function. 462 * Fixed minor memory leak with status line and current room name in 463 gs_copy(). 464 4650000-00-00 Simon Baldwin <simon_baldwin@yahoo.com> 466 467 * Release 1.1a,b. 468 469 * Additional verbs to complete major functional areas. 470 4710000-00-00 Simon Baldwin <simon_baldwin@yahoo.com> 472 473 * Release 1.1. First public release 474 475