v05i088: monster - multiuser adventure game for VMS, Part01/06

40 views
Skip to first unread message

ga...@tekred.tek.com

unread,
Nov 30, 1988, 2:58:58 PM11/30/88
to
Submitted by: Richard Skrenta <skr...@nuacc.acns.nwu.edu>
Comp.sources.games: Volume 5, Issue 88
Archive-name: monster/Part01

[As you can see from the subject line, this game is for VMS
systems only. I split the source and doc files into smaller
parts for distribution. They will automatically be catted together
when all 6 parts are unpacked. I was unable to test this game, so
you're on your own. -br]

#! /bin/sh
# This is a shell archive. Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file". To overwrite existing
# files, type "sh file -c". You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 1 (of 6)."
# Contents: README MANIFEST fixup.sh mon1.doc mon5.pas
# Wrapped by billr@saab on Wed Nov 30 11:28:55 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'README' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'README'\"
else
echo shar: Extracting \"'README'\" \(1476 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XThis is README.TXT for Monster, a multiplayer adventure game for VMS.
XMonster was written by Rich Skrenta at Northwestern University.
X
XYou may freely copy, distribute and change Monster as you wish. Let me
Xknow if you get it up and running, and if you change it, just because I'm
Xinterested. Send mail to
X
X skr...@nuacc.acns.nwu.edu or
X skr...@nuacc.bitnet
X
XMonster was written in VMS Pascal under VMS 4.6. It uses file sharing and
Xrecord locking for communication. Outside of that, it doesn't do anything
Xtricky. However, after playing around with a VMS 4.2 system, I have
Xdoubts if it will work on a system that old. If you've got a reasonably
Xrecent version of VMS and a Pascal compiler, you shouldn't have any problems.
X
XThe Monster source is in two files: a short one, approx 300 lines, called
Xguts.pas, and a big one, mon.pas, approx 10,000 lines. The compiled program
Xcontains everything necessary to create and maintain the Monster universe.
XThere is no separate maintenance program. Instead, a specific person in
Xthe game has privileges, and is known as the "Monster Manager". The MM
Xcan do system maintenance while playing, and other players can even observe
Xhis work.
X
XCredit for the work to convert GUTS.PAS to a more portable form goes to
X
X Michael "the spide" Young MCY...@RITVAX.BITNET
X Chris "siouxane" Meck CLM...@RITVAX.BITNET
X
XMany thanks to them for solving this sticky problem!
X
XRich Skrenta
XNovember, 1988.
END_OF_FILE
if test 1476 -ne `wc -c <'README'`; then
echo shar: \"'README'\" unpacked with wrong size!
fi
# end of 'README'
fi
if test -f 'MANIFEST' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'MANIFEST'\"
else
echo shar: Extracting \"'MANIFEST'\" \(610 characters\)
sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
X File Name Archive # Description
X-----------------------------------------------------------
X MANIFEST 1 This shipping list
X README 1
X announce.txt 6
X fixup.sh 1
X guts.pas 6
X install.txt 4
X manifest.txt 2
X mon1.doc 1
X mon1.pas 4
X mon2.doc 6
X mon2.pas 3
X mon3.pas 5
X mon4.pas 2
X mon5.pas 1
X privusers.pas 5
X readme.txt 3
END_OF_FILE
if test 610 -ne `wc -c <'MANIFEST'`; then
echo shar: \"'MANIFEST'\" unpacked with wrong size!
fi
# end of 'MANIFEST'
fi
if test -f 'fixup.sh' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'fixup.sh'\"
else
echo shar: Extracting \"'fixup.sh'\" \(460 characters\)
sed "s/^X//" >'fixup.sh' <<'END_OF_FILE'
X#! /bin/sh
Xecho "concatenating source and doc files"
Xcat mon1.pas mon2.pas mon3.pas mon4.pas mon5.pas >mon.pas
Xif test 223441 -eq `wc -c <'mon.pas'`; then
X rm mon1.pas mon2.pas mon3.pas mon4.pas mon5.pas
X echo "mon.pas complete"
Xelse echo 'mon.pas incomplete (wrong size)'
Xfi
Xcat mon1.doc mon2.doc >monster.doc
Xif test 74937 -eq `wc -c <'monster.doc'`; then
X rm mon1.doc mon2.doc
X echo "monster.doc complete"
Xelse echo 'monster.doc incomplete (wrong size)'
Xfi
END_OF_FILE
if test 460 -ne `wc -c <'fixup.sh'`; then
echo shar: \"'fixup.sh'\" unpacked with wrong size!
fi
chmod +x 'fixup.sh'
# end of 'fixup.sh'
fi
if test -f 'mon1.doc' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mon1.doc'\"
else
echo shar: Extracting \"'mon1.doc'\" \(48710 characters\)
sed "s/^X//" >'mon1.doc' <<'END_OF_FILE'
XMonster is a text-oriented computer adventure game. Like other traditional
Xadventure games such as Zork and Adventure, Monster players issue simple
Xcommands to direct a "puppet" through an artificial world. Players can
Xexplore the world, pick up and make use of objects, and solve puzzles.
X
XHowever, Monster is quite different from other computer adventures in two
Xrespects: first, Monster is a multiplayer game. In addition to the normal
Xactions a player can effect on the simulated environment, players can also
Xinteract with one another. Player characters can fight, talk, trade items
Xand explore territory together. Monster is similar in this respect to some
Xmultiplayer games available on computer networks such as the Source and
XCompuserve.
X
XHowever, Monster allows players to do something that very few, if any, other
Xgames allow: the players themselves create the fantasy world as part of the
Xgame. Players can create objects, make locations, and set up puzzles for other
Xplayers to solve. Game mechanisms allow players to:
X
X o Create and describe new objects and locations
X o Specify how game objects function
X o Provide text descriptions for events that may happen
X
XFor example, a player in Monster could create a room named "Great Hall",
Xprovide a textual description for it (which other players would see upon
Xentering the rooms), and describe special features of the room (for instance,
Xa brass plaque on the wall).
X
XHere's what another player who walked into the room described above would see
X(lines beginning with > are the player's input):
X
X > look
X You're in Great Hall
X You're in the middle of a vast hall stretching out of sight to the
X east and west. Strange shadows play across the high vaulted ceiling.
X The floor is set with smooth rectangular stones. The walls feel slightly
X cold to the touch, and damp with condensation. A copper plaque, slightly
X green with age, is set into one wall.
X
X > look plaque
X
X The plaque looks very old and corroded. However, you can still make out
X the writing:
X
X " Monster, created by Rich Skrenta, 1988. Play at your own risk. "
X
XNow the creator of the rooms could add a secret passage, perhaps hidden
Xunderneath some stones in the floor. To do this, first the player would
Xdescribe what the stones looked like, then make a hidden exit to another
Xlocation with a special command which would activate it. Here's what the player
Xwould see after making these changes:
X
X > show details
X Details here that you may inspect:
X stones
X plaque
X > look stones
X The stones are rough and black, and cold to the touch. Although the
X mortar work appears to have been expertly done, it has decayed with time.
X Many stones are cracked, and narrow spaces fracture the carefully laid
X pattern. Some of the stones are quite loose. You might be able to lift
X one of them with some effort.
X > lift
X With great effort, you manage to lift the stone enough to fit inside.
X
X Once below the stone, it falls back into place, sealing out the light
X from above. You squirm down the narrow tunnel . . .
X
XThis example only hints at the details that actually go into the creation of a
Xrealistic game puzzle. To set up a rich game location, a player would have to
Xspecify:
X
X o A textual description of the room, as well as separate descriptions
X for various rooms details (in the example above, the plaque and
X the stones are room details)
X o A description of each of the possible exits from the rooms (there
X might be no description if the exit is hidden)
X o What happens when an object is dropped at the location (for example,
X if a player is swimming and he drops something, the object should
X sink) as well as a message describing what happened to the object
X o For each exit, a set of messages and parameters including:
X - the name of the exit
X - whether the exit requires a special object to pass (for
X example, a door key or some magic object)
X - a message displayed to the player if he can't successfully
X leave through the exit (if he doesn't have the key, for
X instance)
X - an optional message that the player sees when he goes
X through an exit (in the example above, the text "Once below
X the stone, it falls back into place...." is such a message)
X - a message that players inside the room see when someone
X leaves through the exit
X - a message that players inside the room see when another
X player enters the room through the exit
X - miscellaneous other parameters
X
X
X
XTechnical Aspects of Monster:
X-----------------------------
X
XEach player who plays the Monster game runs a separate copy of the game. Each
Xindividual Monster process shares a database containing all of the information
Xabout the simulated world, including:
X
X o Records describing all of the rooms, interconnections between rooms,
X objects, and descriptions for the above
X o The locations of every player and object
X o A special shared file used for interprocess communication
X
XEach of the Monster database files are organized as a linear collection
Xof fixed-length records. Monster uses the following files:
X
X roomfile: file of records containing data on Monster locations
X namfile: file containing names for objects, rooms and people
X descfile: file of text description blocks (10 lines maximum)
X linefile: file of short (one line) descriptions
X intfile: file of various integer parameters
X objfile: file of records containing data on Monster objects
X indexfile: file of bitmaps for the other files; used to mark
X free/inuse records for dynamic allocation
X eventfile: file of records used for interprocess communication
X
X
XRecord Locking:
X---------------
X
XWhen Monster tries to access a record in one of the shared data files, it first
Xmakes a read attempt on the record. If the record is available (no other
XMonster process is reading or writing it) VMS will lock and read the record and
Xreturn successfully. If another process has locked the record, VMS will return
Xan error condition. In this case the Monster process will wait a small random
Xamount of time and attempt to read the record again. Then if the Monster
Xprogram cannot successfully read and lock the record after a certain number of
Xretries, it prints an error message and aborts.
X
XIn initial versions of Monster a count was kept of how many times two processes
Xwould "collide" when both wanted to read one record. The random wait
Xdramatically reduced this hit count.
X
XMonster's response time using this scheme is acceptable when the load on the VAX
Xis not too high. However, it does have some drawbacks. The first is that a
Xdata record being read by a Monster process is locked for a short time, even if
Xthe process has no intention of writing to it. Also, the collide-and-wait
Xapproach is somewhat crude considering VMS has extensive record locking
Xfacilities which are capable not only of allowing multiple-read access to a
Xrecord but also of queueing processes desiring to write-lock a record.
XUnfortunately, the use of these facilities requires special VMS priviliges not
Xavailable to ordinary users.
X
X
XInterprocess Communication:
X---------------------------
X
XMonster processes communicate through a shared file. A communication from one
Xprocess to another is referred to as an event; the shared file for communication
Xis called the event file. Two player processes will only need to communicate
Xif both players are in the same location, since actions in one room won't
Xaffect gamers elsewhere. However, when two or more players are in the
Xsame location, quite a lot of events may happen:
X
X o Notification of entry and exit -- players in the room must see when
X other players come and go
X o Notification of various actions -- such as picking up and dropping
X objects, taking inventory and closely examining things
X o Messages when players talk to each other in the game
X o Primary, target and third-party events for fighting -- the player
X throwing the punch sees one thing, the person being hit another,
X and somone else watching sees a third message.
X
XBecause only player processes in the same Monster game location need to
Xcommunicate, each room has an associated event file record. Each event file
Xrecord contains a circular list of events with a pointer to the most recent
Xevent. When a player enters a new room, either by moving or joining the game,
Xthe Monster process reads the event file record for the room and makes a local
Xcopy of the current event pointer. At periodic intervals, the Monster process
Xwill reread the event file record and compare its local pointer to the one in
Xthe event file. If they are different, other player processes have logged
Xevents to the event record, and the Monster process will pull them off the list,
Xhandle them, and update its own local pointer. When a process needs to log an
Xevent, it write-locks the event file record, writes a new event, and updates the
Xevent file pointer.
X
XThere are over sixty different events that a Monster process can initiate
Xor handle; each event can be interpreted differently according to circumstances.
XFor example, player A may whisper something to player B. Suppose player C is
Xalso in the room. Player A's process logs an event containing the message,
Xthe event type ("whisper") and the target of the whisper (player B) to the
Xevent file record associated with their current location.
X
X > whisper b
X >> Hey b, this is something I whispered to you.
X
XPlayer B's process will receive and handle the event:
X
X A whispers, "Hey b, this is something I whispered to you."
X
XPlayer C's process will also receive and handle the event. Usually C will only
Xsee A and B whispering together:
X
X A is whispering to B.
X
XHowever, there is a small chance that C will overhear the message:
X
X You overhear A whispering to B:
X "Hey b, this is something I whispered to you."
X
XThis method of interprocess communication requires that all Monster processes
Xfrequently read the event file to see if any events have occured. This might
Xseem less efficient than another scheme possibly using VMS mailboxes or shared
Xmemory. Lack of sufficient VMS privileges prevented me from using shared
Xmemory. Mailboxes might be more efficient, especially if used with the Vax's
Xinterrupt system. However, several problems would be present:
X
X o In order to allow any process to communicate with any other,
X full interconnection would be necessary. In addition, since VMS
X mailboxes only transmit data in one direction, n Monster processes
X would require 2n mailboxes. A scheme using mailboxes would quickly
X exhaust process quota limits.
X
X o It is somewhat awkward to set up mailboxes and even more difficult
X to inform other processes of their presence. Once again, I believe
X that special VMS privileges might be necessary to do this.
X
XThe event file scheme of communication has proven flexible and is fast enough
Xwhen the VAX load is not high.
X
X
XMaintaining a Player's Existence in the Database:
X-------------------------------------------------
X
XWhen a user runs Monster, it first checks a playerlog to see if he has ever
Xplayed before. If so, the player is restored to the state he was in when he
Xlast played, just before issuing the QUIT command. In the user is not found in
Xthe playerlog, he is started out at an initial location, somewhat in the center
Xof the world.
X
XTo place a player into a location, Monster scans the room record for a free
X"person" slot to put the player's index into. Once the player is part of
Xthe room record, he will be visible to other players who are also in that
Xroom (providing he hasn't hidden himself), and they will be able to interact
Xwith him.
X
XA dangerous situation occurs when a player process dies or becomes disconnected
Xfor some reason. In this case, the room record shows that a certain player is
Xin a location, but in fact there is no controlling Monster process for that
Xplayer. There will be no process to handle events directed at that player.
XThis is a bad situation because they player is not obviously "dead" to the
Xother Monster programs, as interprocess communication only involves sending
Xan event, and does not provide for receipt acknowledgement.
X
XThese "zombie" players were a serious nuisance in an early version of Monster.
XThe Monster world appeared to be full of players, when in fact they were just
Xghosts left from players typing the VAX interrupt character or becoming
Xdisconnected from modems (Monster now inhibits the interrupt character to help
Xprevent the casual creation of zombies).
X
XThere are two cases where a zombie game character may be detected: when
Xanother player suspects that a game character is not being controlled by a real
Xuser (either from a lack of response from the game character or by checking
Xthe VAX user list); or when the player who created the zombie character attempts
Xto play Monster again (only one player per account is allow to play Monster
Xat a time, so if a player tries to enter Monster and also appears to be
Xcurrently playing the game, either 1) two players on one account are trying
Xto play Monster at the same time, or 2) the player character that appears
Xto be currently playing Monster is really a zombie).
X
XTo handle the first case, when one player suspects another of being a zombie,
Xthe player can issue the PING command. PING sends repeated events directed at
Xthe suspected zombie, with short pauses between the sends. If PING does not
Xreceive a response within a certain amount of time (currently about three
Xseconds) it attempts to smoothly return the zombie character to the "inactive"
X(not playing) state. This involves taking every object the player character was
Xholding and dropping them on the ground, updating the "time of last play" record
Xand modifying the playerlog to show that the player is not currently playing.
X
XIn the second case, when no other player has PINGed away the zombie and the
Xoriginal player (the one responsible for the zombie character) attempts to
Xreenter Monster, Monster will inform him:
X
X There may have been some trouble the last time you played.
X Trying to fix it . . .
X
XAt this point, Monster itself attempts to PING the player's character. If
Xtwo people on the same account are trying to play Monster at the same time
Xthe PING will be answered and Monster will not let the second player into
Xthe game. Otherwise, the player will enter Monster normally after a short
Xpause:
X
X All should be fixed now.
X
X Welcome back, Faust. Your last play was on 13-MAY-1988 at 8:31pm.
X
XEven with this solution, there are still situations where trouble can arise with
Xzombie characters. For example, suppose a player is on a modem playing Monster
Xand becomes disconnected. Another player PINGs away the zombie character. The
Xdialup player calls up the VAX again, and reconnects to his disconnected
Xprocess. Now his Monster process still thinks the player character is alive in
Xthe room (it has no knowledge of the disconnect) but the database shows that the
Xplayer is inactive.
X
XIf only a few events have been logged in the associated event file record, the
Xreconnnected Monster process will notice the fatal PING to itself (lingering in
Xthe event file record) and will abort. However, if many events have occured
Xwhile the process was disconnected, it will not be aware of the change to the
Xdatabase. This will leave the database in an inconsistent state until the player
XQUITs the game. Fortunately, when the player quits the database will be fixed.
X
XSince this problem will eventually correct itself (when the player quits) and
Xbecause checking for this very rare situation would slow response time
Xconsiderably (Monster would have to verify its existence in the database
Xcontinuously) I decided to ignore this exception.
X
XI had originally hoped for a smoother solution to the "disconnected player"
Xproblem. In a system where a central process drives all of the player
Xterminals, this is possible. However, because control in Monster is shared
Xbetween many identical processes, the problem is much harder.
X
X
XReflections on the Project:
X---------------------------
X
XHow the "Installed Base" Stagnated New Development:
X---------------------------------------------------
X
XDuring the development of Monster I would periodically change the records
Xthat held the Monster database. Once changed in the program, this would render
Xthe existing database unusable, as the new program could no longer open the old
Xfiles. Thus, I would have to destroy the existing world if I wanted to add
Xany fields to the records that comprised the shared files.
X
XIn order to provide a stable environment for players who did not want to see
Xtheir hard work making Monster rooms destroyed every time I made a change to the
Xstructure of the database, I installed a version with a separate set of data
Xfiles than the copy I worked on for development. Players created rooms and
Xtested the installed version, while I continued to develop my own copy.
XEventually, the world in the first release of Monster had about 60 rooms.
X
XAbout a month after installing the original Monster I replaced it with the new,
Xgreatly enhanced version I had been working on (the executable was about 4 times
Xthe size of the original) and started over with an empty world. I had provided
Xexpansion fields in the data records for the new release of Monster so I could
Xcontinue to develop the game without having to work on my own private copy.
X
XThe second release of Monster was very popular. I continued to add features to
Xthe program, and made use of the expansion fields when possible. However, I
Xfelt more and more constrained by the limits of my database. I needed to
Xchange more about the data records than the expansion fields would allow.
XI wanted to erase the world a second time; however, players had put much work
Xinto creating over 100 rooms, and became quite angry when I suggested that I
Xmight throw away the current world to make a new one.
X
XSome suggested that I write a program which would convert the existing database
Xto a new format. However, I felt that the work to do this would be much greater
Xthan the work I was planning to spend to make enhancements to the game. Also,
Xthe style of my changes during development called for small frequent changes. I
Xabandoned the idea of trying to write a translation program, and instead
Xattempted to work around the limitations of the database structure. Eventually,
Xhowever, my work stagnated, and new development on Monster ceased.
X
XI never anticipated the work of my playtesters holding back further development.
XIf I were to rewrite Monster, I would use a more flexible storage approach, one
Xprobably involving a form of dynamic typing which would let me add new
Xparameters to the database without actually changing the record structure or
Xsize.
X
X
X
X
X
X
X
X
X
X
X
X
X
XAppendix A: Specifyable Parameters for Monster Locations and Objects
X---------------------------------------------------------------------
X
XRooms:
X------
X
Xnicename: the name of the room
Xnameprint: formatting control for the nicename
Xprimary,
Xsecondary: textual descriptions of the room
Xwhich: control for which room description prints:
X 0 - only print primary room description
X 1 - only print secondary room description
X 2 - print both primary and secondary room descriptions
X 3 - print primary description; then print secondary
X description if the player is holding the specified
X magic object for the room
Xmagicobj: the magic object for the room
Xtrapto,
Xtrapchance: allows a player to semi-randomly be thrust through an exit
Xrndmsg: eerie message that randomly prints
Xdetails: details that may be looked at in the room
X
X
XExits:
X------
X
Xtoloc: where the exit goes
Xkind: type of the exit:
X 0 - no exit; always fails
X 1 - open exit; always succeeds
X 2 - exits succeeds if player has key object
X 3 - exit fails if player has key object
X 4 - exit randomly fails
X 5 - potential exit; doesn't exist yet
X 7 - exit cycles between being open and closed
Xexitdesc: short textual descrption of the exit
Xfail: description if player fails to go through exit
Xsuccess: description if player succeeds to go through exit
Xgoin: what other players see when someone goes into the exit
Xcomeout: what others see when a player comes out of the exit
Xhidden: what the player sees when he finds the exit (if it's hidden)
Xobjreq: key object for exit
Xalias: name of the exit
Xreqverb: requires the player to use the alias only (without "go") to
X use the exit
Xreqalias: requires the player to know the exit alias; can't use the
X compass point
Xautolook: surpresses the automatic "look" done upon entering the
X new room
X
XObjects:
X--------
X
Xoname: the name of the object
Xkind: type parameter for the object
Xlinedesc: short description of the object (the "on the floor" description)
Xexamine: close inspection description for the object
Xnumexist: how many copies of the object exist
Xsticky: inhibits players from being able to pick up the object
Xgetobjreq: requires the player to be holding another object before
X he can pick up this one
Xgetfail: message printed if a player fails to get an object
Xgetsuccess: message printed when an object is successfully picked up
Xuseobjreq: object player must be holding to use this object
Xuselocreq: place player must be in to use this object
Xusefail: message printed if player fails in use of the object
Xusesuccess: message printed if object is successfully used
Xusealias: alias word to "use"
Xreqalias: require player to know the alias to use the object
Xarticle: whether "a", "an", "some", "the" should precede the object name
X
X
XAppendix B: Monster Command List
X---------------------------------
X
XAccept/Refuse # Allow others to Link an exit here at direction # | Undo Accept
XBrief Toggle printing of room descriptions
XCustomize [#] Customize this room | Customize exit # | Customize object #
XDescribe [#] Describe this room | Describe a feature (#) in detail
XDestroy # Destroy an instance of object # (you must be holding it)
XDuplicate # Make a duplicate of an already-created object.
XForm/Zap # Form a new room with name # | Destroy room named #
XGet/Drop # Get/Drop an object
X#,Go # Go towards # (Some: N/North S/South E/East W/West U/Up D/Down)
XHealth Show how healthy you are
XHide/Reveal [#] Hide/Reveal yoursef | Hide object (#)
XI,Inventory See what you or someone else is carrying
XLink/Unlink # Link/Unlink this room to/from another via exit at direction #
XLook,L [#] Look here | Look at something or someone (#) closely
XMake # Make a new object named #
XName # Set your game name to #
XPlayers List people who have played Monster
XPunch # Punch person #
XQuit Leave the game
XRelink Move an exit
XRooms Show information about rooms you have made
XSay, ' (quote) Say line of text following command to others in the room
XSearch Look around the room for anything hidden
XSelf # Edit a description of yourself | View #'s self-description
XShow # Show option # (type SHOW ? for a list)
XUnmake # Remove the form definition of object #
XUse # Use object #
XWear # Wear the object #
XWield # Wield the weapon #; you must be holding it first
XWhisper # Whisper something (prompted for) to person #
XWho List of people playing Monster now
XWhois # What is a player's username
X?,Help This list
X. (period) Repeat last command
X
X
XAppendix C: Customization Subsystem Menus
X------------------------------------------
X
XRoom Customization:
X-------------------
X
XCustom> ?
X
XD Alter the way the room description prints
XN Change how the room Name prints
XP Edit the Primary room description [the default one] (same as desc)
XS Edit the Secondary room description
XX Define a mystery message
X
XG Set the location that a dropped object really Goes to
XO Edit the object drop description (for drop effects)
XB Edit the target room (G) "bounced in" description
X
XT Set the direction that the Trapdoor goes to
XC Set the Chance of the trapdoor functioning
X
XM Define the magic object for this room
XR Rename the room
X
XV View settings on this room
XE Exit (same as quit)
XQ Quit (same as exit)
X? This list
X
X
XExit customization:
X-------------------
X
XCustom [direction]> ?
X
XA Set an Alias for the exit
XC Conceal an exit
XD Edit the exit's main Description
XE EXIT custom (saves changes)
XF Edit the exit's failure line
XI Edit the line that others see when a player goes Into an exit
XK Set the object that is the Key to this exit
XL Automatically look [default] / don't look on exit
XO Edit the line that people see when a player comes Out of an exit
XQ QUIT Custom (saves changes)
XR Require/don't require alias for exit; ignore direction
XS Edit the success line
XT Alter Type of exit (passage, door, etc)
XV View exit information
XX Require/don't require exit name to be a verb
X? This list
X
X
XObject Customization:
X---------------------
X
XCustom object> ?
X
XA "a", "an", "some", etc.
XD Edit a Description of the object
XF Edit the GET failure message
XG Set the object required to pick up this object
X1 Set the get success message
XK Set the Kind of object this is
XL Edit the label description ("There is a ... here.")
XP Program the object based on the kind it is
XR Rename the object
XS Toggle the sticky bit
X
XU Set the object required for use
X2 Set the place required for use
X3 Edit the use failure description
X4 Edit the use success description
XV View attributes of this object
X
XX Edit the extra description
X5 Edit extra desc #2
XE Exit (same as Quit)
XQ Quit (same as Exit)
X? This list
X
X
XAppendix D: Monster Playerlist as of June 5, 1988
X--------------------------------------------------
X
Xdolpher ! Monster Manager 5-JUN-1988 1:48pm * great baths
Xdasun_c ! Iceman 4-JUN-1988 10:30pm * the transporter room
Xkirsten ! Kirsten 4-JUN-1988 11:20pm * ffoirefirma
Xisakson ! Satan 3-JUN-1988 10:13am * satan's private hell
Xtlb05405 ! Tlb05405 3-JUN-1988 11:59am * east hall
Xnate ! Smaug 3-JUN-1988 7:41pm * platform 1
Xskrenta ! Faust 3-JUN-1988 8:37pm * tower room
Xgary ! Monster Vice Manager 2-JUN-1988 9:50pm * inner office
Xlaura ! Laura 2-JUN-1988 10:36pm * turbolift chamber
Xjames ! James 1-JUN-1988 7:54pm * chuk's elevator
Xchuk ! SoulStorm 1-JUN-1988 9:57pm * east hall
Xpeter_t ! Peter_t 31-MAY-1988 8:33pm * pine forest
Xcary ! Cary 31-MAY-1988 11:20pm * maelstrom
Xfrancisco ! Prof. Anthrax 30-MAY-1988 3:54pm * waterbed
Xsundeep ! Sundeep 29-MAY-1988 2:21pm * mta office
Xbkc04916 ! Cheekster 28-MAY-1988 10:51am * the 'ell stop
Xktl04905 ! Corwin 28-MAY-1988 11:44am * west hall
Xperry ! Bufu Master!!! 28-MAY-1988 8:40pm * pinkie's place
Xmaryahn ! pinkie 27-MAY-1988 12:39pm * the sewer tunnel
Ximmell ! hurricane eye 26-MAY-1988 2:25am * post office 3
Xrobert ! Hungry Wolf 26-MAY-1988 2:26am * roll6
Xlinda ! linlop 26-MAY-1988 10:47am * terminal room
Xjeff ! Pringle 25-MAY-1988 7:12pm * ic
Xmic00229 ! Mic00229 22-MAY-1988 8:33pm * great hall
Xjeffoire ! Ffoire Zen Salad 20-MAY-1988 1:41pm * bar
Xschroder ! Schroder 19-MAY-1988 10:09am * burrow
Xlunde ! Purple Peril 18-MAY-1988 12:55pm * cloud 9.5
Xpib ! Great Pib 17-MAY-1988 11:51pm * great pib's lair
Xahrens ! it 15-MAY-1988 4:56pm * landing
Xmborsetti ! Mborsetti 12-MAY-1988 10:20pm * sewer crossroads
Xbrian ! Mr. Raven 11-MAY-1988 11:24am * a damp and dark hole
Xwen05563 ! Gary 11-MAY-1988 9:00pm * great hall
Xjimbo ! Jimbo 8-MAY-1988 10:02pm * great hall
Xlentz ! Lentz 7-MAY-1988 8:24am * front of isp noyes
Xmiller ! Mungus 5-MAY-1988 1:14pm * starbase
Xotto ! Otto 4-MAY-1988 8:45pm * heidi's nightmare
Xchris ! House Manager 3-MAY-1988 3:54am * home base
Xliao ! Liao 30-APR-1988 1:21pm * white house
Xchaz ! Chaz 29-APR-1988 4:05pm * post office 2
Xjmc ! Run JMC 29-APR-1988 4:37pm * isp heaven
Xrod ! Rod 29-APR-1988 9:00pm * great hall
Xchoi ! Choi 28-APR-1988 8:25pm * east hall
Xbo ! God 26-APR-1988 1:58pm * great hall
Xjonathan ! Jonathan 26-APR-1988 5:26pm * eye of the hurricane
Xswift ! Swift 26-APR-1988 8:53pm * post office hall
Xric05787 ! Deadhead 26-APR-1988 10:57pm * nightmarish room
Xmccoy ! The Scribe 26-APR-1988 11:41pm * scribe home
Xg_wenslow ! Gary II 24-APR-1988 11:58pm * east hall
Xkri04333 ! Kri04333 18-APR-1988 12:11am * great hall
Xdissett ! Kronos 18-APR-1988 10:13pm * kronos' room
Xwantz ! Wantz 17-APR-1988 2:51pm * great hall
Xcheezer ! Cheezer 16-APR-1988 7:55pm * the pine forest
Xahr04465 ! Ivo 16-APR-1988 7:56pm * sewer transport
Xjoey ! geek 15-APR-1988 8:03pm * forest crossroads
Xwargaski ! Wargaski 14-APR-1988 4:01pm * toxicated
Xeric ! Eric 13-APR-1988 3:51pm * the hall of chuk
Xrwc00220 ! Rwc00220 12-APR-1988 1:32pm * great hall
Xkstull ! Kstull 12-APR-1988 5:01pm * post office 3
Xtim ! Tim 11-APR-1988 8:26pm * great hall
Xsean ! Sean 10-APR-1988 4:27pm * great hall
Xsam ! Sam 10-APR-1988 12:54pm * great hall
Xdean ! Artagel 9-APR-1988 8:21am * turbolift chamber
Xsupercom ! Cursor 8-APR-1988 12:00am * forest paths
Xanne ! Anne 7-APR-1988 6:55pm * great hall
Xlisa ! Lisa 7-APR-1988 6:56pm * great hall
Xmouse ! Mouse 3-APR-1988 11:26pm * west hall
Xmca04477 ! Mca04477 2-APR-1988 8:56pm * burrow
Xsajiv ! Sajiv 30-MAR-1988 6:06pm * great hall
Xchad ! Chad 30-MAR-1988 6:37pm * chuk's elevator
Xjennifer ! Jennifer 30-MAR-1988 7:22pm * east hall
Xlasonia ! Lasonia 29-MAR-1988 11:22am * west hall
Xbrian_t ! Brian_t 29-MAR-1988 11:59am * maelstrom
Xmikk ! Random 29-MAR-1988 11:19pm * ledge
Xtopher ! Topher 28-MAR-1988 1:19pm * great hall
Xspectre ! Ghost in the machine 28-MAR-1988 11:43pm * ghost's mailroom
Xdave ! Dave 18-MAR-1988 10:14am * post office hall
Xpenguins ! Penguins Amok 18-MAR-1988 11:52pm * chuk's elevator
Xlawson ! Space Cowboy 18-MAR-1988 12:23pm * great hall
Xheidi ! Heidi 17-MAR-1988 1:11am * digital purgatory
Xbueno ! Bueno 17-MAR-1988 7:49pm * post office hall
Xdan ! Grando 16-MAR-1988 8:18am * eye of the hurricane
Xeric_yue ! Samsok 16-MAR-1988 9:29pm * the yueguy's joint
Xcra01453 ! Cra01453 15-MAR-1988 3:01am * great hall
Xadam ! Adam 14-MAR-1988 6:45pm * round room
Xwas04906 ! Milt 14-MAR-1988 9:48pm * great hall
Xwatson ! Watson 14-MAR-1988 10:22pm * chuk's elevator
Xbrianw ! Brianw 12-MAR-1988 * ffoirefirma
Xmike ! Mike 12-MAR-1988 * toxicated
Xpredator ! Predator 12-MAR-1988 * east hall
Xdaniel ! Daniel 11-MAR-1988 * west hall
Xdav08345 ! Dav08345 11-MAR-1988 * great hall
Xvlahos ! otis 11-MAR-1988 * post office
Xginter ! Ginter 10-MAR-1988 * living room
Xrob09549 ! Rob09549 9-MAR-1988 * great hall
Xdora ! Dora 8-MAR-1988 * toxicated
Xkim ! kim 8-MAR-1988 * post office 2
Xmichael ! Prabdib 7-MAR-1988 * tunnel of love
Xbradley ! Bradley 29-FEB-1988 * eye of the hurricane
Xjohn ! Raunchmeister 29-FEB-1988 * underhall
Xmelvin ! Killer Melvin 27-FEB-1988 * chuk's elevator
Xcliff ! Cliff 26-FEB-1988 * east hall
X
X
XAppendix E: An Actual Monster Game Log
X---------------------------------------
X
X$ monster
XWelcome to Monster! Hit return to start:
X
XWelcome back, Faust. Your last play was on 1-JUN-1988 at 10:47pm.
X
XYou're in Great Hall
XYou're in the middle of a vast hall stretching out of sight to the
Xeast and west. Strange shadows play across the high vaulted ceiling.
XThe floor is set with smooth rectangular stones. The walls feel slightly
Xcold to the touch, and damp with condensation. A copper plaque, slightly
Xgreen with age, is set into one wall.
X
XMonster Manager is here.
X>
XMonster Manager vanishes in a brilliant burst of multicolored light.
X> l
XYou're in Great Hall
XYou're in the middle of a vast hall stretching out of sight to the
Xeast and west. Strange shadows play across the high vaulted ceiling.
XThe floor is set with smooth rectangular stones. The walls feel slightly
Xcold to the touch, and damp with condensation. A copper plaque, slightly
Xgreen with age, is set into one wall.
X
X>
XMonster Manager appears in a brilliant burst of multicolored light.
X> who
X Monster Status
X 1-JUN-1988 10:48pm
X
XUsername Game Name Where
Xdolpher Monster Manager great hall
Xskrenta Faust great hall
X> look plaque
X
XThe plaque looks very old and corroded. However, you can still make out
Xthe writing:
X
X " Monster, created by Rich Skrenta, 1988. Play at your own risk. "
X
X> show details
XDetails here that you may inspect:
X stones
X plaque
X> look stones
XThe stones are rough and black, and cold to the touch. Although the
Xmortar work appears to have been expertly done, it has decayed with time.
XMany stones are cracked, and narrow spaces fracture the carefully laid
Xpattern. Some of the stones are quite loose. You might be able to lift
Xone of them with some effort.
X>
XMonster Manager is looking at the stones.
X>
XMonster Manager is looking at the plaque.
X>
XMonster Manager says, "Hey Faust, let's go down to the Underhall."
X>
XMonster Manager manages to lift a stone in the floor and descends.
X> lift
XWith great effort, you manage to lift the stone enought to fit inside.
X
XOnce below the stone, it falls back into place, sealing out the light
Xfrom above. You squirm down the narrow tunnel . . .
X
XYou're in UnderHall
XThis is a cramped, humid room beneath the Great Hall. The walls are
Xdripping with water condensed from mist rising from the baths. Some
Xof the mist follows the ceiling and dissappears up the narrow tunnel.
X
XStairs lead north down to the Great Baths.
XA neon sign flashes "Great PIB's Lair" over a door to the South.
XYou could manage a crawl through a narrow tunnel leading upwards.
X
XMonster Manager is here.
X> look Monster Manager
XMonster Manager is the stereotype of a computer hacker. He is wearing
Xa flannel shirt with several snickers bars in the breast pocket. On
Xhis belt is an ASCII-HEX conversion chart. On his feet are a scuffed
Xpair of hiking boots so he can tackle those dangerous mountains that
Xcrop up in operations. Also dangling from his belt is a battered box
Xwith many buttons on the front and wires with sockets on the ends protruding
Xfrom the back. The switches seem to have been placed haphazardly, but
Xthe object is unmistakably one of great power nonetheless.
X
XMonster Manager is in perfect health.
XMonster Manager is empty handed.
X>
XMonster Manager is looking at you.
X>
XMonster Manager swings at you but misses.
X>
XYou duck in time to avoid Monster Manager's punch.
X>
XYou see stars as Monster Manager bashes you in the face.
X>
XYou parry Monster Manager's attack.
X> punch Monster Manager
XYou can't punch the Monster Manager.
X> l
XYou're in UnderHall
XThis is a cramped, humid room beneath the Great Hall. The walls are
Xdripping with water condensed from mist rising from the baths. Some
Xof the mist follows the ceiling and dissappears up the narrow tunnel.
X
XStairs lead north down to the Great Baths.
XA neon sign flashes "Great PIB's Lair" over a door to the South.
XYou could manage a crawl through a narrow tunnel leading upwards.
X
XMonster Manager is here.
X> n
XYou're in Great Baths
XThese are the luxurious Great Baths where tired adventurers may come
Xto relax and try to regain their health and youth from the mineral waters.
XFrom where you stand at the entrance, you can see below you the bubbling
Xsoapy pools of water churning violently in tile-lined pits. The pools
Xare fed by hot springs from deep in the rock beneath you. Steam and
Xhuge soapy bubbles rise out of the hot pools of water. The bubbles
Xdance through the air, climbing higher and higher, until they either
Xburst on the sharp walls of the cave or are lost in the mist above you.
X
XShallow tiled steps, wet and slick from the hot soapy waters of the
Xsprings, lead down to the pools.
X
XRough stone stairs lead up to the south.
X
X>
XIn an explosion of orange smoke Monster Vice Manager poofs into the room.
X>
XMonster Manager has come down the stairs from the Underhall.
X>
XMonster Vice Manager produces a "who" list and reads it.
X> system
XSystem> v
X
X used free total
XBlock file 1008 92 1100
XLine file 1501 109 1610
XRoom file 283 27 310
XObject file 139 41 180
XInteger file 6 0 6
X
XSystem>
XMonster Vice Manager is in system maintenance mode.
XSystem> exit
X>
XMonster Vice Manager is no longer in system maintenance mode.
X> 'Hey Gary
X>
XMonster Vice Manager says, "Hi, Faust."
X> look Monster Vice Manager
XThe Monster Vice Manager is dressed in a conservative three piece
Xsuit. The stern expression on his face is just a facade, he really
Xis a warm and sensitive guy underneath. He is willing to answer
Xany questions and help out with any problems. He can best be
Xdescribed by the phrase:
X
X "Do what thou wilt, so mete it be."
X
XHe returns your gaze with a hint of understanding and amusement.
X
XMonster Vice Manager is in perfect health.
XMonster Vice Manager is empty handed.
X>
XMonster Vice Manager is looking at you.
X> punch Monster Vice Manager
XYou swing wild and miss.
X> .
XMonster Vice Manager ducks and avoids your punch.
X> .
XA quick punch, but it only grazes Monster Vice Manager.
X>
XYou only feel the breeze as Monster Vice Manager swings wildly.
X> .
XYou swing wild and miss.
X>
XYou see stars as Monster Vice Manager bashes you in the face.
X>
XYou only feel the breeze as Monster Vice Manager swings wildly.
X> .
XYou deliver a quick jab to Monster Vice Manager's jaw.
X>
XMonster Vice Manager's swing misses you by a yard.
X> .
XYour roundhouse blow sends Monster Vice Manager reeling.
X>
XYou double over after Monster Vice Manager lands a mean jab to your stomach!
XMonster Vice Manager looks a little dazed.
X>
XMonster Vice Manager vanishes from the room in a cloud of orange smoke.
X> who
X Monster Status
X 1-JUN-1988 10:56pm
X
XUsername Game Name Where
Xdolpher Monster Manager great baths
Xskrenta Faust great baths
Xgary Monster Vice Manager inner office
X> poof inner office
X
XThis rooms is a conservatively decorated office. A large
Xdesk dominates the room. Several pictures hang on the walls
Xand a silver service is on a stand off to the left. Two plush
Xchairs beckon for you to sit down.
X
XThere are stairs leading down.
X
XMonster Vice Manager is here.
XMonster Vice Manager looks a little dazed.
X> sh det
XDetails here that you may inspect:
X bin
X plaque
X pictures
X stand
X> look bin
X
XThe bin has a sign on it saying, "Leave mail for the Monster
XVice Manager here. Thank you."
X
X> look plaque
X
XThe plaque reads:
X
X Gary Wenslow, Monster Vice Manager
X
X> look pictures
X
XThese are very nice pictures of landscapes. They look expensive.
X
X> look stand
X
XThe silver service on this stand is of fine workmanship.
XThere are also crystal goblets and flasks containing very
Xfine wine, brandy, and whiskey.
X
X> l
X
XThis rooms is a conservatively decorated office. A large
Xdesk dominates the room. Several pictures hang on the walls
Xand a silver service is on a stand off to the left. Two plush
Xchairs beckon for you to sit down.
X
XThere are stairs leading down.
X
XMonster Vice Manager is here.
XMonster Vice Manager looks a little dazed.
X> rooms gary
Xgary:
X tunnel of love more tunnel of love end of tunnel
X hot dog stand picnic window
X mvm office inner office hall1
X hall2 hall3 hall4
X hall5 hall6 hall7
X hall8 hall9 concession
X roll1 roll2 roll3
X roll4 roll5 roll6
X roll7 roll8 roll9
X roll10 worker's ledge railing
X rope mvm mail room
X
X> rooms dolpher
Xdolpher:
X void pit of fire underhall
X great baths pools in the pool
X in the bubble higher bubble highest bubble
X ledge tower ledge circular staircase
X behind house kitchen living room
X bottom of stairs manager's mailbox tower room
X on the scaffolding round room mountain pass
X roof of tower west passageway castle entrance
X center hall outside the gate east passageway
X narrow passage
X
X> poof behind house
XYou're at Behind House
XThe back door of the house is boarded up, but the windows have not been
Xblocked. One window at ground level leads into what appears to be the
Xkitchen. All of the other windows are too far above the ground for you
Xto reach.
X
XA path leads west to the front of the house.
X
X> form Study
X> poof studty
XThere is no room named studty.
X> poof study
XYou're in Study
X
XA note on the east wall says "Your exit here."
X
X> refuse east
XExits east will be refused.
X> l
XYou're in Study
X
X> desc
X[ Editing the primary room description ]
XEnter text. Terminate with ** at the beginning of a line.
XYou have 10 lines maximum.
X
X 1: This is a luxurious study walled with fine oak paneling. A window
X 2: looks out of the east wall. It is surrounded by purple curtains.
X 3: There is a small sign on the wall.
X 4: **
X
X* e
X> l
XYou're in Study
XThis is a luxurious study walled with fine oak paneling. A window
Xlooks out of the east wall. It is surrounded by purple curtains.
XThere is a small sign on the wall.
X
X> desc sign
X[ Editing detail "sign" of this room ]
XEnter text. Terminate with ** at the beginning of a line.
XYou have 10 lines maximum.
X
X 1: The note seems to have been hurriedly scrawled. It reads:
X 2:
X 3: " This room for demonstration purposes only! "
X 4:
X 5: **
X
X* ?
X
XA Append text to end
XC Check text for correct length with parameter substitution (#)
XD # Delete line #
XE Exit & save changes
XI # Insert lines before line #
XP Print out description
XQ Quit: THROWS AWAY CHANGES
XR # Replace text of line #
XZ Zap all text
X@ Throw away text & exit with the default description
X? This list
X
X
X* p
X
X 1: The note seems to have been hurriedly scrawled. It reads:
X 2:
X 3: " This room for demonstration purposes only! "
X 4:
X
X* e
X> sh det
XDetails here that you may isspect:
X sign
X> look sign
XThe note seems to have been hurriedly scrawled. It reads:
X
X " This room for demonstration purposes only! "
X
X> l
XYou're in Study
XThis is a luxurious study walled with fine oak paneling. A window
Xlooks out of the east wall. It is surrounded by purple curtains.
XThere is a small sign on the wall.
X
X> desc sign
X[ Editing detail "sign" of this room ]
X
X* i 1
X1:
X2: **
X
X* p
X
X 1:
X 2: The note seems to have been hurriedly scrawled. It reads:
X 3:
X 4: " This room for demonstration purposes only! "
X 5:
X
X* e
X> look sign
X
XThe note seems to have been hurriedly scrawled. It reads:
X
X " This room for demonstration purposes only! "
X
X> l
XYou're in Study
XThis is a luxurious study walled with fine oak paneling. A window
Xlooks out of the east wall. It is surrounded by purple curtains.
XThere is a small sign on the wall.
X
X> form Behind the Curtains
X> link west
XHit return alone at any prompt to terminate exit creation.
X
XRoom to link to? behind the curtains
XExit comes out in target room
Xfrom what direction? east
XExit created. Use CUSTOM west to customize your exit.
X> l
XYou're in Study
XThis is a luxurious study walled with fine oak paneling. A window
Xlooks out of the east wall. It is surrounded by purple curtains.
XThere is a small sign on the wall.
X
XThere is a passage leading west.
X
X> custom west
XCustomizing west exit
XIf you would rather be customizing this room, type CUSTOM with no arguments
XIf you would rather be customizing an object, type CUSTOM <object name>
X
XType ** for any line to leave it unchanged.
XType return for any line to select the default.
X
XCustom west> ?
X
XA Set an Alias for the exit
XC Conceal an exit
XD Edit the exit's main Description
XE EXIT custom (saves changes)
XF Edit the exit's failure line
XI Edit the line that others see when a player goes Into an exit
XK Set the object that is the Key to this exit
XL Automatically look [default] / don't look on exit
XO Edit the line that people see when a player comes Out of an exit
XQ QUIT Custom (saves changes)
XR Require/don't require alias for exit; ignore direction
XS Edit the success line
XT Alter Type of exit (passage, door, etc)
XV View exit information
XX Require/don't require exit name to be a verb
X? This list
X
XCustom west> a
XAlternate name for the exit? curtains
XCustom west> r
XThe alias for this exit will be required to reference it.
XCustom west> d
XEnter a one line description of the exit.
X
XType ** to leave line unchanged, * to make [no line]
X*
XCustom west> exit
X> l
XYou're in Study
XThis is a luxurious study walled with fine oak paneling. A window
Xlooks out of the east wall. It is surrounded by purple curtains.
XThere is a small sign on the wall.
X
X> go curtains
XYou're in Behind the Curtains
X
XThere is a passage leading east.
XA note on the floor says "Your exit here."
X
X> e
XYou're in Study
XThis is a luxurious study walled with fine oak paneling. A window
Xlooks out of the east wall. It is surrounded by purple curtains.
XThere is a small sign on the wall.
X
X> desc window
X[ Editing detail "window" of this room ]
XEnter text. Terminate with ** at the beginning of a line.
XYou have 10 lines maximum.
X
X 1 You see a green lawn shaded by tall trees and bordered with sculptured
X 2: shrubbery. A small rabbit is nibbling at some grass. The entire
X 3: scene has an artificial look, as if it were some cartoon rendering.
X 4: **
X
X* exit
X> sh det
XDetails here that you may inspect:
X sign
X window
X> look window
XYou see a green lawn shaded by tall trees and bordered with sculptured
Xshrubbery. A small rabbit is nibbling at some grass. The entire
Xscene has an artificial look, as if it were some cartoon rendering.
X> quit
XYou vanish in a brilliant burst of multicolored light.
X$
END_OF_FILE
if test 48710 -ne `wc -c <'mon1.doc'`; then
echo shar: \"'mon1.doc'\" unpacked with wrong size!
fi
# end of 'mon1.doc'
fi
if test -f 'mon5.pas' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'mon5.pas'\"
else
echo shar: Extracting \"'mon5.pas'\" \(4189 characters\)
sed "s/^X//" >'mon5.pas' <<'END_OF_FILE'
X
X
X{ Notes to other who may inherit this program:
X
X Change all occurances in this file of dolpher to the account which
X you will use for maintenance of this program. That account will
X have special administrative powers.
X
X This program uses several data files. These files are in a directory
X specified by the variable root in procedure init. In my implementation,
X I have a default ACL on the directory allowing everyone READ and WRITE
X access to the files created in that directory. Whoever plays the game
X must be able to write to these data files.
X
X
XWritten by Rich Skrenta, 1988.
X
X
X
X
XBrief program organization overview:
X------------------------------------
X
XMonster's Shared Files:
X
XMonster uses several shared files for communication.
XEach shared file is accessed within Monster by a group of 3 procedures of the
Xform: getX(), freeX and putX.
X
XgetX takes an integer and attempts to get and lock that record from the
Xappropriate data file. If it encounters a "collision", it waits a short
Xrandom amount of time and tries again. After maxerr collisions it prints
Xa deadlock warning message.
X
XIf data is to be read but not changed, a freeX should immediately follow
Xthe getX so that other Monster processes can access the record. If the
Xrecord is to be written then a putX must eventually follow the getX.
X
X
XMonster's Record Allocation:
X
XMonster dynamically allocates some resources such as description blocks and
Xlines and player log entries. The allocation is from a bitmap. I chose a
Xbitmap over a linked list to make the multiuser access to the database
Xmore stable. A particular resource (such as log entries) will have a
Xparticular bitmap in the file INDEXFILE. A getindex(I_LOG) will retrieve
Xthe bitmap for it.
X
XActually allocation and deallocation is done through the group of functions
Xalloc_X and delete_X. If alloc_X returns true, the allocation was successful,
Xand the integer parameter is the number of the block allocated.
X
XThe top available record in each group is stored in indexrec. To increase
Xthe top, the new records must be initially written so that garbage data is
Xnot in them and the getX routines can locate them. This can be done with
Xthe addX(n) group of routines, which add capacity to resources.
X
X
X
XParsing in Monster:
X
XThe main parser(s) use a first-unique-characters method to lookup command
Xkeywords and parameters. The format of these functions is lookup_x(n,s).
XIf it returns true, it successfully found an unambiguous match to string s.
XThe integer index will be in n.
X
XIf an unambiguating match is needed (for example, if someone makes a new room,
Xthe match to see if the name exists shouldn't disambiguate), the group of
Xroutines exact_X(n,s) are called. They function similarly to lookup_x(n,s).
X
XThe customization subsystems and the editor use very primitive parsers
Xwhich only use first character match and integer arguments.
X
X
X
XAsynchronous events in Monster:
X
XWhen someone comes into a room, the other players in that room need
Xto be notified, even if they might be typing a command on their terminal.
X
XThis is done in a two part process (producer/consumer problem):
X
XWhen an event takes place, the player's Monster that caused the event
Xmakes a call to log_event. Parameters include the slot of the sender (which
Xperson in the room caused the event), the actual event that occurred
X(E_something) and parameters. Log_event works by sticking the event
Xinto a circular buffer associated with the room (room may be specified on
Xlog_event).
X
XNote: there is not an event record for every room; instead, the event
X record used is ROOM # mod ACTUAL NUMBER of EVENT RECORDS
X
XThe other half of the process occurrs when a player's Monster calls
Xgrab_line to get some input. Grab line looks for keystrokes, and if
Xthere are none, it calls checkevent and then sleeps for a short time
X(.1 - .2 seconds). Checkevent loads the event record associated with this
Xroom and compare's the player's buffer pointer with the record's buffer
Xpointer. If they are different, checkevent bites off events and sends them
Xto handle_event until there are no more events to be processed. Checkevent
Xignores events logged by it's own player.
X
X
X}
END_OF_FILE
if test 4189 -ne `wc -c <'mon5.pas'`; then
echo shar: \"'mon5.pas'\" unpacked with wrong size!
fi
# end of 'mon5.pas'
fi
echo shar: End of archive 1 \(of 6\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 5 6 ; do
if test ! -f ark${I}isdone ; then
MISSING="${MISSING} ${I}"
fi
done
if test "${MISSING}" = "" ; then
echo You have unpacked all 6 archives.
rm -f ark[1-9]isdone
./fixup.sh
else
echo You still need to unpack the following archives:
echo " " ${MISSING}
fi
## End of shell archive.
exit 0

Reply all
Reply to author
Forward
0 new messages