Copyright: Copyright ¸ 1998 by William J. Shlaer


Cartography for Adventurers

Simple provinces are most amenable to automatic mapping.  But even here, if you want nice maps, draw them yourself.  The mapper can't hope to compete, even with help.  In easy areas where the rooms are connected by paths that go in compass directions straight from one room to the next and back, and where there is no twisting or jumping up and down, there is hope.  Even in this case problems can occur if the first path to a room, which controls its position on the map, puts it in an awkward place, a place that does not leave space for its neighbors.

For an example, look at the map from zorkmap.txt.  This is an unadulterated transcript, but it is also a total fake.  To get the map to look like this, I had to know the layout in advance; that is, I already had an acceptable map.  Even so it took several tries.  If you go to East-West Passage then to Chasm, Chasm will be positioned with no room for North-South Passage to the north of Round Room.  It works better to go to Round Room, then North-South Passage, then Chasm, then Reservoir South, then Deep Canyon.  Visit and connect East-West Passage after all that.

Map a small region as completely as possible on each mapping trip.  Try to go both ways on a path if that is allowed.  A one way path positions the room differently than a two way path; it is less on a regular grid.  In general, explore in the cardinal directions first, the diagonal directions next, and then do up and down connections.  Lastly do in and out.  The map will only show one connection if many exist, it uses the last path followed in the game to make the map.  If there are other connections, it is probably better to skip the up-down and in-out connection between the same rooms.

If the map is not acceptable and can't be easily tuned up, go back and make another run through that province, using what you already know.  Your goals are different when mapping than when booty hunting.  Avoid rude strangers with sharp knives; they can be a problem.  If you must make a single map of a large part of the game domain, it may be better to make several small transcripts and graft them together with a text editor.  Be sure to save the game and start the next transcript in the same room that you ended in.  Take your transcript before quitting to avoid rooms labeled, "Do you want to quit?>y", that have to be edited out later.  Whenever a map is to be made from a saved game, it is important to look just after the game is restored, otherwise the map seems to start at the beginning of the game.

Another way to enlarge a map is to use the Add file command.  It is best to start each new transcript in territory that has already been mapped.  Do a restore, look, then venture out into the unknown.  Even doing this, the maps can overlap and will have to be dragged apart; the Select New command is helpful for this.  Wandering from new areas back into the known gives more confusing overlap.  Unconnected islands can also be added to a map.

There are special characters that can be used while adventuring, and hopefully generate only a bit of rude backtalk from the game.  They are used to be recognized by the mapper.  They are the rename character ( = ), the ignore character ( / ), the identify character ( . ), and the path character( - )..  They are used just after the game prompt.

When rename is used, the words that follow are used as the title for the room, replacing the game's choice.  You only have to use it once per room; if used more that once, the last one rules.  For instance, if the game has a room called Megamphitheater of Implementeeroids which is too long a name to fit in the room on the map, it can be renamed Hog Pit which is nice and short.  Avoid renaming different rooms with the same name, even if you like the name very much.

The ignore character allows you to mark out a portion of the transcript so it is not mapped.  All the lines from where it is used back through the last move, attempted move, or drop are taken out.  In Zork I, if you move up into the attic without light; the game will not give the room name until you turn on the lamp, then all is well.  If you do not have light, the mapper will think that up is a blocked stub from the kitchen.  When you move back down to the kitchen the mapper will think you never left the kitchen and will generate a loop down from the kitchen back to the kitchen.  To avoid this, give the ignore character immediately after both the up and the down moves.  Alternatively the log can be edited later to take these moves out.

The identify character is used to make rooms that have the same name unique by appending the word or phrase that follows to the room name.  It is used mainly in mazes and is discussed more fully under that topic.

The path character is used when you arrive in a room by an unusual method.  It is followed by a phrase that will label the link from the prior room.  It can be chosen to be a true game command or just to annotate the map.  If you use multiple commands, separate them with periods.  In Curses, -get in bed. sleep will get you from the servants room to the premonition, but -dream will only serve as a map label.  Commands may not always work if pasted back into the game.


Contents

Contents - Frobot Mapper Help

version 1.2 - program and help file copyright © 1998 by William J. Shlaer

Overview

File and Control Menus

