cthulu3/
cthulu3/backup/
cthulu3/distribution/
cthulu3/gods/
cthulu3/html/help/basic/
cthulu3/html/help/skills/
cthulu3/log/
cthulu3/player/
Driver 6
--------

  File Structure
  --------------

    /area    - area files (RW)

      area.lst    - main include
      help.are    - online help
      limbo.are   - ROM base area (vnums 1-65) 
      system.are  - CthulhuMud base area (vnums 20000-20099) 

    /config  - persistent configuration files (R)

      skills.txt  - skill definitions
      profs.txt   - profession definitions
      profile.txt - runtime parameters
      society.txt - society definitions
      socrace.txt - racial society definitions 
      social.txt  - 'social action' definitions
      spells.txt  - spell definitions (added by driver 7)
      races.txt   - race definitions

    /data    - runtime generated data files (RW)

      disable.dat - disabled commands
      time.dat    - current mud time
      banks.dat   - bank accounts and balances  
      socmemb.dat - society membership information

    /player  - player files (RW)

    /gods    - god logs (W)

    /log     - other log files (W)

      sdown.txt   - shutdown records
      bugs.txt    - bugs
      typo.txt    - typos

    /msgbase - messages on notice boards (RW)

    /clan    - old clan database (RW)

    /README  - copyright and license info 

    /docs    - some (old) documentation

    /drv6    - code source and executables (X)

 
  Profile
  -------
    The profile file (config/profile.txt) contains paramters which the mud
    loads at boot time and affect how it runs.  See the comments at the
    top of the sample for details.  Supported paramerters are:

      mud name - for Who and Time
      port     - for listening on
      wizlock  - boot in wizlock mode
      newlock  - boot in newlock mode
      start    - room new players start in
      recall   - default recall room
      respawn  - default respawn room
      morgue   - default morgue room
     
    You can also define zones.

  Zones
  -----
    Zones are defined in the profile.

    Zone represet discrete parts of the mud, and each is made up of many
    areas.  Transportation, especially magical transportation, between
    zones is impossible.  This affects Gate, Teleport, Summon, Portal and
    recall.  If it possible to walk between zones and to use permanent
    portals to move between them.

    Zones can specify recall, respawn and morgue rooms.  If specified (non
    zero) they are checked after the areas rooms are checked.

    The command zlist shows which zones are defined in the profile. There
    is a limit of 32 zones (numbered 0 thru 31). Zone 0 should always be
    defined.

    The alist command has be refurbished and takes an optional parameter
    of a zone id.  This restricts it to showing just the areas in that zone.
    See also ainfo for immortals.

    Eventually there may be zone attributes, affect magic and maybe some
    other things.

    Objects can have a list of zones associated with them.  If an object is
    removed from those zones it will 'evaporate' (but should return when
    the player returns to a zone in its list). By default objects exist in
    all zones.  When an object is loaded its zone attributes will be reset
    to those of its proptype, unless is has been made univeral.

    Commands zcopy and zclear have been added to provide global manipulation
    of zone data.  zcopy will copy object settngs for one zone onto another.
    This is useful when you add a zone that should be similer to an already
    existing zone.  zclear removes a zone from all object.  Both commands
    change all areas in memory and should be followed by an asave world.

    Added a new spell:

	Universality
	------------
	Component: yusefs dust
	Effect:	The targetted object is changed so that it can exist in all
		zones of the mud, instead of the set it is normally limited
		to.

  Recall, Respawn, Morgue and Dream
  ---------------------------------
 
    Recall is where you go when you recall (or Word of Recall)

    Respawn is where you are put when you die

    Morgue is where your body is put when you die

    Dream is where you go when you dream

    All values can be set:

      Muddally - in the profile

      Zoneally - in the profile under the zone definition

      Areally  - through AEDIT

      Roomally - through REDIT

    Checking sequence is always room/area/zone/mud 

    Gods should use caution when changing these values.  Consider the following
    rules:

      Recall should always be somewhere safe, with food and water. Consider
        recall a sort of 'reset' for the player within the zone/area.

      Respawn should also be somewhere safe, maybe with a healer or a
        fastheal room.

      Morgue should be either 0 (your corpse is left where you died) or
        somewhere that can be easily reached from the respawn room.  Some
        sort of directions in the respawn room might be nice.

      Dream should be an entry point into either a dreamlands area or a
        waking world area.

    Changing these values allows th creations of areas that players stay in
    when they die.  For example a player on a ship cannot get off it simply
    by dieing or recalling.  Generally the rooms should be within the same
    zone as the one with the setting.

  Dreaming
  --------

    Added a new command - dream.  Only usable when you are asleep.

      Dream

	Issues a random dreaming message

      Dream ?

	Display help for the command

      Dream walk

	Enter the world of dreams corresponding to your location. A skill
	check is required.

      Dream awaken

	Return to the real world. A skill check is required.

      Dream resume

	Attempt to return to a previous dream.  Can only be attempted once.
	A skill check is required.

      Dream [of person] say/whisper/shout/yell/scream <message>

	Sends a message to one or more other dreamers.  A skill check is
	required to deliver a private dream message.

      Dream [of person] emote

	Sends an emote action to one or more other dreamers.  Again, a skill
        check is required to deliver a private emote.

      Dream [of person] cast

	Sends an echo (text with no indication of its source) to one or more
	dreamers.  Sending one requires a skill check, making it private
	requires another.      

    Added a new skill - dreaming.  Everybody starts with 1%, used for the
    dream command and some dream releated spells.  May be the basis for
    Dream Magic at some point.  Currently the dream skill boosts all of
    your other skills when you are dreming.

    Added four new spells:

	True Dreaming
	-------------
	Component: dream catcher
	Effect: This makes someone who is only present in dream, present in
		reality.  This means that they cannot awaken and get back
		to the real world.  They are now a permanent part of the 
		dream world.

	Rude Awakening
	--------------
	Component: silver bell
	Effect:	This hurls a dreamer out of the world of dreams and returns
		them to the room they entered the world of dreams from.

	Recurring Dream
	---------------
	Component: brass pendent
	Effect: This returns the victim to the world of dreams, resuming
		thier previous dream.  This uses the casters dreaming skill
		rather than the victims.

	Enchanted Sleep
	---------------
	Component: silver sand
	Effect:	The victim goes to sleep and, if there is a dream location
		associated witht he current room, enters the world of dreams.
		This spell uses the casters dreaming skill, not the victims.

  If a character dies while dreaming, they get to make a dreaming check.  
  Success means they get respawned in the world of dreams (and their body
  goes to the world of dreams morgue). Failure means they (and their corpse)
  are put in the room the entered the dream world from.

  Area Edit Lock
  --------------

    When set it prevents all OLC activity in the area.  It can be set and
    unset through the edit area dialog.  When set, the area can only be
    saved by an asave area from inside the area or an asave force.

    It is designed to be used to freeze an area while changes are made
    to it offline. 

  Area Manipulation
  -----------------

    A few commands to make it easier to rearrange areas.  Currently only
    available to implementors.  You should probably do an 'asave world' 
    after using any of them.  Take a backup before hand and check a few of
    the changes manually before saving.  If these commands go wrong they
    can screw up your ALL of your area files.

    asplit area_vnum split_vnum

      This chops the area into two areas, the latter being a copy of the
      first except for the file name.

    amerge low_area_vnum high_area_vnum
 
      This takes two contiguous areas and merges them into a single area.
      For this to work the areas must be next to each other, so that the
      low vnum of the high area is one more than the high vnum of the 
      low area.  The low area will be expanded to contain the high area,
      the high area will be emptied.

    revnum new_vnum

      This works from inside OLC for rooms, mobs and objects.  It changes
      the rooms, mobs or objects vnum.  It can be used to shift things
      between areas.

      When used the following adjustments are made automatically:

	rooms	All exits pointing to the room
		All condition destinations pointing to the room
		All portals pointing to the room

	objects	All resets in all rooms
		All paired portals
		Keys on all room exits
		Keys on all containers and key rings

	mobiles	All resets in all rooms       

      Note that there is no automatic updating of scripts and triggers.

      Additionally the changes only update the master objects, not the play
      ones, so it will be necessary to reboot the mud to pick up such changes.

      If an object is renumbered, any instances of it in player save files 
      or lockers will be destroyed.  This will also happen with pets and
      charmed monsters.

    arebase area_vnum new_low_vnum

      This uses repeated calls to the revnum routines to move a complete
      area to another range of vnums.  It takes a little while.  Note the
      above problems with changing object vnums.

    asuck area_vnum

      This steps through all of the rooms in an area and each of their
      resets.  If it finds a reset for a mob or an object that is from
      another area, it will rebase it into the area. Useful for a post
      split tidy up where the objects and mobs were not aligned with the
      rooms.

  Newbies
  -------
    Newbies enter play at level 3 - Avg 50 hits, 11 practices.
      This gives them a fairly good change of killing 1st and 2nd level mobs
    They remain newbies until they reach level 8.

  Magical Areas
  -------------

    Areas and zones may be flagged as more or less magical than usual.

	No Magic	Spells cannot be cast
	Low Magic	Mana costs doubled, level reduced, difficulty doubled
	Normal		Mana cost standard, level same as casters
	High Magic	Mana cost reduced 20%, level increased, difficulty/2
	Super Maigc	Mana cost halved, level increased a lot, difficult/3

    Note that effects are cumulative, so a super magic area in a super
    magic zone is very, very magical - quarter mana costs, big level boosts.

    If either area or zone is marked non magical, spells will not work.

  Master Spell Components
  -----------------------

    These can be placed anywhere in the mud:

    20020 - Silver dollar	Summon Familier
    20021 - Dream catcher	True Dreaming
    20022 - Silver bell		Rude Awakening
    20023 - Brass pendent	Recurring Dream
    20024 - Silver sand		Enchanted Sleep
    20025 - Yusefs dust		Universality
    20026 - Poison		Poison
    20027 - Alabaster		Sanctuary
    20028 - Obsidian		Gate
    20029 - Dried frog 		Water breathing
    20030 - Weasel skull	Gnawing hunger
    20031 - Rock salt		Burning thirst
    20032 - Shot of rum		Free grog
    20033 - Hair of dog		Ghastly soberity
    20034 - Whale fat		Burden of blubber
    20035 - yellow leech	Slender lines
    20036 - silver needle	Dispel evil
    20037 - brass gong		Earthquake
    20038 - quartz crystal	Call lightning
   
    Table retired - see spells.txt 

  Chat
  ----

    Mobs can now have chat matrixies defined.  Each matrix row represents
    a 'state' in the mobs behaviour, and the cells indicate the script
    the mob should execute (0 for no script) and the new state it should
    have after having execute the cell.  The chance of a chat happening
    is specified for each row, and the chat that happens will be randomly
    selected from the 8 possible script/state pairs in the row.

    All mobs start in chat state 0.  If a mob is in chat state 0 and it
    enters combat, it is put into state 1.  If it is in state 1 at the
    end of combat it is put into state 0.

    Normally the @ax variables are available for substitution, but when the
    mob is fighting, the @vx variables are also available.  If you want a 
    non fighting mob to pick on a pc, you need to use the MPSELECT command
    from the triggers script and react to the selection event.

    Chat is checked once every 3 seconds if the mob is active.

    For example, the combat chat for a pyromancer might be:

      Script 1 - 10 0 0 cast 'fireball' @vt

      Script 2 - 10 0 0 cast 'burning hands' @vt

      Script 3 - 10 0 0 cast 'curse' @vt

      Script 4 - 10 0 0 cast 'giant stength' self

      Script 5 - 10 0 0 cast 'faerie fire' @vt

      Chat 1 120  1 1  2 1  1 1  2 1  3 1  4 1  5 1  2 1 

    This gives him a high chance of doing something (120 in 128).  When he
    does something, he will attack thus:

        37% burning hands
        25% fireball
        12% curse
        12% giant strength (on himself)
        12% faerie fire

    It is of course possible to build more complex combat chat sequences,
    which use one state for casting defensive spells and another one or 
    two for offensive spells.  The caster could also react to injury messages
    to switch into a defensive/healing/evasive mode. 

    A sequence of chats like this:

      Chat 1 120  4 2  4 2  4 2  4 2  4 2  4 2  4 2  4 2
      Chat 2 120  3 2  3 3  3 2  3 3  5 3  5 2  5 3  5 2
      Chat 3 120  1 3  1 3  1 3  1 2  2 3  2 3  2 3  2 2 

    Would cause him first to cast 'giant strength' upon himself and then
    to alternate between trying to cast 'curse' and 'faerie fire' upon
    you and using 'burning hands'  and 'fireball' to fry you.  After trying
    one of the non burning spells he would have a 50% chance of switching
    to full offense, but only a 25% chance of going back to the hampering
    spells.

    Note also that ther is no logic to make him retry a spell that fails or
    to prevent him recasting spells that will have no effect (because you
    are already affected by them).

  MPCHAT
  ------

    A mob command for manipulating chat states.

    Without any parms it causes the mob to undergo a normal chat check.

    With a parameter, a single number, it directly updates the mobs chat 
    state.

  Hunger and Thirst
  -----------------

    Players are able to survive without water for 2 days and without food for
    5 days before they start suffering bad effects.  The effects are cumulative
    and will, eventually, kill them (or, more likely, make them weak enough
    for something else to kill them).  

    Food and drink consumption is higher in dry and/or hostile environments
    than in civilized environments.

    Added some food related spells:

	Gnawing Hunger
	--------------
	Component: weasel skull
	Effect: This consumes the victims food resources, possably inducuing
		starvation effects.

	Burning Thirst
	--------------
	Component: rock salt
	Effect: This consumes the victims drink resources, possably inducuing
		dehydration effects.

	Free Grog
	---------
	Component: shot of rum
	Effect: This create alcohol directly within the victim blood.  Used
		enough and the victim will become drunk.

	Ghastly Sobriety
	----------------
	Component: hair of dog
	Effect: This removes all alcohol from the victims body, probably 
		leaving them with a hangover.

	Burden of Blubbler
	------------------
	Component: whale fat
	Effect: This causes the victim to become fatter, inducing obesoty 
		effects.

	Slender Lines
	-------------
	Component: yellow leech
	Effect: This removes fat, and thus obesity effects, from the victim.

  Books
  -----
    v0 - language skill
    v1 - Skill rating
    v2 - skill
    v3 - skill
    v4 - skill

    Books can be read and studied. 

    Reading (or examining or looking)
      Show book description
      Show book language
      Show if book contains studyable skills
      Switch on language skill * books condition
       <  10 : You can't read it
       <  50 : Show extra_desc for "read_poor"
       < 100 : Show extra_descr for "read"

    Studying
      Calculate effective rating - language * condition * rating
        < 10 : You can't study it
      For each skill,
        If less than effective rating,
          gain 2d6 points
        Else
          have a chance of improving it
      Costs 1 practice session
  
  Extra Descriptions
  ------------------
    Extended to use conditions.
      Allows different text depending upon the reader.
    Ed now has list, show and cond options.
      Works by index number, not keyword.
    Rooms
      Literal "room" when looking at the room.
    Objects
      Uses the objects name when examining it.

  Extra Senses
  ------------
    Commands smell and listen implemented.
    Use extra descriptions with 'smell' and 'listen' as keywords.
    For rooms, 'room' keyword is also used - smell room.

  Conditions
  ----------
    Each condition has a subject. Possible subjects are:

      actor
        - The mob who is taking the action
      victim
        - The mob that is being acted upon
      observer
        - The mob the condition is being evaluated for
        - Can be the same as actor or victim
      random
        - A random character in the same room.
        - Never the observer
      lactor
      lvictim
      lobserver
      lrandom 
        - The leader f the indicated characters group, or the character
          if they do not have a leader.
    Not all subjects are valid in all contexts.  If a subject is not
      valid, all conditions upon it are unsatisfied.    
  
    The following types of condition are available...
 
      World Conditions: 

        moon low high
	  Check on the phase of the moon, from 0 New to 4 Full
          The moon follows a standard 28 day cycle.

        random low high
          Checks on a random number in the range 0..1023

        hour_of_day low high
          Check against time of day (0..23)  
          1 hour gametime is 30 seconds real time.

        hour_of_day_mod div low high
          Check against hour of day modulus div (0..(div-1))
          Good divs: 2, 3, 4, 6, 8, 12

        day_of_month low high
          Checks against the day of the month (0..32)
          1 Month gametime is 6 hours, 24 minutes realtime. 

        day_of_month_mod div low high
          Checks against day of month modulus div (0..(div-1))
          Good divs: 2, 4, 8, 16

        day_of_year low high
          Checks against the day of the year (0..383)
          1 Year gametime is 3 days, 4 hours and 48 minutes.

        day_of_year_mod div low high
          Checks against day of year modulus div (0..(div-1))
          Good divs: 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192

        week_of_year low high
          Checks against the week of the year (0..47)
          1 week gametime is 1 hour, 36 minutes

        week_of_year_mod div low high
          Checks against week of year modulus div (0..(div-1))
          Good divs: 2, 3, 4, 6, 8, 12, 16, 24

        month_of_year low high
          Checks against the month of the year (0..11)
          1 month gametime is 6 hours, 24 minutes
 
        month_of_year_mod div low high
          Checks against month of the year modulus div (0..(div-1))
          Good divs: 2, 3, 4, 6

        mob_in_room room low high
	  Checks a mob with a vnum in the range is in the room

	player_in_room
	  Checks to see if any players are in the room

	room_empty_mob
	  Checks there are no mobiles or players in the room

	obj_in_room
	  Checks if an object with a vnum in the range is in the room

	room_empty_obj
	  Checks there are no objects in the room

      Mob/Character conditions:

        skill 'skill' low high
          Checks the mobs skill (0..200)
 
        race 'race'
          Checks the mobs race
          All characters are currently human. 

        level low high
          Checks the mobs level (1..100)

        sanity low high
          Checks the mobs level (1..100)

        casting level low high
          Checks the mobs current spell casting level (1..100)

        align low high
          Checks the mobs alignment (-1000..1000) 

        prof 'profession' low high
          Checks the characters profession and profession levels

        hits low high
          Checks the characters current hit point total

        mana low high
          Checks the mobs current mana point total

        move low high 
          Checks the mobs current move point total

        hits_percent
          Checks the percentage of max hits the mob is on

        mana_percent
          Checks the percentage of max mana the mob is on
 
        move_percent
          Checks the percentage of max move the mob is on

        gender sex1 sex2
          Checks the mobs gender

        soc_rank template
          Checks rank within a socielty accoring to a bit template.
          1) invited 2) member 4) council 8) leader

        soc_level low high
          Checks level within a society

        soc_auth template
          Checks authority within a society using a bit template.
          See society.h for the SOC_AUTH_xxx values. 

        conv conv_id subj_id state
          Checks for a particular state in a conversation

        carrying vnum1 vnum2
          Checks if an object with either vnum1 or vnum2 is carried or worn

        wearing vnum1 vnum2
          Checks if an object with either vnum1 or vnum2 is worn

        vnum low high
          Checks if the mobs vnum falls within the range given
          Does not work on characters

        in_room low high
          Checks if the mob is in a room with a vnum within the range given

        in_subarea low high
          Checks if the mob is in a room with a subarea within the range given

        deed deed_id flag
          Checks if the deed has been done (1) or has not been done (0)

        quest quest_id low high
          Checks if the state of the quest is within the given range.
          Generally 0 for starting through to 9999 for completed.

        memory memory_slot_number
          Checks if there is something rmembered in the specified slot.

        memory_value memory_slot_number low high
          Checks if the value of the string in the slot is within the
          specified range.

        affected affect
          Checks is the mob is affected with a particular spell effect.
          This uses the affect list, not the affect bits which can be
          checked through an 'is' condition.  How the character acquires
          the affect can alter how you have to check for it. 

        is state
          Checks if the mob is in the specified state

        is_not state
          Checks if the mob is not in the specified state

        The states is and is_not can detect are:

          hungry thirsy drunk
          full refreshed sober
          standing fighting sitting resting awake
          sleeping stunned dieing dead
          blind invisible seeing_evil seeing_invisible seeing_magic
          seeing_hidden mind_melded sanctuary faerie_fire seeing_infrared
          cursed scared poisoned protected_from_good protected_from_evil
          sneaking charmed flying pass_door hasted calmed plauge_ridden
          weakened seeing_in_darkness berserk swimming regenerating
          polymorphed absorbing_magic fleeing dreaming
 

      Object conditions:

        level low high
          Checks if the objects level is within this range

        type low high
          Checks if the objects 'item type' is within this range

        vnum low high
          Checks if the objects vnum is within this range 

        value number low high
          Checks the object v0..v4 flags

        contains 
          Checks object contents, depends on object type

          Container, Locker, Keyring
            contains vnum vnum
            Satisfied if an object with either vnum is present

          Scroll, Potion or Pill
            contains spell_num spell_num 
            Satisfied is both spells are contained. High may be -1.

          Light
            contains hours
            Satisfied if light hours left are >= value.

          Wand, Staff
            contains spell_num charges 
            Satisfied is at least 1 charge of spell_num remains

          Fountain
            contains liquid
            Satisfied is the fountain contains the specified liquid. 

          Drink ontainer
            contains liquid drinks
            Satisfied if the container hold that many or more drinks of
              the liquid

     Event conditions:

        type low high
          Checks if the events type is within this range

        subtype low high
          Checks if the events subtype is within this range

        number low high
          Checks if the number on the event is within this range
 
        number_mod mod low high
          Checks if the number on the event is within this range subject
          to modulo arithmetic.
 
        am_actor
          Checks if the observer is the same as the actor.
          This is often true when the event is not being evaluated by a mob. 
          This is also true if it is the mob doing something.

        am_victim
          Checks if the oberser is the victim.
          This is true if something is being done to the mob. 
 
        local
          Checks if the event originated in the oberserves room.
 
        actor_grouped
          Checks if the actor is in the same group as the observer.
 
        victim_grouped
          Checks if the victim is in the same group as the observer.
 
        actor_remembered slot
          Checks if the actor (true name or player name) is remebered in the
          indicated memory slots on the observer.
 
        victim_remembered slot
          Checks if the victim (true name or player name) is remebered in the
          indicated memory slots on the observer.
 
        actor_friend
          Checks if the actor is a friend of the observer.
 
        actor_foe
          Checks if the actor is a foe of the observer.
 
        victim_foe
          Checks if the victim is a foe of the observer.
 
        actor_visible
          Checks if the actor is a visible to the observer.
 
        victim_visible
          Checks if the victim is a visible to the observer.
 
    Multiple conditions are combined with AND logic  

    Used for:
      Extra descriptions - rooms and objects (obs = act)
      Skill prerequisits (obs = act)
      Profession prerequisits (obs = act)    
      Door visability (obs = act)
      Door destinations (obs = act)
      Conversations (obs, act)
      Triggers (obs, act, vict)

  Scripts
  -------

    Built onto mobs.
    Each script has a unique id.
    Scripts are made of lines.
    Each line has:
      - sequence number
      - delay from start of script
      - identifier for schedulded commands
      - A command to be scheduled

    When a script is run, all of its commands are scheduled against the
      executing mob at their indicated time.  Paramerter substitution
      occurs when the script is schedulded.

    MPSCRIPT command added to allow one script to either schedule another 
      script or to cancel commands schedulded by another sript.

      MPSCRIPT RUN script_id
      MPSCRIPT RUN script_id mobile
      MPSCRIPT CANCEL cmd_id
      MPSCRIPT CANCEL cmd_id mobile

    Example:
  
      Script 1
        10 0 0 smile
        20 0 0 emote takes @p2
        30 1 0 smile @a1
        40 2 0 emote tries to eat @p2
        50 4 0 frown
        60 5 0 drop @p1
        70 5 0 emote throws @p2 away in disgust! 

  Rewards
  -------

   MPREWARD command added to let mobs give players xps directly (hopefully
   in response to the player having done something helpful to the mob).

     MPREWARD pc ammount

   Mainly for use in quests.

   Rewards given to group members are automatically split between all members
   of the group that are present.

  Causing Damage
  --------------

   MPHURT can be used by mobs to cause damage to players without initiating
   a combat sequence.  Syntax is:

     MPHURT player d_hit s_hits d_mana s_mana d_move s_move

   This specifies the name of the player and the number and type of dice to
   be rolled for damage to hits, mana and move.  This interface lets mobs
   drain mana and movement points as well as causing physical damage.

   Players have no protection against any of the damage, although only physical
   damage taking them below 0 hit points will kill them.

   You should normally output the message telling the player about the 
   damage before the MPHURT command.  Beware of large physical damage values
   as it is very easy to kill players.  Movement loss in a hostile environment
   can also be fatal.  

   Example: 

     This script might be triggered in a conversation, where the player has 
     agreed to undertake a quest for the wizard.

       10 0 0 say So! That is good.
       20 0 0 smile
       30 1 0 say I shall send you to Smarkand!
       40 1 0 emote starts making some mystical passes.
       50 2 0 MPECHO A whirling vortex surrounds @a2!
       60 2 0 MPHURT @a1 0 0 0 0 20 20
       70 3 0 MPTRANSFER @a1 7835 

     This should transfer the player to the far end at the cost over 20d20
     move points (averaging around 210). 

  Conversations
  -------------

   Conversations are a group of discussion subjects.  Within each subject
     of a conversation there is a state.  This means that the conversation
     does not have to follow a linear path.  
   Each mob can have a conversation, some subjects and some state 
     transformations within those subjects coded.  Conversations can be
     coded over multiple mobs.
   State machine for subjects run from the conversations initial state
     through whatever other states the author wants to use.

   Example:
     Conv 2000, subject: weather
     In 0 Out 1: say It's cold today.
     In 1 Out 0: say It's going to snow later.

   Conversations tie to the converse command (aliases of ask and talk).

   Example:
     >talk tourist weather 
     Tourist says 'It's cold today.'
     >talk tourist weather
     Tourist says 'It's going to snow later.'

   Mobs are able to set conversational status directly with the MPCONV command:

     MPCONV pc conv_id subject_id new_state

   This can be used to make new areas of a conversation available to the
   player once some subject has been broached or an act has been performed.

  Deeds
  -----

   Deeds are a simple mechanism for recording that a character has done
   something.  It can be something good or something bad and can be public
   knowledge or unknown even to the character.

   Each deed has an id (this should be a vnum within the areas range).

   Each deed also has a type:

      Private, neurtal	:   0
      Secret		:  +1
      Publc		:  +2
      Good		:  +4
      Bad               :  +8

  Deeds also have titles.

  Deeds can be awared to characters when they do certain, significant things
  and can be used for control flow through a deed condition check. Thus a
  deed can influence how people view the world and how mobs react to someone.

  Example deeds might be:

      Slayer of the Hobarth Vampire (Public, Good)
      Visitor to Formault (Private, Neutral)
      Killer of Mrs. Whistlewaiths puddy tat (Secret, Bad) 

  Mobs can give (and remove) deeds through the MPDEED command:

      MPDEED player add id type title
      MPDEED player remove id
  
  These add and remove deeds from a players records.  It is recomended that
  good and neutral deeds are rarely, if ever, removed, while bad deeds can
  be removed upon the making of appropriate recompense.

  Deeds can be used to implement mini-quests and should be used to restrict
  rewards that are not given as a part of a quest (ie set a deed when you
  give the reward and check that the deed hasn't been done before you give
  it).

  Calandar
  --------
 
   A lot of the conditions now support modulo arithmetic upon the calander.
   This lets you set up cycles of things repeating at regular intervals.

   To accomodate this the calandar is a little different:

     12 Months each of 4 weeks of 8 days.

   This gives a year with 384 days and 48 weeks.
   The following repeat cycles are good as they fit completely:

     Hour of day: 2, 3, 4, 6, 8, 12
     Days of month: 2, 4, 8, 16
     Days of year: 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192
     Weeks of year: 2, 3, 4, 6, 8, 12, 16, 24
     Months of year: 2, 3, 4, 6

   This would, for instance let you schedule a ship thus:

     Week of year Mod 4:  0 - Arkham port
                          1 - Sailing Arkham to Cairo
                          2 - Cairo port
                          3 - Sailing Cairo to Arkham

     This is a real time journey of about 96 minutes each way (so they 
     probably need something to do on the ship and we should probably
     have two ships running the line, so there's an access window every
     3 hours or so real time).  Alternatively a shorter 16 day of year cycle
     might be better (if somewhat unrealistic - the fastest transatlantic
     journey in the real world is 5 days - and that's just to Liverpool, so
     even cutting the journey to Cairo to 8 days is pushing it).

   For trains you could probably use a four hour cycle, with 2 trains.  This
   would leave the character on the train for 30 seconds and give them 30
   seconds to hop on and off at each end. 

  Real Time
  ---------

     4 pulses per second, 120 pulses make 1 game hour.

     So: 

	1 game minute	 	=  1/2 second
	1 game hour		=   30 seconds
	1 game day		=   12 minutes
	1 game week		=   96 minutes
				=    1 hour, 36 minutes
	1 game month		=  384 minutes
				=    6 hours, 24 minutes
	1 game year		= 4608 minutes
				=   76 hours, 48 minutes
				=    3 days, 4 hours, 48 minutes
       
    WARNING: UPDATE IN DRIVER 7             

  Invisible Doors and Multiple Exits
  ----------------------------------

   Visability conditions

     - Control when a door will be visible
     - Cannot be used (or even found) when it is invisible
     - Created with target location as usual

     - used for trains, boats, planes, occasional doors, mazes

     [direction] vis condition

   Multiple Destination

     - Chain of destination/condition pairs
     - Sorted and evaluated in sequence
     - Lets you change where doors go when you walk through them
     - Door should be set up normally with the default location
     - Not considered for door visability

     - used for quests, day/night, magical doorways, teleporters, mazes 

     [direction] listcd
     [direction] addcd seq dest_vnum name 
     [direction] setcdcond seq condition
     [direction] removecd seq

  Events
  ------

   Used for internal programming.
     Input for triggers.
     Context.
     Descriptive codes.
     Messages for actor, victim and observers

   Distributed by rooms.

   Message substitutions: @xn

	x  Meaning
	-  ----------------
        a  actor
        v  victim
	o  observer
	p  primary object
   	s  secondary object
	t  text
	n  number  
        r  room                 
        c  random character
	m  text from observers memory slot n
        
        n  Character	Object		Text/Number	Room
	-  -----------	-------------	-----------	-------
	0  a/an		a/an		text/number	vnum
	1  name		name		garbled text	name
	2  short desc   short desc
	3  his/her/its	
	4  him/her/it
	5  he/she/it
        6  man/woman/thing
        7  Sir/Lady/Thing
        8  Lad/Lass/Thingy
        9  Sir/Madam/Thing
        r  vnum of room
        t  true name
        l  level        level

   Use @@ for a single @.		

   Use the 'EVENTS' command to look up details online.

  True Names
  ----------

   A true name is a unique text string that identifies a mob.
   Currently its only use is to locate a character in a room.
   It is intended to be used by mobs, as locating characters by name is
     inaccurate if there are similarly named mobs in the room.

   True names are dynamically allocated with a mob or player is created
   and are not saved.  The format of the true name is:

     @t0xpointer 

      t is the type of mob - m for mobs, p for players.
      pointer is the address of the mobs char_data structure.

   This is guarenteed to be unique and to remain unique as long as the 
   mob is instantiated within the mud.

   Driver 7 - the true name for players is extended with the players name.
              This is to avoid problems with players logging off and soemone
              else logging on and getting the same char_data.  If a mob had
              the char_data memorized it could end up harassing the new
              player, instead of the old one.

  Fountains
  ---------
  
   Completed liquid implementation.
   Fountains can be of any of the defined liquids.
   Fountains can also be poisoned.
     Filling a poisoned container gives a poisoned drink and may poison 
       the fountain.
     Filling an unpoisoned contained in a poisoned fountain may unpoison
       the fountain.  

  Gadgets
  -------

   Gadgets are pseudo-objects, permanently attached to a room.  They
   can be manuiplated in a limited fashion and act like multi-state 
   switches.

   Each gadget has a state and for each action/state combination you
   can speify what it's new state should be.  You can also attach 
   conditions to the state changes, allowing the construction of puzzels
   where multiple gadgets must be correctly aligned before anything
   happens.

   Gadget manipulation commands are: push, pull, turn, turnback, twist
                                     move, lift and press.

   Gadgets can be edited through OLC:

     gadget list
     gadget show [id]
     gadget add [id] [names]
     gadget addt [id] [seq] [action] [in] [out] message
     gadget addtc [id] [seq] [condition]
     gadget delete [id]
     gadget deletet [id] [seq]
     gadget renum [id]
   
  Mob Nature
  ----------

   Hitdice, Damdice, manadice and AC no longer set directly.

   All are calculated from the mobs level using default formula.
   Stats are also generated more realisticly.

   Nature field introduced to modify stats and combat values:
 
     strong/feeble       STR, CON
     smart/dumb          INT, WIS
     agile/lumbering     DEX, STR/INT
     sly/gullible        WIS, INT
     robust/sickly       CON, STR
     sturdy/fragile      Hit points
     magical/mundain     Mana points, AC Exotic
     viscious/harmless   Damage
     armoured/exposed    AC
     monsterous          STR, CON, DEX, Hits, Mana, Damage, AC
  
  Triggers
  --------

   Triggers drive scripts in response to events.

   OLC command 'triggers' to add and remove triggers.

   Event types and subtypes for trigger are:

	Type		Subtypes
	------------	-------------- 
	give		gold
			item

	get		gold
			item

	put		item

	drop		gold
			item 

	poison		food
			weapon
			fountain

	fill		fountain 

	drink		fountain_ok
			fountain_bad
			item_ok
			item_bad

	eat		food_ok
			food_bad
			pill 

	sacrifice	pc_corpse
			corpse
			trash
			treasure
			item

	gadget		gadget_ok
			gadget_bad

	search		item
			room 
			find_item
			find_mob
			find_door
			find_hound

	depart		walk
			sneak
			fly
			swim 
			sail
			portal
			magic
			current
			fleeing

	arrive		walk
			sneak
			fly
			swim 
			sail
			portal
			magic
			current
			fleeing

	pulse		1_sec
			3_sec
			4_sec
			5_sec
			10_sec
			30_sec
			area

	time		hour
			day
			sunrise
			sunset 
			dawn
			dusk

	control		login
			logout
			to_void
			from_void 

	mob		stop
			select
			echo

	death		slain

	attack		kill
			kick
			trip
			bash
			dirt
			backstab
			disarm
			circle
			rotate
			murder

	combat		miss
			hit
			block
			parry
			dodge
			absorb
			immune

	damage		injured
			hurt
			dirt
			trip
			bash
			env

	oocc		beep
			gossip
			music
			immtalk
			question
			answer
			tell
			gtell

	icc		tell
			say
			shout
			scream
			yell
			mtell

	social		emote
			fsoul
			nsoul
			hsoul

	idol		hold
			pray
			object
			gold

	lock		d_open
			i_open
			d_close
			i_close
			d_lock
			i_lock
			d_unlock
			i_unlock
			d_pick
			i_pick

	society		invite
			join
			advance
			resign
			expel
			demote
			test
			foe
			pardon

	dream		walk
			awaken
			say
			psay
			emote
			pemote
			cast
			pcast

  There are two types of triggers - challange and reaction.

  Challange Triggers
	
	When an action is about to be taken, a challange form of many
	events will be issued.  Challange triggers are used to react
	to this challange event (ie to someone attempting to do something).
	If a challange trigger is satisfied the action does not occur and
	the mob should provide information about why it did not happen.

	The MPSTOP command is designed to be used here.

  Reaction Triggers

	These are invoked for an event after that event has happened.
	They enable to mob to react to completed actions that others have
	taken.	

  There is a chain of triggers for each event type, sorted by sequence.  The
  triggers for each even are compared in the order of the sequence and the
  first one that matches will be used.

  Text Triggers
  -------------

  Any trigger may have a text condition specified upon it.  Generally this
  only makes sense for a reaction trigger, as mobs don't know what the
  character is going to say until they have said it. 

  Text triggers should be used selectively.  Very selectively.  They are
  considerably more expensive to evaluate than conditional triggers.

  Text triggers are specified as: 

   string1.1&string1.1|string2.1&string2.2&string2.3|string3.1

  This translates as:

   (string1.1 & string1.2) | (string2.1 & string 2.2 & string 2.3) | string 3.1

  This is the only format that is supported.  The strings may contain imbedded
  spaces and quotes, but may not contain '&','|' or '~' characters.  

  Each string is checked for as a substring of the string being tested.  There
  is no consideration given to sequence:

    give&money matches 'give me your money' 
                   and 'I have some money to give you'

  Spaces are significant and all comparisons are in lower case.

  Text comparisons are made AFTER a successful conditional comparison (which
  can act to reduce the number of evaluations).  You may have multiple 
  triggers with the same text pattern but different conditions.  These will
  be checked in the order of the triggers sequence numbers.

  Trapping 'flee' events
  ----------------------

  When a character moves because they are fleeing, the subtype depends upon
  their movement mode.  Only the walk subtype is replaced with the fleeing
  subtype.  The is fleeing condition will be true for characters at this point
  in time though, regardless of how they are moving.

  Time Events
  -----------

   Pulses - 1, 3, 4, 5, 10, 30, AREA
   Times  - hour, day, dawn, sunrise, dusk, sunset

   OLC command 'timesub' to select event flows  

  Stopping Actions
  ----------------

  The MPSTOP command is added to simplify the issuing of error message.

  Syntax: MPSTOP player_name action_description

  An example, of a script and a trigger to stop someone going north unless
  they are wearing an id badge (vnum 5600).

	script 1
	10 0 0 MPSTOP @a1 going north.
	20 1 0 say You can't go in there.  You don't have a badge.

	trigger depart
	10 none 1
	actor->not->carrying 5600 -1
	event->number 0

  The first condition is true if they are not carrying the badge.
  The second checks if they are trying to move north (by any means).

  Given a player called 'Howard' and a Mob called 'a security guard' the
  output would be:

  >look
  Mansion Gates (city)
  You stand before the gates of the mansion.
  [Exits: north west]
  A security guard is standing here.
  >north
  A security guard stops you from going north.
  >
  A security guard says 'You can't go in there.  You don't have a badge.'
  >look
  Mansion Gates (city)
  You stand before the gates of the mansion.
  [Exits: north west]
  A security guard is standing here.
  >

  Diagonal Exits
  --------------

  Exit directions are now:

	 0	North
	 1	East
	 2	South
	 3	West
	 4	Up
	 5	Down
	 6	Northeast
	 7	Southeast
	 8	Southwest
	 9	Northeast
	10	Here (*)
	11	Other (*)
 
  * Not valid for room exits.

  Resets
  ------

  Reset mechanisms have been reworked a little to make them more predictable.

  Resets are:

    MRESET mob_vnum count 

      M 0 mob_vnum count room_vnum

      This puts the listed number of mobs into the current room.
      Count is a world limit and if the mobs wander off they will not be 
        replaced until they are killed.

    ORESET obj_vnum count

      O 0 obj_vnum count room_vnum

      This puts count instances of the object into the current room.
      Count is room specific and if some objects are removed they will
        be replaced.

    ORESET obj_vnum count cont_name
 
      P 0 obj_vnum count  

      This puts count instances of the object into the each of the objects.
      This should be a container or a keyring.  
      Count is container specific and objects will be replenished if removed.

    ORESET obj_vnum count mob_name none

      G 0 obj_vnum count

      This puts count instances of the object into each of the mobs instances.
      For ship keepers, a count of -1 should be specified for their inventory
      items.  They will be able to sell unlimited quantities of them.

    ORESET obj_vnum 1 mob_name wear_loc

      E 0 obj_vnum 1 wear_loc 

      This puts 1 instance of the object into each of the mobs inventories
      and then makes then wear it in the specified location.
      If count is specified as a value other than one, this will be ignore.

  Reset Examples:

    A mob (1000) with a sword (2000) and a shield (2001)

      MRESET 1000 1
      ORESET 2000 1 knight wielded
      ORESET 2001 1 knight lwrist

    A shopkeeper (3000) with two potions (4000, 4001) to sell

      MRESET 3000 1
      ORESET 4000 -1 keeper none
      ORESET 4001 -1 keeper none

    A box (5000) containing two gems (5001) and a map (5002)

      ORESET 5000 1
      ORESET 5001 2 box
      ORESET 5002 1 box

  Note that you cannot, yet, put objects into objects carried by mobs.

  The RESET command can be used to review the resets that are established (it
  uses the M, O, P, G, E notation) and to delete resets.  It should not be
  used to add new resets.

  Currents
  --------

  Currents are flows which can capture players and force them to take a
  particular exit from a room.  Examples might be river currents, gravity
  and strong gusts of wind.  Each current can have conditions specified to
  restrict to whom it applies.

  Example

    current add 10 2 'a gust of wind' 'blows' 'down the street'
    current cond 10 actor is flying

    >> A gust of wind blows Herman down the street!

    This creates a current which will force any flying character (or mob)
    to leave through the rooms southern (direction 2) exit.

  Example

    current add 10 5 'gravity' 'pulls' 'down onto the rocks'
    current cond 10 actor not is flying

    >> Gravity pulls Herman down onto the rocks!

    This creates a current which simulates gravity and causes any non-flying
    character (or mob) to move downwards (dir 5). 

  Example

    current add 10 1 'the river' 'sweeps' 'along'
    current cond 10 actor skill swim 0 50
    current cond 10 actor not is flying

    >> The river sweeps Herman along!

    This creates a river current which will push anyone with a swimming skill
    of less than 51 who isn't flying to the east (dir 1).  The assumption
    here is that those who are flying won't be in the river.

  Notes

    Currents cannot cause damage (although they can push you into rooms with
    hostile environments or mobs).

    Gods can avoid currents by using GOTO to enter a room.

    All currents run at the same speed, which is very fast.  Mortals may,
    on occasion, be able to move fast enough to avoid them.
 
    Currents and conditional exits can also be combined to make portal like
    affairs. Set the vis condition for exit to the same as the current 
    condition, then anyone matching the condition gets swept through the exit.
    No one else is aware that the exit exists. 

    Useful for trapdoors.

      current add 10 5 'a gaping hole in the floor' 'swallows' 'up' 
      current cond 10 actor not is flying

      >> A gaping hole in the floor swallow Herman up!

  Languages
  ---------

  The code and the skill file are enabled for the following languages:

	english		spanish		french		german
	gaelic		polish		italien		chinese
	japanese	hebrew		arabic		greek
	latin		heiroglyphics	old english	romany
	stygian		atlantean	cthonic

  Others can be added fairly easily.

  All out of character communication is in english.

  In character communication (say, tell, shout, yell, scream) uses a language
  set be the character using the speak command.  You must have a skill of 10
  or better to attempt to speak a language.

  If either the listener of the speaker have skills of less than 50 in the 
  language, then it will be put through a garbling routine before presentation
  to the listner.  The ammount of garble is related to the ammount of language
  skill.  Language skills higher than 50 are usful for reading obscure 
  documents and may be required by some societies. 

  Some of the In Character (IC) communication commands are changed:

	tell	Whispered if in the same room, ooc if not
	say	Heard by all in the room
	shout	Heard by all in the room and all potentially adjacent rooms
	yell	Heard by all in the same subarea
	scream	Heard by all in the same subarea and all potentially
		adjacent rooms

  Potentially adjacenty means there is either an exit going there, or there
  is a conditional destination on an exit going there.

  Out Of Character (OOC) communication costs a little mana everytime it is
  used.  The loulder forms of IC communication use a few movement points.

  SubAreas
  --------

  Subareas are a simple, numerical, mechanism for dividng an area into smaller
  areas.  Typically a subarea would be used to represet a building or a 
  closely connected set of locations.

  If can be used in conditions and provides a scope for the yell and scream
  communication commands.  These provide a fairly good guide for defining the
  subarea.  Yells can be heard through out, as can screams which can also be
  heard in adjacent rooms.  If a subarea is the inside of a warehouse, yells
  can be heard inside, while screams can be heard standing outside the front
  door.
 
  Subareas are set with the REDIT subarea command.

  An additional ACT flag - stay-subarea - has been added.  Its effect is to
  stop wandering mobs from leaving thier subarea.  This can be used to 
  restrict mobs to a particular part of an area.

  Societies
  ---------

  A society is a like minded group of individuals with a common purpose.
  Societies as implemented in driver 6.4.1 as a replacement for the older
  Clan function, but without many of the limitations.

   Membership - invited, member, council, leader

   A society members must invit a new member to join.  They then choose to
   join the socity, becoming a member.  Members can be promoted to the 
   council and then to leadersip or demoted.  Unruly members can be expelled,
   while unhappy members may resign.

   The leaders determine who can do what by authorizing aother members.  
   Higher ranks do not confer authority, it must be granted. 
  
   Society Authorizations:

     invite  - invite someone to joint he society
     expel   - force someone out of the society
     bank    - access the societies bank account
     auth    - authorize other society members to do things
     promote - raise someones rank within the society 
     demote  - reduce someones rank within the society
     test    - see how a member measures up against the societies goals
     foe     - declare someone an enemy of the society
     pardon  - undo a previous foeing

   Societies use normal bank functions, and receive interest on their funds.

   Additionally a profession can be linked to a society, with criteria set
   to advance 'levels' within it.  A member can be tested by another member,
   and this may result in them advancing to a higher level within this 
   profession.  Alternatively it may result is a reduction to a lower level
   or even expulsion from the whole society.

   Foes
 
   A society may declare someone to be a foe.  At the moment this will just
   notify their members when they examine him, but it will eventually permit
   more actions (such as PKill).

   Society Tell

   This sends a message to all other members of the society who are currently
   logged on.  It costs 5 move points to use it.
  

  Spell: Summon Familier
  ----------------------

  This conjours a magical familier who is a few levels lower than the caster.
  The creature behaves as a normal pet.
  The type of creature the character receives is dependent upon their 
  alignment.
  Matrial Component: Silver Dollar

  Flee, Wimpy and Wander
  ----------------------

  Wander is added as an alias for Flee, and both commands work when you are
  not fighting, but only flee works when you are fighting.  There is no 
  penalty for fleeing or wandering when you are not fighting.

  Flee (and wander) now takes a parameter which is the preferred direction to
  run in.  If this direction isn't available, one will be picked at random.

  Wimpy now accepts a second parameter which is a direction.  This is the 
  default direction that you will try to flee in.  Setting it to an invalid
  direction means you flee in a random direction.  If the direction isn't
  available, it will pick one at random.

  Flee will pick a direction you appear to be able to move in (visible exit,
  valid destination, if there's a door, it must be open).  It is possible that
  a challange trigger on the movement could prevent the move from happening 
  (ie trying to run through a passage that a mob is guarding).   

  Idols
  -----

  Idols are objects that can be prayed to and to which offerings can be made.

  The commands to do so are:

    pray 'idol' prayer

    offer 'idol' 'object'
    offer 'idol' nnn 'gold'

  They both result in an 'idol event' being sent to each of the rooms lists
  in the idols values.  The gods are expected to be a mob within one of those
  rooms who may react to the event.  If an item is offered it moves into the
  room who's vnum is in the idols v0 slot.  Offered gold is simply destroyed.

  Note: If there are multiple idols in the same room, then idol events
  will be sent to all of them, but the primary object will indicate the idol
  that the event was generated for.

  If an idol is being held (worn), it will generate en event once every 60
  seconds telling its gods who has it.  The gods may react as they wish.

  Idols are expected to be big immoble cunks of stone (altars) or small,
  hand held figurines.  Inventive players may well add other types.

  Corpse Values
  -------------

  For those who want to offer corpses to idols, some details about the 
  corpses previous existance are now stored in its value slots.

    v0 - vnum or 0
    v1 - alignment
    v2 - level
    v3 - gender
    v4 - 1 Senitent, 2 Undead, 3 Sentient Undead 

  These can be used for, say, punishing mortals who sacrifice the corpses
  of evil creatures to evil gods, or intelligent creatures to good gods.

  MPSELECT
  --------

  This command can be used to let mobs pick randomly selected characters
  and objects from a particular room.

  Syntax: 
 
    MPSELECT mob_sel mob_sel obj_sel obj_sel number text

    mob_sel - a mob selector. 

	mob_none	No mob is selected.
	mob_me		The mob issuing the MPSELECT is selected.
	mob_any		Any mob in the room is selected.
	mob_npc		Any non player mob in the room is selected.
	mob_pc		Any player mob in the room is selected.
	mob_pc_mortal	Any player mob who is not an immortal in the room 
			is selected.
        name            The mob with this name is selected, as long as
                        it is neither the selecting mob nor the actor. 

      The first selector is for the actor, the second is for the victim.
      The mob driving the MPSELECT can only be selected through the mob_me
        selector.
      The same mob will not be selected as both actor and victim.
 
      mob_sel may be prefixed with a selection modifier:

	highest.	Finds the highest level mob that matches
	lowest.		Finds the lowest level mob that matches    

      The default selection is 'random.', which finds any mob. 

      For exaple:

	highest.mob_pc_mortal

      will find the highest level non-immortal player controlled mob in the
      room.

    obj_sel - an object selector

	obj_none	No object selected.
	obj_any		Any object in the room can be selected.
	obj_any_actor	Any object the actor is carrying/wearing.
	obj_any_victim	Any object the victim is carrying/wearing.
	obj_any_mine	Any object the mob is carrying/wearing.

      The first selector is for the primary object, the second for the
        secondary object.
      The same object will not be selected as both primary and secondary.

    number - a number, taken as is.

    text - taken as is.

  Once the various bits have been selected an event (mob, select) is generated
  and passed to the mob that issued the MPSELECT command.  That is the only
  mob that gets to see the event.	
 
  Echos
  -----

  Echos are a mechanism for implementing 'open spaces' within the mud.

  Echos allow players in one room to see and/or hear what is occuring in
  a neighbouring room.  There needs to be an exit between the rooms, but
  the exit does not have to be visible to the players doing the listening.

  Echoed events are prefixed with the direction that they came from.

  To create an exit you need:

    Two rooms connected with a bidirectional exit.  Echos are sent to
      rooms linked through conditional destinations, but the base exit
      in the conditional room must point back to the echoing room.

    The exit needs flagging as echo_all, echo_sound or echo_vision.  This
      actually enables echoes to flow in both directions.

    In rooms whose messages are to be echoed the rooms echo flag should be
      set.  For bidirectional echos, the echo flags in both rooms must be
      set.

  Echos would typically be used for:

    Open spaces such as public squares or large rooms which have been 
      subdivided into multiple rooms.

    Rooms with multiple locations such as balconies and windows.

    Spy holes and secret rooms from where a public area can be observed.
      This normally uses a mono-directional echo.

    Cut scenes which are to be remotely viewed, but which 'vanish' when the
      player enters them.  This requires a link between the two rooms and
      a conditional destination that transports the player to the 'player
      enters scene' room.

  MPALIGN
  -------

  This is designed for use with idols and deeds, so as to cause a mobs  
  alignment to change in response to its actions.

  Syntax:  MPALIGN mob target_alignment

  It effect to to calculate the difference between the mobs current alignment
  and the target alignment and then to change the mobs alignment by 10% of
  this ammount.  

  When using the command, use 1000 for good, 0 for neutral and -1000 for evil.

  MPECHO
  ------

  Sends an unattributed text message to one or more rooms.

  Syntax: MPECHO <scope> message

  The default, if scope is not recognised, is to send it to the mobs current
  room.

  Valid scopes are:

    _room		The mobs current room
    _room_plus		The mobs current room and all adjacent ones
    _subarea		All rooms in the mobs current subarea
    _subarea_plus	All rooms in the mobs current subarea and all adjacent
			rooms.
    _area		All rooms in the mobs current area
    _area_plus          All rooms in the mobs current area and all adjacent
                        rooms.
    _zone		All rooms in the mobs current zone
    _universe           All rooms in the mud
    _group		All rooms containing one or more members of the mobs
			group.

  Note that echoing is done on a room by room basis, regardless of who or what
  is in those rooms.  Scopes larger than _room_plus or _subarea_plus with 
  previously defined subareas should be used with caution as they can incur
  significant CPU overheads.

  Echos sent to _group may be useful for coordinating mobs in different rooms,
  but be aware that the messages will be visible to players in those rooms as
  well.

  MPRELEV
  -------

  This mob command allows a mobile to change its level.

  Syntax: MPRELEV base_level delta

  Base and delta are added together to work out the level the mob changes to.

  This enables mobs to change their challange factor in response to both
  players and actions.

  Examples

    In reaction to an EAT FOOD event, where the mob is the actor:
 
    MPRELEV @al 1 

    This will cause the mobs level to increase by 1 whenever it eats soemthing.
    (But watch out for the random level variation).

    In reaction to a player entering a room:

    MPSELECT highest.mob_pc_mortal mob_none obj_none obj_none 1 

    ...and in reaction to the SELECT event...

    MPRELEV @al -1

    This will cause the mob to change its level to be one lower than the
    level of the highest level player in the room.  This can be useful for
    adaptive areas which change with the players level.

  The mob should be created at the lowest level it is likely to want to 
  achieve, as that is the level its equipment will be created at.

  Random level variation still occurs. This modifies the resultant level by
  up to 1 level for every 10 levels that the mob has.  The code fragment is:

       if (mob->level >= 10) {
         mob->level += dice(1, mob->level/10);
         mob->level -= dice(1, mob->level/10);
       }

  This means a mob that is meant to be 53rd level, could end up anywhere 
  from 49th to 57th level, but will average around 53rd.

	49	1 in 25	   4%	1,5
	50	2 in 25	   8%	1,4 2,5
	51	3 in 25	  12%	1,3 2,4 3,5
	52	4 in 25	  16%	1,2 2,3 3,4 4,5
	53	5 in 25	  20%	1,1 2,2 3,3 4,4 5,5
	54	4 in 25	  16%	2,1 3,2 4,3 5,4
	55	3 in 25	  12%	3,1 4,2 5,3
	56	2 in 25	   8%	4,1 5,2
	57	1 in 25	   4%	5,1

  The primary aim of level variation is to make areas somewhat less
  predictable.  What a player can kill one day they may not be able to kill
  the next.

  Changing a mobs level altes its hit points, mana points, movement points 
  and armor class.  Damage ratios are preserved, however, so if a 20th level
  mob with 400 maximum hits and 300 current hits is changed to 10th level
  where it rolls 160 maximum hits, its current hits will be reduced to 120.

  Recall, Respawn and Morgue
  --------------------------

  You are now able to set these values for each area.  Thier roll is:

    Recall - Where the character goes when they recall
    Respawn - Where the character goes when they die
    Morgue - Where their corpse goes when they die (default is to leave it
             in the room they die in).

  This lets gods construct 'sealed' areas and prevents the player from 
  getting 'sucked' back to the main area when the recall or die.  Gods
  should ensure that they do not create inescapable areas, especially for
  low level newbies with any special skills.

  Miscellaneous
  -------------

   Fix bug in exp calculations - wasn't using effective level.
   Change score to show % of xps for next level.
   Remove DB boot checking for asymetrical doors.
   Fix bug with using exotic weapons.
   Fix bug with Advance.
   Another attempt at fixing the reconnect problems.  
   Fix bug with keys.
   Fix bug with mob skills ??.
   Score armor reworked to make it a little more compact.
   Examining weapons shows the skill needed to use them.
   Examining armor and clothing shows how it may be worn.
   GOTO brings pets and followers along.

 6.3.4
 -----
   Added Idols, pray and offer
   Added corpse details
   Fixed messages for environmental damage

 6.3.5
 -----
   Fixed closed corpse problem
   Fixed room visability problem with scan 
     It was showing rooms you were not allowed to go into
   Fixed problem inserting a script line infront of the first one
     Hopefully this fixed a problem with deleteing a line looping
   Events for locks and doors/containers (WEV_LOCK)
   Known problem with fags on multi-destination doors

 6.3.6
 -----
   Fix stray debug messages
   Fix memory leak from opening doors
   Convert socials to use WEVs

 6.3.7
 -----
   Fix bug with asave reintroducing social.are
   Fix loop in script line delete
   Add MPSELECT command

 6.3.8
 -----
   Fix misspelling of random in score
   Change highlighting for wimpy and direction
   Enforce minimum skill of 51% in English for all
   Add MPSELECT targets obj_any_actor, obj_any_victim, obj_any_mine
   Allow MPSELECT to take a name as an argument 
   Add source for events - OOC for OOC communications.
   Reenable reply
   Add echos
   Add MPALIGN
   Add extra routing options to MPECHO
   Bank interest changed to 1% per month, max 36 months.
  
 6.3.9
 -----
   Fix abend when a mob kills a player
   Fix loop when a first level mob tries to flee (or otherwise loses xps)
   Fix problem with max level for Advance
   Fix problems with Remove_Curse (hopefully) 

 6.3.10
 ------

   Add true names to fix problems with mobs getting the wrong target
   Fix score so it works for NPCs
   Try to fix switch/return - permitted for lesser gods. 
   Fix problems with equipment display for eyes
   Fix problem with subarea scopes
   Fix problem with door saves (mainly echos)
   Restrict clone (because it don't work) 
   Fix for PCs not getting kicked off when linkdead

 6.4.1
 -----
   Completed phase 1 of the society implementation
   Add @xl for mob/object level access
   Remove MPSTAT
   Add MPRELEV
   Add selection modifiers for MPSELECT
   Who and Examine show memberships based on new socities  

 6.4.2
 -----
   Add parns for Tundaras new compiler
   Fix problem with flying over water
   Give NPCs swim skill
   Fix problem in spell lookup for affects
   Remove clan from score
   Fix recall so it brings pets along
   Fix who so secret societies are always red
   Add recall, respawn and morgue values for areas
   Added society tell
   Fix society members for immortals
   Add ACT_STAY_SUBAREA
   Fix telepop for subareas
   Make unused displays a bit more compact
   Tidy up group display for those with lots of hits

 6.5.1
 -----
   Restructure directories and rebuild after system reinstall
   Fix telepop (broken by 6.4.2)
   Add copyright string for area files 
   Add profile file
   Make alist use page_to_char, not send_to_char
   Fix problem with newlock and wizlock being uninitialized
   Impose zone restrictions for gate, portal, summon, teleport, recall
   Fix alist to display zones
   Rework alist completely
   Add zone definitions and zlist
   Add Start, Recall, Respawn and Morgue into the profile.
   Complete zone implementation with zcopy, zclear and spell universality
   Added dreaming -
	dream command
	dreaming skill
	spells: true dreaming, rude awakening, enchanted sleep,
                recurring dream
   Added sector types Jungle, Path, Road and Plain

 6.5.2
 -----
   Added new world econds for probing rooms
   Added low and strong magic zones
   Added ainfo command for vnum/file information
   Added area manipulation commands
   Added revnum commands
   Fix problems with base buffer size in used and unused
   Fixed really silly abend in redit_mshow and redit_oshow
   Fixed bug that hid bad resets
   Fixed problems with pShop->keeper

 6.5.3
 -----
   Added hunger and thirst
   Fixed problem with affects making you drop things when you lost the 
     strength to wield them
   Fixed problem with spell casting in low magic areas
   Added asuck command to pull objects into an area
   Fix alarm clock so it only triggers if physically injured
   Added mob multi-state chatter
   Various other minor fixes
  
 6.5.4
 -----
   Fix zone recall problem with recall and word of recall 
   Stop shutdown and reboot from deleting all notify settings
   Reenable recall for characters over 10th level
   Adjust food and drink warnings
   Make it easier to lose weight
   Added a few food and drink spells

 6.5.5
 -----
   Fix rather nasty bug in update changes from zone support.
     When a timed object expired, it messed your inventory up.