pennmush/game/
pennmush/game/data/
pennmush/game/log/
pennmush/game/save/
pennmush/game/txt/evt/
pennmush/game/txt/nws/
pennmush/os2/
& help
This is the index to the MUSH online help files.

  For an explanation of the help system, type:    help newbie

  For the list of MUSH commands, type:            help commands
  For the list of MUSH topics, type:              help topics
  For an alphabetical list of all help entries:   help entries 
  For information about PennMUSH:                 help code
  
  For a list of flags:                            help flag list
  For a list of functions:                        help function list 
  For a list of attributes:                       help attribute list
  To see the configuration of this MUSH:          @config

If there are any errors in the help text, please notify a wizard
in the game, or send mail to dunemush@pennmush.org.
  
& newbie
  
  If you are new to MUSHing, the help files may seem confusing. Most of
  them are written in a specific style, however, and once you understand
  it the files are extremely helpful.

  The first line of a help file on a command or function will normally be
  the syntax of the command. "Syntax" means the way the command needs to
  be typed in. In the help files, when the syntax of a command is described,
  square brackets [] mean that that part of the command is optional and
  doesn't have to be typed in. Also, pointy brackets <> mean that that part
  of the command needs to be replaced with a specific piece of information.
  
  You should not type the [] or <> brackets when entering a command.
  
(continued in help newbie2 -- type 'help newbie2' without the single quotes)
  
& newbie2

  For example, the syntax of the help command is:
  
  help [<topic>]
  
  What this means is that to get help, you would type first the word "help" and
  then you could optionally type the name of a more specific topic in order
  to get help on that topic. Just typing "help" will work too (that's why the
  <topic> part is optional).
  
  Some common commands that you should look at help for are:
  
    look   say    go    page    pose    take     give    home
  
  Just type help <command> for help. Example: help page
  
(continued in help newbie3)
& newbie3

  There is help available on every standard MUSH command. If you see a command
  or someone mentions one to you that you want to know more about, try just
  typing: help <command name> -- that will most likely bring up the help
  file on it.
  
  Please note that just because there is help available on a command does
  not necessarily mean that the command can be used on this MUSH. The
  siteadmin of the MUSH can choose to turn off some commands. If there's
  something that you would like available, and it isn't, please ask a wizard
  why not.
  
  It is also highly recommended that any new player read the MUSH manual,
  written by Amberyl. It is available by anonymous FTP from:
     ftp.pennmush.org
  in the directory:
     /pub/PennMUSH/Manuals

& topics
Help is available on the following topics:

  ACTION LISTS             ATTRIB-OWNERSHIP         ATTRIBUTES 
  BEING KILLED             BOOLEAN VALUES           CHAT
  CLIENTS                  CONTROL                  COPYRIGHT  
  COSTS                    CREDITS                  DBREFS 
  DROP-TO                  ENACTOR                  EVALUATION 
  EXECUTOR                 EXITS                    FAILURE
  FLAGS                    FUNCTIONS                GENDER 
  GLOBALS                  HERE                     HOMES
  INTERIORS                LINKING                  LISTENING
  LISTS                    LOOPING                  MASTER ROOM 

(continued in help topics2)
& topics2
  ME                       MONEY                    MUSHCODE
  NON-STANDARD ATTRIBUTES  PARENTS                  PASSWORD                 
  POWERS                   PUPPETS                  QUEUE 
  REGEXPS                  REGISTERS                ROBBERY
  SEMAPHORES               SETTING-ATTRIBUTES       SPOOFING
  STACK                    STRINGS                  SUBSTITUTIONS
  SUCCESS                  SWITCHES                 TYPES OF OBJECTS
  USER-DEFINED COMMANDS    VERBS                    WARNINGS
  WILDCARDS                ZONE MASTER ROOMS        ZONE MASTERS
  ZONES  
  
Type "help <topic name>" for help.
& ACTION LISTS
  Action lists are simply lists of actions that are all executed at once.
  You can have an action list in a user-defined command, in one of the
  a-attributes, or in many other commands.

  Actions in an action list are separated by semicolons. Each action is 
  simply a separate MUSH command. If part of the action (such as the text
  in an @emit, for example) contains a semi-colon or comma, you may need
  to enclose that part in curly braces {}. You can also nest action lists
  inside each other by enclosing each action list in braces {}.

  Substitution will be performed on the contents of action lists before
  they are executed.