Logs, Rooms, Links, Stub, and Corners

Maps and Modes

Cartography for Adventurers

The Curse of the Maze

Improving Map Readability

Sources


Controls
File and Control Menus

The File menu has the following eight items.

Open allows you to select the file to read in.  There are two kinds.  Game logs are text files with a txt extension.  Files saved from the mapper have an fmm extension.  Reading a mapper file should recreate the exact map that existed when the file was saved.  Mapper files written by version 1.0 can not be read by the new version.

Add allows a new game log file to be added to the current map.  Only the log from the new file is kept, so any change that goes back and reads the log will cause the old rooms to vanish.

Save allows two types of files to be saved, Mapper files and Windows Metafiles.  Mapper files are text files that contain the stripped log, the room table, the path table, the stub table, and the corner table; they have an fmm extension.  These can be read back in to recover a tuned map.  Windows Metafiles should contain the complete map with all rooms, paths and labels.  They have a wmf extension.  The idea was to read these into a CAD program for further refinement.  I have never been able to recover all the information that should have gone into these files.  My version of Autocad LT doesn't support True Type fonts, and the text comes out total garbage.  The rest looks all right; I don't know if the file is correct or not.

Redo Lists takes the information in the stripped log and creates the rooms, links, stubs, and maps.  It is done automatically when a file is loaded or updated.  It needs to be used if the stripped log has been edited.  It should be avoided after adding a new file to an old map.

Select New toggles the selection of all the rooms added to the map by the last file read.  The new rooms may be partially overlapped with the old ones, and this makes it easy to drag them as a block.

Print Map prints the overall map that shows all rooms and paths without labels.  The printer orientation is set automatically to match the aspect ratio of the map.

Print Detail prints the detailed, labeled map.  You can set the thickness of the line for both maps and the size of the room label text for the detail map on the Show page of the Control window.

Exit does just that; there is no prompt to save the map.

The Control menu brings up a floating window with six pages.

Use appears on the menu of the floating window and effects the changes on some of the pages.  Other changes are immediate.  The Control menu is duplicated on the floating window except that Last is gone and On Top is added.

Last, or double clicking Control, just brings up the last page used.

Map parameters govern the spacing between rooms, and the size of the underlying grid  Play around to get a feel for how they work.  Setting ridiculous values such as zero or blank can cause program errors.  Changing them can improve the map appearance a bit.  Most of the names are self-explanatory.  Parallel Offset gives the sideways displacement used when two rooms connect with a path that exits both rooms in the same direction.  Changes take effect when the Use menu item is clicked, or when a new file is read in.  Avoid after adding rooms from a new file.

Draw parameters govern the size of rooms and the size of the screen text used on the detail map to label the rooms.  Lines from Rooms gives the distance the line extends from a room before it heads for the line leading out from the next room.  These are similar to map parameters but do not require the map be reconstructed.  Changes are immediate and are safe after adding rooms.

Identify parameters are the phrases that the game accepts when you drop an object and uses when it announces the presence of an object in a room you have entered.  These can be used to identify a maze room or other room that does not have a unique title.  This system is turned on by checking the box.  It takes effect when Use is clicked or when a new file is read in.  Rooms can be added after changing these parameters, but Use should not be clicked after adding.

Symbol allows changing the characters that are used for the game prompt, to rename rooms, to ignore false moves, to identify rooms, or to specify how you got to a room.  Obviously the prompt character must match the one used by the game or very little mapping will get done.  The others are more flexible but should not conflict with characters that have special meaning during the game.  They allow you to handle certain special situations while adventuring that would confuse the mapper program later.

Show controls the display of stubs for blocked directions and loops back to the same room.  The map is cleaner if these are unchecked.  The map is more complete with them shown, and this aids in discovering missed paths and rooms.  The lower two parameters control the line thickness and text size on printed maps.

Update allows the use of two automatic file update modes.  The file can be reread when the mapper program becomes active, or it can be reread at fixed intervals.  There is an indicator that shows the status of the last automatic file read.  If the file has changed length, the maps change.

On Top keeps the floating window on top of the main window when it is checked.


Improving Map Readability

Mapping small parts of the game domain and following the tips may still not give a useful map.  There is more that can be done.  The map may be hand tuned.  Any tuned map must be saved and loaded as a mapper file.

