[comp.sources.games] v11i005: tinymud2 - user-extendible multi-user adventure

billr@saab.CNA.TEK.COM (Bill Randle) (07/30/90)

Submitted-by: James Aspnes <asp@cs.cmu.edu>
Posting-number: Volume 11, Issue 5
Archive-name: tinymud2/Part01
Supersedes: tinymud: Volume 8, Issue 80-83

	[Several files had very long lines that I know from experience
	 would have been truncated or had a '\n' inserted, so the
	 files as unpacked have addition newlines inserted in them.
	 The joinspl.sh script restores these files to their original
	 condition. Three mud client programs will be posted following
	 this package as "tinyclients". They include a client using
	 emacs, one using curses for Unix and one for vms. One can, of
	 course use telnet in a pinch. Also, there si a newsgroup
	 "alt.mud" for mud related topics.
	 This posting also includes the doc files, which are not
	 included with the original ftpable source files.    -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 10)."
# Contents:  README MANIFEST comb.sed config_h.spl tinymud.ps.xac
# Wrapped by billr@saab on Fri Jul 27 15:27:42 1990
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'\" \(5964 characters\)
sed "s/^X//" >'README' <<'END_OF_FILE'
XThis is TinyMUD version 1.5.4, a user-extendible
Xmulti-user adventure game.
X
XSee the file copyright.h for information on the copyright under which
XTinyMUD 1.5.4 is distributed.  See the file CHANGES for a list of
Xchanges made in each release.
X
X
XCompiling TinyMUD:
X
XThe code is written in ANSI C, and is known to compile and run under
XMach (a variant of 4.3BSD Unix) on a Sun-3 and uVax-2 using GCC, on on
Xan IBM RT using hc, and on a DECstation 3100 using the MipsCo C
Xcompiler.  It has also been compiled on a Vax running a fairly generic
X4.2BSD system, and on a NeXT machine.
X
XI do not expect that it will work well on non-BSD systems, although
Xmost of the BSD-isms are concentrated in interface.c and in a few
Xcalls here and there to bzero() and such.  Please let me know if you
Xmanage to port TinyMUD to another type of system.
X
X
XPrograms contained in the distribution:
X
Xnetmud
X
X This is the actual server program; it is invoked as 
X
X    netmud source-file dump-file [port [log-file]]
X
X If port is not specified it defaults to 4201.  The initial database
Xwill be read in from source-file, which must contain at least the two
Xobjects in minimal.db to work well.  The file small.db, which contains
Xthe core of the original TinyMUD universe, may be a better place to
Xstart a new universe from.  The netmud process will write a checkpoint
Xout to dump-file every 3600 seconds; the interval can be changed by
Xsetting DUMP_INTERVAL in config.h.
X
X
Xnetmud.conc & concentrate
X
X This is the same as netmud, but allows up to 3600 users at one time.
XThe concentrate program listens on the external port and mulitplexes
Xup to 60 connections into the server program.  There can be up to 60
Xconcentrators, although in practice you'll seldom need more than a
Xhalf-dozen.  It is invoked as follows (ext-port is the port number
Xusers telnet to, int-port is the port number the server uses to
Xcommunicate with the concetrators):
X
X    netmud.conc  source-file dump-file [ext-port int-port [log-file]]
X
Xsanity-check
X
X Usage: sanity-check < source-file
X
X Performs several simple consistency checks on the specified database
X file.  Also useful for detecting surplus WIZARDs and people with
X excess pocket change.
X
X
Xextract
X
X This is the program that was used to create the file small.db
Xdistributed with TinyMUD.  It is used to extract a part of a database
Xas a connected whole.
X
XExamples:
X
X extract < source-file > output-file
X
X Extracts location #0, player #1, and all objects owned by player #1;
X these objects are renumbered into a contiguous block starting at 0 and
X are written out as a new database file that preserves all of their
X inter-relationships.  Some objects may become "orphaned" as a result
X of having their home or location disappear; these objects are moved to
X location #0.  With some combinations of command line arguments it is
X possible to include an object without including its owner; in this
X case player #1 "inherits" the object.  Exits are only extracted if
X both their source and destination rooms are extracted.
X
X extract 2 < source-file > output-file
X
X Extracts location #0, object #1 and anything it owns, and object #2
X and anything it owns.
X
X extract number2 < source-file > output-file
X
X Same as above, but (assuming player #2 is named number2) extracts
X players by name.
X
X extract 2 -5 < source-file > output-file.
X
X As above, but does not extract object #5 even if it is owned by #1 or
X #2.
X
X extract 2 5991 195 -198 3391 -12 12915 < source-file > object-file
X
X Extracts #0, #1, #2, #195, #3391, #5991, #12915 and anything they
X own, except #12 and #198.
X
XThe keyword "all" can be specified as an argument to include
Xeverything by default, e.g.:
X
X extract all -198
X
X Extracts everything except object #198 and anything it owns.
X
X extract all -198 5
X
X Extracts everything except object #198 and anything it owns, but
X includes object #5 even if #198 owns it.
X 
X Other keywords: players reachable norecycle a<num> b<num>.
X 
X Players: specifies that all players are kept (but not necessarily
X what they own).
X 
X Reachable: specifies that rooms not reachable by some combination of
X exits from room #0 are not extracted unless specifically included.
X 
X Norecycle: specifies that players, objects, and things in the 
X recycling center (defined as the home of player 'Recycler') are not
X kept unless specifically included.  'Norecycle' overrides 'players',
X so
X
X    extract players norecycle 
X
X would extract only those players not in the recycling center.
X
X a<num> (above) includes all objects with id numbers greater than
X or equal to <num>
X 
X b<num> (below) includes all objects with id numbers less than
X or equal to <num>
X 
X Putting it all together, here is how the Daytime Islandia DB is
X built from the previous night's database:
X 
X    extract norecycle reachable players b1370 \
X	-274 -560 -809 1384 1403 1404 1406 1505 \
X	Tinker Lynx Tygling Three Janitor Mav \
X	$WINNER \
X	< islandia.db.new > day.db
X	
X Whichs keeps: all players not in the recycling center, all objects
X below 1370 except for 274, 560, and 809, and also includes 1403, 1404,
X 1406, 1505, everything owned by Tinker, Lynx, Tygling, Three, Janitor,
X Mav, and everything owned by the lottery winner (name specified by
X Shell variable WINNER). 
X
Xdump
X
X Usage: dump [owner] < db-file
X
X With no arguments, prints out every object in db-file.  With one
X argument (a number) prints out every object with that owner.
X
X
Xdecompress
X
X Usage: decompress < compressed-db-file > uncompressed-db-file
X
X Removes compression from a database file that has been generated by
X netmud using the -DCOMPRESS compile-time option.  
X
X
Xrestart-cmu, restart-day, restart-night
X
X The shell scripts used at CMU to restart the TinyMUD
X server.  Useful for making sure that back versions of the database are
X always available.
X
X
XI hope that you enjoy using TinyMUD.  
X
X--Jim Aspnes, March 29th, 1990.		 	1.5.3
X--Scott Goehring, April 3rd, 1990.		1.5.3A
X--Michael Mauldin & Russ Smith, June 25, 1990.	1.5.4
END_OF_FILE
if test 5964 -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'\" \(1695 characters\)
sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X CHANGES                    9	
X MANIFEST                   1	This shipping list
X Makefile                   4	
X README                     1	
X boolexp.c                 10	
X comb.sed                   1	
X compress.c                 9	
X conc.c                     8	
X config_h.spl               1	
X copyright.h               10	
X create.c                   9	
X db.c                       7	
X db.h                       9	
X decompress.c              10	
X do_gripes                 10	
X dump.c                     8	
X externs.h                 10	
X extract.c                  8	
X game.c                     7	
X help.c                    10	
X help.txt                  10	
X interface.c                5	
X interface.h               10	
X joinspl.sh                 5	
X look.c                     3	
X match.c                    9	
X match.h                   10	
X minimal.db                 8	
X move.c                     9	
X oldinterface.c             8	
X player.c                   6	
X player_list.c              2	
X predicates.c               9	
X restart-cmu                7	
X restart-day               10	
X restart-night             10	
X rob.c                     10	
X sanity-check.c            10	
X set.c                      6	
X small.db.README           10	
X smalldb.spl                2	
X speech.c                   9	
X stringutil.c              10	
X tiny.docs                  6	
X tinymud.ps.xaa             4	
X tinymud.ps.xab             3	
X tinymud.ps.xac             1	
X tinymud.tex                7	
X unparse.c                 10	
X utils.c                   10	
X wiz.c                      5	
END_OF_FILE
if test 1695 -ne `wc -c <'MANIFEST'`; then
    echo shar: \"'MANIFEST'\" unpacked with wrong size!
fi
# end of 'MANIFEST'
fi
if test -f 'comb.sed' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'comb.sed'\"
else
echo shar: Extracting \"'comb.sed'\" \(32 characters\)
sed "s/^X//" >'comb.sed' <<'END_OF_FILE'
X/|$/{
X:a
XN
Xs/|\n//
X}
X/|$/{
Xba
X}
END_OF_FILE
if test 32 -ne `wc -c <'comb.sed'`; then
    echo shar: \"'comb.sed'\" unpacked with wrong size!
fi
# end of 'comb.sed'
fi
if test -f 'config_h.spl' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'config_h.spl'\"
else
echo shar: Extracting \"'config_h.spl'\" \(6069 characters\)
sed "s/^X//" >'config_h.spl' <<'END_OF_FILE'
X#include "copyright.h"
X
X/* room number of player start location */
X#define PLAYER_START ((dbref) 0)
X
X/* minimum cost to create various things */
X#define OBJECT_COST 10
X#define EXIT_COST 1
X#define LINK_COST 1
X#define ROOM_COST 10
X
X/* cost for various special commands */
X#ifdef TINYHELL
X# define FIND_COST 20
X#else  TINYHELL
X# define FIND_COST 100
X#endif TINYHELL
X
X#define PAGE_COST 1
X
X/* limit on player name length */
X#define PLAYER_NAME_LIMIT 16
X
X/* magic cookies */
X#define NOT_TOKEN '!'
X#define AND_TOKEN '&'
X#define OR_TOKEN '|'
X#define THING_TOKEN 'x'
X#define LOOKUP_TOKEN '*'
X#define NUMBER_TOKEN '#'
X#define ARG_DELIMITER '='
X
X/* magic command cookies */
X#define SAY_TOKEN '"'
X#define POSE_TOKEN ':'
X
X/* amount of object endowment, based on cost */
X#define MAX_OBJECT_ENDOWMENT 100
X#define OBJECT_ENDOWMENT(cost) (((cost)-5)/5)
X
X/* amount at which temple stops being so profitable */
X#define MAX_PENNIES 10000
X
X/* penny generation parameters */
X#define PENNY_RATE 10		/* 1/chance of getting a penny per room */
X
X/* costs of kill command */
X#define KILL_BASE_COST 100	/* prob = expenditure/KILL_BASE_COST */
X#define KILL_MIN_COST 10
X#define KILL_BONUS 50		/* paid to victim */
X
X/* delimiter for lists of exit aliases */
X#define EXIT_DELIMITER ';'
X
X/* timing stuff */
X#ifdef TINYHELL
X# define DUMP_INTERVAL 21600	/* 6 hours (seconds) between dumps */
X#else  TINYHELL
X# define DUMP_INTERVAL 10800   /* 3 hours between dumps */
X#endif TINYHELL
X
X#define COMMAND_TIME_MSEC 100	/* time slice length in milliseconds */
X#define COMMAND_BURST_SIZE 10	/* commands allowed per user in a burst */
X#define COMMANDS_PER_TIME 1	/* commands per time slice after burst */
X
X/* maximum amount of queued output */
X#define MAX_OUTPUT 16384
X
X#ifdef TINYHELL
X/*---------------- TinyHELL Welcome, Registration messages ----------------*/
X# define TINYPORT 6250
X# define INTERNAL_PORT 6249
X# define WELCOME_MESSAGE "Welcome to TinyHELL\nTo connect to your existing|
X character, enter \"connect name password\"\nTo create a new character, enter|
X \"create name password\"\nUse the news command to get up-to-date news on|
X program changes.\n\nYou can disconnect using the QUIT command, which must be|
X capitalized as shown.\n\nUse the WHO command to find out who is currently|
X active.\n\n"
X# define REGISTER_MESSAGE "In order to get an account, send mail to|
X tinyhell-request@uokmax.ecn.uoknor.edu\nwith the following lines:\n\nPlayer:|
X <playername>\nPassword: <password>\n\nYour character SHOULD be created in 72|
X hours.\n\n"
X#endif TINYHELL
X
X#ifdef ISLANDIA
X/*---------------- Islandia Welcome, Registration messages ----------------*/
X# define TINYPORT 2323
X# define INTERNAL_PORT 2322
X# define WELCOME_MESSAGE "Welcome to Islandia\nTo connect to your existing|
X character, enter \"connect name password\"\nTo create a new character, enter|
X \"create name password\"\nUse the news command to get up-to-date news on|
X program changes.\n\nYou can disconnect using the QUIT command, which must be|
X capitalized as shown.\n\nUse the WHO command to find out who is currently|
X active.\n\n"
X# define REGISTER_MESSAGE "You should not see this message\n\n"
X#endif ISLANDIA
X
X#ifndef TINYPORT
X/*---------------- Generic Welcome, Registration messages ----------------*/
X# define TINYPORT 4201
X# define INTERNAL_PORT 4200
X# define WELCOME_MESSAGE "Welcome to TinyMUD\nTo connect to your existing|
X character, enter \"connect name password\"\nTo create a new character, enter|
X \"create name password\"\nUse the news command to get up-to-date news on|
X program changes.\n\nYou can disconnect using the QUIT command, which must be|
X capitalized as shown.\n\nUse the WHO command to find out who is currently|
X active.\n\n"
X# define REGISTER_MESSAGE "You must send mail to the TinyMUD system|
X administrator to get an account.\nUnfortunately, he or she forgot to set an|
X Email address in this part of the\n code.  Good luck!\n\n"
X#endif  TINYPORT
X
X#define LEAVE_MESSAGE "\n***Disconnected***\n"
X
X#define QUIT_COMMAND "QUIT"
X#define WHO_COMMAND "WHO"
X#define PREFIX_COMMAND "OUTPUTPREFIX"
X#define SUFFIX_COMMAND "OUTPUTSUFFIX"
X
X#ifdef ISLANDIA
X# define HELP_FILE	"/clients/Islandia/lib/help.txt"
X# define NEWS_FILE	"/clients/Islandia/lib/news.txt"
X# define MOTD_FILE	"/clients/Islandia/lib/motd.txt"
X# define CONNECT_FILE	"/clients/Islandia/lib/connect.txt"
X# define WIZARD_FILE	"/clients/Islandia/lib/tinker.txt"
X# define LOG_FILE	"/clients/Islandia/lib/islandia.log"
X#endif ISLANDIA
X
X#ifdef TINYHELL
X# define HELP_FILE	"/usr/games/lib/tinyhell/help.txt"
X# define NEWS_FILE	"/usr/games/lib/tinyhell/news.txt"
X# define MOTD_FILE	"/usr/games/lib/tinyhell/motd.txt"
X# define WIZARD_FILE	"/usr/games/lib/tinyhell/tinker.txt"
X# define LOG_FILE	"/usr/games/lib/tinyhell/gnu.log"
X#endif TINYHELL
X
X#ifndef HELP_FILE
X# define HELP_FILE	"help.txt"
X# define NEWS_FILE	"news.txt"
X# define MOTD_FILE	"motd.txt"
X# define WIZARD_FILE	"wizard.txt"
X# define LOG_FILE	"tinymud.log"
X#endif HELP_FILE
X
X#ifdef LOCKOUT
X#define LOCKOUT_FILE "lockout.txt"
X#endif /* LOCKOUT */
X
X/*
X * This section defines the flag markers used by unparse.c
X * They are shipped so that they default to 1.5.3A without
X * the TINKER flag, and the Islandia settings with the
X * TINKER flag...of course, you can define them any way you
X * want, but then you may have to change other messages to
X * make the letters match their flag types.	--Fuzzy 5/31/90
X */
X
X# define TYPE_CODES	"R-EP" /* Room, thing, exit, player */
X# define STICKY_MARK	'S'
X# define DARK_MARK	'D'
X# define LINK_MARK	'L'
X# define ABODE_MARK	'A'
X# define HAVEN_MARK	'H'
X# define UNWANTED_MARK	'U'
X# define MALE_MARK	'M'
X# define FEMALE_MARK	'F'
X# define NEUTER_MARK	'N'
X
X#ifndef TINKER
X# define WIZARD_MARK	'W'  /* For Wizard */
X# define TEMPLE_MARK	'T'  /* For Tinker */
X# define ROBOT_MARK	'C'  /* For Cybernetic */
X# define BUILDER_MARK	'B'  /* For Builder */
X#else TINKER
X# define WIZARD_MARK	'T'  /* For Tinker */
X# define TEMPLE_MARK	'J'  /* For Junkpile */
X# define ROBOT_MARK	'B'  /* For Bot */
X# define BUILDER_MARK	'C'  /* For Constructor/Creator */
X#endif TINKER
END_OF_FILE
if test 6069 -ne `wc -c <'config_h.spl'`; then
    echo shar: \"'config_h.spl'\" unpacked with wrong size!
fi
# end of 'config_h.spl'
fi
if test -f 'tinymud.ps.xac' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tinymud.ps.xac'\"
else
echo shar: Extracting \"'tinymud.ps.xac'\" \(37401 characters\)
sed "s/^X//" >'tinymud.ps.xac' <<'END_OF_FILE'
X(can)f(b)q(e)h(either)g(a)f(thing)g(or)g(exit.)224 862 y 1495 5 v 224 984 a fg
X(examine)f fl(<)p fj(name)s fl(>)224 1041 y fg(examine)g(#)p fl(<)p fj(numb)n
X(er)5 b fl(>)224 1116 y fm(Prin)o(ts)15 b(a)g(detailed)i(description)g(of)d
X(ob)s(ject)h(sp)q(eci\014ed)i(b)o(y)e fl(<)p fj(name)s fl(>)i fm(or)d(b)o(y)
X224 1172 y fl(<)p fj(numb)n(er)5 b fl(>)16 b fm(giving)g(name,)f(description,)
Xh(o)o(wner,)e(k)o(eys,)h(p)q(ennies,)i(failure)f(mes-)224 1229 y(sage,)f(succ\
Xess)g(message,)g(others)f(failure)j(message,)d(others)h(success)h(message,)
X224 1285 y(and)g(exits.)k(The)15 b(lo)q(cation)h(will)h(also)e(b)q(e)h(displa)
Xo(y)o(ed)h(if)e(y)o(ou)g(con)o(trol)g(the)g(ob)s(ject's)224 1342 y(lo)q(catio\
Xn)h(\(that)e(is,)i(if)f(it's)g(not)g(b)q(eing)i(carried)e(b)o(y)g(someone)h
X(else)g(or)e(in)i(a)f(ro)q(om)g(y)o(ou)224 1398 y(don't)g(con)o(trol\).)224
X1521 y 1495 5 v 224 1643 a fg(get)g fl(<)p fj(obje)n(ct)t fl(>)224 1700 y fg
X(take)g fl(<)p fj(obje)n(ct)t fl(>)224 1774 y fm(Gets)g(the)g(sp)q(eci\014ed)
Xi(ob)s(ject.)j fl(<)p fj(obje)n(ct)t fl(>)c fm(can)f(b)q(e)h(either)g(a)f(thi\
Xng)g(or)g(exit.)224 1897 y 1495 5 v 224 2020 a fg(give)g fl(<)p fj(player)5 b
Xfl(>)16 b fg(=)f fl(<)p fj(amount)t fl(>)224 2094 y fm(Giv)o(es)g fl(<)p fj
X(player)5 b fl(>)16 b fm(the)g(sp)q(eci\014ed)h(n)o(um)o(b)q(er)f(of)e(p)q
X(ennies.)224 2217 y 1495 5 v 224 2340 a fg(go)h fl(<)p fj(dir)n(e)n(ction)s fl
X(>)224 2396 y fg(go)24 b(home)224 2452 y(move)15 b fl(<)p fj(dir)n(e)n(ction)
Xs fl(>)960 2577 y fm(1)g eop
X%%Page: 2 4
X bop 224 307 a fg(move)23 b(home)224 382 y fm(Mo)o(v)o(es)14 b(in)i(the)g(sp)
Xq(eci\014ed)h(direction.)k fg(go)j(home)14 b fm(is)i(a)f(sp)q(ecial)i(command)
Xe(that)224 439 y(returns)g(y)o(ou)g(to)g(y)o(our)f(home)i(\(initially)h(Lim)o
X(b)q(o\).)k(If)15 b(the)g(direction)i(is)e(fully)224 495 y(sp)q(eci\014ed,)i
X(the)e fg(go)g fm(ma)o(y)g(b)q(e)h(omitted.)224 618 y 1495 5 v 224 742 a fg
X(gripe)f fl(<)p fj(message)s fl(>)224 817 y fm(Sends)h fl(<)p fj(message)s fl
X(>)g fm(to)e(the)i(system)e(main)o(tainer.)224 940 y 1495 5 v 224 1063 a fg
X(help)224 1138 y fm(Prin)o(ts)h(a)g(short)g(help)h(message.)224 1262 y 1495 5
Xv 224 1385 a fg(inventory)224 1460 y fm(Lists)g(what)f(y)o(ou)f(are)h(carryin\
Xg.)224 1583 y 1495 5 v 224 1707 a fg(kill)g fl(<)p fj(player)5 b fl(>)16 b fm
X([)f fg(=)g fl(<)p fj(c)n(ost)t fl(>)g fm(])224 1782 y(Kills)i(the)f(sp)q(eci\
X\014ed)h(pla)o(y)o(er.)j(Killing)e(costs)d(either)h fl(<)p fj(c)n(ost)t fl
X(>)f fm(p)q(ennies)i(or)e(10)224 1838 y(p)q(ennies,)i(whic)o(hev)o(er)f(is)g
X(greater.)j(The)c(probabilit)o(y)h(of)f(success)h(is)g(prop)q(ortional)f(to)
X224 1895 y(the)g(cost.)224 2018 y 1495 5 v 224 2141 a fg(look)g fl(<)p fj(obj\
Xe)n(ct)t fl(>)224 2198 y fg(read)g fl(<)p fj(obje)n(ct)t fl(>)224 2273 y(<)p
Xfj(obje)n(ct)t fl(>)h fm(can)f(b)q(e)h(a)f(ro)q(om,)f(thing,)i(pla)o(y)o(er,)
Xe(or)h(direction.)21 b(Prin)o(ts)15 b(a)g(description)224 2329 y(of)g fl(<)p
Xfj(obje)n(ct)t fl(>)p fm(.)224 2452 y 1495 5 v 960 2577 a(2)g eop
X%%Page: 3 5
X bop 224 307 a fg(page)15 b fl(<)p fj(player)5 b fl(>)224 380 y fm(Used)16 b
X(to)e(inform)i(an)f(activ)o(e)g(pla)o(y)o(er)g(that)g(y)o(ou)g(are)g(lo)q(oki\
Xng)h(for)e(them.)20 b(The)224 436 y(targeted)15 b(pla)o(y)o(er)g(will)i(get)d
X(a)h(message)g(telling)i(them)e(y)o(our)g(name)g(and)g(lo)q(cation.)224 541 y
X1495 5 v 224 645 a fg(rob)g fl(<)p fj(player)5 b fl(>)224 718 y fm(A)o(ttempt)
X15 b(to)f(steal)h(a)g(p)q(enn)o(y)h(from)f fl(<)p fj(player)5 b fl(>)p fm(.)
X224 822 y 1495 5 v 224 926 a fg(say)15 b fl(<)p fj(message)s fl(>)224 983 y fg
X(")p fl(<)p fj(message)s fl(>)224 1039 y fg(:)p fl(<)p fj(message)s fl(>)224
X1112 y fm(The)h(\014rst)e(t)o(w)o(o)g(forms)h(displa)o(y)h(the)f fl(<)p fj
X(message)s fl(>)h fm(with)f(the)h(noti\014cation)g(that)e(y)o(ou)224 1168 y
X(said)i(it.)k(F)l(or)15 b(example,)g(if)h(y)o(our)f(pla)o(y)o(er's)f(name)i
X(is)f(Bett)o(y)g(the)g(other)g(pla)o(y)o(ers)g(in)224 1225 y(the)g(same)g(ro)
Xq(om)g(will)i(see)224 1322 y fg(Betty)23 b(says)15 b fm(\\)p fl(<)p fj(messag\
Xe)s fl(>)p fm(")224 1419 y(The)h(third)f(form)g fi(p)q(oses)g fm(the)h(messag\
Xe,)e(preceded)i(b)o(y)g(y)o(our)e(name,)h(with)h(no)224 1475 y(quotes,)f(as)g
X(in)224 1573 y fg(Betty)g fl(<)p fj(message)s fl(>)224 1670 y fm(F)l(or)g(b)q
X(oth)g(the)g(second)h(and)f(third)h(forms,)e(do)h(not)g(put)g(a)g(space)h(aft\
Xer)e(the)i(double)224 1726 y(quotes)f(or)g(colon)g(as)g(it)h(will)h(b)q(e)e
X(included)j(in)e(the)g(message.)224 1830 y 1495 5 v 224 1935 a fg(score)224
X2007 y fm(Prin)o(ts)f(ho)o(w)g(man)o(y)g(p)q(ennies)i(y)o(ou)e(ha)o(v)o(e.)
X224 2112 y 1495 5 v 224 2216 a fg(whisper)f fl(<)p fj(player)5 b fl(>)16 b fg
X(=)f fl(<)p fj(message)s fl(>)224 2289 y(<)p fj(player)5 b fl(>)16 b fm(is)g
X(presen)o(ted)g(with)f fl(<)p fj(message)s fl(>)h fm(sa)o(ying)f(that)f(y)o
X(ou)h(whisp)q(ered)i(it.)j(The)224 2345 y(other)15 b(pla)o(y)o(ers)g(only)h
X(see)f(the)h(message)224 2442 y fg(Betty)23 b(whispers)g(something)g(to)15 b
Xfl(<)p fj(player)5 b fl(>)p fm(.)960 2577 y(3)g eop
X%%Page: 4 6
X bop 224 307 a fc(2)69 b(Comm)n(ands)21 b(for)i(mo)r(difying)d(the)i(dungeon)
X224 409 y fg(@create)14 b fl(<)p fj(name)s fl(>)i fm([)f fg(=)g fl(<)p fj(c)n
X(ost)t fl(>)h fm(])224 483 y(Creates)f(a)g(thing)g(with)h(the)f(sp)q(eci\014e\
Xd)i(name.)j(Creation)15 b(costs)g(either)h fl(<)p fj(c)n(ost)t fl(>)224 539 y
Xfm(p)q(ennies)h(or)e(10)g(p)q(ennies,)h(whic)o(hev)o(er)g(is)g(greater.)j(The)
Xc(v)m(alue)i(of)e(a)g(thing)g(is)224 596 y(prop)q(ortional)h(to)e(its)i(cost.)
X224 713 y 1495 5 v 224 830 a fg(@describe)e fl(<)p fj(obje)n(ct)t fl(>)i fg
X(=)f fl(<)p fj(description)s fl(>)224 904 y(<)p fj(obje)n(ct)t fl(>)h fm(can)
Xf(b)q(e)h(a)f(ro)q(om,)f(thing,)i(pla)o(y)o(er,)e(or)h(direction.)21 b(Sets)
X16 b(the)f(description)224 960 y(a)g(pla)o(y)o(er)g(sees)h(when)f(they)h(use)
Xf(the)g(command)h fg(look)e fl(<)p fj(obje)n(ct)t fl(>)p fm(.)21 b(If)15 b fl
X(<)p fj(obje)n(ct)t fl(>)h fm(is)224 1017 y fg(here)f fm(it)g(sets)g(the)g
X(description)i(for)e(the)g(curren)o(t)g(ro)q(om)g(that)f(is)i(displa)o(y)o
X(ed)g(when)224 1073 y(the)f(ro)q(om)g(is)h(en)o(tered.)k(If)15 b fl(<)p fj
X(obje)n(ct)t fl(>)h fm(is)g fg(me)f fm(it)g(sets)g(the)g(description)i(for)e
X(y)o(our)224 1129 y(c)o(haracter.)224 1246 y 1495 5 v 224 1363 a fg(@dig)g fl
X(<)p fj(name)s fl(>)224 1437 y fm(Creates)g(a)g(new)g(ro)q(om)g(with)g(the)g
X(sp)q(eci\014ed)j(name,)d(and)g(prin)o(ts)g(the)h(ro)q(om's)224 1494 y(n)o
X(um)o(b)q(er.)224 1611 y 1495 5 v 224 1728 a fg(@fail)f fl(<)p fj(obje)n(ct)t
Xfl(>)g fm([)g fg(=)g fl(<)p fj(message)s fl(>)h fm(])224 1802 y(Without)f(a)g
X(message)g(argumen)o(t,)f(clears)i(the)f(failure)h(message)f(on)g fl(<)p fj
X(obje)n(ct)t fl(>)p fm(,)g(oth-)224 1858 y(erwise)h(sets)f(it.)20 b(The)15 b
X(failure)i(message)d(is)i(prin)o(ted)g(when)g(a)f(pla)o(y)o(er)g(unsuccessful\
Xly)224 1915 y(attempts)f(to)h(use)g(the)h(ob)s(ject.)224 2032 y 1495 5 v 224
X2149 a fg(@find)f fl(<)p fj(name)s fl(>)224 2223 y fm(Prin)o(ts)g(the)h(name)
Xf(and)g(ob)s(ject)g(n)o(um)o(b)q(er)g(of)g(ev)o(ery)g(ro)q(om,)f(thing,)i(or)
Xe(pla)o(y)o(er)i(that)224 2279 y(y)o(ou)f(con)o(trol)g(whose)g(name)g(matc)o
X(hes)g fl(<)p fj(name)s fl(>)p fm(.)21 b(Because)16 b(the)f fg(@find)f fm(com\
Xmand)224 2336 y(is)i(computationally)g(exp)q(ensiv)o(e,)g(there)g(is)f(a)g
X(small)h(c)o(harge)f(for)g(using)h(it.)224 2452 y 1495 5 v 960 2577 a(4)g eop
X%%Page: 5 7
X bop 224 307 a fg(@link)15 b fl(<)p fj(dir)n(e)n(ction)s fl(>)g fg(=)g fl(<)p
Xfj(r)n(o)n(om)i(numb)n(er)5 b fl(>)224 364 y fg(@link)15 b fl(<)p fj(thing)t
Xfl(>)g fg(=)g fl(<)p fj(r)n(o)n(om)i(numb)n(er)5 b fl(>)224 420 y fg(@link)15
Xb fl(<)p fj(r)n(o)n(om)s fl(>)h fg(=)f fl(<)p fj(r)n(o)n(om)i(numb)n(er)5 b fl
X(>)224 494 y fm(In)16 b(the)f(\014rst)g(form)g(links)h(the)f(exit)h(sp)q(eci\
X\014ed)h(b)o(y)e fl(<)p fj(dir)n(e)n(ction)s fl(>)h fm(to)f(the)g(ro)q(om)224
X551 y(sp)q(eci\014ed)i(b)o(y)f fl(<)p fj(r)n(o)n(om)g(numb)n(er)5 b fl(>)p fm
X(.)20 b(The)c(exit)f(m)o(ust)g(b)q(e)h(unlink)o(ed,)h(and)e(y)o(ou)g(m)o(ust)
X224 607 y(o)o(wn)g(the)g(target)f(ro)q(om)h(if)g(its)h fg(link_ok)e fm(attrib\
Xute)h(is)h(not)e(set.)20 b(If)c(y)o(ou)e(don't)224 664 y(already)i(o)o(wn)e
X(the)i(exit)f(its)h(o)o(wnership)f(is)h(transferred)f(to)f(y)o(ou.)20 b(The)
X15 b(second)h(form)224 720 y(sets)f(the)g(home)h(for)e fl(<)p fj(thing)t fl
X(>)p fm(.)20 b(If)c fl(<)p fj(thing)t fl(>)f fm(is)h fg(me)f fm(it)h(sets)e
X(y)o(our)h(home.)20 b(The)15 b(third)224 776 y(form)g(sets)f(the)i(dropto;)e
X(see)h(section)h(5.5)e(for)h(an)g(explanation)h(of)f(dropto's.)224 893 y 1495
X5 v 224 1009 a fg(@lock)g fl(<)p fj(obje)n(ct)t fl(>)g fg(=)g fl(<)p fj(key)t
Xfl(>)224 1083 y fm(Sets)g(a)g(k)o(ey)g(\(another)g(ob)s(ject\))f(for)h(an)g
X(ob)s(ject.)k(If)d fl(<)p fj(key)t fl(>)f fm(starts)f(with)i fg(*)f fm(then)g
X(it)224 1140 y(m)o(ust)g(b)q(e)h(a)f(pla)o(y)o(er's)f(name.)20 b fl(<)p fj
X(key)t fl(>)c fm(can)f(con)o(tain)h(the)f(Bo)q(olean)h(op)q(erators)e fg(!)h
Xfm(\(not)224 1196 y(or)g(negation\),)f fg(&)i fm(\(and\),)e(and)h fg(|)g fm
X(\(or\),)f(and)h(use)h(paren)o(theses)f(for)g(grouping.)224 1270 y(In)h(order)
Xf(to)f(use)i fl(<)p fj(obje)n(ct)t fl(>)g fm(y)o(ou)f(m)o(ust)f(satisfy)h(the)
Xh(requiremen)o(ts)f(of)g fl(<)p fj(key)t fl(>)p fm(.)20 b(In)224 1327 y(the)
X15 b(simplest)i(case)e(y)o(ou)g(m)o(ust)f(simply)j(ha)o(v)o(e)e fl(<)p fj(key)
Xt fl(>)p fm(.)20 b(If)c fl(<)p fj(key)t fl(>)f fm(is)h(preceded)h(b)o(y)e fg
X(!)224 1383 y fm(then)h(y)o(ou)f(m)o(ust)f(not)h(ha)o(v)o(e)g fl(<)p fj(key)t
Xfl(>)h fm(in)g(order)f(to)f(use)i fl(<)p fj(obje)n(ct)t fl(>)p fm(.)k(See)c
X(section)g(6.3)224 1440 y(for)f(more)f(complicated)j(examples.)224 1556 y 1495
X5 v 224 1673 a fg(@name)e fl(<)p fj(obje)n(ct)t fl(>)g fg(=)g fl(<)p fj(name)
Xs fl(>)224 1729 y fg(@name)g fl(<)p fj(player)5 b fl(>)16 b fg(=)f fl(<)p fj
X(name)s fl(>)h(<)p fj(p)n(asswor)n(d)5 b fl(>)224 1803 y fm(Changes)15 b(the)
Xh(name)f(of)f(the)i(sp)q(eci\014ed)h(ob)s(ject.)i(This)d(can)g(also)f(b)q(e)h
X(used)f(to)g(sp)q(ecify)224 1860 y(a)g(new)g(direction)i(list)f(for)f(an)g
X(exit)g(\(see)h(for)e(example)i fg(@open)p fm(\).)j(F)l(or)c(a)f(pla)o(y)o
X(er,)h(it)224 1916 y(requires)h(the)f(pla)o(y)o(er's)g(passw)o(ord.)224 2033 y
X1495 5 v 224 2149 a fg(@ofail)f fl(<)p fj(obje)n(ct)t fl(>)i fm([)f fg(=)g fl
X(<)p fj(message)s fl(>)h fm(])224 2223 y(Without)f(a)g(message)g(argumen)o
X(t,)f(clears)i(the)f(others)g(failure)h(message)f(on)224 2280 y fl(<)p fj(obj\
Xe)n(ct)t fl(>)p fm(,)h(otherwise)f(sets)g(it.)20 b(The)15 b(others)g(failure)
Xi(message,)d(pre\014xed)i(b)o(y)f(the)224 2336 y(pla)o(y)o(er's)g(name,)g(is)
Xg(sho)o(wn)g(to)g(others)g(when)g(the)h(pla)o(y)o(er)f(fails)h(to)e(use)i fl
X(<)p fj(obje)n(ct)t fl(>)p fm(.)224 2452 y 1495 5 v 960 2577 a(5)g eop
X%%Page: 6 8
X bop 224 307 a fg(@open)15 b fl(<)p fj(dir)n(e)n(ction)s fl(>)g fm([)g fg(;)g
Xfl(<)p fj(other-dir)5 b fl(>)17 b fm(])p fk(\003)e fm([)f fg(=)h fl(<)p fj
X(destination)s fl(>)h fm(])224 382 y(Creates)f(an)g(unlink)o(ed)i(exit)f(in)g
X(the)f(sp)q(eci\014ed)i(direction\(s\).)k(Y)l(ou)15 b(can)h(also)f(sp)q(ecify)
X224 439 y(an)g(exit)h(to)e(link)j(the)e(exit)h(to.)j(Once)d(created,)f(y)o
X(ou)g(\(or)g(an)o(y)f(other)h(pla)o(y)o(er\))g(ma)o(y)224 495 y(use)h(the)f fg
X(@link)f fm(command)i(to)e(sp)q(ecify)j(the)e(ro)q(om)f(to)h(whic)o(h)h(the)f
X(exit)h(leads.)21 b(See)224 552 y(also)15 b fg(@name)p fm(.)224 677 y 1495 5 v
X224 802 a fg(@osuccess)f fl(<)p fj(obje)n(ct)t fl(>)i fm([)f fg(=)g fl(<)p fj
X(message)s fl(>)g fm(])224 877 y(Without)g(a)g(message)g(argumen)o(t,)f(clear\
Xs)i(the)f(others)g(success)g(message)g(on)224 933 y fl(<)p fj(obje)n(ct)t fl
X(>)p fm(,)h(otherwise)f(sets)g(it.)20 b(The)15 b(others)g(success)h(message,)
Xe(pre\014xed)j(b)o(y)224 990 y(the)e(pla)o(y)o(er's)g(name,)g(is)h(sho)o(wn)f
X(to)f(others)h(when)h(the)f(pla)o(y)o(er)g(successfully)i(uses)224 1046 y fl
X(<)p fj(obje)n(ct)t fl(>)p fm(.)224 1171 y 1495 5 v 224 1296 a fg(@password)d
Xfl(<)p fj(old)5 b fl(>)16 b fg(=)f fl(<)p fj(new)5 b fl(>)224 1371 y fm(Sets)
X15 b(a)g(new)h(passw)o(ord;)e(y)o(ou)h(m)o(ust)f(sp)q(ecify)j(y)o(our)d(old)i
X(passw)o(ord)e(to)h(v)o(erify)g(y)o(our)224 1428 y(iden)o(tit)o(y)l(.)224 1553
Xy 1495 5 v 224 1677 a fg(@set)g fl(<)p fj(obje)n(ct)t fl(>)h fg(=)f fl(<)p fj
X(\015ag)t fl(>)224 1734 y fg(@set)g fl(<)p fj(obje)n(ct)t fl(>)h fg(=)f(!)p fl
X(<)p fj(\015ag)t fl(>)224 1809 y fm(Sets)g(\(\014rst)g(form\))f(or)h(resets)g
X(\(second)g(form\))f fl(<)p fj(\015ag)t fl(>)i fm(on)f fl(<)p fj(obje)n(ct)t
Xfl(>)p fm(.)20 b(The)c(curren)o(t)224 1866 y(\015ags)f(are)g fg(dark)p fm(,)f
Xfg(link_ok)p fm(,)g fg(sticky)p fm(,)g fg(temple)p fm(,)g(and)h fg(wizard)p fm
X(.)224 1990 y 1495 5 v 224 2115 a fg(@success)f fl(<)p fj(obje)n(ct)t fl(>)i
Xfg(=)f fl(<)p fj(message)s fl(>)224 2191 y fm(Without)g(a)g(message)g(argumen)
Xo(t,)f(clears)i(the)f(success)h(message)e(on)i fl(<)p fj(obje)n(ct)t fl(>)p fm
X(,)224 2247 y(otherwise)g(sets)e(it.)21 b(The)15 b(success)h(message)f(is)g
X(prin)o(ted)h(when)g(a)f(pla)o(y)o(er)g(success-)224 2303 y(fully)i(uses)e fl
X(<)p fj(obje)n(ct)t fl(>)p fm(.)21 b(Without)15 b fl(<)p fj(message)p fl(>)g
Xfm(it)g(clears)h(the)f(success)h(message.)224 2428 y 1495 5 v 960 2577 a(6)g
Xeop
X%%Page: 7 9
X bop 224 307 a fg(@teleport)14 b fl(<)p fj(obje)n(ct)t fl(>)i fg(=)f fl(<)p fj
X(destination)s fl(>)224 380 y fm(T)l(elep)q(orts)h(the)f(ob)s(ject)g(to)f(the)
Xi(sp)q(eci\014ed)h(destination.)k(Y)l(ou)15 b(m)o(ust)g(either)h(con)o(trol)
X224 437 y(the)f(ob)s(ject)g(or)g(it's)g(curren)o(t)g(lo)q(cation,)g(and)h(y)o
X(ou)f(m)o(ust)f(b)q(e)i(able)g(to)f(link)h(to)f(the)224 493 y(destination.)21
Xb(Y)l(ou)15 b(can)h(only)f(telep)q(ort)h(ob)s(jects)f(from)f(ro)q(om)h(to)f
X(ro)q(om,)g(not)h(in)o(to)g(or)224 550 y(out)g(of)g(someone's)f(hand.)224 660
Xy 1495 5 v 224 769 a fg(@unlink)g fl(<)p fj(dir)n(e)n(ction)s fl(>)224 843 y
Xfm(Remo)o(v)o(es)h(the)g(link)i(on)e(the)h(exit)f(in)h(the)f(sp)q(eci\014ed)j
Xfl(<)p fj(dir)n(e)n(ction)s fl(>)p fm(.)i(Y)l(ou)c(m)o(ust)e(o)o(wn)224 899 y
X(the)h(exit.)21 b(The)15 b(exit)h(ma)o(y)e(then)i(b)q(e)g(relink)o(ed)h(b)o
X(y)e(an)o(y)g(pla)o(y)o(er)g(using)h(the)f fg(@link)224 956 y fm(command)g
X(and)h(o)o(wnership)f(of)g(the)g(exit)h(transfers)e(to)h(that)f(pla)o(y)o(er.)
X224 1065 y 1495 5 v 224 1175 a fg(@unlock)g fl(<)p fj(obje)n(ct)t fl(>)224
X1248 y fm(Remo)o(v)o(es)h(the)g(lo)q(c)o(k)h(on)f(an)g(ob)s(ject.)224 1390 y
Xfc(3)69 b(Miscellaneous)21 b(comm)m(ands)224 1491 y fg(@stats)14 b fm(Sho)o
X(ws)h(curren)o(t)g(total)g(of)g(pla)o(y)o(ers,)g(ro)q(oms,)f(ob)s(jects,)g
X(exits.)224 1633 y fc(4)69 b(Money)224 1734 y fm(Some)15 b(actions)h(ha)o(v)o
X(e)e(an)i(asso)q(ciated)f(cost:)230 1768 y 1467 2 v 229 1824 a 2 57 v 262 1807
Xa fh(Action)446 1824 y 2 57 v 1020 1807 a(Cost)1696 1824 y 2 57 v 230 1826 a
X1467 2 v 230 1836 a 1467 2 v 230 1846 a 1467 2 v 229 1902 a 2 57 v 255 1885 a
Xfg(kill)446 1902 y 2 57 v 472 1885 a fm(10)g(p)q(ennies)i(or)e(more)1696 1902
Xy 2 57 v 230 1904 a 1467 2 v 229 1960 a 2 57 v 255 1944 a fg(page)446 1960 y 2
X57 v 472 1944 a fm(1)g(p)q(enn)o(y)1696 1960 y 2 57 v 230 1962 a 1467 2 v 229
X2019 a 2 57 v 255 2002 a fg(@open)446 2019 y 2 57 v 472 2002 a fm(1)g(p)q(enn)
Xo(y)1696 2019 y 2 57 v 230 2020 a 1467 2 v 229 2077 a 2 57 v 255 2060 a fg
X(@dig)446 2077 y 2 57 v 472 2060 a fm(10)g(p)q(ennies)1696 2077 y 2 57 v 230
X2078 a 1467 2 v 229 2135 a 2 57 v 255 2118 a fg(@create)446 2135 y 2 57 v 472
X2118 a fm(10)g(p)q(ennies)i(\(or)d(more\))1696 2135 y 2 57 v 230 2136 a 1467 2
Xv 229 2249 a 2 113 v 255 2176 a fg(@link)446 2249 y 2 113 v 472 2176 a fm(1)h
X(p)q(enn)o(y)l(,)h(plus)g(1)f(p)q(enn)o(y)h(to)f(the)g(previous)h(o)o(wner)f
X(if)g(y)o(ou)g(didn't)472 2232 y(already)h(o)o(wn)e(the)i(exit.)1696 2249 y 2
X113 v 230 2251 a 1467 2 v 295 2340 a(Y)l(ou)f(get)g(money)g(b)o(y)g(\014nding)
Xi(p)q(ennies,)g(getting)e(killed,)i(ha)o(ving)e(someone)224 2396 y(giv)o(e)h
X(y)o(ou)e(money)l(,)h(or)g(b)o(y)g(sacri\014cing)i(a)e(thing.)20 b(The)15 b
X(sacri\014ce)i(v)m(alue)f(of)f(a)g(thing)g(is)224 2452 y(\(cost)g(of)f(the)i
X(thing)p fl(=)p fm(5\))9 b fk(\000)i fm(1.)960 2577 y(7)g eop
X%%Page: 8 10
X bop 224 307 a fc(5)69 b(Tin)n(yMUD)23 b(concepts)224 409 y fm(An)16 b fj(obj\
Xe)n(ct)e fm(is)i(either)g(a)f(pla)o(y)o(er,)g(ro)q(om,)f(thing,)h(or)g(exit.)
X295 465 y(In)h(addition)g(to)e(the)i(commands)f(listed)h(ab)q(o)o(v)o(e)f(the\
Xre)g(are)g(some)g(built)i(in)224 522 y(w)o(ords)e(in)h fn(Tin)o(y)p fm(MUD;)d
Xfg(me)i fm(and)g fg(here)p fm(.)20 b fg(me)15 b fm(refers)g(to)f(y)o(our)h
X(c)o(haracter)f(or)h(pla)o(y)o(er,)224 578 y(and)h fg(here)e fm(refers)h(to)g
X(the)g(ro)q(om)g(y)o(ou)f(are)h(in.)21 b(F)l(or)15 b(example,)g(y)o(ou)g(can)
Xg(use)h(the)224 634 y fg(@describe)e fm(command)h(to)g(giv)o(e)g(y)o(ourself)
Xg(a)g(description;)i(as)d(another)h(example,)h(in)224 691 y(order)f(to)g(prev)
Xo(en)o(t)g(y)o(ourself)g(from)f(b)q(eing)j(robb)q(ed)f(use)f fg(@lock)24 b
X(me)f(=)h(me)p fm(.)224 813 y fe(5.1)56 b(Success)18 b(and)i(the)e(lac)n(k)h
X(thereof)224 898 y fm(When)d(y)o(ou)f(can)g fg(take)g fm(a)f(thing,)i(use)f
X(an)g(exit,)h(or)e(rob)h(a)g(pla)o(y)o(er)g(y)o(ou)g(are)g(success-)224 955 y
X(full)i(in)f(using)g(that)e(ob)s(ject.)19 b(The)d(con)o(v)o(erse)f(is)h(true)
Xf(for)f(failure.)21 b(The)16 b fg(@success)p fm(,)224 1011 y fg(@osuccess)p fm
X(,)e fg(@fail)p fm(,)g(and)h fg(@ofail)g fm(commands)g(set)f(the)i(success)g
X(and)f(failure)224 1068 y(messages)g(on)g(ob)s(jects.)224 1190 y fe(5.2)56 b
X(Ob)s(ject)18 b(strings)224 1275 y fm(Ev)o(ery)d(ob)s(ject)g(has)g(six)g(stri\
Xngs:)280 1369 y(1.)22 b(Name.)e(This)15 b(is)h(what)f(y)o(ou)g(use)g(with)h fg
X(drop)p fm(,)e fg(examine)p fm(,)g fg(get)p fm(,)g(and)h(so)g(on.)338 1426 y
X(Y)l(ou)g(can)h(also)f(use)g(the)h(ob)s(ject's)e(n)o(um)o(b)q(er)h(\(for)g
X(example,)g(when)h(t)o(w)o(o)338 1482 y(ob)s(jects)e(ha)o(v)o(e)h(the)g(same)
Xg(name\).)280 1576 y(2.)22 b(Description.)f(This)15 b(is)h(what)f(is)g(giv)o
X(en)h(when)g(y)o(ou)f(use)g(the)h fg(look)e fm(command.)280 1670 y(3.)22 b
X(Success)16 b(message.)j(This)d(is)g(what)e(y)o(ou)h(see)h(when)g(y)o(ou)e
X(successfully)k(use)d(the)338 1726 y(ob)s(ject.)280 1820 y(4.)22 b(Others)15 b
X(success)h(message.)j(This)d(is)g(what)f(the)g(other)g(pla)o(y)o(ers)g(see)g
X(when)h(y)o(ou)338 1876 y(successfully)h(use)f(the)f(ob)s(ject.)280 1970 y
X(5.)22 b(F)l(ailure)16 b(message.)j(This)d(is)g(what)f(y)o(ou)f(see)i(when)g
X(y)o(ou)f(fail)h(to)e(use)i(an)338 2027 y(ob)s(ject.)280 2121 y(6.)22 b(Other\
Xs)15 b(failure)h(message.)k(This)c(is)f(what)g(the)g(other)g(pla)o(y)o(ers)g
X(see)h(when)f(y)o(ou)338 2177 y(fail)h(to)e(use)i(an)f(ob)s(ject.)224 2271 y
X(The)h(maxim)o(um)f(length)h(of)e(eac)o(h)i(string)f(is)h(512)e(c)o(haracters\
X.)960 2577 y(8)g eop
X%%Page: 9 11
X bop 224 307 a fe(5.3)56 b(Ob)s(ject)18 b(prop)r(erties)224 393 y fm(As)d(lis\
Xted)i(in)f(the)f fg(@set)g fm(command,)f(ob)s(jects)h(can)g(ha)o(v)o(e)g(an)o
X(y)g(of)g(the)g(follo)o(wing)224 449 y(prop)q(erties:)224 543 y fg(dark)22 b
Xfm(When)16 b(a)f(ro)q(om)f(has)h(its)h fg(dark)e fm(\015ag)h(set)g(y)o(ou)g
X(can't)g(see)g(things)h(in)g(it)f(with)h(the)338 600 y fg(look)e fm(command.)
X20 b(When)c(a)f(thing)g(or)g(pla)o(y)o(er)g(has)g(its)h fg(dark)e fm(\015ag)h
X(set)g(it)h(can't)338 656 y(b)q(e)g(seen.)k(Only)c(a)f(wizard)h(can)f(set)g
X(the)g fg(dark)g fm(\015ag)g(on)g(a)g(thing)h(or)e(pla)o(y)o(er.)338 713 y
X(Setting)h(the)h fg(dark)e fm(\015ag)h(on)g(exits)h(curren)o(tly)g(has)f(no)g
X(e\013ect.)224 806 y fg(link_ok)22 b fm(Y)l(ou)15 b(can)h(link)g(to)f(a)g(ro)
Xq(om)f(if)i(y)o(ou)f(con)o(trol)g(it,)g(or)g(if)g(the)g(ro)q(om)g(has)g(its)
X338 863 y fg(link_ok)f fm(\015ag)h(set.)k(Being)e(able)f(to)e(link)j(to)d(a)h
X(ro)q(om)g(means)g(that)f(y)o(ou)h(can)338 919 y(set)g(the)g(homes)g(of)g(thi\
Xngs)h(\(or)e(y)o(ourself)t(\))g(to)h(that)f(ro)q(om,)h(and)g(y)o(ou)g(can)g
X(set)338 976 y(the)g(destination)h(of)f(exits)h(to)e(that)h(ro)q(om.)k(See)d
X(also)f(the)g fg(@link)g fm(command)338 1032 y(for)f(additional)j(information)
Xe(on)g(linking)j(and)d(section)h(5.5)e(for)h(droptos.)338 1089 y(Setting)g
X(the)h fg(link_ok)e fm(\015ag)h(on)g(pla)o(y)o(ers,)g(things,)g(and)g(exits)h
X(curren)o(tly)g(has)338 1145 y(no)f(e\013ect.)224 1239 y fg(sticky)22 b fm
X(When)16 b(an)f(ob)s(ject)f(that)h(has)g(its)g fg(sticky)g fm(\015ag)g(set)f
X(is)i(dropp)q(ed)g(it)g(imme-)338 1295 y(diately)g(go)q(es)f(home.)20 b(When)
Xc(a)e(ro)q(om)h(has)g(its)g fg(sticky)g fm(\015ag)g(set)g(its)g(dropto)338
X1352 y(is)h(dela)o(y)o(ed)f(un)o(til)i(the)e(last)g(p)q(erson)h(lea)o(v)o(es)
Xf(the)g(ro)q(om.)k(Setting)d(the)f fg(sticky)338 1408 y fm(\015ag)g(on)g(pla)
Xo(y)o(ers)g(and)g(exits)h(curren)o(tly)g(has)f(no)g(e\013ect.)224 1502 y fg
X(temple)22 b fm(When)16 b(a)f(ro)q(om)f(has)h(its)h fg(temple)e fm(\015ag)h
X(set)g(y)o(ou)g(can)g(sacri\014ce)h(things)g(there)338 1559 y(and)f(receiv)o
X(e)h(p)q(ennies)h(for)e(y)o(our)g(sacri\014ces.)20 b(\(See)c(section)g(4)e
X(for)h(ho)o(w)g(man)o(y)338 1615 y(p)q(ennies)i(y)o(ou)e(receiv)o(e)h(for)e
X(y)o(our)h(sacri\014ces.\))21 b(Only)16 b(a)f(wizard)g(can)h(set)f(this)338
X1672 y(\015ag.)k(Setting)d(this)g(\015ag)e(on)i(pla)o(y)o(ers,)e(things,)i
X(and)f(exits)h(curren)o(tly)f(has)g(no)338 1728 y(e\013ect.)224 1822 y fg(wiz\
Xard)22 b fm(When)16 b(a)f(pla)o(y)o(er)g(has)g(its)g fg(wizard)g fm(\015ag)f
X(set)h(they)h(are)f(a)f(wizard.)21 b(Only)16 b(a)338 1878 y(wizard)f(can)h
X(set)f(this)g(\015ag.)20 b(Setting)15 b(this)h(\015ag)f(on)g(things,)g(ro)q
X(oms,)f(and)i(exits)338 1935 y(curren)o(tly)f(has)h(no)f(e\013ect.)295 2029 y
X(The)g(\015ags)g fg(player)p fm(,)f fg(room)p fm(,)g(and)i fg(exit)e fm(are)h
X(set)g(automatically)h(when)f(a)g(pla)o(y)o(er,)224 2085 y(ro)q(om,)f(or)h
X(exit)h(is)f(created.)20 b(They)c(cannot)f(b)q(e)h(subsequen)o(tly)g(unset)f
X(or)g(set)g(with)224 2141 y(the)g fg(@set)g fm(command.)224 2263 y fe(5.4)56 b
X(Con)n(trol)224 2349 y fm(There)16 b(are)e(three)i(rules)g(for)e(determining)
Xj(con)o(trol:)280 2443 y(1.)22 b(Y)l(ou)15 b(can)h(con)o(trol)e(an)o(ything)i
X(y)o(ou)f(o)o(wn.)960 2577 y(9)g eop
X%%Page: 10 12
X bop 280 307 a fm(2.)22 b(A)15 b(wizard)h(can)f(con)o(trol)g(an)o(ything.)280
X401 y(3.)22 b(An)o(yb)q(o)q(dy)16 b(can)f(con)o(trol)g(an)g(unlink)o(ed)i(exi\
Xt)f(\(ev)o(en)f(if)h(it)f(is)h(lo)q(c)o(k)o(ed\).)224 495 y(Builders)h(should)
Xf(w)o(atc)o(h)f(out)g(for)f(item)i(3.)224 617 y fe(5.5)56 b(Dropto's)224 702 y
Xfm(When)16 b(the)f fg(@link)f fm(command)i(is)f(used)h(on)f(a)g(ro)q(om,)f
X(it)i(sets)f(a)f(dropto)h(lo)q(cation)224 759 y(for)g(that)f(ro)q(om.)19 b
X(An)o(y)d(thing)f(dropp)q(ed)i(in)f(the)f(ro)q(om)f(\(if)i(it)f(is)h(not)f fg
X(sticky)p fm(;)f(see)224 815 y(ab)q(o)o(v)o(e\))h(will)h(go)f(to)g(that)f(lo)
Xq(cation.)21 b(If)15 b(the)h(ro)q(om)e(has)h(its)h fg(sticky)e fm(\015ag)h
X(set)g(the)224 872 y(e\013ect)g(of)g(the)g(dropto)g(will)i(b)q(e)e(dela)o(y)o
X(ed)h(un)o(til)h(the)e(last)g(pla)o(y)o(er)g(lea)o(v)o(es)h(the)f(ro)q(om.)
X224 928 y(The)h(sp)q(ecial)h(lo)q(cation)f fg(home)e fm(ma)o(y)h(b)q(e)h(used)
Xf(as)g(a)g(dropto,)f(as)h(in)h fg(@link)23 b(here)h(=)224 985 y(home)p fm(;)
X14 b(in)i(that)f(case)g(things)h(dropp)q(ed)g(in)g(the)f(ro)q(om)g(will)i(go)
Xd(to)h(their)g(homes.)20 b(T)l(o)224 1041 y(remo)o(v)o(e)15 b(the)g(dropto)f
X(on)i(a)e(ro)q(om)h(go)g(in)o(to)g(that)f(ro)q(om)h(and)g(use)h fg(@unlink)23
Xb(here)p fm(.)224 1163 y fe(5.6)56 b(Homes)224 1249 y fm(Ev)o(ery)15 b(thing)
Xh(or)e(pla)o(y)o(er)i(has)f(a)g(home.)k(F)l(or)c(things,)g(this)h(is)g(the)f
X(lo)q(cation)h(the)224 1305 y(thing)g(returns)f(to)f(when)i(sacri\014ced,)g
X(when)g(a)f(pla)o(y)o(er)g(carrying)g(it)h(go)q(es)f(home,)g(or)224 1362 y
X(when)h(\(if)f(its)h fg(sticky)e fm(\015ag)h(is)g(set\))g(it)h(is)f(dropp)q
X(ed.)21 b(F)l(or)15 b(pla)o(y)o(ers,)f(this)i(is)g(where)224 1418 y(the)f(pla)
Xo(y)o(er)h(go)q(es)f(when)g(they)h(issue)g(the)f fg(home)g fm(command.)k(Home\
Xs)c(ma)o(y)g(b)q(e)h(set)224 1474 y(using)g(the)f fg(@link)g fm(command;)g
X(for)f(example,)i fg(@link)23 b(donut)g(=)15 b fl(<)p fj(r)n(o)n(om-numb)n
X(er)5 b fl(>)224 1531 y fm(or)15 b fg(@link)23 b(me)h(=)15 b fl(<)p fj(r)n
X(o)n(om-numb)n(er)5 b fl(>)p fm(.)20 b(Exits)c(ma)o(y)e(also)h(b)q(e)h(link)o
X(ed)h(to)d(the)i(sp)q(ecial)224 1587 y(lo)q(cation)g fg(home)p fm(;)e(for)h
X(example,)h fg(@link)23 b(north)g(=)h(home)p fm(.)224 1709 y fe(5.7)56 b(Recy\
Xcling)224 1795 y fm(Nothing)16 b(can)f(b)q(e)h(destro)o(y)o(ed)f(in)h fn(Tin)
Xo(y)p fm(MUD,)d(but)i(it)h(is)g(p)q(ossible)h(to)d(recycle)j(just)224 1851 y
X(ab)q(out)e(an)o(ything.)20 b(The)c fg(@name)e fm(command)h(can)h(b)q(e)f(use\
Xd)h(to)f(rename)g(ob)s(jects,)224 1908 y(making)h(it)f(easy)g(to)g(turn)g(a)g
X(silk)h(purse)f(in)o(to)h(a)f(so)o(w's)e(ear)i(or)g(vice)h(v)o(ersa.)j(Extra)
X224 1964 y(exits)d(can)f(b)q(e)h(unlink)o(ed)h(and)f(pic)o(k)o(ed)g(up)f(b)o
X(y)h(their)f(o)o(wner)g(using)h(the)f fg(get)g fm(com-)224 2021 y(mand,)g(and)
Xg(dropp)q(ed)i(lik)o(e)f(things)g(using)f(the)h fg(drop)e fm(command)h(in)h
X(an)o(y)f(ro)q(om)224 2077 y(con)o(trolled)h(b)o(y)f(the)h(dropp)q(er.)224
X2199 y fe(5.8)56 b(Being)19 b(killed)224 2285 y fm(When)d(y)o(ou)f(are)f(kill\
Xed)k(y)o(ou)d(return)g(to)g(y)o(our)f(home)h(and)h(an)o(y)f(items)g(y)o(ou)g
X(w)o(ere)224 2341 y(carrying)g(return)h(to)e(their)i(homes.)k(As)15 b(a)g(con\
Xsolation)g(y)o(ou)g(receiv)o(e)h(50)f(p)q(ennies)224 2398 y(from)g(the)g fn
X(Tin)o(y)p fm(MUD)f(T)l(otal)h(Life)h(Indemnit)o(y)h(insurance)f(compan)o(y)l
X(.)949 2577 y(10)g eop
X%%Page: 11 13
X bop 224 307 a fc(6)69 b(Examples)224 409 y fm(Here)16 b(w)o(e)f(presen)o(t)g
X(examples)h(to)e(demonstrate)h(some)g(of)f(the)i(features)f(of)224 465 y fn
X(Tin)o(y)p fm(MUD.)224 587 y fe(6.1)56 b(Success)18 b(and)i(failure)f(message\
Xs)224 673 y fm(Success)d(and)g(failure)g(messages)f(are)g(fairly)g(straigh)o
X(tforw)o(ard.)j(Just)d(remem)o(b)q(er)224 729 y(that)g(for)f(the)h(messages)g
X(set)g(with)h fg(@osuccess)e fm(and)h fg(@ofail)f fm(the)i(pla)o(y)o(er's)e
X(name)i(is)224 786 y(pre\014xed)g(on)o(to)f(the)g(message)g(when)g(it)h(is)f
X(prin)o(ted,)h(while)h(the)e(messages)g(set)g(with)224 842 y fg(@success)f fm
X(and)i fg(@fail)e fm(are)h(prin)o(ted)h(as-is.)295 898 y(Previously)g(w)o(e)f
X(sa)o(w)f(that)h(y)o(ou)g(can)g(use)g fg(say)p fm(,)g fg(")p fm(,)f(and)i fg
X(:)f fm(to)f(displa)o(y)j(messages.)224 955 y(An)f(older)f(metho)q(d)h(for)e
X(p)q(osing)i(non)g(sequiturs)g(is)f(to)g(set)g(the)g(others)g(success)224 1011
Xy(message)g(on)g(y)o(ourself)g(and)h(then)f(rob)g(y)o(ourself.)20 b(F)l(or)15
Xb(example,)g(if)h(y)o(our)f(c)o(haracter)224 1068 y(is)h(Bett)o(y)e(and)i(y)o
X(ou)f(do)224 1162 y fg(@osuccess)23 b(me)g(=)h(starts)f(picking)g(her)h(nose.)
X224 1218 y(rob)g(me)224 1312 y fm(on)15 b(y)o(our)g(screen)h(y)o(ou'll)f(see)
X224 1406 y fg(You)24 b(stole)f(a)h(penny.)224 1462 y(Betty)f(stole)h(one)f
X(of)h(your)f(pennies!)224 1556 y fm(while)17 b(the)e(other)g(pla)o(y)o(ers)g
X(will)i(see)224 1650 y fg(Betty)23 b(starts)g(picking)g(her)h(nose.)224 1744 y
Xfm(An)16 b(easier)f(w)o(a)o(y)f(to)h(accomplish)i(this)e(is)h(to)e(simply)j
X(do)224 1837 y fg(:starts)23 b(picking)g(her)g(nose.)224 1931 y fm(then)16 b
X(b)q(oth)f(y)o(ou)g(and)g(the)h(others)e(see)224 2025 y fg(Betty)23 b(starts)
Xg(picking)g(her)h(nose.)224 2119 y fm(When)16 b(using)g fg(")f fm(and)g fg
X(:)g fm(don't)g(follo)o(w)g(them)g(with)h(a)f(space)g(b)q(ecause)h(it)g(will)
Xh(b)q(e)224 2175 y(included)h(in)e(the)f(output;)g(put)g(the)h(message)e(righ)
Xo(t)h(up)h(against)f(the)g(quotes)g(or)224 2232 y(colon.)949 2577 y(11)g eop
X%%Page: 12 14
X bop 224 307 a fe(6.2)56 b(Making)19 b(y)n(our)g(home)224 393 y fm(The)d(mini\
Xmal)g(steps)g(for)e(making)h(y)o(our)g(home)g(are)280 472 y(1.)22 b(Mak)o(e)
X14 b(the)i(ro)q(om)e(for)h(y)o(our)f(home)i(with)f(the)g fg(@dig)g fm(command\
X.)20 b(W)l(rite)15 b(do)o(wn)338 528 y(the)g(ro)q(om)g(n)o(um)o(b)q(er)g(in)h
X(case)f(the)h(follo)o(wing)g(step)f(tak)o(es)f(a)h(long)h(time.)280 616 y(2.)
X22 b(Mak)o(e)14 b(or)h(acquire)h(an)f(exit.)20 b(In)c(order)f(to)g(use)g(the)
Xg fg(@open)g fm(command)g(y)o(ou)338 672 y(m)o(ust)f(o)o(wn)h(the)g(ro)q(om)g
X(that)f(y)o(ou)h(are)g(doing)h(the)f fg(@open)g fm(in.)20 b(The)c(alternativ)
Xo(e)338 729 y(is)g(to)e(\014nd)i(a)f(ro)q(om)f(with)i(an)f(exit)h(that)e(isn'\
Xt)h(link)o(ed)i(and)f(use)f(it.)280 817 y(3.)22 b(Mak)o(e)14 b(a)h(link)i(to)
Xd(y)o(our)h(home.)20 b(Once)c(y)o(ou'v)o(e)e(made)i(or)e(found)i(an)f(unlink)
Xo(ed)338 873 y(exit)g(simply)i(use)e(the)h fg(@link)e fm(command)h(to)g(link)
Xh(the)g(exit)f(to)g(y)o(our)g(ro)q(om.)280 961 y(4.)22 b(Find)16 b(a)f(ro)q
X(om)f(to)h(whic)o(h)h(y)o(ou)f(can)g(mak)o(e)g(a)g(link)h(in)g(order)f(to)g
X(ha)o(v)o(e)g(an)g(exit)338 1017 y(from)f(y)o(our)h(ro)q(om)f(\(this)i(is)f
X(a)g(ro)q(om)g(with)g(the)h fg(link_ok)e fm(\015ag)h(set\).)k(F)l(or)c(the)
X338 1074 y(sak)o(e)g(of)f(example)i(w)o(e'll)g(pretend)g(the)f(n)o(um)o(b)q
X(er)h(of)f(this)g(ro)q(om)g(is)g(711;)f(w)o(e'll)338 1130 y(b)q(e)i(using)g
X(it)f(in)h(step)f(6.)20 b(Without)15 b(this)h(y)o(ou'd)e(b)q(e)i(able)g(to)f
X(go)f(to)h(y)o(our)g(home)338 1187 y(but)g(y)o(ou)g(w)o(ouldn't)g(ha)o(v)o
X(e)g(an)o(y)g(w)o(a)o(y)f(to)h(get)f(out)h(of)g(it.)280 1274 y(5.)22 b(Set)15
Xb(the)g(link)i(from)d(y)o(ou)h(to)g(y)o(our)g(home.)k(Go)c(in)o(to)g(y)o(our)
Xg(ro)q(om)f(and)i(do)338 1369 y fg(@link)23 b(me)h(=)f(here)280 1463 y fm(6.)
Xf(Mak)o(e)14 b(the)i(exit)f(and)h(link)g(it)g(to)e(the)i(destination)338 1557
Xy fg(@open)23 b(out)338 1614 y(@link)g(out)g(=)h(#711)338 1708 y fm(\(The)15 b
Xfg(#)g fm(isn't)g(mandatory)l(.\))295 1787 y(Of)g(course)g(there)h(are)f(prob\
Xably)g(v)m(arious)h(details)g(that)f(y)o(ou)g(w)o(ould)g(w)o(an)o(t)224 1843 y
X(to)g(tak)o(e)f(care)h(of)g(in)h(addition)g(to)f(the)g(ab)q(o)o(v)o(e)g(steps\
X.)20 b(F)l(or)14 b(example,)i(if)g(y)o(ou're)224 1900 y(an)o(tiso)q(cial)g
X(and)g(w)o(an)o(t)e(to)g(prev)o(en)o(t)h(other)g(p)q(eople)i(from)d(using)i
X(y)o(our)f(home)g(ro)q(om)224 1956 y(y)o(ou'd)g(do)224 2035 y fg(@lock)23 b
X(down)h(=)f(me)224 2114 y fm(assuming)16 b(that)e fg(down)h fm(is)g(the)h(exi\
Xt)f(y)o(ou)g(made)g(in)h(step)g(2.)j(Along)d(a)f(similar)h(v)o(ein)224 2170 y
X(y)o(ou)f(migh)o(t)g(not)g(w)o(an)o(t)f(other)h(p)q(eople)h(linking)i(to)c
X(y)o(our)h(ro)q(om)f(in)j(whic)o(h)f(case)224 2227 y(y)o(ou'd)f(turn)g(o\013)
Xf(the)i fg(link_ok)e fm(\015ag)h(on)g(y)o(our)g(ro)q(om.)k(Y)l(ou)c(migh)o
X(t)g(also)g(set)g(the)224 2283 y(description)i(of)e(y)o(our)f(home)i(ro)q(om.)
Xj(If)c(y)o(ou)g(o)o(wn)g(the)g(exit)h(y)o(ou)f(could)h(also)f(set)224 2340 y
X(the)g(success,)h(others)f(success,)g(fail,)h(and)f(others)g(fail)h(messages)
Xf(on)g(the)g(exit)h(to)224 2396 y(y)o(our)f(home.)20 b(Without)15 b(the)g(des\
Xcriptions)i(places)f(and)f(things)h(are)f(b)q(oring)g(and)224 2452 y(unin)o
X(teresting.)949 2577 y(12)g eop
X%%Page: 13 15
X bop 224 307 a fe(6.3)56 b(Lo)r(c)n(k)18 b(k)n(ey)g(b)r(o)r(olean)g(examples)
X224 393 y fm(When)e(using)g(the)f fg(@lock)f fm(command)h(the)h(k)o(ey)f(is)h
X(either)f(another)g(ob)s(ject)g(or)g(some)224 449 y(b)q(o)q(olean)h(com)o(bin\
Xation)g(of)f(other)g(ob)s(jects.)k(If)c(the)h(k)o(ey)f(starts)f(with)h(a)g fg
X(*)g fm(then)h(that)224 506 y(ob)s(ject)f(m)o(ust)f(b)q(e)i(a)f(pla)o(y)o(er.)
X295 562 y(F)l(or)f(example,)i(if)g(a)e(ro)q(om)h(has)g(a)g(direction)i fg(out)
Xd fm(and)i(y)o(ou)e(w)o(an)o(t)h(to)f(prev)o(en)o(t)224 619 y(pla)o(y)o(ers)h
X(from)g(carrying)g(the)g(ob)s(ject)g fg(xyz)g fm(when)g(they)h(go)e(out,)h
X(y)o(ou)g(w)o(ould)g(use)224 713 y fg(@lock)23 b(out)h(=)g(!xyz)224 806 y fm
X(or)15 b(if)h(y)o(ou)e(w)o(an)o(t)g(to)h(prev)o(en)o(t)g(the)g(pla)o(y)o(er)h
X(Julia)g(from)f(using)h(the)f fg(out)g fm(exit)g(y)o(ou)224 863 y(w)o(ould)h
X(use)224 957 y fg(@lock)23 b(out)h(=)g(!*Julia)224 1051 y fm(If)16 b(y)o(ou)e
X(w)o(an)o(t)h(to)f(prev)o(en)o(t)h(only)h(Julia)h(from)d(going)h(out)g(with)h
Xfg(xyz)e fm(y)o(ou)h(w)o(ould)h(use)224 1144 y fg(@lock)23 b(out)h(=)g(\()f
X(*Julia)g(&)h(!xyz)f(\))224 1266 y fe(6.4)56 b(Ersatz)18 b(commands)224 1352 y
Xfm(Y)l(ou)e(can)f(mak)o(e)g(new)g(commands)g(b)o(y)g(making)h(an)f(exit)g(and)
Xh(then)f(lo)q(c)o(king)i(it)e(to)224 1408 y(something)h(imp)q(ossible)h(to)e
X(ha)o(v)o(e)f(and)i(then)f(assigning)h(the)g(failure)g(and)f(others)224 1465 y
X(failure)h(messages)f(to)g(it.)20 b(F)l(or)14 b(example,)i(assume)f(the)g(fol\
Xlo)o(wing)h(commands)f(ha)o(v)o(e)224 1521 y(b)q(een)h(used)224 1615 y fg(@op\
Xen)23 b(eat)224 1672 y(@link)g(eat)h(=)g(here)224 1728 y(@lock)f(eat)h(=)g
X(something_impossible)224 1784 y(@fail)f(eat)h(=)g(You)f(try)g(to)h(eat)f(but)
Xh(only)f(gag)224 1841 y(@ofail)g(eat)h(=)f(tries)h(to)f(eat)h(but)f(instead)g
X(gags)224 1935 y fm(Then)16 b(when)g(y)o(ou)e(use)i(the)f(command)g fg(eat)g
Xfm(the)g(others)g(in)h(the)f(ro)q(om)g(will)i(see)224 1991 y fg(Betty)23 b
X(tries)h(to)f(eat)h(but)f(instead)g(gags)15 b fm(and)g(y)o(ou'll)h(see)f fg
X(You)24 b(try)f(to)h(eat)224 2048 y(but)g(only)f(gag)p fm(.)295 2104 y(Note)
X15 b(that)f(this)i(\\new)f(command")g(will)i(only)e(w)o(ork)g(in)h(the)f(ro)q
X(om)f(that)h(y)o(ou)224 2161 y(made)g(it)h(in.)949 2577 y(13)g eop
X%%Page: 14 16
X bop 224 325 a fa(App)s(endix)224 459 y fc(A)69 b(Wizard)22 b(comm)n(ands)224
X560 y fg(@chown)14 b fl(<)p fj(obje)n(ct)t fl(>)i fg(=)f fl(<)p fj(player)5 b
Xfl(>)224 634 y fm(Changes)15 b(the)h(o)o(wnership)f(of)g fl(<)p fj(obje)n(ct)
Xt fl(>)h fm(to)e fl(<)p fj(player)5 b fl(>)p fm(.)224 751 y 1495 5 v 224 868 a
Xfg(@dump)224 942 y fm(F)l(orces)15 b(a)g(dump)h(of)e(the)i(database.)j(This)d
X(command)f(isn't)g(really)h(necessary)g(since)224 998 y fg(@shutdown)e fm(do)
Xq(es)i(one)f(as)g(w)o(ell)h(as)f(the)g(regular)g(p)q(erio)q(dic)j(dumps.)224
X1115 y 1495 5 v 224 1231 a fg(examine)c fl(<)p fj(name)s fl(>)224 1288 y fg
X(examine)g(#)p fl(<)p fj(numb)n(er)5 b fl(>)224 1362 y fm(Prin)o(t)15 b(a)g
X(detailed)i(description)g(of)d(ob)s(ject)h(sp)q(eci\014ed)i(b)o(y)e fl(<)p fj
X(name)s fl(>)i fm(or)d(b)o(y)224 1418 y fl(<)p fj(numb)n(er)5 b fl(>)p fm(.)
X20 b(All)d(six)f(strings)f(listed)h(in)g(section)g(5.2)e(are)h(prin)o(ted.)
X224 1492 y(When)h fl(<)p fj(name)s fl(>)g fm(is)g(a)e(ro)q(om)h(or)g fg(here)
Xf fm(it)i(lists)g(the)f(o)o(wner,)f(k)o(ey)l(,)h(n)o(um)o(b)q(er)h(of)224 1549
Xy(p)q(ennies,)h(the)e(description,)i(con)o(ten)o(ts,)d(and)h(exits.)20 b(When)
Xc fl(<)p fj(name)s fl(>)g fm(is)g(a)f(direction)224 1605 y(lists)h(the)f(dire\
Xction)i(n)o(um)o(b)q(er,)e(o)o(wner,)f(k)o(ey)l(,)h(p)q(ennies,)i(and)e(desti\
Xnation.)224 1722 y 1495 5 v 224 1838 a fg(@force)f fl(<)p fj(victim)s fl(>)j
Xfg(=)e fl(<)p fj(c)n(ommand)5 b fl(>)224 1955 y 1495 5 v 224 2071 a fg(@newpa\
Xssword)14 b fl(<)p fj(player)5 b fl(>)16 b fg(=)f fl(<)p fj(p)n(asswor)n(d)5 b
Xfl(>)224 2145 y fm(Changes)15 b(the)h(passw)o(ord)e(for)g fl(<)p fj(player)5 b
Xfl(>)p fm(.)224 2262 y 1495 5 v 224 2378 a fg(@shutdown)224 2452 y fm(Sh)o
X(uts)15 b(do)o(wn)g(the)h fn(Tin)o(y)p fm(MUD)e(serv)o(er.)949 2577 y(14)g eop
X%%Page: 15 17
X bop 224 307 a 1495 5 v 224 432 a fg(@stats)224 507 y fm(Lists)16 b(the)f(tot\
Xal)g(n)o(um)o(b)q(er)g(of)g(ob)s(jects,)f(whic)o(h)i(is)g(the)f(sum)g(of)g
X(the)h(ro)q(oms,)e(exits,)224 564 y(things,)h(and)h(pla)o(y)o(ers,)f(giving)h
X(the)f(coun)o(t)g(for)g(eac)o(h)g(one.)224 689 y 1495 5 v 224 814 a fg(@telep\
Xort)f fm([)h fl(<)p fj(victim)s fl(>)h fg(=)f fm(])g fl(<)p fj(destination)s
Xfl(>)224 889 y fm(T)l(elep)q(orts)h(the)f(ob)s(ject)g(to)f(the)i(sp)q(eci\014\
Xed)h(destination.)k(Ob)s(ject)15 b(can)g(also)h(b)q(e)g fg(me)p fm(.)224 1014
Xy 1495 5 v 224 1139 a fg(@toad)f fl(<)p fj(player)5 b fl(>)224 1214 y fm(T)l
X(urns)16 b fl(<)p fj(player)5 b fl(>)16 b fm(in)o(to)f(an)g(ob)s(ject.)224
X1339 y 1495 5 v 224 1464 a fg(@wall)g fl(<)p fj(message)s fl(>)224 1539 y fm
X(Send)h fl(<)p fj(message)s fl(>)g fm(to)e(all)j(pla)o(y)o(ers.)949 2577 y
X(15)g eop
X%%Page: 16 18
X bop 224 376 a fc(Index)224 462 y fg(")p fm(,)15 b(3,)f(11)224 519 y fg(:)p fm
X(,)h(3,)f(11)224 616 y fg(@chown)p fm(,)g(14)224 673 y fg(@create)p fm(,)g
X(4,)g(7)224 770 y fg(dark)p fm(,)g(9)224 826 y fg(@describe)p fm(,)g(4)224 883
Xy fg(@dig)p fm(,)g(4,)h(7)224 939 y fg(drop)p fm(,)f(1)224 996 y(droptos,)g
X(10)224 1052 y fg(@dump)p fm(,)g(14)224 1150 y fg(examine)p fm(,)g(1,)g(14)
X224 1247 y fg(@fail)p fm(,)g(4,)h(8,)f(11)224 1303 y fg(@find)p fm(,)g(4)224
X1360 y fg(@force)p fm(,)g(14)224 1457 y fg(get)p fm(,)h(1)224 1514 y fg(give)
Xp fm(,)f(1)224 1570 y fg(go)p fm(,)h(2)224 1627 y fg(gripe)p fm(,)f(2)224 1724
Xy fg(help)p fm(,)g(2)224 1781 y fg(here)p fm(,)g(4,)h(8,)f(10,)h(12,)f(14)224
X1837 y(home,)h(5,)g(9,)f(10,)g(12)224 1893 y fg(home)p fm(,)g(2,)h(10)224 1991
Xy fg(inventory)p fm(,)f(2)224 2088 y fg(kill)p fm(,)g(2,)h(7)224 2186 y fg
X(@link)p fm(,)f(5,)h(7,)f(12)224 2242 y fg(link_ok)p fm(,)g(5,)g(9)224 2299 y
Xfg(@lock)p fm(,)g(5,)h(12)224 2355 y fg(look)p fm(,)f(2)224 2452 y fg(me)p fm
X(,)h(4,)f(5,)h(8,)f(10,)g(15)1044 462 y fg(move)p fm(,)g(2)1044 560 y fg(@nam\
Xe)p fm(,)g(5)1044 617 y fg(@newpassword)p fm(,)f(14)1044 715 y fg(@ofail)p fm
X(,)h(5,)g(8,)h(11)1044 771 y fg(@open)p fm(,)f(6,)h(7)1044 827 y fg(@osuccess)
Xp fm(,)f(6,)g(8,)h(11)1044 925 y fg(page)p fm(,)f(3,)h(7)1044 982 y fg(@passw\
Xord)p fm(,)f(6)1044 1080 y fg(read)p fm(,)g(2)1044 1136 y fg(rob)p fm(,)g(3)
X1044 1234 y fg(say)p fm(,)g(3,)h(11)1044 1291 y fg(score)p fm(,)f(3)1044 1347
Xy fg(@set)p fm(,)g(6)1044 1404 y fg(@shutdown)p fm(,)g(14)1044 1460 y fg(@sta\
Xts)p fm(,)g(7,)g(15)1044 1517 y fg(sticky)p fm(,)g(9)1044 1573 y fg(@success)
Xp fm(,)g(6,)g(8,)h(11)1044 1671 y fg(take)p fm(,)f(1)1044 1727 y fg(@teleport)
Xp fm(,)g(7,)g(15)1044 1784 y fg(temple)p fm(,)g(9)1044 1840 y fg(throw)p fm
X(,)g(1)1044 1897 y fg(@toad)p fm(,)g(15)1044 1995 y fg(@unlink)p fm(,)g(7)
X1044 2051 y fg(@unlock)p fm(,)g(7)1044 2149 y fg(@wall)p fm(,)g(15)1044 2206 y
Xfg(whisper)p fm(,)g(3)1044 2262 y fg(wizard)p fm(,)g(9)949 2577 y(16)g eop
X%%Trailer
X end
X%%EOF
END_OF_FILE
if test 37401 -ne `wc -c <'tinymud.ps.xac'`; then
    echo shar: \"'tinymud.ps.xac'\" unpacked with wrong size!
fi
# end of 'tinymud.ps.xac'
fi
echo shar: End of archive 1 \(of 10\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 10 archives.
    echo ">>> now type 'sh joinspl.sh'"
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0