(continued in help action2)
& ACTION2
  Example 1:
    > @asuccess Gift = @pemit %#={The box pops open; surprise!} ; 
        @name me=New Toy ; @desc me={A shiny new toy, just for %N!}
    > take gift
    The box pops open; surprise!
    > look new toy
    New Toy
    A shiny new toy, just for Cyclonus!
            
  Example 2:
    > &TEST me=$test:@emit {Testing; testing; one, two.} ; 
        @dolist 1 2 3={think {Test ##, success.} }
    > test
    Testing; testing; one, two.
    Test 1, success.
    Test 2, success.
    Test 3, success.

See also: ATTRIBUTES, SUBSTITUTION, @asuccess, @dolist
& ATTRIB-OWNERSHIP
  ATTRIBUTE OWNERSHIP
  
  The first person who creates an attribute on an object is the owner
  of that attribute. If you lock an attribute, using the @atrlock command,
  only the person who owns the attribute will be able to alter the
  attribute. This allows you to create standard commands on objects and
  then @chown them to others without letting them alter them. 

  Attribute ownership is NOT changed when the object itself is @chown'ed.
  To change attribute ownership, you must use the @atrchown command.

  You must control an object in order to set attributes on it.

See also: @atrlock, @atrchown, ATTRIBUTES
& ATTRIBUTES
& ATTRIBUTES LIST
& ATTRIBUTE LIST
  Attributes with (*) after them are special, cannot be set by players,
  and may only be visible to wizards or admin. For those attributes, there
  is no @-command, so you can just type 'help <attribute name>' for help.
  For all other attributes, type 'help @<attribute name>' for help.

Standard Attributes: (see @list/attribs for the complete list)
  AAHEAR        ACLONE        ACONNECT      ADEATH        ADESCRIBE
  ADISCONNECT   ADROP         AEFAIL        AENTER        AFAILURE
  AHEAR         ALEAVE        ALFAIL        AMHEAR        AMOVE
  APAYMENT      ASUCCESS      AWAY          CHARGES       COST 
  DEATH         DESCRIBE      DOES          DROP          EALIAS 
  EFAIL         ENTER         FAILURE       HAVEN         IDESCRIBE
  IDLE          LALIAS        LAST (*)      LASTSITE (*)  LEAVE
  LFAIL         LISTEN        MOVE          ODEATH        ODESCRIBE
  ODROP         OEFAIL        OENTER        OFAILURE      OLEAVE
  OLFAIL        OMOVE         OPAYMENT      OSUCCESS      OXENTER
  OXLEAVE       OXMOVE        PAYMENT       PASSWORD (*)  QUEUE (*)
  RQUOTA (*)    RUNOUT        SEX           STARTUP       SUCCESS

(continued in help attributes2)
& ATTRIBUTES2
  An attribute is part of the code on an object that makes it unique. An
  attribute can contain any sort of text -- from a single word, to a long
  paragraph, to a piece of MUSHcode. Some attributes are standard in 
  PennMUSH. That means that their effects are pre-set. 

  Standard attributes can be set using one of the following commands:
    @<attribute name> <object>=<content>
    @set <object>=<attribute name>:<content>
    &<attribute name> <object>=<content>

  It is also possible to have non-standard attributes, which can be named 
  anything you like. Please see help NON-STANDARD ATTRIBUTES for more 
  information on those. 

(continued in help attributes3)
& ATTRIBUTES3
  Any attribute name can be shortened, but a shorter forms run the risk
  of conflicting with other attribute names.  This could result in you
  setting an unwanted attribute. 

For example:
    @adesc me=think %N looks at you.
  will set your ADESCRIBE attribute just as
    @adescribe me=think %N looks at you.
  would.

  To see the attributes that are set on you or on any of the objects you own,
  you should use the "examine" command. This will list all of the attributes
  and their contents. As this can get very spammy for any large object, you
  can also examine specific attributes by using this format:
    examine <object>/<attribute>
  
(continued in help attributes4)
& ATTRIBUTES4
  Attributes can be owned by someone other than the object they are set on.
  This allows the person to change the content of just that attribute while 
  not the rest of the object. Attributes can also be locked, which prevents
  them from being changed by anyone.

  In addition to the standard attributes with pre-set effects, there are
  some special attributes that date from the days before you could set
  non-standard attributes with any name you wanted. These are the 
  attributes VA-VZ, WA-WZ, XA-XZ. These attributes have no pre-set effects,
  and were just to allow players to store any text or MUSHcode that they
  wished in those attributes. Now that non-standard attributes are available,
  it is highly recommended that you instead use them, since you can use
  longer and descriptive names for attributes, which makes it much easier
  to examine and work on objects.

See also: ATTRIB-OWNERSHIP, @set, examine, @atrchown, @atrlock, hasattr()
          get(), v(), NON-STANDARD ATTRIBUTES, SETTING-ATTRIBUTES
& BEING KILLED
 
  Getting killed is no big deal. If you are killed, you return to
  your home, and  all things you carry return to their homes. You 
  also collect 50 pennies in insurance money (unless you have >= 10000 
  pennies or you were killed via the Wizard slay command). See MONEY.  
  Generally, killing is not encouraged unless absolutely necessary.
  It can be extremely rude and annoying.

  Many MUSHes choose to disable the kill command.

See also: kill, slay, @death
& BOOLEAN VALUES 

  A boolean variable, for those of you not familiar with programming, 
  is a variable that is either true or false. Normally, a value of
  1 is considered "true" and a value of 0 is considered "false". Many
  MUSH functions return either 1 if they are true or 0 if false.
  For example, the hasflag() function tests to see if an object has
  a certain flag set on it. If
        hasflag(<object>,<flag name>) 
  is true (the object has the flag), it will return 1. If it is false, 
  it will return 0. 
  
  Now, any string is interpreted as true(1), except for the null string
  (ie, just a blank), which is considered false (0). Anything that 
  begins with a #-1 is also considered false. All dbref #s are considered
  true. Any number except 0 (including negative numbers), is considered
  true.
  
(continued in help boolean2)
& BOOLEAN2
  Note that this may differ on some MUSHes, since it is possible to use
  the Boolean value system from TinyMUSH2.2 instead.

  Examples:     
    not(foo) = 0  
    not(<null string>) = 1
    not(-66) = 0
    not(0) = 1
    not(#-1) = 1
    not(#12) = 0
  And so on...
  (note: These rules only apply when a function expects a Boolean
  value, not for strings that expect other values.)

See also: BOOLEAN FUNCTIONS, not(), t()
& CLIENTS
  Clients are special software programs that you can use to connect to 
  MUSHes. They are usually much nicer to use than raw telnet and give you
  many additional features, such as larger text buffers (so you can type
  more), backscroll, history of previous commands, macros, and so on. 

  Here is a list of common clients and the anonymous ftp sites at which
  you can get them. To find out how to anonymous ftp, ask your system 
  administrator. Please note that the below sites are subject to change.
  The below are listed solely for your information and possible benefit. 
  The developers of PennMUSH have nothing to do with the clients. 

  OPERATING                   FTP or WWW SITE/
  SYSTEM          CLIENT      DIRECTORY
  -----------------------------------------------------------------------
  UNIX            Tinyfugue   tf.tcp.com
                              /pub/tinyfugue
  WINDOWS 32-bit  MUSHClient  ftp.pennmush.org
                              /pub/PennMUSH/Win32Binaries
  MACINTOSH       MUDDweller  http://www.shareware.com (search for Muddweller)

  WINDOWS         Pueblo      http://www.chaco.com

& CONTROL
  Controlling an object basically means that you have the power to change
  the object's characteristics such as flags and attributes. It may also
  mean that you have the ability to destroy it.

  There are 3 basic rules to controlling objects:
   1) You control anything you own.
   2) A wizard controls everything.
   3) Anybody controls an unlinked exit, even if it is locked.

  Builders should beware of 3, lest their exits be linked or stolen.

  If the INHERIT flag is enabled, there are some additional rules:
  1) An object with the INHERIT flag set controls its owner and anything
     its owner owns.
  2) An object without the INHERIT flag set does not control its owner,
     but controls any object with the same owner which does not have
     the inherit flag set.
  3) If a player is set INHERIT, all of their objects may control them
     and each other.

(continued in control2)
& CONTROL2
  
  To summarize, <Object> controls <thing> if:
  
  1. <Object> is a wizard.
  
  2. <Object> owns <thing>, and <Object> is a player.
 
  3. <Object> and <thing> have the same owner, and <thing> is neither
     a player nor INHERIT.
 
  3. <Object> has the same owner as <thing>, and <object> is INHERIT.  
 
  4. <Object> has the same owner as <thing>, and the owner is INHERIT.
  
  5. <Object> is in the same zone as <thing>, and <object> passes the
     Zone lock of the zone object. Also, <thing> cannot be INHERIT,
     nor can it be a player.

See also: controls(), INHERIT, ZONES, ZONE MASTERS
& COPYRIGHT
  Any use of this help text must contain this copyright notice.
  This help text was written by the following people for the 
  following versions of MUSH:

    Jin                   TinyMUSH 1.0
    Moonchilde & Leona    PernMUSH 1.02 - 1.15
    Amberyl               PennMUSH 1.16 - 1.50p10
    Javelin               PennMUSH 1.50p11+
    Nightbird             PennMUSH 1.7.0+

& COSTS
  These are usually:
  
          kill: 10 pennies (or more, up to 100 pennies)
          page: 0 pennies
          @dig: 10 pennies
          @create: 10 pennies (or  more, up to 505M),
          @find: 100 pennies
          @search: 100 pennies
          @entrances: 100 pennies
          @link: 1 penny (if you  didn't already own it,
                          +1 to the previous owner).
          @open: 1 penny (2 pennies if linked at  the same time)
  
  Type '@config/costs' to get the costs for the particular MUSH you are on.

See also: MONEY, money(), score
& CREDITS
  
  The original TinyMUSH 1.0 code was written by Lawrence Foard, and
  was based upon James Aspnes' TinyMUD server. Since then, the code
  has been modified by the programmers of MicroMUSE (then MicroMUSH),
  and Joseph Traub (Moonchilde of PernMUSH).
  
  From January 1992 to January 1995, Lydia Leong (Amberyl of PernMUSH / 
  Polgara of Belgariad) maintained the code currently known as
  PennMUSH 1.50.

  From January 1995 on, Alan Schwartz (Paul of DuneMUSH / Javelin elsewhere)
  has been maintaining this code.
  
  Additional credits go to:
    Talek and Trivian: co-developers with Javelin
    Rhyanna: former co-developer
    Nick Gammon: win32 port                     Sylvia: os2 port
    Pavel Kankovsky and Thorvald Natvig: rewrites of things
    Naomi Novik: rewrite of the help files for 1.7.0
    Ambar (PernMUSH):  debugging and lots of other stuff (PernMUSH v1.14)
    Annalyn (PernMUSH): lots of code ideas, algorithms, general help
    Javelin and Talek: (Belgariad): lots of ideas for various things
    Delta (Twilight), Jim Miller: some portability tweaks and error fixing
    Durnik, Shaav, Varana, Henrik, and other Belgariad players: playtesting
    Rhyanna: ideas and code for various things, the revised lock system
  ... plus the TinyMUSH 2.0 mushhacks and the myriad people using this server.
& DATABASE
& DBREFS
& DBREF NUMBER
& DBREF #
  You will find the term "dbref" or "dbref number" used frequently in these
  help files and in MUSHcode. It is an abbreviation of "database reference
  number".
  
  The database is the part of MUSH that stores all the information about 
  this particular MUSH. Players, things, rooms, and exits are all objects
  in the database. Each object in the database has a unique dbref number
  that is set when the object is created. You can use the dbref number to
  refer to an object that is not in your current location, and it is 
  especially important for global code.

  Using DBREFs is also faster than using names, even if the object is
  in your location. This is because whenever you try to do something with
  an object (such as look at it, take it, etc.), the MUSH first has to
  locate the object. Since the dbref is unique, it can immediately find
  the object rather than checking through all the contents of your area
  to see if one matches the name.