First try changing the parameters, especially the size of the unit cell, the cardinal spacing, and the diagonal spacing.  This may separate crowded rooms or squeeze out excess space.  Increasing the room height allows for more or bigger text to fit but crowds the rooms.  Changing the room side moves from square to diamond shape.

If the mapper is not totally confused, merely moving rooms around may untangle things.  Rooms may be moved by dragging them to new positions on the detail map.  Often, mazes will need this form of tuning.  The file zorkmaze.txt is a good example.  If automatic identification is off, all maze rooms collapse into one black hole.  Even with it on, the map is crowded, and the paths unclear.  Dragging the rooms to separate them will make the map clear but not elegant; see the file zorkmaze.fmm  The effect of moving the rooms is undone as soon as the lists are redone, but not when an automatic update happens.

Adding corners can also help clarify the map.  Corners can be moved to make the lines between rooms avoid crowded areas.  They are added by using the Add corners mode and then clicking two rooms that have a direct connection.  Put in as many as you need then drag them to where you want them.  Corners can be taken out by clicking them in the Remove corners mode.

The room list can be edited to give new names, objects or titles.  The position numbers can also be changed, but this is probably done more easily by dragging.  If you do change the numbers, be sure to use numbers in the range 35000 to 65000 separated by the Alt0150 dash.  Rooms can not be selected with the mouse if they are not on the unit cell grid.  Any changes done at this level are seen as soon as the maps are displayed.  These changes are undone by redoing the lists.

Editing the log to remove confusing sections can be useful, but be careful that you don't add to the confusion by doing this.  Editing can be used to correct minor goofs in maze mapping.  If the log is edited the lists must be redone to see the effect, and any changes made by dragging rooms andb by editing the room list are lost.

The map can be titled and parts of the map can be annotated by adding text blocks.  Lines in a block are separated by backslashes.  You can set the font and size for each block.  The text blocks appear on both the detail and overall maps without the size being scaled.  What is right for one map is often wrong for the other, so the blocks may have to be moved or changed when saving or printing both maps.


Logs, Rooms, Links, Stubs, and Corners

There are five pages of data that underlie the map.

The raw log is just the transcript as it was read in with any editing you have done.  The two logs share a page.

The stripped log has been processed to remove all lines except moves from one room to another, attempted moves, room names, and special lines for identification and renaming.  When an ignore character is encountered all lines from that point back though the last move or the last drop are marked out with a leading dot so they are ignored.  If automatic identification is used, lines that drop an object are recast as identification lines.  Lines where the game announces the presence of a previously dropped object are similarly recast.

Rooms are listed in a table that gives the sequence number, the room name with any identifier appended, the identifier (typically the name of an object in the room), and a given title that is used on the detail map.  This title defaults to the room name as given by the game.  The last column is the location of the room given as combined east and north distances separated by the Alt0150 dash.  The map universe extends from 35000 to 65000; outside of that range, errors occur.

Links are listed in the next table with the name of the first room, the direction to the second room, the direction back from the second room, the name of the second room, and a column with the combined sequence numbers of both rooms.

Stubs has nothing to do with paintings of horses.  This is a list of both blocked paths and loops back to the same room.  The first column has the name of the room, including the identifier if there is one, with the direction of the stub appended.  Then the direction of the move that went nowhere, followed by the type, stub or loop.  Last is the sequence number of the room.

Corners are used to detour the connecting lines around rooms that may be in the way.  There are special Mode menu choices to put these in and take them out.  The table gives the sequence number, the link leading to the corner, the location as combined east and north distances, and the link to the next corner if there is one.  If the link to the corner is a five digit number, it is from another corner.  Otherwise, it is from the room-to-room link table.

Text blocks that label the map are stuffed into the corners list.  Each entry for a text block has a sequence number, the font name, the position where the block starts, the font size, and the text itself.  Backslash characters separate the lines in a block.


Maps
Maps and Modes

There are two maps.

The overall map shows all rooms and links without labels.  It is scaled automatically for both the screen and printing.  Clicking on this map brings up the detailed map centered at the click point.

The detail map is at fixed scale and is labeled.  You can drag the rooms and corners around with the mouse on this map.  Starting a drag outside a room recenters the whole map.

