1 This is Info file nitfol.info, produced by Makeinfo version 1.68 from
2 the input file nitfol.texi.
6 * nitfol: (nitfol). Z-code interpreter and debugger.
10 File: nitfol.info, Node: Top, Next: Invoking nitfol, Prev: (dir), Up: (dir)
15 Nitfol is a portable interpreter for Z-machine code, the game format
16 used by Infocom and more recently,
17 Inform (http://www.gnelson.demon.co.uk/inform.html). Nitfol handles
18 versions one through eight of the format, and attempts to comply with
19 version 1.0 of the Z-machine specification.
21 You will need game files to use nitfol. The "if-archive" contains a
22 large collection of these, available at
23 `ftp://ftp.gmd.de/if-archive/games/zcode/' or at the USA mirror
24 `http://ifarchive.org/indexes/if-archiveXgamesXzcode.html'.
26 This manual describes how to use nitfol and how it differs from
27 other Z-machine interpreters. This manual was written with UNIX-like
28 systems in mind; ignore that which does not apply to your platform.
29 Comments on and corrections for this manual and nitfol are appreciated
30 and should be sent to <nitfol@my-deja.com>.
34 * Invoking nitfol:: How to start nitfol under UNIX
35 * Features:: Useful extras
36 * Debugger:: Built in source-level debugger
38 * Bugs:: What I know is wrong
39 * Thanks:: List of people who've helped
40 * Games Cited:: The games used as examples in this manual
43 File: nitfol.info, Node: Invoking nitfol, Next: Features, Prev: Top, Up: Top
48 Invoke nitfol with the game filename, and options. If you omit the
49 game filename, nitfol will prompt you for one. The following options
55 Ignore Z-machine strictness errors. Normally nitfol checks for
56 illegal and undefined Z-machine behaviour and alerts the user. If
57 you're playing someone else's buggy game, this can be annoying and
58 you should use this option.
63 For running under Emacs or DDD. Tells nitfol to give
64 machine-recognizeable markers when stack frames are displayed
65 instead of displaying the line. Only useful if you are using
66 nitfol as an inferior debugger.
70 Read commands from this file. Load a script from a file for
76 Aye, matey. Make the piracy opcode not branch, letting the game
77 know the game disc is not "genuine." Infocom never used this
78 opcode and neither should you, but if obscurity amuses you...
83 Do not print introductory messages. For GDB compatibility.
87 Perform spelling correction. Normally Z-machine games are
88 unforgiving of typos (though they do have an `oops' command). If
89 you type in a word which isn't in the game's dictionary and have
90 typo correction enabled, nitfol will search for a word which is
91 off by one letter by a substitution, deletion, insertion or
96 Expand one letter abbreviations. Early Z-machine games don't
97 include `x' as a synonym for `examine' and such. If the first
98 word in a sentence is one letter long and not recognized by the
99 game, this will attempt to expand it to a full word.
103 Specify symbol file for game. If you want to perform source-level
104 debugging, you will need to specify a symbol file, which contains
105 the names of variables and tells nitfol how source code
106 corresponds to object code.
111 Censors some Infocom games. Some version 3 games perform minor
112 wording changes when this bit is set to appease the sensitivity of
117 Write transcript to this file. This transcript begins as soon as
123 Enter debugger immediatly. Imitate GDB by not automatically
127 Specify debugging prompt. This is the prompt nitfol prints when
128 it is waiting for a debugging command (as opposed to the > the
129 game story prints when waiting for a game command). DDD requires
133 Look for games in this directory. If nitfol cannot find the
134 requested game in the current directory, it looks through the
135 directories listed in the given colon separated string. The
136 directories specified here are also used to search for gamefiles
137 from saved games. If this option is not used, nitfol looks at
138 the `INFOCOM_PATH' environment variable.
142 Ensure `@save_undo' is called every turn. If a turn passes with
143 no `@save_undo' between, this option performs the `@save_undo'
144 automagically. Could cause problems with some games which have a
145 different concept of a turn.
149 Exit when the stack is this deep. If a game is infinitely
150 recursing, nitfol will allocate large amounts of memory and take a
151 long time before the problem is reported. This option makes it
152 fatal to recurse more than the given number of stack frames.
153 Setting this to 0 makes nitfol allow as many as fit contiguously
154 in memory. The Z-machine Standards Document recommends games use
155 no more than 1024 words of total stack (frames and pushed data) in
156 ZIP, which roughly works out to 90 routine calls deep.
160 Specify an alias. Adds an alias which will be expanded in read
161 lines before tokenisation. The alias is of the form NAME VALUE;
162 you will need to use quotes around it on the commandline.
165 Specify an recursive alias. Adds an alias whose result is checked
166 for further alias expansion. Identical syntax to adding a normal
170 Remove an alias. Removes an alias previously added by -alias.
171 Useful for removing aliases in preference files.
175 Set random seed. Normally the random number generator is
176 initialized with the time of day. If this option is used with a
177 non-zero argument, the given number will be used to initialize the
178 generator and for `@random 0'.
181 Specify mapping glyphs. Nitfol draws maps using ASCII characters;
182 you can choose which characters it uses to draw rooms. Defaults
183 to `*udb@UDB+', which is, in order: empty room, room with down
184 exit, room with up exit, room with up and down exits, room with
185 player, room with player and up exit, room with player and down
186 exit, room with player and up and down exits, bend symbol.
189 Specify map size. Determines the number of lines to be used for
193 Specify map location. Nitfol creates a Glk window for the map it
194 generates. The map can be placed `above', `below', to the
195 `right', or the `left', of the main game window. Follow this
196 option with one those locations.
199 Specify interpreter number. Each port of Infocom's Z-machine
200 interpreter was given a number. `1' for their own DECSystem-20,
201 `2' for Apple IIe, `3' for Macintosh, `4' for Amiga, `5' for Atari
202 ST, `6' for IBM PC, `7' for Commodore 128, `8' for Commodore 64,
203 `9' for Apple IIc, `10' for Apple IIgs, `11' for Tandy Color.
204 Giving this option makes nitfol claim to be running on the
205 specified system. A few games change their behaviour slightly
206 depending on which machine type they run. By default nitfol
207 claims to be on an Apple IIe, as this makes Beyond Zork not do
211 Specify interpreter version. Infocom's interpreters were given
212 versions, typically a capital letter. Nitfol defaults to `N',
213 Frotz uses `F', and ZIP uses `B'. Any single character version is
214 allowed. Multicharacter options are read as a number instead of
215 an ASCII character. Only known effect upon games is the letter
216 printed by banners and the `version' command. Version 6 games
217 interpret this as a number instead of a letter.
220 File: nitfol.info, Node: Features, Next: Debugger, Prev: Invoking nitfol, Up: Top
227 * Preferences:: Store options in `~/.nitfolrc'
228 * Infinite undo/redo:: Erase your mistakes and bad luck
229 * Aliases:: Abbreviate long/common words
230 * Abbreviation Expansion:: Expand one letter commands
231 * Typo correction:: Nitfol uses a smart tokeniser
232 * Automapping:: Automatically generate an on-screen map
233 * Quetzal:: Save files are in Quetzal format
234 * Blorb:: Nitfol supports Blorb resources
237 File: nitfol.info, Node: Preferences, Next: Infinite undo/redo, Prev: Features, Up: Features
242 If you don't like the default options and don't want to recompile,
243 you can set your preferences by writing a `.nitfolrc' in your home
246 Each line should be of the form `OPTION=VALUE'. Blank lines and
247 lines starting with a `#' are ignored. If you want to specify
248 different options for different copies of nitfol, you can put those
249 options in a block which will only be read by copies of nitfol with a
252 Here's an example `.nitfolrc':
253 path=/usr/local/games/infocom
255 alias=asierra tone cordial. ask sierra about
270 Nitfol will look in `/usr/local/games/infocom' for game files.
271 Copies of nitfol named `strictnitfol' will report Z-machine strictness
272 errors, perform strict tokenisation, and not automatically
273 `@save_undo'. All others will ignore strictness errors and have two
274 aliases. `xnitfol' will set the Tandy bit and branch on the piracy
277 Options specified in the preference file may be overruled by
278 environment variables and command line options.
281 File: nitfol.info, Node: Infinite undo/redo, Next: Aliases, Prev: Preferences, Up: Features
286 Multiple `@restore_undo' opcodes with no intervening `@save_undo'
287 will restore earlier and earlier saved states. However, Inform games
288 will not do this, so if you want infinite undo, you must enter the
289 commands `/undo' and `/redo'. The `/...' commands are part of the
290 debugger, so you will need to compile in debugger support to use this
293 Z-machine games prior to version 5 do not provide undo (none of them
294 provide redo), and some version 5 games don't use it (like
295 `Wishbringer'). If the game performs two `@read' opcodes with no
296 intervening `@save_undo' or `@restore_undo', nitfol will perform a
300 File: nitfol.info, Node: Aliases, Next: Abbreviation Expansion, Prev: Infinite undo/redo, Up: Features
305 If the game has long words which you wish to abbreviate, you can use
306 aliases. Use the command `/alias NAME VALUE'. All instances of NAME
307 in line input will be replaced with VALUE. NAME may not contain
310 Unlike abbreviation expansion and typo correction, alias expansion
311 modifies the text buffer, inserting the requested text. This is
312 necessary to allow multiple commands to be given in an alias through
315 Aliases are not expanded recursively, so you could do something
324 And your east-west movement will be swapped (`e' will do a `w',
325 though `east' will still do `east'). Aliases expand on all input the
326 game receives using `@read', including transcripts and directions from
329 If you want the expansion of the alias to be checked for further
330 aliases, you must use the `/ralias' command. This expansion is stopped
331 when an alias would expand itself.
335 Would do nothing, as `e' is expanded to `w', which is expanded to
336 `e', and then it stops because the rule for expanding `e' has already
339 >/ralias hanoi2 move src to extra. move src to dest. move extra to dest
344 You move the small disc from the left peg to the right peg.
345 You move the medium disc from the left peg to the middle peg.
346 You move the small disc from the right peg to the middle peg.
348 You move the large disc from the left peg to the right peg.
353 You move the small disc from the middle peg to the left peg.
354 You move the medium disc from the middle peg to the right peg.
355 You move the small disc from the left peg to the right peg.
357 Ideally you should be able to define an alias which recursively
358 solves any depth by relying on lower levels being solvable, but this
359 isn't yet possible. You must keep the expansion of aliases to a
360 reasonable size, since Inform has a fairly small buffer size.
362 You can remove aliases using the `/unalias' command.
365 Aliases do not effect `/...' commands; if they did, it wouldn't be
366 possible to `/unalias'.
369 File: nitfol.info, Node: Abbreviation Expansion, Next: Typo correction, Prev: Aliases, Up: Features
371 Abbreviation Expansion
372 ======================
374 Early Infocom games don't provide abbreviations like `x' for
375 `examine'. If you enable abbreviation expansion, nitfol will attempt
376 to expand one letter words at the beginning of inputs which are not in
377 the game's dictionary.
379 Nitfol supports the following expansions (note that some are
382 c close d down e east g again
383 i inventory k attack l look n north
384 o oops p open q quit r drop
385 s south t take u up w west
386 x examine y yes z wait
390 You are standing in an open field west of a white house, with a
392 There is a small mailbox here.
396 The small mailbox is closed.
400 Opening the small mailbox reveals a leaflet.
407 File: nitfol.info, Node: Typo correction, Next: Automapping, Prev: Abbreviation Expansion, Up: Features
412 In the Z-machine, the `@read' opcode provides the interpreter with a
413 dictionary to search in order to do tokenisation and word matching. If
414 you enable typo correction and enter a word not in the provided
415 dictionary, nitfol will search for near misses.
418 >ask jemmia about gloves
420 "Those are my gloves."
422 Nitfol takes the following steps to correct typos:
424 1. If the entered word is in the dictionary, behave as normal.
426 2. If the length of the word is less than 3 letters long, give up.
427 We don't want to make assumptions about what so short words might
430 3. If the word is the same as a dictionary word with one
431 transposition, assume it is that word. `exmaine' becomes
434 4. If it is a dictionary word with one deleted letter, assume it is
435 that word. `botle' becomes `bottle'.
437 5. If it is a dictionary word with one inserted letter, assume it is
438 that word. `tastey' becomes `tasty'.
440 6. If it is a dictionary word with one substitution, assume it is
441 that word. `opin' becomes `open'.
443 This behavior can be annoying when nitfol "corrects" intentionally
444 entered words which are similar to dictionary words. Usually this has
445 no effect upon the game, perhaps slightly changing the game's error
446 message, but may have negative effects when it causes an undesired
447 action. Games like `Beyond Zork' expect you to type words not in their
448 dictionary to name things. Nitfol might "correct" your entered word to
449 a dictionary word, which the game might complain about.
451 If typo correction is getting in your way, run nitfol with
452 `-no-smart', compile it without applying `-DSMART_TOKENISER', or edit
453 `nitfol.opt' to change the compile-time default.
456 File: nitfol.info, Node: Automapping, Next: Quetzal, Prev: Typo correction, Up: Features
461 Nitfol has the ability to display an on-screen map showing visited
462 rooms and their connections on the current floor. Below is a map
463 generated from `Enchanter'.
466 u-*-*-*-*-------*---*
472 / * *-*-*-*-*---*---u---*-*-*-@
474 *-* * * | | \ | X * / *-*
478 * u-d-*-----------*-u
484 The `*'s designate rooms; the `@' the current room. Rooms
485 containing staircases are shown with a `u' or `d', or `b' if the
486 staircase is bi-directional. If the current room contains a staircase,
487 nitfol draws it with a `U', `D', or `B'. Passageways are shown with
488 lines; the `X's are crossed lines. One-way passages are shown as lines
489 with arrows. Nitfol uses `v', `^', `<', and `>' for arrow heads.
491 In Glks which provide mouse events, you can click on rooms and it
492 will display the room name (and number) in the upper left hand corner
493 of the map. Note that XGlk is slightly broken, so you need to click on
494 the left-hand side of the room. Clicking on an empty map space clears
497 In order to use automapping, you must tell nitfol how to calculate
498 the current location. You do this by specifying an Inform expression,
499 so you must have debugging enabled.
501 Typically the current location is available in a global. In Z-code
502 versions 3 and prior, the current location is always stored in global
503 zero, so typing `/automap (global) 0' should work. In later versions,
504 you must figure out an expression which evaluates to the current
507 First, find out where the player object is. Typically, the player
508 object is named `self', `cretin', `self-object', or the name of the PC.
509 You can use the `find' command to search object names. If this all
510 fails, try `object-tree' to find the location number.
512 Once you have found the number of the location, you need to figure
513 out which global keeps track of the location. You can use the
514 `globals' command to search the globals.
516 From `Spider And Web':
519 25 "yourself" in 91 "End of Alley"
520 26 "yourself" in 48 "chair"
526 You're in the entrance of a narrow brick alley, which runs further
527 in to the north. To the south a broad street courses by, congested
528 with traffic and bicycles, although none of them seem to notice you.
532 25 "yourself" in 94 "Mouth of Alley"
533 26 "yourself" in 48 "chair"
538 Obviously we have 3 globals tracking the player location. Typically
539 there are only two, but some games have more. In this, we just picked
540 the first one, which is probably the Inform `location' variable;
541 another is probably the `real_location' variable. Depending on how you
542 want automapping to behave in the dark, or when dealing with
543 game-specific stuff, you may want to pick a different one.
545 To figure out what is in which direction, nitfol checks the current
546 location, tells the game to go north, checks the new location, undoes
547 the north movement, tries to go northeast, and so on. During all of
548 this, output is disabled.
550 Drawing the map is more complicated. First nitfol looks for cycles
551 in the graph and makes the cycles connect properly. Then it draws the
552 map. If parts of the map overlapp, it finds a path connecting the
553 overlapping bits and tries increasing the length of each passage in
554 this path by one, and recalculates cycle connections. If this solves
555 the problem, it's done; otherwise, it tries increasing the length of
556 two passages, or of one of the passages by two. If this fails, it
559 This technique isn't perfect. The implementation of this technique
560 isn't perfect either. So expect nitfol to misbehave a lot on complex
561 maps, and a little on simple maps. If you clever ideas on how to
562 improve it, let me know.
564 Nitfol makes an effort to simplify the map. If multiple exits go
565 from the barn to cornfield and you've been to both places, nitfol will
566 draw a single two-way passage if possible. If both up and west go up
567 the stairs and nitfol knows east returns from the top of the stairs,
568 nitfol will draw it as a simple west-east passage ignoring the up/down.
569 If east doesn't return from the top of the staircase, nitfol will draw
570 it as up/down, leaving out the west passage.
572 If you've been north of a gate, and come up to the gate from the
573 south, and unlock the gate, nitfol will draw it as a one-way passage
574 since last time it was north of the gate, it couldn't go south.
576 Some games feature reincarnation, perhaps moving you to a new
577 location. If movement leads to your death, this makes nitfol think the
578 reincarnation location is in that direction. Nitfol watches for three
579 asterisks in a row and will assume they mean death instead of a normal
582 Some of these problems could be avoided by having nitfol explore
583 each neighboring room, but this would make automapping even slower.
586 File: nitfol.info, Node: Quetzal, Next: Blorb, Prev: Automapping, Up: Features
591 Nitfol uses Quetzal version 1.4 for its save format, so you can use
592 your saves between different computers and interpreters. More
593 information about Quetzal is available at
594 `http://www.geocities.com/SiliconValley/Vista/6631/'.
596 If you specify a save-file on the command-line on UNIX, nitfol uses
597 a `UNIX' `IntD' chunk to locate the game file associated with the save
598 name. This chunk is included in save games when nitfol can figure out
599 the current filename. If you compile nitfol with -D__USE_GNU,
600 -D__USE_BSD, or -D__USE_XOPEN_EXTENDED, nitfol will canonicalize the
601 file name, so you don't have to worry about relative file name
602 specifications no longer working if you invoke nitfol from a different
605 On MacOS, nitfol uses alias records from a `MACS' `IntD' chunk to
606 locate the game file. This won't work for games built-in to the
609 If no `IntD' chunk is included, nitfol searches the environment
610 variable `INFOCOM_PATH' for a game with matching release number, serial
611 number, and checksum.
613 Looking for games without an `IntD' chunk isn't foolproof, but it
614 should work most of the time. Serial numbers are basically the date
615 and it's extremely unlikely more than ten games will be compiled on the
616 same day (the only time lots of games are compiled on same day is right
617 before competition time). Assuming they all have the same release
618 number, there's still only a .0686% chance that at least two of these
619 ten will share the same checksum. If someone reports this as a
620 problem, I'll make nitfol ensure the game contains a `save' opcode
621 right before the restored PC.
624 File: nitfol.info, Node: Blorb, Prev: Quetzal, Up: Features
629 If you wish to hear sounds or see graphics in your games, they must
630 be packaged in Blorb files. The Z-machine game may included in the
631 Blorb file or may be specified separately. Nitfol does not support the
632 traditional Infocom `.mg1' and `.snd' files.
634 Note that graphics are displayed incorrectly, and sound has not yet
638 File: nitfol.info, Node: Debugger, Next: Bugs, Prev: Features, Up: Top
643 Nitfol debugging mode tries to imitate the GDB interface. If you're
644 familiar with that, you should have no problem using nitfol (other than
645 dealing with the current incompleteness).
647 You need inform 6.21 or later, as earlier versions don't produce
648 correct infix files without a patch. You then need to compile infix
649 information for your game. I recommend doing:
651 `inform -k -~S -~X -~D MYGAME.inf'
653 Then your debug information will be in `gameinfo.dbg'. If you have
654 a command-line on your platform, run nitfol like `nitfol MYGAME.z5
655 -symbols gameinfo.dbg'. Otherwise, start up your game and type
656 `/symbol-file gameinfo.dbg' the first time you get a prompt.
658 When the game stops to read a line of text, you can begin that line
659 with `/' to give a debug command. If you want to pass a line beginning
660 with a `/' to the game, double the `/' and the game will be passed the
661 second one. When at a `(nitfol) ' prompt, starting commands with `/'
662 is neither necessary nor recommended.
664 All expressions are like the ones used in Inform.
666 You can perform casts to get the result in the form you want:
668 `(number) EXPRESSION'
669 Use EXPRESSION as if it were a number. Useful when you want to
670 know the number of something, not the object, routine, or string
671 information nitfol normally gives.
673 `(object) EXPRESSION'
674 Use EXPRESSION as if it were an object. Most useful when printing
675 the result, as it will show the object's attributes and properties.
677 `(routine) EXPRESSION'
678 Use EXPRESSION as if it were the packed address of a routine.
679 Useful if you have the packed address of a routine which you want
680 to set a breakpoint at.
682 `(string) EXPRESSION'
683 Use EXPRESSION as if it were the packed address of a string.
684 Useful for printing it.
686 `(global) EXPRESSION'
687 Evaluates to the value of a numbered global. `(global) 0' is the
688 player location for version 3 Infocom games.
691 Evaluates to the value of a numbered local. Not terribly useful
692 unless you're debugging something without source.
694 Here are short descriptions of the debugger commands. *note
695 (gdb)Top::, for more information. Some of these were taken/adapted
699 `info breakpoints NUM'
700 List breakpoints. An argument specifies a specific breakpoint to
707 Show the current source language.
710 Set a condition for an existing breakpoint.
713 Restore a saved game.
716 `break LINESPEC if EXP'
717 Set a breakpoint. An `if' clause specifies a condition.
721 Step exactly one instruction. An argument specifies a repeat
729 Display the object tree. An argument says which object to use as
730 the root of the tree.
732 `disable display NUM'
733 Temporarily disable an automatic display.
736 Select a specific stack frame.
743 Silently select the child of the selected frame. An argument
744 specifies how many frames down to go.
748 Show the selected stack frame. An argument specifies a stack
753 Give an object an attribute. With a tilde clears the attribute
754 instead of setting it.
757 Evaluate an expression without printing its value.
760 Evaluates an expression and prints the result. This can include
765 Select the parent of the selected frame. An argument specifies
766 how many frames up to go.
773 Continue execution. An argument sets the ignore count of the
777 Dump memory to a file
780 Undo last move (not last debugger command).
783 Print value of an expression each time the program stops.
786 Move an object around the object tree.
790 Select the parent of the selected frame silently. An argument
791 specifies how many frames up to go.
794 Show licensing information.
797 Stop recording a script.
800 Continue execution at a new location.
803 Start recording a script.
806 Add a recursive alias
810 List all global variables and their values. With an argument,
811 list all only those with a specific value.
816 Display the parent functions of the current frame. An argument
817 specifies how many frames back to show. If the argument is
818 negative, start from the first frame instead of the current.
821 Find objects whose shortnames contain a string.
824 An argument specifies a repeat count.
828 Select the child of the selected frame. An argument specifies how
829 many frames down to go.
832 Set the ignore count for a breakpoint.
839 Step one instruction, stepping over subroutine calls. Step a
840 specified number of instructions, stepping over subroutine calls.
843 Print list of commands.
846 Redo undid move. Only works immediately after an `undo'.
849 Re-enabled a breakpoint.
852 Resume execution until the program reaches a line number greater
853 than the current line.
856 Replay a recorded script.
862 Remove an object from the object tree.
871 Load debugging info from a file (usually `gameinfo.dbg').
877 Show warranty information.
880 Temporarily disable a breakpoint.
883 Stop automatically displaying an expression.
886 Re-enable an automatic display.
890 Step through program to a different source line. An argument
891 specifies a repeat count.
894 Get information on the current source file.
898 Step through program, stepping over subroutine calls. An argument
899 specifies a repeat count.
901 If you're on a UNIX and you don't like the GDB interface, you can
902 compile cheapnitfol and run it as the inferior debugger under Emacs or
903 DDD. You can also try compiling `xnitfol' with `-DSTDOUT_DEBUG' and
904 trying that, but I haven't tested that much.
906 `ddd MYGAME.z5 --debugger cheapnitfol -s gameinfo.dbg -prompt "(gdb) "'
909 File: nitfol.info, Node: Bugs, Next: Thanks, Prev: Debugger, Up: Top
914 A nitfol bug is any behaviour which makes nitfol reliably misbehave,
915 with the exceptions of bugs in Glk libraries. These include: anything
916 which makes nitfol crash (other than when nitfol reports `FATAL'
917 errors), anything which causes nitfol to contradict the Z-machine
918 standards documents (except for optional enhancements like spelling
919 correction and debug mode), any buffer overflows, and anything which
920 makes nitfol infinite loop other than infinite loops in the game itself.
922 Before reporting a bug, make sure the bug is not listed below and
923 your copy of nitfol is not compiled with `-DFAST'. Please report the
924 version of nitfol, your system type and a series of commands which
925 reliably cause the bug.
928 - Graphical font (`Beyond Zork') (should use images for this)
930 - Terminating character support (mostly `Beyond Zork')
932 - Reverse video, full color (should querry Glk more aggressively)
936 - keypad character codes
938 - its own random number generator (relies on system one)
940 Nitfol does incorrectly:
941 - Play is not paused to wait for sounds to complete in `The Lurking
944 - Pictures and text are not placed correctly for v6 games.
946 - block quotes are placed in the upper window, so `cheapnitfol'
949 - Corrupted save files may make nitfol do bad things.
951 - Should figure out a way to handle buggy games like `AMFV' and
952 `Varicella' which assume the upper window is 80 columns wide.
954 - Doesn't catch header writing other than `@storeb' and `@storew'.
957 - Sometimes says there's no code at a location where it could be
958 clever and find some.
960 - `ofclass', superclass not implemented.
962 - Should perform more sanity checks everywhere.
964 - Lots of useful commands not yet implemented.
966 - OBJECT.FUNCTION is handled incorrectly, both for assignments and
969 - Assumes you know what you're doing, so `quit', `run', etc., don't
970 prompt you for confirmation.
972 Automapping problems:
973 - Doesn't work well for random destinations (the forest in `Advent')
975 - `@get_cursor' doesn't return the correct value during automapping
976 since output is disabled.
978 - Requires too much work for the end-user; should put in stuff to
979 make it figure out the location global in 95% of games.
981 - Doesn't really work if multiple locations are coded as being in
982 the same room (long road in `Enchanter').
984 - Doesn't show exits which go nowhere, but change the game.
986 - Perhaps should use graphics windows when available.
988 - Movement causing teleportation confuses it.
990 - Reincarnation handling isn't optimal.
996 - Should realize it can add extra bends (especially in one-way
999 - Should be able to output nice-looking Postscript.
1001 - Should store map in saved games (wait until automapping code
1005 File: nitfol.info, Node: Thanks, Next: Games Cited, Prev: Bugs, Up: Top
1010 The following people have given comments, suggestions, bug reports,
1011 answered questions, or helped port nitfol (in alphabetical order):
1014 - Paul David Doherty
1031 File: nitfol.info, Node: Games Cited, Prev: Thanks, Up: Top
1036 `Wishbringer' Copyright (C) 1985, 1988 Infocom Inc.
1038 `Zork I' Copyright (C) 1981-1986 Infocom Inc.
1040 `Curses' Copyright (C) 1993-1994 Graham Nelson.
1042 `http://ifarchive.org/if-archive/games/zcode/curses.z5'
1044 `Beyond Zork' Copyright (C) 1987 Infocom Inc.
1046 `Enchanter' Copyright (C) 1983, 1984, 1986 Infocom Inc.
1048 `Varicella' by Adam Cadre 1999.
1050 `http://adamcadre.ac/content/vgame.z8'
1052 `Spider And Web' Copyright (C) 1997-1998 Andrew Plotkin.
1054 `http://ifarchive.org/if-archive/games/zcode/Tangle.z5'
1060 Node: Invoking nitfol
\7f1572
1061 Node: Features
\7f8446
1062 Node: Preferences
\7f9091
1063 Node: Infinite undo/redo
\7f10452
1064 Node: Aliases
\7f11221
1065 Node: Abbreviation Expansion
\7f13740
1066 Node: Typo correction
\7f14870
1067 Node: Automapping
\7f16779
1068 Node: Quetzal
\7f22563
1070 Node: Debugger
\7f24700
1072 Node: Thanks
\7f34727
1073 Node: Games Cited
\7f35142