(continued in help dbref2)
& DBREF2
  
  If you own or control an object, you will see its dbref number listed
  right after its name when you look at it (unless you are set MYOPIC).

  Example:
    > look me
    Cyclonus(#3PWenAMc)
    A very short desc.

  The dbref number is indicated by the number/pound sign (#). Cyclonus's
  dbref is #3. The letters following the dbref are the abbreviations of
  the flags set on the object. NOTE: the abbreviation of the OPAQUE
  flag is 'O' (o), which looks like '0' (zero) on some clients. Make sure 
  you have the right number before using it in your code!

See also: MYOPIC, OPAQUE, MUSHCODE
& DROP-TOS

  When you use the @link command on a room, it sets another room or object
  as the DROP-TO location. Any object that someone drops in the room will
  automatically be sent to the drop-to location, rather than staying in the
  room.

  If the object is set STICKY, it will instead go to its home. If the 
  room is set STICKY, all objects dropped in the room will stay there
  until the last player leaves/disconnects, at which point all of them
  will be sent to the drop-to location.

  This is very useful for keeping rooms uncluttered. 

See also: @link, STICKY, LINK_OK
& ENACTOR
  The enactor is the object that does something (enacts something :).
  This is an important concept in MUSH, because the way many commands
  work will depend on who enters the command (ie, who the enactor is).
  Any type of object can be an enactor. 

  There are two %-substitutions that involve the enactor: %# and %N. The
  first returns the enactor's dbref # and the second returns the enactor's
  name. If, for example, you have an @osucc on an object that includes the
  %N symbol, whenever someone picks up the object, that %N will be 
  replaced with the name of the enactor (the person who typed 'get <object>'
  in this case). 
  
See also: EXECUTOR, SUBSTITUTION, DBREF
& EVALUATION ORDER
  Whenever some text is entered by an object or thing, the MUSH program
  attempts to match it against a valid game command in the following 
  order of possible commands:

    Special game commands: WHO, QUIT, etc.
    "home" command
    Single-token commands: ", :, ;, +
    Exits in the room
    @-commands
    Regular game commands: get, inventory, etc.
    Enter aliases
    Leave aliases
    User-defined commands on nearby objects. All such $commands are matched
      and executed.
    If there are no user-defined commands nearby:
      If the zone of the player's location is a zone master room,
        Zone master room exits
        Zone master room user-defined commands
      Else
        User-defined commands on the zone of the player's location

(continued in help evaluation2)
& EVALUATION2
    If still nothing is matched:
      User-defined commands on the player's personal zone
    If nothing, including zone commands, has been matched:
      Global exits
      Global user-defined commands: all $commands in the Master Room are
        matched. Local commands are always checked first and ALWAYS negate
        global commands.

  Note that if something is typed in that results in a "Huh?" all the
  objects in the master room will end up being checked for it. This is
  one of the reasons why having too many global commands can lead to lag.

  Because local commands overrule global commands, you can easily prevent
  a global command from working in a specific room by setting a copy of
  the global command in that room. Alternatively, if a global command is
  oddly not working in a room, you should check for copies of the command
  word in the room (using @scan).
& EXECUTOR
  The executor of a command is the object actually carrying out the command.
  This differs from the enactor, because the enactor is the object that sets
  off the command. In some cases, the enactor and the executor will be the
  same. There is a %-substitution, %!, that is replaced by the dbref # of
  the executor of the command.

For example:
    @emit %N is the enactor and %! is the executor!
    > Cyclonus is the enactor and #6 is the executor!
    @create Box
    > Created: Object #10
    &DO_EMIT box=$emit:@emit %N is the enactor and %! is the executor!
    emit
    > Cyclonus is the enactor and #10 is the executor!

  In the first case, Cyclonus directly entered the command and was therefore
  both the enactor and the executor. In the second, Cyclonus set off the 
  command on the box, so Cyclonus was still the enactor, but the box was
  the object that was actually doing the @emit, and was thus the executor.

See also: ENACTOR, SUBSTITUTION
& EXITS
  An exit is a one-way link that takes you from its source room to its 
  destination room. To open an exit from a room, you must control that room.
  To open an exit to a room, you must either control the room or it must be 
  set LINK_OK. If an exit is set DARK is will not show up in the list of 
  obvious exits in a room.

  If an exit is set TRANSPARENT, someone who looks at the exit will also
  see the description and contents of the destination room. If an exit is 
  set CLOUDY, someone who looks at the exit will also see the contents of 
  the room beyond, but not its description. If an exits is set -both-
  CLOUDY and TRANSPARENT, the description but not the contents will be seen.
   
  You can set commands on exits and have them execute, thus potentially 
  saving objects. If you wish to do so, note that [loc(exit)] is the 
  exit's destination, and [home(exit)] is the exit's starting point. If an 
  exit @emit's something, it will be heard in the destination room.
   
(continued in exits2)
& EXITS2
  You can create an exit that sends those who go through it to their homes
  by typing '@link <EXIT>=home'.

  Starting with PennMUSH version 1.50p10, exits can have more than one 
  destination. To make an exit with a variable destination, open the exit 
  (using @open),  then type '@link <EXIT>=variable'. Finally, add an 
  attribute named 'DESTINATION' to the exit (&destination <EXIT>), which 
  will be evaluated for the dbref # of the destination room when the exit 
  is used. 
   
For example:
  @open South <S>;s;south
  @link s=variable
  &destination s=[switch(rand(3),0,#100,1,#101,2,#102)]
   
  This exit would take you to either room #100, #101, or #102 depending on 
  the random number. 

  Only wizards can create variable exits, since a variable exit can take 
  you to any room.

See also: @link, @open, rooms, link_ok, CLOUDY, TRANSPARENT, @firstexit
& FAILURE
  FAILURE  

  A "failure" usually occurs when you try to do something that is 
  governed by an @lock and you don't pass the lock. If you try to
  take a player or thing, and you don't pass their @lock, you will
  set off their @fail/@ofail/@afail attributes. If you try to go
  through an exit, and you don't pass its @lock, you will similarly
  set off its @fail/@ofail/@afail.

  Many other things can also be locked -- see @lock and locktypes for 
  more information. However, there are failure messages at this time
  only for the above, for failing to enter an object 
  (@efail/@oefail/@aefail), and for failing to leave an object
  (@lfail/@lefail/@alfail).

See also: @lock, @fail, @efail, @lfail
& GENDER
& SEX
  Gender on a MUSH is entirely up to you. You can set yourself (or any
  of your objects) to be male, female, neuter, or plural. If whatever
  is in the SEX attribute is not recognizable, the MUSH will assume 
  the object is neuter. Setting a gender attribute will enable 
  pronoun substitution by the MUSH. The SEX attribute is visual to
  anyone who wants to see it. 

See also: @sex, SUBSTITUTION
& GLOBALS
& GLOBAL COMMANDS
  A command is "global" if it can be used anywhere in the world of the
  MUSH. The standard MUSH commands are all global, so this term is 
  usually used to refer to user-defined commands on objects in the
  Master Room of the MUSH. Global commands very greatly from MUSH to
  MUSH, but you can usually find MUSH-specific help on them by
  typing "+help". 

See also: MASTER ROOM, USER-DEFINED COMMANDS, EVALUATION
& HERE
  The word 'here' refers to the room you are in. For example,
  to rename the room  you're in (if you control it), you could enter 
  "@name here= <new name>". 
& HOMES
  Every thing or player has a home, which is usually the room where
  it was created. You can reset your home or the home of any object
  you own with the @link command: @link <me|object>=<location>. You
  must also control <location>, unless that location (room or thing)
  is set ABODE or LINK_OK.

  When a player types 'home', s/he is sent back to the home room. When 
  a thing with the STICKY flag set on it is dropped, it also goes to 
  its home location. Note that if the FIXED flag is set on a player, 
  he/she cannot use the 'home' command.

  You can create an exit that sends players home by doing:
        @link <exit name>=home
  You can set the drop-to in a room to home by doing:
        @link <room dbref or "here">=home

See also: DROP-TOS, @link, STICKY, LINK_OK, FIXED, home, EXITS
& INTERIORS
  Here's a quick description of how to make things that can be entered:
        
  @create Car
  @desc Car=A shiny red car.
  @idesc car=You are sitting inside a luxurious sportscar.
  @set Car=enter_ok
  @oxleave car=climbs out of the car.   { The 'ox' messages are shown to 
  @oxenter car=climbs into the car.     { those OUTSIDE the object.
  @oenter car=joins you inside the car. { The 'o' messages are shown to 
  @oleave car=gets out of the car.      { those INSIDE the object
  @enter car=You get into the car.      { The plain messages are shown to 
  @leave car=You get out of the car.    { the one entering or leaving 
       
(continued in help interiors2)
& INTERIORS2
  Now, if you want people inside to be able to hear and communicate with 
  the outside, you also need to do the following.
   
  @set car=audible  (lets people outside hear what's being said in the car.
  @listen car=*     (lets people inside hear what's being said outside.
  @prefix car=From inside the car,
  @inprefix car=From outside,
  @filter car=* has arrived.,* has left.,joins you inside the car.,
    gets out of the car.
  @infilter car=* has arrived.,* has left.,* climbs out of the car.,
    * climbs into the car.

(The filters will keep people on the outside from seeing the 'o' messages and 
people on the inside from seeing the 'ox' messages which is a good thing.)
        
See also: enter, leave, @prefix, @filter, AUDIBLE, @listen
& LAST

  This attribute shows the last time you connected to the MUSH. It is
  only visible to objects that control you (wizards, you or your objects)
  or if you set yourself VISUAL.
& LASTSITE
  LASTSITE

  This attribute gives the name of the site you last connected from.
  Mortals cannot set it.
& LINKING  

  You can link to a room if you control it, or if it is set 
  LINK_OK or ABODE. Being able to link means you can set the homes of
  objects or yourself to that  room if it is set ABODE, and can set 
  the destination of exits to that room if it is LINK_OK.

See also: LINK_OK, ABODE, @link
& LISTENING
  
  There are two basic ways to trigger action on the MUSH. The basic way
  is to type in commands such as 'look' or '@emit'. These commands are not
  seen or heard by other players, although the results of the commands may
  be.

  The other way is to "listen" for something said/emitted in your hearing.
  There are two ways to listen for something in a room. The easiest way
  is to use a combination of @listen and @ahear/@aahear/@amhear. 

  For example:
    > @listen Welcome Mat=* has arrived.
    > @ahear Welcome Mat="Welcome, %N!
    Breaker has arrived.
    Welcome Mat says, "Welcome, Breaker!"

(continued in help listening2)
& LISTENING2
  If you need an object to "listen" for more than one pattern, you can
  also use ^-patterns.  These work similar to user-defined commands, 
  using ^ instead of $. An object must be set MONITOR to have ^-patterns
  activated.

  Syntax:  &<attribute> <object> = ^<pattern>:<action list>

  For example:
  > @set Welcome Mat = MONITOR
  > &greet Welcome Mat = ^* has arrived.:"Welcome, %N!
  > &goodbye Welcome Mat = ^* has left.:POSE says as %N leaves, "Bye!"
  Grimlock has arrived.
  Welcome Mat says, "Welcome, Grimlock!"
  Grimlock has left.
  Welcome Mat says as Grimlock leaves, "Bye!"

(continued in help listening3)
& LISTENING3
  Please note that an object CANNOT trigger its own ^-patterns, so they
  work like @ahear rather than @aahear or @amhear. Additionally, 
  unlike $-commands, @listen and ^-patterns are NOT inherited via @parent.

  Listen patterns are checked after the object's normal @listen attribute.

See also: @listen, @ahear, @amhear, @aahear, MONITOR, USER-DEFINED COMMANDS
& LISTS
  The word "list" is used in the help files to refer to a string that
  is a series of smaller strings separated by one or more spaces. A list
  can also have its elements separated by some other kind of character --
  the separating character is called the "delimiter". 
  For example, the following are all lists:

    #6 #10 #14 #12
    Rumble|Krystal|Bobatron|Rodimus Prime   ('|' is the delimiter here)
    foo bar whee blarg 
    -eek- .boing. yawp #5 7
  
  Lots of MUSHCode depends on lists and manipulating them. Normally, a list
  is made up of similar items (so the fourth list in the example is NOT a 
  typical one).

See also: STRINGS, List Functions
& LOOPING
  Looping in an object can have its good parts and its bad parts.
  The good part is when you activate part of a program multiple times
  to exhaustively perform an operation.  This can be done like this:

    &PART1 object=<action list> ; @trigger me/PART2
    &PART2 object= @select <test for being done>=<false>,@trigger me/PART1

  Looping can be a problem when it goes on without stopping.  The @ps
  command can be used to see if you are looping.  Beware!  A looping
  machine that isn't @halt'd will drain your pennies while you are away
  from the mush!

See also: @ps, HALT, COSTS, @trigger
& MASTER ROOM
  
  The Master Room enables global commands and exits. Exits in the Master
  Room may be used from any location on the MUSH. All objects left in the
  Master Room are checked for user-defined $commands. Those $commands are
  considered global, meaning that they can be used anywhere on the MUSH. 
  Normally, only wizards will have access to the Master Room; if you have
  a global command that you would like to see enabled for the MUSH, speak
  to a wizard.
  
See also: EVALUATION, GLOBAL COMMANDS
& ME
  ME   The word 'me' refers to yourself. Some things to do when 
  starting out: 
  1) give  yourself a description:      @desc me=<description>
  2) check your desc.:                  look me
  3) lock yourself:                     @lock me==me
  4) set your gender:                   @sex me=<male|female|neuter|plural>

See also: help newbie, help @lock, help @describe, help @sex
& MONEY
  The MUSH has a built-in money system, which gives a starting amount
  of money to new players and hands out a daily allowance thereafter.
  MUSH money (the default name is "pennies", but this may be different
  depending on the particular MUSH) is spent on some MUSH commands
  that are computationally expensive or alter the database. In 
  addition, every time you "queue" a command, it costs you a certain
  amount of money -- this prevents looping from getting out of control,
  since when all your money is spent, you can't queue any more commands.

  The money system can also be used on player-created objects by giving 
  them @cost/@payment/@opayment/@apayment attributes. When someone then
  pays the object by giving it the right number of pennies, the attributes
  are triggered.

See also: COSTS, give, @cost, @pay, @opay, @apay
& MUSHCODE
& SOFTCODE

  MUSHcode is the programming language available within the MUSH itself
  with which you can create user-defined commands and macros.  It is 
  sometimes called "softcode" to distinguish it from "hardcode", which is 
  the language that the source code for the MUSH server is written 
  in. (Incidentally, hardcode is written in the C programming language.)
  
  At its most basic, writing MUSHcode is just stringing together a series
  of commands that you would otherwise just type in one at a time.  You
  can store MUSHcode in attributes on any type of object you own or control
  (including yourself!).  The series of commands can be triggered by using 
  a user-defined command or by using @trigger.
  
(continued in help mushcode2)
& MUSHCODE2

  If you would like to learn more about mushcoding and how to create macros
  for yourself, the following help files may be useful.  However, the best
  way to learn is by obtaining a copy of Amberyl's MUSH manual and following
  the examples described there.  The manual is available by anonymous FTP
  from: ftp.pennmush.org in the directory /pub/PennMUSH/Manuals

  Related Help Topics (in no particular order)
  -------------------
  ATTRIBUTES    SUBSTITUTION    NON-STANDARD ATTRIBUTES 
  ENACTOR       EXECUTOR        USER-DEFINED COMMANDS
  DBREFS        EVALUATION      TYPES OF OBJECTS
  WILDCARDS     STRINGS         LISTS           
  ACTION LISTS

& NON-STANDARD ATTRIBUTES
  While there are many standard attributes in MUSH, objects can also have
  an unlimited number of attributes, with any name you wish to use. In the
  past, you were limited to attributes named VA-VZ, WA-WZ, XA-XZ; these
  are still available as standard attributes. However, it is strongly
  recommended that you use non-standard attributes and meaningful names
  in order to make maintaining your MUSHCode easier.

  To set a non-standard attribute, you can use these formats:
      &<attribute name> <obj> = <value>  OR
      @_<attribute_name> <obj> = <value> OR
      @set <obj> = <attribute_name>:<value>

  You can get the value of attributes using the functions v(), get(), and
  xget(). You can evaluate attributes using u(), eval(), and get_eval().
  All attributes can be used in attribute locks and can be 'owned' 
  independent of object ownership. 
  
See also: ATTRIBUTES, ATTRIB-OWNERSHIP, Attribute Functions
& PARENT
& PARENTS
& OBJECT PARENTS
  
  Objects may have "parent" objects, from which they can inherit attributes.
  Once an object is given a parent, it may use the attributes on the parent
  just as if the attributes were on the object itself, including checking for
  $commands. Use the @parent command to change the parent of an object.
  Players cannot have @parents.

  Objects may have multiple levels of parents - thus, if #100 is the
  parent of #101, which is the parent of #102, object #102 checks itself,
  #101, and #100 for attributes. Attributes are checked on the object
  itself first, followed by its parent, followed by that parent's parent,
  and so forth. There is a (configurable) maximum number of ancestors
  an object may have; the default is 10.
   
(continued in help parents2) 
& PARENTS2
 
  Note that the only properties inherited are attributes. In particular,
  flags and exits are NOT inherited from the parent object. Also, commands
  which walk the attribute list (such as "examine", the LATTR() function,
  the HASATTR() function, @set, and @edit) only affect attributes that are 
  on the object itself.
 
  There are some limitations to the use of @parent. The most important is
  that ^-pattern checking is not done on the parent of an object, regardless
  of what is on the child object. For the purposes of automated game checks, 
  the following attributes are not inherited: CHARGES, EALIAS, LALIAS, LAST, 
  LASTSITE, LISTEN, QUEUE, RQUOTA, SEMAPHORE, and STARTUP. 
    
  The attributes inherited from the parent are treated just like its
  own attributes by the child. Thus, when a $-command or @trigger is
  executed, "me", for example, refers to the child, not the parent,
  and the $-command's associated actions are performed by the child.
  Also, the uselock check is done on the child, not on the parent.

(continued in help parents3)
& PARENTS3
  Attributes with $-commands _are_ inherited from the parent and
  previous generations. Conflicts are resolved not by the $-command 
  name, but by the attribute name. If two attributes are in "conflict", 
  the child's attribute is used.

See also: @parent, $-COMMANDS, ATTRIBUTES
For example:

  > &TEST #10=$test:@emit I'm the parent
  > &TEST #11=$check:@emit I'm the child
  > @parent #11=#10
  > test
  (nothing happens)
  > check
  I'm the child

(continued in help parents4)
& PARENTS4
  If a parent has the same $-command name in a different attribute, however,
  BOTH the parent and child commands will execute:

(continued from previous example)
  > &CHECK #10=$check:@emit No, I'm the parent!

  > check
  I'm the child
  No, I'm the parent!
 
  @parent is most useful when several objects use common attributes.
  It is slightly faster to have $commands on the child object which
  in turn @trigger or otherwise retrieve attributes inherited from
  the parent object, rather than having the $commands checked on the
  parent object.

(continued in help parents5)
& PARENTS5
 
  Parent-object $-command checking is at its most efficient when there
  are few or no attributes on the child. Also, each additional level
  of parents further reduces efficiency.
 
  If you are "mass-marketing" your objects, you can create blank copies, 
  and @parent those copies to a template object. You can then customize 
  necessary attributes on the copy. When a buyer @chowns his copy, the 
  parent does not change, so unless you're putting data into the parent 
  that you want to make impossible to read, it's safe to allow the
  purchasers of your object to @chown their copy.
& PASSWORD
  PASSWORD

  This attribute stores your encrypted password.  It is not visible to
  anyone within the game, and cannot be altered except via the @password
  and @newpassword commands.
& POWERS LIST
  Powers can be granted only by wizards, using the @power command. 
  Powers cannot be granted to guest characters or players who are set
  UNREGISTERED. Powers normally give the player the ability to use a 
  limited set of wizard/admin powers.

  announce              Can use @wall command.  
  boot                  Can use @boot command.
  builder               Can use Builder commands.
  cemit                 Can use @cemit command.
  chat_privs            Can use Admin channels.
  functions             Can use @function command.
  guest                 Guest. Restricted command set.
  halt                  Can @halt others' objects and do @allhalt.
  hide                  Can hide on the WHO list.
  idle                  No inactivity timeout.
  login                 Not subject to login restrictions.
  long_fingers          Can do things remotely, like "get".

(continued in help powers2)
& POWERS2
& POWERS LIST2
  no_pay                Doesn't need money for anything
  no_quota              Has an unlimited quota
  open_anywhere         Can @open a link from any room.
  pemit_all             Can @pemit to HAVEN/ulocked players.
  poll                  Can use @poll command.
  player_create         Can use @pcreate command.
  queue                 Has queue limit equal to the size of the database.
  quota                 Can use @quota commands on other players.
  search                Can do @search, @stats, and @entrances on anything.
  see_all               Sees everything as if it were Visual.
  see_queue             Can do @ps on anyone, and @ps/all.
  tport_anything        Can @teleport anything.
  tport_anywhere        Can @teleport to anywhere.
  unkillable            Can not be killed

See also: @power
& PUPPETS
  A thing is turned into a puppet by setting the PUPPET flag on it.
  A puppet object is an extension of its owner and relays everything
  it sees and hears to its owner, except if it is in the same room as
  the owner. Things relayed by the puppet will be prefixed by the name
  of the puppet.

  Puppets are useful for keeping track of what is going on in two
  rooms at once, as extensions of a player (such as a pet, for example),
  or for testing code. 

  You can control your puppets using the @force command. It is important
  to remember the DBREF numbers of your puppets so you can control them
  even if they are not in the same room with you. You can also have
  your puppets follow you by using the 'follow' command.

(example in help puppets2)
& PUPPETS2
  An example of a puppet:

  > @create Punch
  Created: Object #18.
  > @set punch=puppet
  Punch is now listening.
  Flag set.
  > @force punch=go north
  Punch has left.
  Punch> The Finishing Place
  Punch> 
  Punch> Obvious exits:
  Punch> Door <S>  
  #18 :waves hello
  Punch> Punch waves hello

See also: PUPPET, @force, DBREF
& QUEUE
  QUEUE

  The queue is the waiting line for commands to be executed by the MUSH.
  Each time you enter a command, it goes into the queue and stays there
  until its turn comes up, at which time the MUSH processes the command
  and you see the results. The MUSH can execute several commands every
  second, so normally you see results right away. However, if there are
  too many commands in the queue, there may be a delay, called lag. The
  more common cause of lag, however, is network delays between you and
  the MUSH.

  The QUEUE attribute is only visible to objects that control you 
  wizards, you, and your objects) or unless you are VISUAL.  It 
  tracks how many active commands you have in the queue.

See also: @ps, LOOPING
& REGEXP
& REGEXPS
  (This help text is largely from TinyMUSH 2.2.4, with permission)

  The majority of matching in MUSH is done with wildcard ("globbing")
  patterns. There is a second type of matching, using regular expressions,
  that is available in certain circumstances.
 
  For attributes that are $-commands or ^-listen-patterns, setting that
  attribute "regexp" (with '@set <object>/<attribute>=regexp') causes
  patterns to be matched using regular expressions rather than
  globbing. In addition, the function regmatch() performs regular
  expression matching.
 
  In a regular expression match, the substring of the string which matched
  the regexp pattern is %0; %1 through %9 are the substrings of the string
  which matched parenthesized expressions within the regexp pattern. 
 
  Continued in 'help regexps2'.
& REGEXPS2
  Regular expressions are extremely useful when you want to enforce
  a data type. For example, if you have a command where you want a
  player to enter a string and a number ('+setnum <player>=<number>',
  for example), you might do it like this:
 
  &DO_NUM Command Object=$^\+setnum (.+)=([0-9]+)$: @va me=Data: %1 = %2
  @set Command Object/DO_NUM = regexp
 
  Then, '+setnum cookies=30' would set VA to "Data: cookies = 30".
  This eliminates your having to check to see if the player entered
  a number, since the regular expression matches only numbers.
  Furthermore, the '+' guarantees that there needs to be at least
  one character there, so a player can't enter '+setnum cookies='
  or '+setnum =10' or similarly malformed input.
 
  The '+' sign in the command has to be escaped out, or it is taken as
  a regexp token. Furthermore, the pattern-match has to be anchored
  with ^ and $, or something like 'try +setnum cookies=30 now' would
  also match. Regexps are case-sensitive; wildcard globbing is not.
 
  Regular expression syntax is explained in 'help regexp syntax'.

& REGEXP SYNTAX
  Topic: REGEXP SYNTAX

  The following explanation is taken from Henry Spencer's regexp(3)
  package, the regular expression library used in PennMUSH:
 
          A regular expression is zero or more branches, separated by
          `|'.  It matches anything that matches one of the branches.
 
          A branch is zero or more pieces, concatenated.  It matches a
          match for the first, followed by a match for the second,
          etc.
 
          A piece is an atom possibly followed by `*', `+', or `?'.
          An atom followed by `*' matches a sequence of 0 or more
          matches of the atom.  An atom followed by `+' matches a
          sequence of 1 or more matches of the atom.  An atom followed
          by `?' matches a match of the atom, or the null string.
  
  Continued in 'help regexp syntax2'.

& REGEXP SYNTAX2
          An atom is a regular expression in parentheses (matching a
          match for the regular expression), a range (see below), `.'
          (matching any single character), `^' (matching the null
          string at the beginning of the input string), `$' (matching
          the null string at the end of the input string), a `\'
          followed by a single character (matching that character), or
          a single character with no other significance (matching that
          character).
 
          A range is a sequence of characters enclosed in `[]'.  It
          normally matches any single character from the sequence.  If
          the sequence begins with `^', it matches any single
          character not from the rest of the sequence.  If two
          characters in the sequence are separated by `-', this is
          shorthand for the full list of ASCII characters between them
          (e.g. `[0-9]' matches any decimal digit).  To include a
          literal `]' in the sequence, make it the first character
          (following a possible `^').  To include a literal `-', make
          it the first or last character.
 
  Continued in 'help regexp ambiguity' and 'help regexp examples'.

& REGEXP AMBIGUITY
  Topic: REGEXP AMBIGUITY
 
          If a regular expression could match two different parts of
          the input string, it will match the one which begins
          earliest.  If both begin in the same place    but match
          different lengths, or match the same length in different
          ways, life gets messier, as follows.
 
          In general, the possibilities in a list of branches are
          considered in left-to-right order, the possibilities for
          `*', `+', and `?' are considered longest-first, nested
          constructs are considered from the outermost in, and
          concatenated constructs are considered leftmost-first.  The
          match that will be chosen is the one that uses the earliest
          possibility in the first choice that has to be made.  If
          there is more than one choice, the next will be made in the
          same manner (earliest possibility) subject to the decision
          on the first choice.  And so forth.
 
  Continued in 'help regexp ambiguity2'.

& REGEXP AMBIGUITY2
          For example, `(ab|a)b*c' could match `abc' in one of two
          ways.  The first choice is between `ab' and `a'; since `ab'
          is earlier, and does lead to a successful overall match, it
          is chosen.  Since the `b' is already spoken for, the `b*'
          must match its last possibility-the empty string-since it
          must respect the earlier choice.
 
          In the particular case where no `|'s are present and there
          is only one `*', `+', or `?', the net effect is that the
          longest possible match will be chosen.  So `ab*', presented
          with `xabbbby', will match `abbbb'.  Note that if `ab*' is
          tried against `xabyabbbz', it will match `ab' just after
          `x', due to the begins-earliest rule.  (In effect, the
          decision on where to start the match is the first choice to
          be made, hence subsequent choices must respect it even if
          this leads them to less-preferred alternatives.)

& REGEXP EXAMPLES
  Topic: REGEXP EXAMPLES
 
  The regexp pattern '.' is equivalent to the wildcard '?'; it matches
  one and only one of an arbitrary character.
 
  The regexp pattern '.+' is equivalent to the wildcard '*'; it matches
  one or more arbitrary characters. To match zero or more arbitrary
  characters, the regexp pattern is '.*'.
 
  To match a string of numbers, use:       [0-9]+
  To match a string of letters only, use:  [A-Za-z]+
 
  See 'help regexp syntax' for a more detailed explanation.

& REGISTERS
  A register is essentially a little reserved piece of computer memory
  that can hold some variable information that you want to pass on to
  another command.  There are ten registers on the MUSH available via
  %-substitution (%0 - %9) and ten setq registers available via %q- 
  substitution (%q0 - %q9). 

  The basic registers are filled with information that matches the 
  wildcard pattern of the command trigger. (Before you say "Huh?", here's
  an example.)

  &COMMAND me=$command *+*:@emit %0 is in register 0 and %1 is in register 1.
  > command whee+blert foo
  whee is in register 0 and blert foo is in register 1.

(continued in help registers2)
& REGISTERS2
  As you can see from the above example, the command trigger had two wildcards
  separated by a "+" sign. When the user types in the command with some words
  taking the place of the wildcards, the first register (register 0) is filled
  with whatever part of the command replaces the first wildcard (in this case,
  "whee") and the second register is filled with whatever replaces the second
  ("blert foo").  

  They can also be filled with information that is passed by an @trigger 
  command:

  &SOMECODE me=@emit %0 is in register 0 and %1 is in register 1.
  @trigger me/somecode=whee,foo bar
  > whee is in register 0 and foo bar is in register 1.

  The registers can also be accessed using the V-function (v(0) through v(9)).

  Please see help setq() for more information about the setq registers.

See also: SUBSTITUTIONS, @trigger, USER-DEFINED COMMANDS, setq()
& ROBBERY
  ROBBERY   

  Robbery is disallowed on many if not most MUSHes. If not, you will be 
  able to steal pennies (or whatever the MUSH money is called) from 
  other players, if you pass their Basic lock. The player will be 
  notified that you have stolen from them. You can only steal one penny
  at a time. 

  If you need additional money, you should probably just speak to a
  friendly wizard or @destroy some of your unnecessary objects
  rather than stealing it from other players. 

See also: rob, MONEY, money(), score
& RQUOTA
  RQUOTA

  This attribute tracks building quota if it is implemented.  It is
  settable in-game only by a wizard, and is only visible to wizards.

See also: @quota, @squota
& RWHO
  RWHO  

  This MUSH may be attached to the RWHO server that was created
  by Marcus Ranum (Jerry_Cornelius).  Every so often, the MUSH sends
  out information about who is logged in to this server.  The RWHO
  command is an internal client that talks to this server.  Most MUSHes
  might not have this command even if they actually send information to
  an RWHO server.  The reason that PernMUSH has this in-game is because
  there is also an RWHO server on the same machine.  If it was on a
  separate machine, network problems could freeze the mud.

& SEMAPHORES
  The most complicated thing about semaphores is their name. Before you try
  to use semaphores, you should first be familiar with the "@wait" command.
  If you are, then you know that normally, you type:

    @wait <number of seconds>=<action> 

  and the action takes place after that number of seconds has passed. With
  a semaphore, you instead type:

    @wait <object>=<action>
    @wait <object>/<number of seconds before timeout>=<action>

  and the action takes place after the object has been "notified" that it's
  time for it to happen. You can also set a timeout -- if the object hasn't
  been notified by the time that number of seconds has passed, the action
  will take place. Any object (player, thing, exit, room) that you control 
  or that is set LINK_OK can be used to wait actions on.

(continued in help semaphores2)
& SEMAPHORES2

  An object is notified using the "@notify" command.  When you type "@wait
  <object>=<action>", you are adding one to the SEMAPHORE attribute on the
  object. When you type "@notify <object>", you are decreasing the SEMAPHORE
  attribute on the object by one. Whenever the attribute decreases, one of
  the actions waiting on the object takes place. The actions occur in the
  order they were added. 

  You can make the semaphore attribute of an object negative by @notify-ing
  it more times than things have been @wait-ed on it. If you do so, anything
  @wait-ed on the object will add one to the SEMAPHORE attribute and the
  action will take place immediately. You can also make all the actions
  waiting on an object take place right away by using "@notify/all", or 
  wipe all the commands out and clear the SEMAPHORE attribute by using
  "@drain". Please note that all SEMAPHORE attributes are cleared out 
  whenever the MUSH is restarted.
 
  Semaphores can be used to make sure that events occur in the right order,
  or to make sure that two players can't use the same object at the same
  time. 

(continued in help semaphores3)
& SEMAPHORES3

  It's important to remember that the actions will be carried out NOT by
  the object that they are being @waited on, but by whichever object
  entered the @wait.

  Examples:
  
  > @wait semaphore=:tests.
  > @notify semaphore
  Wizard tests.
  
  > @wait timer/30=:waits 30 seconds.
  [ 30 seconds passes. ]
  Wizard waits 30 seconds.
 
See also: @wait, @drain, @notify
(continued in help semaphores4)
& SEMAPHORES4
  Semaphores can be used to enforce mutual exclusion - to prevent
  the same object from being used simultaneously by two players.
  The basic strategy is to ensure that the object always has a
  SEMAPHORE of -1, to enclose commands in an @wait, and to
  conclude the set of commands with an @notify me:

  > &doit obj = $doit: @wait me={&doer = %N; @tr me/report}
  > &report obj = "[v(doer)] did it!; @notify me
  > @startup obj = @drain me; @notify me
  > @notify obj
  > ex obj/SEMAPHORE
  SEMAPHORE[#1+i]: -1
  > doit
  obj says "Talek did it!
  > ex obj/SEMAPHORE
  SEMAPHORE[#1+i]: -1

  If a second player types doit as well, the second player's command
  is put on the semaphore queue and not run until the @notify me at
  the end of the REPORT attribute. Note the STARTUP attribute -
  because semaphores are cleared when the MUSH starts up, you must
  insure that the object gets @notify'd once when it starts up.
& SETTING-ATTRIBUTES
  
  Standard attributes are set using @<attrib> <obj>=<value>
  Nonstandard attributes are set using &<attrib> <obj>=<value> 
  Attributes may also be set using @set <obj>=<attrib>:<value>
  
  Attributes are cleared using @<attrib> <obj> or &<attrib> <obj>
  or with @wipe.
  
  Note that there is a difference between clearing an attribute
  and setting an attribute to a null value:
    @va me       <--- wipes out my VA attribute
    @va me=      <--- sets my VA attribute to be empty
  
  Empty attributes retain their flags and atrlock status. Wiped attributes
  are gone forever.
  
  See also ATTRIBUTES, NON-STANDARD ATTRIBUTES, @set, @wipe
& SPOOFING
  Spoofing is the act of making other characters think that a person
  said or did something that they did not.  This is very easy to
  accomplish, and has some good effects, which is why it is allowed.
  However, abusing it is very twinkish and will most likely get you in
  hot water with your wizards. Note that if you are being spoofed and
  want to know who is doing it, you can set yourself NOSPOOF and you will
  be notified who is making the @emits.

See also: @emit, @pemit, @remit, @oemit, and NOSPOOF.
& STACK
  For those unfamiliar with the term stack, it refers to a programming
  data structure that follows a LIFO (Last-In-First-Out) principle. The
  stack in MUSH holds the ten REGISTERS, which can be accessed via the 
  V-function (v(0) through v(9)) or via %-substitution (%0 through %9).
  
See also: REGISTERS
& STRINGS
  A string is simply a bunch of characters.  A word is a string that begins
  and ends with the space character.  A sentence is a string made up of 
  smaller substrings that are words.  Please note that a "word" or "sentence"
  in this technical sense does not have to make sense in English (or in any
  other language, for that matter). As far as mush functions and commands
  are concerned, this is a perfectly good sentence:

        Foozle 09blert bar baz foo.

See also: string functions
& SUBSTITUTIONS
  The % symbol is used in MUSH commands to indicate a substitution -- some
  other character(s) or words are substituted for whatever follows the % 
  symbol. Some common substitutions are:

     %B = a single space (just like [space(1)])
     %R = a blank line
     %N = name of the ENACTOR (object that set off the command)
     
(continued in help SUBSTITUTIONS2)
& SUBSTITUTIONS2
  If the ENACTOR's gender is set, you can use these substitutions to get the
  right pronoun for him/her:
     %s = subjective pronoun: he, she, it, they
     %o = objective pronoun: him, her, it, them
     %p = possessive pronoun: his, her, its, their
     %a = absolute possessive: his, hers, its, theirs.

Example: 
  @sex me=male
  @drop box=%N just dropped %p box.
  drop box
  > Cyclonus just dropped his box.
 
  Case makes a difference: %S will return He, She, It, They. If you need
  an actual % symbol, use %% to get it.

(continued in help substitutions3)
& SUBSTITUTIONS3
  Other substitutions:
     %va-%vz = the contents of the object's VA-VZ attributes, respectively
     %wa-%wz, %xa-%xz = as above, for WA-WZ and XA-XZ
     %0-%9   = the contents of the REGISTERS 0-9, respectively
     %# = the ENACTOR's database reference number
     %@ = the caller's dbref number. Initially same as %#, changes when 
          something like a U-FUNCTION is called.
     %! = the dbref number of the object the command is on.
     %L = the dbref of the ENACTOR's location.
     %c = text of the last command, _before_ evaluation.
     %t = a tab. Note that this may not look right on some screens. 
    %qN = the equivalent of r(N), a register set by a setq() function.
 
(continued in help substitutions4)
& SUBSTITUTIONS4
  Example: 
    (continued from previous example)
    Let's say that Cyclonus's dbref number is #10 and the box's dbref 
    number is #11. The dbref # of the room Cyclonus is standing in is #13.
    When Cyclonus dropped the box above, these were the values of the
    following %-variables:
    
    %N = Cyclonus
    %# = #10
    %@ = #10
    %! = #11
    %L = #13

See also: EVALUATION, ENACTOR, EXECUTOR, DBREFS, v()
& SUCCESS
  A "success" normally occurs when you attempt to do something that is
  restricted by an @lock and you pass the @lock. (Note that if no lock
  is set, you automatically pass it.) For example, the "basic" lock
  restricts who can pick up a player/thing or who can go through an
  exit. Whenever you successfully do either of these things, you will
  set off the basic success messages on the object whose lock you have
  just successfully passed.

  Many other actions can also be locked -- see @lock and locktypes for 
  more information. Many of these actions have standard attributes that
  you can set messages in for when someone succeeds.

See also: FAILURE, @lock, VERBS, ATTRIBUTES, @success, @asuccess, @osuccess
& SWITCHES
  SWITCHES
 
  Commands can have "switches" which modify the behavior of the
  command. Switches are attached after the end of a command.
  For example, most people are familiar with the command

    @lock me=me

  The "enter" switch to @lock allows you to lock who can enter:

    @lock/enter me=me

  A command may have multiple switches:

    @pemit/noeval/silent me=Hi!

  Help on the switches available for a command is available in the help
  file for that command.
  (If you are looking for information on @switch, see help @switch instead.)
& TYPES OF OBJECTS
  
  Everything on a MUSH is an object in the MUSH database. There are four
  types of objects: players, rooms, exits, things. The first three are
  separated from each other by being set with a special FLAG: Player,
  Room, Exit. Any object that doesn't have one of these flags is a thing.

  Unique Characteristics
  PLAYERS
    Can own other objects and can be connected to. Can receive @mail.
    Can move around, speak/pose/emit, enter MUSH commands, enter global
    commands. You can have $-commands and ^-patterns on a player.
    Players can be carried, can carry other objects, and can follow.
  ROOMS
    Fixed container objects, linked together by exits. Cannot move.
    Rooms can @emit and enter MUSH commands, but they cannot execute
    global commands. You can have $-commands and ^-patterns on a room.
    
(continued in help TYPES2)
& TYPES2
  EXITS
    Objects that link rooms and things together. Cannot move, but can
    be @teleport-ed to a new location. Exits can @emit and enter MUSH
    commands, but they cannot execute global commands. You can NOT 
    have $-commands and ^-patterns on exits. Exits can lead TO things,
    but they can only lead FROM rooms. 
  THINGS
    Can move around, speak/pose/emit, enter MUSH commands, enter global
    commands. Can send @mail as themselves. You can have $-commands and 
    ^-patterns on things. Things can carry, be carried, and can follow.

See also: EXITS, USER-DEFINED COMMANDS, LISTENING, GLOBALS
& $-COMMANDS
& MACROS
& USER-DEFINED COMMANDS
  
  User-defined commands can be created by setting $-commands on players, 
  things, and rooms. Exits cannot have $-commands. To set a $-command:

    &<attribute> <object>=$<command name>:<action list>
  
  Whenever someone in the same room as the object types the command
  name, the action list is carried out by the object, as long as:

  - the person typing the command passes the object's uselock
  - the object is not set NO_COMMAND or HALT
  
(continued in help user-defined2)
& $-COMMANDS2
& MACROS2
& USER-DEFINED2
  Any number of *'s and ?'s may be in the command name. A * matches
  any number of characters, and a ? matches any single character.  When
  the actions are executed, the values on the stack in %0-%9 are the
  portions of what the user types that match the first ten *'s or ?'s.
  You can also match a regular expression rather than wildcards.
  See 'help regexps' for details.

  For example, to make a 'wave' command, you could do the following:
    &DO_WAVE me=$wave *:pose {waves to %0.}
  You could then type:
        > wave Guest
        Rhyanna waves to Guest.

  *BE SURE TO @LOCK/USE ME==ME IF YOU SET MACROS ON YOURSELF!*

See also: STACK, SUBSTITUTIONS, @lock
& VERBS
  For most verbs there are three forms: Verb (what the Enactor sees),
  Overb (what others in the area see) and Averb (the action to be 
  taken when the event happens). Example: @Drop, @Odrop and @Adrop
& WARNINGS

  If the building warning system has been enabled in the source code,
  players may receive regular warnings about potential building problems
  on objects that they own, and will be able to check individual objects
  for warnings.

  For more information, see the following help topics:
    @warnings        @wcheck         NO_WARN         warnings list
    
& WARNINGS LIST
  The building warning system, if enabled, supports the following
  types of warnings:

  exit-unlinked         Warn on unlinked exits
  exit-oneway           Warn on exits with no return exit
  exit-multiple         Warn on multiple exits from A to B
  exit-msgs             Warn on missing succ/osucc/odrop/fail
  exit-desc             Warn on missing description
  room-desc             Warn on missing description
  thing-msgs            Warn on missing succ/osucc/odrop/fail
  thing-desc            Warn on missing description
  my-desc               Warn on missing player description

(continued in help warnings list2)
& WARNINGS LIST2
  These warnings combine the functionality of multiple warnings above:

  serious               exit-unlinked, thing-desc, room-desc, my-desc
  normal                serious, exit-oneway, exit-multiple, exit-msgs
  extra                 normal, thing-msgs
  all                   all of the above

  The warning "none" indicates no warnings.
  You can exclude warnings from a larger list by using !<warning>
  after the larger list. For example: @warnings me=all !exit-oneway
& WILDCARDS
  A wildcard is represented as an asterisk (*) in user-defined commands
  and matches any string.  For example, let's say that you want a command
  called "supercalifragalisticexpealidocious" (don't ask me why), but you
  don't want to force people to type the whole thing to trigger the command.
  You could use a wildcard in the command trigger to match substrings of it:

  &TOO_LONG_CMD object=$supercali*:@emit whee
  super
  > (nothing happens)
  supercali
  > whee
  supercalifra
  > whee
  supercalifragalisticexpealidocious
  > whee
  supercalifoobert
  > whee

See also: USER-DEFINED COMMANDS
& ZONE MASTER ROOMS
  
  Zone master rooms are a subset of zones. If a room is used as as zone
  oject, it is a zone master room (ZMR). ZMRs are like local "master"
  rooms. Exits in the ZMR are global to that zone, and $commands on
  objects in the ZMR are global to that zone. Zone master rooms are
  only defined if globals are used.  Zone master rooms should only be
  used for very large zones which have a lot of global exits.
  Otherwise, a ZMO thing should be used, because command evaluation on
  a zone master room is slower than command evaluation on a ZMO.  Large
  numbers of ZMRs may slow down the game significantly.
  
See also: ZONES, MASTER ROOM, EVALUATION
& ZONE MASTERS
  ZONE MASTERS
 
  Zone Masters are player objects which are used to mediate zone control.
  A Zone Master is an object of type PLAYER, which has the ZONE flag set.
  They are created like ordinary players, and can connect, etc.  The only
  difference is that objects owned by Zone Masters are controlled by
  anything that passes the zone lock of the Zone Master. So instead of
  @chzone-ing an object to add it to a zone, you @chown it to the ZM.
  
  Anyone who passes the zone lock of the Zone Master can @chown objects
  to it. This, however, does not refund the original creator's money or
  quota, as does normal @chown. Using a Zone Master instead of a ZMO 
  enables a higher degree of security within the zone, and allows INHERIT
  objects to be placed in the zone, since all objects within the zone have
  the same owner. $commands are not, however, inherited off the Zone Master.

& ZONES  
& ZONE OBJECTS
  Zones are areas of the MUSH which may be controlled by many people.
  Essentially, they allow group ownership of objects. There are two
  basic types of zones. One is maintained by things and rooms, and
  are the "standard" zones. These are described below. The other type
  is maintained by players. Information on this type of zone is found
  under the topic ZONE MASTERS.
  
  The default zone is NOTHING. Any building done by a player defaults 
  to belonging to the same zone that the player belongs to.
  Every zone is defined by a Zone Master Object (ZMO). The ZMO is an
  ordinary MUSH object owned by some player. A wizard may change the
  zone of an object or player to a ZMO.
  
  If the ZMO is a room, it is called a "zone master room." Most of the
  statements about ZMOs also apply to zone master rooms; for details,
  see the help topic ZONE MASTER ROOMS.
  
See "help ZONES2" for more.
& ZONES2
  
  Anyone who can pass the Zone lock of the ZMO has control over all
  objects in that zone. This, in essence, gives that player wizard
  powers within that zone. For this reason, one must be extremely
  careful with the zone locks of ZMOs!
  
  Also, $commands on a ZMO are treated as global within that zone.
  The game attempts to match $commands for the ZMO of the player's
  location, as well as $commands for the player's own zone.

  For some suggestions on how to use zones, see "help ZONES3".
  See also: @chzone, ZONE MASTERS
  
& ZONES3
  Some suggested uses of zones:
  
    1. If you are working on a building project with several people, it
       may be useful to create a zone object and @elock it to all of you,
       and ask a wizard to @chzone the players involved to the zone object.
       That way, all of the players working on the project will be able to
       modify the building.
  
    2. On a similar thread, if several players are working on a project
       involving only a few objects, it may be simpler to create a zone
       object and @chzone those few objects to the ZMO instead of resetting
       the zones of the players. Note that a player does not have to belong
       to a zone in order to change objects in that zone; all is merely
       required to pass the ZMO's enter lock.
  
    See "help ZONES4" for more.
& ZONES4
  More possible uses for zones:
  
    3. If local wizards are desired, a zone object may be created and enter
       locked to the local wizard. Players building within that zone should
       be @chzone'd to that ZMO. The local wizard will then be able to
       control anything within that domain.
  
    4. If you want restricted global commands defined over only a small area,
       you can define that area to be part of a zone, and place the desired
       $commands upon the ZMO.