Reading a map is straightforward for moves in compass directions.  The connecting line leaves the room in the direction of exit.  It enters the next room from the direction you exit that room to return.  One way connections enter a room with an arrowhead pointing in.  They come in to the ene, ese, wsw, and wnw corners.  Up and down connections leave the room from the nne and ssw corners through horizontal parallelograms.  In and out connect from the nnw and sse corners through vertical parallelograms.  Wait leaves from the sse corner with an arrow along the path.  Specified connections leave from the ssw corner with the specifying phrase printed nearby.  Blocked exits (you can't go that way) are short arrows ending in a cross line.  A loop, an exit that takes you back to the same room, is shown as a little hook with an arrow pointing back to the room.

A key map that illustrates most of these features can be obtained by reading in the readme.txt file as if it were a game log.

There are five modes.

Path finding mode is indicated by the phrase to the right reading, "click rooms for path".  Only one room can be selected at a time.  The path between the last room and the one currently selected is shown as the window caption and is sent to the clipboard so it can be pasted into a game.  This idea was taken, without permission but with thanks, from Chris Madsen's refined mapping program GUEmap.

Drag map mode is the default.  The entire map can be dragged around with the mouse.  This can also be done in the other modes if the mouse down is not on a room or a corner  It is sometimes more convenient to go back to the overall map and recenter than to drag the detail map.

Move things mode allows rooms or corners to be moved around to improve the appearance of the map.  Multiple rooms and corners may be selected.  If a corner overlies a room the corner has priority.  The room on which the drag starts always moves, whether or not it appears selected.

Add corners mode puts a movable corner between two rooms if they have a direct connection.  Just click one room then the other.  You can put several corners between the same two rooms.  Initially they will overlap, but they can be dragged apart.  The corners and the map as a whole, but not the rooms, can be dragged in this mode.

Text mode allows the addition of blocks of text.  Click about where you want the text to start.  The program takes you to the grid that also contains corner data, where you can enter the text.  Use the backslash character ( \ ) to separate the text into lines.  You can change the font or size if you match the Windows font name exactly; the default is Arial 10 pt.  After switching to move mode, which takes you back to the detail map, the text block can be dragged to its final resting place.  The drag spot is at the upper left corner of the block.

Remove mode takes out corners and text blocks as you click them.


Overview
Overview - also see the readme.txt file

The Frobot Magic Adventure Mapper v1.1 for Windows 95

The Frobot Mapper takes the log of a text adventure, such as a WinFrotz transcript of Zork I, and attempts to make a map of the rooms and connecting paths.  Success will vary.  To make a map, first run a text adventure game under WinFrotz or similar monitor that permits a transcript or log to be saved.  Load this log into the mapper, and it will produce the first approximation of a map.  This can usually be improved by tuning the mapper parameters, adding corners, and dragging rooms to better positions.  If the map is acceptable it can be printed or saved as a file.  Sometimes the area being mapped has to be revisited to clean up the map.  Mazes demand special techniques.  Sometimes it is hopeless, and you have to use a program like GUEmap that gives more control of the map or even draw the map by hand.  Console yourself with the certain knowledge that fine maps are only produced by talented artists with highly refined cartographic skills.

The program looks complicated but almost everything can be left alone almost all the time.  There are seven menu headings for your delight:

File - to load, save, print, and manipulate files

Help - brings up this help file

Control - to alter the appearance of the map

View - to display the lists that underlie the map

Map - the overall map, scaled automatically to include all rooms

Detail - a fixed scale map that shows the room labels

Mode - sets the mode for manipulating the map

Installation is easy.  Unzipping Frobot12.zip should give you the following files:

  frobot.exe - the program (requires win95)

  frobot.hlp - the help file

  zorkmap.txt - a sample game log

  zorkmaze.txt - a log to demonstrate dropping items in mazes

  zorkmaze.fmm - the saved map after tuning

  readme.txt - a brief introduction which has a fake log at the end

To install, move these files to the directory of your choice.  To uninstall, delete them along with frobot.ini and any GID files generated by the help system.  Note that the names are the same as v1.0 files except for the zip file.

New in versions 1.1 and 1.2:

  Auto-update leaves old rooms where you put them. (only in v1.2)

  It recognizes rooms that end with parenthetical remarks.

  It has an INI file.

  You can tell it how you got to a place.

  Several transcripts can be combined into one map.

  It can give directions from one room to another.

  A menu and small control window replace the control panel.

  Connections are marked differently.

  Corners can be added to the connecting lines.

  Text blocks can be added to label the map.

Frobot is not fully tested code.  I haven't had significant trouble running the mapper, but the program doesn't have much guarding.  Setting some of the parameters to blank or zero will give errors; if they occur faster than you can reset them, the ever popular Alt-Ctrl-Del may be needed.  Be nice to it, don't give it junk to digest, and it will be nice to you.  All work on this code was done using WinFrotz transcripts.  Other logging systems should work, but I don't guarantee it.

Note that version 1.0 mapper files can not be read by version 1.2.  Reading them or any incorrect file with an fmm extension will cause an error and will corrupt the ini file giving more errors.  Quit Frobot, delete the ini file, and restart Frobot.


Sources

URLs on this page are not live; they must be copied to your browser.

WinFrotz may be downloaded from the very informative site:

http://www.cris.com/~Twist/WinFrotz/

Zork I and Zork II come from Activision at:

http://www.activision.com/low/site/downloads/games/index.html

Text game archives are at a rather amusing site:

http://www.truespectra.com/~svanegmo/

and at:

ftp://ftp.gmd.de/if-archive/games/infocom

Masterpieces of Infocom is a 30 game commercial CD from Activision and is available under the counter throughout the Great Underground Empire and wherever sleazy games are sold.  One source is:

http://www.cdaccess.com/ftp/public_html/html/shared/infocom.htm

Other mappers, such as GUEmap, are at:

ftp://ftp.gmd.de/if-archive/mapping-tools

The IF archive starts at:

ftp://ftp.gmd.de/if-archive

and is mirrored at:

ftp://wuarchive.wustl.edu:/doc/misc/if-archive


The Curse of the Maze

Rooms that share a name will confuse the mapper and may confuse the adventurer.  Mazes are the end point with lots of identically named rooms and with complex connecting paths.

A couple of rooms with the same name are not much of a problem, once you know they are not part of a real maze.  Just give the identify character followed by a unique word or phrase.  This phrase is appended to the room name.  However you must give that exact same phrase every time you visit or the program will generate a false room without the identifier or with the variant identifier.  Leaving an object as a reminder is probably useful if you can spare the inventory.

You can drop objects to identify maze rooms as you return to them.  This is probably the only way to map significant mazes.  There are two approaches each with its pitfalls.  If the maze is to be analyzed with the automatic identification feature turned off, you must give the identifier for the room every time you see that object and must use the exact same phrase.  Minor slips can be corrected by editing the stripped log.  The advantage of this method is that dropping items to further your progress through the game causes no problem.

If automatic drop identification is to be used, the normal and necessary moving of objects from one place to another will generate false rooms.  The transcript should probably be limited to the maze and a couple of neighboring rooms.  Gather inventory on your person and in a room near the maze, and save the game.  Start the mapping transcript with a restore of this game followed by a look.  Then enter the maze.  After you drop an item, look to find out how the game announces its presence.  If the game does not use the word you used, you can redrop using the game's word; you do not even have to take the item first.  Be alert for objects that are announced by the game using a non-standard phrase, they will cause trouble.  If you drop the wrong item, the ignore character should be used immediately, and the item should be taken again.

Until an item is dropped, it is ignored by the mapper.  You can take more inventory from your stash since it was not dropped during this transcript.  Once an item is dropped, it usually can not be moved without causing problems.  If the game is too smart and uses a variety of phrases to tell you that you have come upon an object, automatic identification will not work.  You will have to identify the object yourself when you return to a room using the same word each time.  If there are only one or two items that give trouble, such as the lunch in Zork I, then automatic identification can be combined with custom identification of the problem objects.

Aliases may be useful in automatic identification.  If the mapper recognizes mark as the word for drop identification, then you can use drop freely.  Set up an alias to turn mark into drop for the benefit of the game.  Or you can let the mapper recognize drop, and you can use an alias such as dump for dropping when you do not want the mapper to detect it.  This scheme may let you combine a bit of normal adventuring with maze mapping.