(Probably out of date. -Ed.)

PUBLIC PROGRAMS HELP
The following commands allow access to help on indexed public programs.
> programs #(program number) -- shows notes on program.
> programs (searchstring)    -- shows all programs with name or keywords
.                               containing the searchstring.
> programs #list             -- shows complete listing of indexed programs.
> programs #list (x)         -- shows listing of the (x)th indexed program.
> programs #list (x)-(y)     -- shows partial listing of indexed programs.
> programs #page (x)         -- shows a 'page' of listing.
Programmers can add their programs to this listing.  For more information,
type 'programs #commands'.

Current number of entries: 91
Current number of pages: 7

PUBLIC PROGRAMS LIST
#    Program Name                         Owner            Docs
1)   #24822  mirror.muf _________________ Bunny __________ @list #24822=2-14
2)   #70451  odrop.muf __________________ Bunny __________ @list #70451=1-30
3)   #976    autolock.m _________________ Charity ________ @list #976=1-10
4)   #74762  cmd-race.m _________________ Charity ________ @list #74762=1-4
5)   #10112  comb-lock.m ________________ Charity ________ @list #10112=1-8
6)   #80178  disc_dswp.m ________________ Charity ________ @list #80178=1-16
7)   #86235  duty.staff _________________ Charity ________ @list #86235=1-14
8)   #75103  feed.m _____________________ Charity ________ @list #75103=1-8
9)   #50577  idle.user.m ________________ Charity ________ @list #50577=1-10
10)  #87850  privacy ____________________ Charity ________ @list #87850=1-9
11)  #8898   rot-exit.m _________________ Charity ________ @list #8898 = 1-18
12)  #9480   transporter.muf ____________ Charity ________ @list #9480= 1-9
13)  #54062  multi-action _______________ Corwyn _________ (none)
14)  #229    ListEditor _________________ darkfox ________ (none)
15)  #14490  TransExit __________________ darkfox ________ (none)
16)  #13747  simple-lock ________________ Corwyn _________ (none)
17)  #59828  LightLock __________________ Dragon _________ @list #59828=1-55
18)  #11683  improved_morph.pgm _________ Drew ___________ (none)
19)  #3146   container-shell ____________ Jenora _________ (none)
20)  #29292  Puzzle 'Inspect' program. __ Jenora _________ (none)
21)  #31686  Invite Command _____________ Jenora _________ @list #31686=1-22
22)  #29549  Property Look-trap _________ Jenora _________ (none)
23)  #27837  Potion dosage counter ______ Jenora _________ (none)
24)  #46956  lookitem ___________________ Wiz-Daemon _____ (none)
25)  #46186  extrude-item2.muf __________ Foxx_Fox _______ @list #46186=1-80
26)  #37200  Adv-Reset.muf ______________ Greywolf _______ @list #37200=1-53
27)  #12562  Com.muf ____________________ Greywolf _______ @list #12562=1-5
28)  #37258  Delay-Lock.muf _____________ Greywolf _______ @list #37258=1-18
29)  #37505  Dig.muf ____________________ Greywolf _______ @list #37505=1-34
30)  #32249  DriveTo.muf ________________ Greywolf _______ @list #32249=1-66
31)  #45886  Echo-Say.muf _______________ Greywolf _______ @list #45886=1-17
32)  #35858  Event.muf __________________ Greywolf _______ @list #35858=1-67
33)  #36215  Event-Shell-Lock.muf _______ Greywolf _______ @list #36215=1-60
34)  #52097  Index.muf __________________ Greywolf _______ @list #52097=1-24
35)  #28771  Intercom.muf _______________ Greywolf _______ @list #28771=1-26
36)  #35719  Mirror-Hack.muf ____________ Greywolf _______ @list #35719=1-9
37)  #42833  Multi-Command.muf __________ Greywolf _______ @list #42833=1-32
38)  #32153  ObjExit.muf ________________ Greywolf _______ @list #32153=1-15
39)  #11145  Option.muf _________________ Greywolf _______ @list #11145=1-107
40)  #44926  Parrot-Hack.muf ____________ Greywolf _______ @list #44926=1-62
41)  #41241  Rand-Exit.muf ______________ Greywolf _______ @list #41241=1-33
42)  #58411  Route.muf __________________ Greywolf _______ @list #58411=1-43
43)  #67396  Riddle.muf _________________ Greywolf _______ @list #67396=1-28
44)  #25984  Runaway.muf ________________ Greywolf _______ @list #25984=1-44
45)  #52356  Score.muf __________________ Greywolf _______ @list #52356=1-50
46)  #67962  Treasure-Thief.muf _________ Greywolf _______ @list #67962=1-13
47)  #36002  Window.muf _________________ Greywolf _______ @list #36002=1-43
48)  #26749  WolfAction.muf _____________ Greywolf _______ @list #26749=1-58
49)  #3839   chessboard-program _________ Jeremy _________ (none)
50)  #4567   look-simulation-program ____ Jeremy _________ (none)
51)  #3694   object-name-program ________ Jeremy _________ (none)
52)  #8274   descer _____________________ Karrejanshi ____ (none)
53)  #19944  exit-use-notify ____________ Karrejanshi ____ (none)
54)  #19999  showwho ____________________ Karrejanshi ____ (none)
55)  #20060  OnlyFemales.MUF ____________ Lanya __________ (none)
56)  #19683  OnlyMales.MUF ______________ Lanya __________ (none)
57)  #13071  capacity-lock.disk _________ Lynn_Onyx ______ (none)
58)  #11293  knock.disk _________________ Lynn_Onyx ______ (none)
59)  #13485  random-lock.disk ___________ Lynn_Onyx ______ (none)
60)  #8004   cmd-say-filter _____________ Lynx ___________ (none)
61)  #10979  copy-prop-to-proploc _______ Lynx ___________ (none)
62)  #9576   do-nothing _________________ Lynx ___________ (none)
63)  #355    tmp-die-roll _______________ Lynx ___________ (none)
64)  #6800   gen-desc (Revenge of Look-No Lynx ___________ @list $desc-docs
65)  #7125   cmd-spoof __________________ Lynx ___________ (none)
66)  #24709  record.muf _________________ Foxx_Fox _______ @list #24709=1-52
67)  #3933   Dice-Roller ________________ Revar __________ (none)
68)  #10522  gen-crowdlock ______________ Revar __________ (none)
69)  #6435   gen-mesgboard ______________ Wizard _________ (none)
70)  #10746  gen-multilock ______________ Revar __________ (none)
71)  #8452   gen-playerlist _____________ Revar __________ (none)
72)  #15046  gen-setit __________________ Revar __________ (none)
73)  #4958   gen-timedesc _______________ Revar __________ (none)
74)  #5020   gen-trans-exit _____________ Revar __________ (none)
75)  #6875   gen-broadcaster ____________ Lynx ___________ (none)
76)  #14118  ObvExits ___________________ Shaterri _______ (none)
77)  #5137   gen-proglock _______________ Lynx ___________ (none)
78)  #8813   pdc-morph.muf ______________ Slate __________ @list #8813=1-97
79)  #60904  pdc-time.muf _______________ Slate __________ @list #60904=1-32
80)  #22998  desc-area.muf ______________ Verin __________ @list #22998 = 1-40
81)  #75482  obv-area.muf _______________ Verin __________ @list #75482 = 1-35
82)  #27531  gen-change _________________ Lynx ___________ (none)
83)  #4708   ed.muf _____________________ WhiteFire ______ (none)
84)  #41107  lockmgr.muf ________________ Wizard _________ (none)
TA   #50173  lock.muf ___________________ WhiteFire ______ (none)
85)  #17812  morph.muf __________________ WhiteFire ______ @list #17812=1-115
86)  #43157  nag2.muf ___________________ Vision _________ @list #43157=2-28
87)  #70367  lingo.muf __________________ Vision _________ @list #70367=2-42
88)  #60782  narc.muf ___________________ Vision _________ @list #60782=2-44
89)  #94523  Passenger-List.muf _________ Greywolf _______ @list #94523=1-17
90)  #26889  foodquery.muf ______________ BoingDragon ____ @list #26889=1-58
91)  #101765 Super-Indexer.muf __________ Greywolf _______ @list #101765=1-9

PUBLIC PROGRAMS EDITOR COMMANDS
Wizards or programmers may add new program entries.
> programs #add (dbref)      -- add program to index.
> programs #delete (dbref)   -- deletes program from index.
> programs #keyword (dbref)  -- allows editing of program 'keywords'.
> programs #edit (dbref)     -- allows entry of one-line program summary.
Be sure your programs meet security, privacy and other wizard-determined
guidelines before adding them.  Also, please set the '_docs' prop on your
program to list internal documentation, and set the program LINK_OK.


1)   #24822  MIRROR.MUF _________________ BUNNY __________ @LIST #24822=2-14
mirror.muf
By Bunny
Include a call to this program in the @desc in the form of:
@desc {object}=@$mirror {text.... text....} %mirror {... text}
It is at the point of the occurrence of "%mirror" that the reflection of
the user will be inserted.
*Note: This version supports the hack made by Greywolf, and fixes a bug
that caused %yes, and %if to act odd. Thanks Rocket_raccoon
This program will work with @6800 and $desc and cuts out look notifys so
don't report this as a bug when your look notify fails
I can not guarantee any compatablity with other desc programs, I was not
familiar with any others so I made it $desc specific, so if you use
another prg who knows what this mirror might do.
13 lines displayed.


2)   #70451  ODROP.MUF __________________ BUNNY __________ @LIST #70451=1-30
odrop.muf by:
       Bunny
Odrop changer:
  The purpose of this program is to change the odrop of an exit to
  reflect the room they player left when they crossed the exit.
  This was written so that floating exits 'exits on players or objects'
  or exits set on parent rooms, will show the room the player left
  from when the exit was crossed. For example: I have an exit I use
  to bamf into my apt. with the default odrop setup the best I can get
  is Bunny beams in. With this prg I can get Bunny beams in from West Corner
  of Park, or living room, or whatever the name of the room I _was_ in.
  The program can be used on any object but will have little effect, but
  maybe someone out there will find a use for the "feature", osucc and ofail
  use were left out because no-one I asked could come up with a reason to
  support them. If you have one, p #mail Bunny, and I will debate its
  addition to the code. Thats about it for the long winded part of the help.
USAGE:
@drop <object> = @70451
  You MUST use the drop field for the program call otherwise the call will
intefere with use of $desc/@6800 or other prgs used in the succ and fail
fields.
PROPERTIES:
  Only one property is needed /_odrop: this holds the odrop info that will
be used by the program. This data is in the format:
@set <obj> = /_odrop:<text...> %loc <text....>
  %loc will be substituted for the name of the room you _were_ in.
I hope thats enough, if the help is still fuzzy p #mail bunny, and I'll fix the
help and help you out.
30 lines displayed.


3)   #976    AUTOLOCK.M _________________ CHARITY ________ @LIST #976=1-10
(autolock.m - door lock that relocks after some amount of time.)
(make an action named 'unlock' or something. @link it to this prog.)
(NOTE:'unlock' *MUST* either be, or be part of the exit name,)
(like 'buzz;unlock' then, @lock the exit in question to this program)
(set the fail msgs on the exit as desired)
(set these props: )
(on action: _ref: - dbref of exit to lock, as in _ref:22150 )
(on exit: ltime: - time in seconds to wait before relock.)
(on exit: lstate:locked - set it to locked initially)
(Ch'May 28 Sept 1993)
10 lines displayed.


4)   #74762  CMD-RACE.M _________________ CHARITY ________ @LIST #74762=1-4
(shows your current race for those who morph a lot and forget what)
( they currently are...)
(link an action to the prog, or call it from _connect props)
(Ch'May 8/29/93)
4 lines displayed.


5)   #10112  COMB-LOCK.M ________________ CHARITY ________ @LIST #10112=1-8
(comb-lock.m - a user settable combination lock program)
(To set up, type @act clok = me then @link clok = #10112 )
(set the exit to be locked with @lock <exit> = #10112)
(Type clok #help for details. set a combination for that exit,)
(and it is ready to use. Anyone can lock it. Anyone who has the)
(combintaion can unlock it. Only the owner of the exit may)
(set or change the combination.)
(Ch'May - 10-Sept-1993)
8 lines displayed.


6)   #80178  DISC_DSWP.M ________________ CHARITY ________ @LIST #80178=1-16
(This program is set on the _disconnect prop of a room to sweep)
(a disconnecting player from the room. They are sent to the)
(room pointed to by the dswp_dest prop. Also available are)
(dswp_mesg which shows the disconnecting player a mesg)
(dswp_omesg which is shown to others in the room.)
(dswp_ref can be set to use an alternative proploc in case)
(you want to use the same msgs on all rooms. The format of that)
(is @set here = dswp_ref:1234 - don't put in the # sign.)
(if dswp_mesg or dswp_omesg are not set, nothing is printed)
(if dswp_ref is not set it defaults to the current room.)
(if dswp_dest is not set, the player is sent home)
(Since this will run out of an environment room, the prop)
(dswp_exempt can be set to "yes" to make a room exempt.)
(If you use my environment room as the parent to yours, you may set this)
(prop in your enviromnent room to disable disc_sweep)
(Ch'May - 9 Oct 1993)
16 lines displayed.


7)   #86235  DUTY.STAFF _________________ CHARITY ________ @LIST #86235=1-14
(duty.staff sets/clears _off_duty , announces status change to people in the room.)
(depends on prop "_off_duty?" being initialized first)
(if you are wiz/helpstaff, you should know this prop, and have it set)
(Written by Ch'May 17 AUG 93 )
: duty.staff (MAIN)
    dup "#help" strcmp not if
       "duty [on][off] - set/clear on/off duty status, and see it." .tell
       "duty on - sets you on duty" .tell
       "duty off - sets you off duty" .tell
       "duty - Shows what your status is" .tell
       "_duty - message shown to you when you go on duty" .tell
       "_oduty - message shown to others when you go on duty" .tell
       "_xduty - message shown to you when you go off duty" .tell
       "_oxduty - message shown to others when you go off duty" .tell exit
14 lines displayed.


8)   #75103  FEED.M _____________________ CHARITY ________ @LIST #75103=1-8
(feed.m - A program for blood - drinking species)
(Make a personal action named 'fed' and @link it to this program)
(when you feed, type 'fed #set to timestamp the activity.)
(to see when you last fed, you can type "fed" and it will tell you)
(the current prop setting. Or, you can set _connect/lastfed:thisprognumber)
(and be informed of the lastfed timestamp as you log in. Great for those)
(who have a problem remembering...)
(Charity - 19 Sept 1993 )
8 lines displayed.


9)   #50577  IDLE.USER.M ________________ CHARITY ________ @LIST #50577=1-10
 (Idle sets/clears temp doing, announces un/idle to people in the room.)
 (Written by Ch'May 17 AUG 93 )
 : idle (main)
   dup "#help" strcmp not if
    "syntax - idle <reason> or idle" .tell
    "idle <reason> makes you idle" .tell
    "idle with no argument unidles you" .tell
     "This also sets/clears your temp doing field." .tell
     "You must also set 'wd #temp on' for others not in the room " .tell
     "to see the TEMP doing." .tell exit
10 lines displayed.


10)  #87850  PRIVACY ____________________ CHARITY ________ @LIST #87850=1-9
(privacy.muf toggles on/off duty, page #haven, and it's string,)
(and sets/resets your TEMP doing message.)
(19 Aug 1993 - Ch'May)
: privacy
  dup "#help" strcmp not if
    "open an action named 'priv' and link it to this program" .tell
    "priv [on/off] - sets/resets private mode" .tell
    "priv - tells you how you are currently set." .tell
    "The rest is NOT configurable" .tell exit
9 lines displayed.


11)  #8898   ROT-EXIT.M _________________ CHARITY ________ @LIST #8898 = 1-18
(rot-exit.m  - Exit link rotator.
After a person uses the exit, it is relinked to the next exit in the list.
By using trans-exit, you can see the next place it's linked to...
It is used by setting the drop on the exit to @8898.
The following props need to be set on the exit.
_rot_list:room numbers, space sparated, first and last numbers must match
as in _rot_list:25130 77164 12973 44756 25130
Link the exit initially to whatever number is the first/last one you use.
The other prop is _rot_last: and should be set to the first number at the
start. The program keeps track of where it is in the list with this.
The rules this program goes by is that all DBs must be rooms. Then, either
the owner of the exit must own the destination room, or, the destination
room must be set LINK_OK. If a LINK_OK room owned by someone else becomes
not-LINK_OK, then the program complains to the user, and the exit becomes
'stuck' pointing at the same location. Someone will probably be kind enough
to tell you about this. Remove the offending DB< and reset _rot_last to
the starting room, to reset the program.
Written by Ch'May 30-Aug-93)
18 lines displayed.


12)  #9480   TRANSPORTER.MUF ____________ CHARITY ________ @LIST #9480= 1-9
(This program allows transporter effects between space vehicles in the )
(same room)
(You need to set in the room you want to allow transports to and from:)
(is_vehicle?:yes and trans_on:yes and then set _map/ref to point to)
(the vehicle OBJ's DBREF. No # sign...)
(On that vehicle obj, set cont:XXXXX where XXXXX is the room inside)
(the vehicle to teleport to. Setting trans_on to no is like)
(turning off the transporter.)
(Ch'May 10 Dec 93)
9 lines displayed.


13)  #54062  MULTI-ACTION _______________ CORWYN _________ (NONE)
(multi-action.muf
  This program is designed to consolidate 'locked exit' effects in a room
into one action. To use, set a prop on the action, with the sames name as
one [or more] of the names of the action. The program, when invoked, looks
for a prop with the name it was called by, then feeds it to @6800. )
5 lines displayed.


14)  #229    LISTEDITOR _________________ DARKFOX ________ (NONE)
( ListEditor -- A simple line editor for property lists. )
[Unfortunately, the author's documentations skills are about as poor as my
ability to interpret MUF.  If this program is linked to an 'editor' command,
I think the syntax would be "editor <object>=<list-name>".  -- TA]


15)  #14490  TRANSEXIT __________________ DARKFOX ________ (NONE)
( TransExit -- Transparent Exit
  Displays the room through an exit.

  SETUP:
    @desc exit = @<program>

  This will set it up to say 'You see:', the show the name and description of
  the room through the exit.

  To change the 'You see:' message, simply put the new message after the
  @<program>.  For example, '@desc door = @<program> Through the door is'

  To change what gets displayed for the room itself, set a property called
  'show' on the exit, containing any combination of the letters 'n', 'd', 's',
  and 'c' [in lowercase].  If 'n' is in the property, it will show the name,
  'd' will show the description, 's' will show the success message, and 'c'
  will show the contents.  The default is just 'nd'.  For example,
  '@set door = show: ndc'
18 lines displayed.


16)  #13747  SIMPLE-LOCK ________________ CORWYN _________ (NONE)
( genlock.MUF -- A simple generic lock program

  Usage:
    @lock <exit> = 13747
    @set <exit> = genlock/valid: yes

  This will lock the exit such that there is a list of guests who are always
  allowed in, a list of players who are banned, a list of 'keys', objects that
  will allow someone in, and a locked/unlocked state to allow anyone else in.

  To modify the list of guests/banned/keys, or to lock or unlock the exit,
  create actions that are linked to the lock program and do the following:
    @set <action> = genlock/open : <alias to open door/edit guest list>
    @set <action> = genlock/locked : <alias to lock door/edit banned list>

    You can also set the following message properties:
      genlock/mesg   -- The message shown to you when the status changes
      genlock/omesg  -- The message shown to others in your room
      genlock/rmesg  -- The message shown to others in the exit room
    These messages are run through @6800.
    An %a substitution is available with these messages which is replaced
     with the action name used [in the main prop ONLY, not %subs].
    The messages can be set as defaults on the action, or on the particular exit
    If the property 'genlock/toggle' is set on a door, the value of
     '_broadcast?' on -that- door will be toggled along with the door.
     [ie, you can only hear through an open door, that way]
    Lastly, you can also set 'genlock/lockout' which, if set, restricts the
      open/close actions to those people on the 'guest' list.
  These actions are then used as follows:
    The actions are always followed by an exit name to operate on.  This exit
    can either be the direct exit to work on, or the exit can have a property
    'genlock/ref' set to the dbref of the actual exit [so that the lock
    program can be used from the inside of a room, for example].
    The genlock/ref property is subject to the following restrictions :
      1] The exits must share an owner
      2] The exits must be cross-linked, with each linked to the location
            of the other [ie, 2 sides of one door]

    If an action is called only with this parameter, then the appropriate
    status will be copied to the exit. If the action name is not in either
    the /open or /locked properties, the exit status is toggled

    If the action is called with parameters after the exit name, the player is
    checked against a list of players authorized to edit the lists [the owner
    of the exit is ALWAYS authorized].

    If the action is called with the exit name followed by a '+' or '-' and a
    player name, that player is added/removed to the list specified by the
    action. If the action name is not in the open/locked lists, the 'edit'
    list is modified.

    if the action is called with the exit name followed by '?', the contents
    of all relevent lists on the action are displayed.

  For example:

    @action open;close;work = ...
    @link open = 13747
    @set open = genlock/open : open
    @set open = genlock/locked : close

  Then 'open', 'close', and 'work' can be used as follows:

    close <exit>
      -- to set 'genlock/status: locked' on the exit.
    open <exit>
      -- to set 'genlock/status: open' on the exit.

    close <exit> + joblo
      -- this adds player 'joblo' to the banned list.
    close <exit> - MisterRogers
      -- removes 'MisterRogers' from the banned list.
    open <exit> + Bill_D_Kat
      -- adds 'Bill_D_Kat' to the guest list
    open <exit> - 'Bill_D_Kat'Up
      -- removes 'Bill_D_Kat' from the guest list
    work <exit> + Joe_Schmoe
      -- adds 'Joe_Schmoe' to the 'edit' list, so that they can change
           lists on this exit
    The following work regardless of which alias is used:
    open <exit> + Key_1
      -- [assuming Key_1 is an object]  adds 'Key_1' to the keys list
    close <exit> - Key_1
      -- removes 'Key_1' from the keys list.
    work <exit> = 10
      -- Sets the crowd limit to 10.
    open <exit> =
      -- Removes the crowd limit.


17)  #59828  LIGHTLOCK __________________ DRAGON _________ @LIST #59828=1-55
( LightLock -- v1.1    by Dragon )
( LightLock is designed for builders to be able to create dark rooms that
   require explorers to have a valid light source in order to be able to see.
   Unlike many similar programs, LightLock requires no wierd manipulation
   of lanterns in order to function.  In order for this program to allow
   players to see in a room, either the room must have a light source, or
   someone in the room must hold a lightsource.  In addition, LightLock
   will announce to the room when a room is lit or darkened due to someone
   entering or leaving with a light source.  Note that if a room is not lit,
   it's real name is not revealed.

  The program requires the use of ErmaFelna's look-trap program, or something
   similar.

  Installation:
  I recommend putting all dark rooms into one common parent as it saves on DB
   space and is overall more convinient.

  1. Create an exit named `look' in the parent, and link it to the look-trap
   program.  @lock this exit to LightLock.

  2. Properties:  These can be all in the parent, or in individual rooms
   for special exceptions.
    _light/items:  A list of items that are light sources.  There can be many.
      [ie,  @set <parent>=_light/items:#234 #6543 #1 ...]
    _light/darkname: A name that a room has when it is unlit. [ie: Darkness]

   If you want LightLock to annouce lightening and darkening, also add these:
    _light/Arrive:  String for when the room gets bright.
    _light/Depart:  String for when room gets dark.
    _Arrive:  set to the dbref of LightLock
    _Depart:  set to the dbref of LightLock
      [Note: On fb4.2 and above, you can use _arrive/lightlock: <dbref>.  Same
       applies for _Depart.  Consult info pages for more details.]

  3.  Set the @fail message of the 'look' command to the string players will
   see when it is not light.  [ie.  It is too dark to see.] [The reason I
   did not use a darkdesc prop is to avoid a 'You can't go that way. message.]

  4. Optional feature: Wrong turns.  Moving in the dark is dangerous, and
   LightLock can prove this if you desire.  In the parent room, create an exit
   named n;s;e;w;north;south... <All possible names>, and lock this exit to
   !<dbref of lightlock>.  That way, when a room is unlit, this semi-global
   exit is unlocked, and can be a 'You fell and broke your neck!' message.  I
   usually link it to a 'You are dead' room, @succ=Moving in the dark is Very
   Dangerous!, @drop=You fell and broke your neck!  Use your imagination.

  While you are building, you may with to make yourself a valid light source,
   that way you do not need to carry a light around all the time.

  LightLock can be disabled with the use of a property in the enviornment.
   _Light/Inactive, if set to yes, causes LightLock to always return a 1,
   meaning unlocked.  A room or sub-enviornment can have this property set
   to 'no' to override the setting in a higher parent.
55 lines displayed.


18)  #11683  IMPROVED_MORPH.PGM _________ DREW ___________ (NONE)
(* *********************************************************** *)
(* *              The MORPH Program  Version 1.1             * *)
(* *              --Written by D. Maxwell [Drew]             * *)
(* *********************************************************** *)
(*                                                             *)
(* Features:                                                   *)
(* 1] Ability to change descriptions at will {of course}       *)
(* 2] Customized messages for different 'morphings'            *)
(* 3] Storage of forms onto a separate object, if desired.     *)
(* 4] Help screen for easy reference.                          *)
(*                                                             *)
(* A quick note: This program works in conjunction with the    *)
(* look-notify program written by Lynx [Program #6800].        *)
(*                                                             *)
"################################################################"
"                    Help for the MORPH program                  "
"################################################################"
"                                                                "
"1) When first setting yourself up, please remember to set your  "
"   description to the following:                                "
"   '@describe me = @6800 %sub[current]'                         "
"                                                                "
"To set a default message you see when you change:               "
" '@set me = _morph_default : <put your message here>'           "
"To set a default message others see when you change:            "
" '@set me = _omorph_default : <put your message here>'          "
"To set another object as the place to store your forms:         "
" '@set me = _morph_target : <the number of the object>'         "
" (NOTE: If you do not set this property, it is assumed that the "
"  forms are on you yourself.)                                   "
"To set up a form:                                               "
"  '@set <either 'me' or your _morph_target> = <form> : <desc>'  "
"To set a specific message you see when changing into a form:    "
"  '@set <'me', or your _morph_target> = _morph_<form> : <msg>'  "
"To set a specific message others see when changing into a form: "
"  '@set <'me', or your _morph_target> = _omorph_<form> : <msg>' "


19)  #3146   CONTAINER-SHELL ____________ JENORA _________ (NONE)
( MUF Program for the creation of 'containers'                 ErmaFelna  )
(                                                                         )
( The concept of a container is simple: it's an object that can have      )
(   other objects 'inside' it.  Since, in MUCK, a thing cannot actually   )
(   have an inventory, the inside of the object is simulated by having a  )
(   room attached to it.                                                  )
( To use the container code, do the following:                            )
(   1: @dig a room for the inside, and @create a thing for the outside.   )
(   2: Create an @action attached to the thing, calling it what you want. )
(   3: @link the action to this program.                                  )
(   4: Type in the action name to run it.                                 )
(   5: When the program asks, give it the number of the room you @dug.    )
(      Do not put a '#' in front of the number, just type in the digits   )
(   6: Read the help that the program will print out for you.             )

( CONTAINER-SHELL:  ErmaFelna                                             )
(    called by person's action                                            )
(    expects: command line                                                )
( Shell for the container code.  This function checks the validity of the )
( container, and then locates the first command either on the trigger as  )
( the property '_action', or as the first word in the command line.  The  )
( command may be one of the following:                                    )
(   open:          Open the container for use.                            )
(   close:         Close the container.                                   )
(   look:          List the items inside the container.                   )
(   get <object>:  Get an item from inside the container.                 )
(   put <object>:  Put an object into the container.                      )
(   desc <object>: Look at the description of the object in the container.)
(   help:          Print the help listing.                                )
( Note that you can't get/put with a closed container, and you can only   )
( look/desc if the container is @set _transparent:yes.                    )

( CONT_CHECK:  ErmaFelna                                                  )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref                                )
(    returns: container_dbref inside_dbref valid_flag                     )
( Checks to make sure the container is 'valid': it points to a room that  )
( points back to it.  The extra check is waived for wizards.              )

( CONT_HELP:  ErmaFelna                                                   )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Lists out the help file for the container program.                      )

( CONT_LOOK:  ErmaFelna                                                   )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Lists all of the objects within a container.                            )

( CONT_PUT:  ErmaFelna                                                    )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Puts an object into a container.                                        )

( CONT_GET:  ErmaFelna                                                    )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Gets an object out of a container.                                      )

( CONT_OPEN:  ErmaFelna                                                   )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Opens a container so other operations can be done with it.              )

( CONT_CLOSE:  ErmaFelna                                                  )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Closes a container up.                                                  )

( CONT_DESC:  ErmaFelna                                                   )
(    called by container-shell                                            )
(    expects: container_dbref inside_dbref command_string                 )
( Describes one of the objects in a container.                            )


20)  #29292  PUZZLE 'INSPECT' PROGRAM. __ JENORA _________ (NONE)
[No documentation on this one, and my MUF isn't good enough to figure it out.
It seems like it should display either the _insprop or the _insfail property
of an object (depending on some condition I can't figure out).  -- TA]


21)  #31686  INVITE COMMAND _____________ JENORA _________ @LIST #31686=1-22
( Invite:
  by ErmaFelna

  This program works along with the 'invite-lock' program to allow access
  through an exit by invitation only.

  The program can be run with the following options:
    #add:    The default.  Adds the named person to the 'invitation' list.
    #ban:    Adds the named person to the 'banned' list.
             This only works if you control the room.
    #perm:   Adds the named person to the 'permanent', or staff, list.
             This only works if you control the room.
    #remove: Removes the named person from all lists, subject to access
             restrictions as usual.
    #list:   Lists all the people on the 'invitation' list.  Also lists the
             other two lists if you have access.
    #help:   Prints out a brief help message.

  If the person being added to the list is at the source of the exit, they
  will be sent the '_letin' message, so they will know the door is now open
  for them.
)
22 lines displayed.

22)  #29549  PROPERTY LOOK-TRAP _________ JENORA _________ (NONE)
[Appears to be the program that implements the LOOK action as described in
the separate file ENVIRON.TXT.  See that file for more information.  -- TA]


23)  #27837  POTION DOSAGE COUNTER ______ JENORA _________ (NONE)
[Aparrently checks the doses prop of an object and decrements it to account
for the drink taken, and returns the number of doses left.  -- TA]


24)  #46956  LOOKITEM ___________________ WIZ-DAEMON _____ (NONE)
(Lookitem      7-22-92     Written By Fidget:      )
(This program will print the name of the room that )
( in which an item is located.  The main reason    )
( this program was written is so the description of)
( the interior of a vehicle can contain the name of)
( the room the vehicle object is in.  Since the    )
(@6800 program is used so widely, the example :    )
(for @desc here = @6800 %list[l]                   )
(set here = l5: %call[prognum,objectnum]           )
( for a description on l5...........
( where prognum is the number of this program      )
( without the '#' and objectnumber is the number of)
( the vehicle-object without the '#'               )
(If you wish to customize the message displayed,   )
( you can set the prop _itemdesc: <desc>.  The     )
(characters %r will be replaced with the name of   )
(the room.                                         )
(If you have any questions, email me, Fidget...    )
var idb     (db # of room the passed exit is looking into )
var rname   (string name of room looked into              )
var itm      (db # of the exit passed to this progam       )
var output  (The line that is displayed.                  )
            (   %r in the line is replaced with room name )


25)  #46186  EXTRUDE-ITEM2.MUF __________ FOXX_FOX _______ @LIST #46186=1-80
( Extract Item Version 2.0 -- By Foxx Fox  93 FEB 28 )

( Property Summary : all props are on the 'ACTION' <trigger>
                     or all <except 2> can be on a _proploc object.

---< props which can be put on ACTION ONLY >---
item/store      *  db of store room
_proploc        -  db of place to look for properties

---< props related to item creation , <n>=integer >---
_proploc_ok     -  set to 'yes' on proploc object if owned by someone else.
item/random?    -  set to 'yes' to extract random item
item/ref#       *  number of items in reference list
item/ref#/<n>   *  reference list for defined items
item/<n>/&name  *  name of item number <n>
item/<n>/<      -  list of propnames to be set on item <n>
item/<n>/[prop] -  [prop]=propname, set to value of [prop] on item

---< optional messages, defaults exist for all except those marked w/ 'x' >
item/succ       -  msg for successfull extraction
item/osucc      -  msg for      "          "      <to others>
item/fail       -  msg for requesting nonexistant item
item/ofail      x  msg for      "          "        "  <to others>
item/empty      -  msg for empty item storeroom
item/oempty     x  msg for   "     "      "     <to others>

-- Principle behind extract-item.muf:
This is NOT a standard container program.  It setup is something like this:

 +--------+                                  For this example let:
 | ACTION |         +---------------------+   VENDOR = Fruit Basket
 +--------+         |     STORE room      |   ACTION = pick
 .   |              |+--------+ +--------+|
 +---------------+  || OBJECT | | OBJECT ||  Example text in [ ].
 | VENDOR object |  |+--------+ +--------+|
 +---------------+  +---------------------+

The STORE room is ment to be a normally unused room containing a set of
OBJECTs, all of which have their home set to STORE.

What happends when ACTION is used?  [ pick apple ]

1. The provided parameter [ apple ] is first matched against the names in
   the list 'item/ref#' ACTION <or proploc> to get an index number <n>.
   [ e.g. 'item/ref#/3:red apple', the index number would be '3' ]

2. Once an index is set, the program then looks for the STORE room using
   the property 'item/store'.

3. The contents of STORE are examined and the first acceptable OBJECT found
   is then selected as the item to be extracted.

4. The OBJECT's name is set using the property 'item/<n>/&name'.
   [ e.g. 'item/3/&name:a red juicy apple' .. note this is NOT item/ref#3 ]

5. Any properties put on OBJECT previously are erased. < this is done using
   a 'secret' property called "_/<" on OBJECT which simply contains the name
   of all the props which were put on OBJECT the last time it was used >

6. A list of properties to be added to OBJECT are found in 'item/<n>/<'
   The contents of this list is separated by ':'s. <note that all of the
   'virtual properties' such as @desc, @succ,.. are refered to by their
   property equivilants, _/de, _/sc, ...  The value of this property is
   copied to OBJECT as the property '_/<' <the so called 'secret' property>
   [ e.g. 'item/3/<:_food?:_food_bites:_/de' ]

7. Each property name '[prop]' in the property list is then added to the
   OBJECT using the value found in 'item/<n>/[prop]'
   [ e.g. 'item/3/_food?:yes' , 'item/3/_food_bites:3' ,
   'item/3/_/de:This apple looks very tasty, with no bruises or worms' ]

8. The finished OBJECT is then teleported to the user and all appropriate
   messages are displayed.
< NOTE: if the property 'item/random?:yes' is set, then any parameter
  provided is ignored and an index is chosen at random from 1 to item/ref#.

NOTICE:  EXTRACT-ITEM.MUF has an EDITOR to aid in setting it up..
@name the action calling the program 'editor' to access it!
80 lines displayed.

26)  #37200  Adv-Reset.muf ______________ Greywolf _______ @list #37200=1-53
(header 53 lines -- last updated 8/15/93
Adv-Reset.muf, programmed by Jordan Greywolf
This program is meant to make the job of "adventure-makers" easier by having
a means for resetting the adventure without having to set up a web of propsets
and "summoning" actions.  Also, it provides a means for protecting against
having an adventure interrupted by someone else resetting it while you're
in the middle.
On the action:
_adv/reserve?: yes   -- If this is set, the "reserve" feature is activated.
   When this action is used, a timestamp is used and the name of the user
   is recorded.  If someone else tries to use the action, it will check to
   make sure that things are "clear".  If the current "user" is not awake
   at the time, the adventure may be reset.  Otherwise, if the following
   two properties are set, other checks may be made:
_adv/delay:          -- {time in seconds} If this much time has elapsed since
   the timestamp from the previous user, the adventure may be reset.
_adv/rooms:          -- {list of rooms, separated by spaces} If the reserving
   user is not present in any of the listed rooms {i.e. within the adventure}
   it is considered safe to reset the adventure.
_adv/announce:       -- {text} Message displayed to rooms in adv_rooms when game
   is reset.  "%user" is replaced with name of current user.
_adv/sweep?: yes     -- Area will be sweeped of all non-homed objects/players.
   Will only be activated if both adv_announce and adv_rooms are set.
_adv/sweepto:        -- {db#} Location sweeped items/players will be moved to,
   unless set "_adv/gohome?:yes"
_adv/fail:           -- displayed upon failed attempt to reset game.  "%user"
   is replaced with name of current user.
_adv/succ:           -- displayed upon successful reset.
_adv/osucc:          -- displayed to others in room.
-----
_adv/move:           -- {list of items, separated by spaces} Pairs of items
   and locations are stored here.  Upon resetting the adventure, the items
   are moved to the specified locations.  For example, if adv_move is set as:
   25517 20846 36100 7720
   ...upon running the action, object #25517 will be moved to location #20846,
   and object #36100 will be moved to location #7720.
   As a destination for an object, "here" or "me" can be used.
-----
_adv/propset/{n}:    -- A number of these properties may be set up.  Each one
   will reset a property to the specified value on the specified object, in
   the format of:
   {db#} {property}={propsetting}
   Note:  If multiple db#s are indicated, separated by semi-colons {;}, then
   *one* of those db objects will be randomly selected from the list.
   If multiple *values* are separated by %| , one will be randomly used.
_adv/delimiter:      -- If this is set, the "=" delimiter for adv_propset may
   be replaced with whatever character is desired.  {This is a precaution
   in case the user may desire to reset properties that have "=" in their
   names.}
-----
_adv/moveto:         -- If this is set, the user will be moved to the specified
   location.
)
53 lines displayed.

27)  #12562  COM.MUF ____________________ GREYWOLF _______ @LIST #12562=1-5
(header, 7 lines -- Com.muf, programmed by Jordan Greywolf
This is the "next generation" of my CB.muf program, tailored for simulating
a non-portable com unit meant to be handled as a global "com" command
stored in the environment, for use with vehicles.  For help, link an
action "com;switch;squelch" to this program and type "com #help".  For
a portable "CB", attach such an action to yourself or to an object, and link
it to this program.  It can also be aliased 'cb'.)
7 lines displayed.


28)  #37258  DELAY-LOCK.MUF _____________ GREYWOLF _______ @LIST #37258=1-18
(header 25 lines -- Delay-Lock.muf, programmed by Jordan Greywolf
This program contains several sub-programs in one -- Prop settings on the
action determine which feature will be used.
----- {Delay - lock.  Default feature}
This program allows an action to be unusable for a set time period after the
last time it was used.
delay:       -- time in seconds that must elapse since last usage for action
                to be usable again
timestamp:   -- set by program, with systime at last usage
----- {Random - lock.  @set action=randlock?:yes}
Will return a "1" on a random chance, x in y, where x and y are set by:
rand_x:{x}   {default: 1}
rand_y:{y}   {default: 1}
A random number between 1 and y will be generated, success being if the value
is equal to or less than x.
----- {Awake - lock.  @set action=awakecheck:{db#} }
If player indicated by "awakecheck" prop setting is awake, a "1" is returned,
otherwise a "0".
18 lines displayed.


29)  #37505  DIG.MUF ____________________ GREYWOLF _______ @LIST #37505=1-34
(header 34 lines -- Dig.muf, programmed by Jordan Greywolf
This program is primarily meant for use in "adventure games", but it might
possibly have some general amusement value as well, when combined with
bury.muf.  The "dig" command allows one to use a digging implement to
"uncover" objects "buried" in the room or possibly in an object.
Props on room/environment:
_dig/alias: {list of words} -- If person tries to dig "in" something that isn't
   found, program will check environment to see if the word used for the
   "soil" is contained in this list, separated by spaces.  If a match is made,
   it assumes the person meant "here".
dig_ok?: yes -- indicates user may dig here
dig_fail:    -- used to override default message when user can't dig here
dig_need:    -- what does user need to dig here?  Possible settings:
   hands   -- may dig with "hands", "paws" or "claws" or any valid implement
   shovel  -- may dig with any "shovel" tool.  {c.f.}
   {list}  -- a list of specific items {db#} that may be used
dig_succ:    -- message upon successfully digging up an item. %object is
   substituted with the name of the item dug up.
dig_osucc:   -- message displayed to others
dig_contents:-- list of items "buried" in room.  A "0" or a null string
   indicates that nothing is dug up.  The last item on the list is the first
   to be "dug up".
dig_propset{n}:     -- A number of these properties may be set up.  Each one
   will reset a property to the specified value on the specified object, in
   the format of:
   {db#} {property}={propsetting}
   These props are triggered upon successfully digging something up.
dig_delimiter:      -- If this is set, the "=" delimiter for dig_propset may
   be replaced with whatever character is desired.  {This is a precaution
   in case the user may desire to reset properties that have "=" in their
   names.}
On "tool" used:
tooltype:    -- If the dig_need is set "shovel", then "shovel" must exist
34 lines displayed.

30)  #32249  DriveTo.muf ________________ Greywolf _______ @list #32249=1-66
( header, 66 lines -- Driveto.muf, programmed by Jordan Greywolf
This program is designed to be used in conjunction with objexit.muf
to give the illusion of a "vehicle", but only within rooms that have been set
"vehicle_ok?:yes".  The action is called in the form {action} {destination}.
Properties to set on action:
   _bike?: yes {sets up the vehicle as a "bike" vehicle -- the object has
    to be carried by the user, and the user is directly teleported, rather
    then the object itself.}
   _drive_{destination}: {room db# object is sent to if a match is found}
   _drivemsg_{destination}: {message displayed to all "inside vehicle"}
   _drivein: {number{s} of room "inside vehicle" - default is location
      of action.  For multiple rooms, separate by spaces.  Example:
      "_drivein: 20846 7720 31600"}
   {This is used to determine where the _drivemsg messages will be displayed.}
   drive_odrop: {message displayed to others in room upon arrival, prepended
      by user's name} {can be set on room to override vehicle setting}
   drive_osucc: {message displayed to others in room that object leaves,
      prepended by user's name}
   object:      {object db# that serves as the "vehicle" moved by this action}
--- less important stuff ---
   _drive_ref: {db#} {in addition to destination settings set on the trigger,
    vehicle room, etc., the db# indicated here will also be checked if it
    fails to find a matching "destination" or message.  The target db# must
    have the same owner as the trigger, or have _drive_ref_ok:yes set.}
   nodest:      {optional -- error message if user does not specify a
      destination}
   cantgo:      {optional -- error message if no such destination is
      available}
   drive_change:{if this is set, the room db# specified by this property will
  have the property "_driveloc:" set on it with the name of the room
  where the "vehicle" is currently located.}
   _drivecode: {optional -- If any room has this property set on it, the
  drive action must have a matching property in order to be valid there.
  This is so you can lock out unwanted vehicles.  If _drivecode set on
  the room is "owner", then the action will work only if the owners of the
  action and target room are equal.}
 Note: _drivecode and _drive_{destination} properties are checked for
   in the environment of the destination room.  In drivemsg, drive_odrop and
   drive_osucc messages, "%vehicle" is replaced with the name of the vehicle.
   _drive_env?: yes {if this prop is set, the drive action is assumed to be
    installed in a parent room.  Instead of checking the *action* for
    ownership, the *room* from which the player uses the action is checked
    instead.}
   _drive_compass?: no {Normally, if someone types "drive north",
    "drive south", etc., it will be substituted with "drive n", etc.  To turn
    this feature off, set this property "no".}
   _drive_local?: yes {if a search for _vok? exits is made, and no match is
    found in object's room, will check *user's* location as well.}
--- props to set on driveable exits:
   vehicle_ok?:yes -- if this is set on an exit, a vehicle may "drive through"
      it, but only as long as the exit is attached to the room {it may not be in
      the environment} and it leads to a vehicle_ok?:yes room.
   _drivemsg: {text} -- Message displayed to passengers of vehicle upon using
      exit.
   dmode: {setting} -- If set on the exit, the vehicle object must have the
      same setting to use this exit.  If not set, any setting on the object
      other than "land" will prevent passage.  Standard settings are:
         air
         water
         land
         any {allows *all* settings}
*** DISCLAIMER:  This program is supplied as-is.  It's a very old, not-very-
user-friendly program from my early days of programming.  No warranties
expressed nor implied.  If these docs aren't enough, you're on your own.
66 lines displayed.


31)  #45886  ECHO-SAY.MUF _______________ GREYWOLF _______ @LIST #45886=1-17
(header, 17 lines -- Echo.muf, Programmed by Jordan Greywolf
A "say" action linked to this program may be set up in a "cavern" environment,
giving a slight 'echo' effect to any speech there.
In order to use this action in a more generalized environment, setting
echo_ok?:  on the particular room {or environment} to yes or no will
enable/disable the echo feature, respectively.
In order for this to work, @set
_make_say: 33314
on the action calling this program.
Also, as an added feature, you may have speech "echo" into another room.  On
each room:  @set here=_echo/target:{db# of listening room}.  The target room
must share ownership, or else be set "_echo/receive?:yes".  In the target room,
you can format the received message with _echo/format.  %m is the message.
%n is the name of the speaker.  %loc is the location the speaker is in.
15 lines displayed.


32)  #35858  EVENT.MUF __________________ GREYWOLF _______ @LIST #35858=1-67
( header 67 lines -- Event.muf, by Jordan Greywolf -- updated 27 Aug 93
Special thanks to Khars for inspiration for this program. Event.muf
is meant to give the illusion of timed processes for "events" to give
atmosphere to an area.  This illusion is maintained by making "invisible" calls
to the lock program {#36215} on various commonly-used actions, such as a "say"
or "pose" action in your environment, or even exits.  When the exit is used
normally, this "trigger" will be set off.  The program checks for a "_ref" prop
on the triggering action, which contains the db# for a room or object where you
may store props used by this program.  This "reference object" is where you
store the list of events, rooms, and other information detailed hereafter.
:
To trigger this program via a @lock on an item, @lock the action/exit/etc. to
#36215, which serves as a "shell program" for this one.
:
On the trigger action:
_ref -- # for room, thing or exit/action that will be referred to for
 the information necessary to set off the "event".  This is referred to as the
 "ref room", though it need not actually be a room.  You can store props for
 this program on any valid db object that you own.
:
On the ref room {or thing or action}:
_event/rand -- On a 1 in {x} chance {default is 1} upon calling this program,
 the "event[s]" will be triggered.
_event/rooms -- List of rooms {include room numbers, separated by spaces}
 {example -- _event_rooms: 7720 31600}
_event/delay -- minimum time in seconds between "events" {default 120}
event/last -- set by program -- last systime event was triggered
_event# -- Number of possible events.
_event#/{#} -- List of events -- Upon a successful "trigger", one of these
 items will be selected, and the text will be displayed in each of the
 affected rooms.  NOTE:  To use lsedit to edit a list of events on the room,
 use: "lsedit here=_event".
:
----- The following optional features may be triggered as part of an "event"
   in addition to a displayed message or instead of one:
event/move/{n}:           -- {list of items, separated by spaces} Pairs of items
   and locations are stored here.  Upon resetting the adventure, the items
   are moved to the specified locations.  For example, if event_move is set as:
   25517 20846 36100 7720
   ...upon running the action, object #25517 will be moved to location #20846,
   and object #36100 will be moved to location #7720.
   **WARNING:  If you are using movements in your event setup, do not have
     program calls in a "look" action or on the arrive/depart of a room.
-----
event/propset/{n}/{x}:-- A number of these properties may be set up.  Each one
   will reset a property to the specified value on the specified object, in
   the format of:
   {db#} {property}:{propsetting}
-----
_event/lock -- if "yes", then a trigger will only work if owned by the owner
   of the "ref" item.
:
On the affected rooms:
_event/delay -- Requires this number of seconds to pass for a message to appear
   in that *particular room*.  If this number is less than the _event_delay
   setting for the "master" reference location, this might not mean much.
_event# -- If this is set, it will override the "default" settings in the
 ref room for this particular room.
_event#/{#} -- Ditto.
_ref/ok -- list of db#s.  If the affected room and the ref object are not
   owned by the same player, then the value of the ref object will have to
   be found in the string contained by this prop on the affected room.  A list
   of such values may be included, separated by spaces, without '#'s.
:
NEW FEATURE:  If, in an event message, "%n" is encountered, the program will
   randomly select the name of one player in the room {asleep or awake}.
66 lines displayed.


33)  #36215  EVENT-SHELL-LOCK.MUF _______ GREYWOLF _______ @LIST #36215=1-60
(header 60 lines -- Event-Shell-Lock.Muf, by Greywolf
 -- works with Event.muf #35858 -- updated 7/16/93
:
--- How to set up your own "events" ---
Event.muf is designed to simulate randomly timed "environment" events that do
NOT require background timed processes to function.  How this works is through
the use of "triggers".  What you can do is to set up various common actions
{room exits, a "say" command, a "pose" command, a "look" command...} to be
@locked to this program.  Whenever such a "trigger" exit is used, this program
will be called, and it will check to see if enough time has passed since the
last event -- If so, it will generate an "event", broadcasting a message to all
appropriate rooms ... and then the control will return to the original trigger
exit. If the person was using a room exit, he will move through the exit
normally.  If the person was speaking, whether or not an event was triggered,
her speech will be heard normally.  The beauty of "triggers" is that they are
"invisible". You can have a "trigger" set up clear across the MUCK which will
affect an event somewhere else.
:
In order to more simulate the illusion of timed events, you want to have a
number of "triggers" set up over a wide area.  Setting up "say", "pose" and/or
"look" actions @locked to this program in your environment room is one way to
accomplish this.  Now, to set up a room with "events" in it...
:
First, you will need a "ref" location where you will store properties required
by this program.  This location could be a room, an exit, an object, yourself
... any db object you have access to.  On this location, you may use lsedit to
make a list of "events", such as "A bird flutters by overhead", or "A squirrel
chatters at you from a tree branch."  {for help on lsedit, type "lsedit #help"}
This location {referred to as "ref" for simplicity} will also contain other
information -- To set the time delay in seconds between "events", set
"_event/delay" on the ref location.  The default is 2 minutes {120 seconds}.
Also, you will need to set up a list of rooms in which these messages will
be displayed.
:
For example, if you want to send messages to rooms 12345, 54321 and 15432,
set the following prop on your "ref" location:
"_event/rooms:12345 54321 15432"
:
All rooms should be owned by you.  If you want to send a message to a room
not owned by you, its owner must set a prop on that room, "_ref/ok", which
will contain the db number of your player, thus giving you permission to
"broadcast" to that room.  If you want to have a message randomly select
a name of somebody in the room at the time, you can include "%%random"
somewhere in the text of an event message.
:
In each of the rooms where you are sending these events, you can override the
"default settings" you set in your "ref" location, by setting _event/delay
settings and _event messages on that room.  To set a list of events for a
room, type "lsedit here=_event".  An _event/delay setting on a sub-room will
only have any meaning if it is a LONGER delay than that set on your "ref"
location.
:
Now, to the triggers.  You want lots of triggers in various places.  To set
up a trigger, take any action and "@lock {action}=#36215".  Then,
"@set {action}=_ref:{ref}", where "{ref}" is the db# of your ref location,
where you are storing the props used by this program.  The owner of the
trigger and the owner of a ref location NEED NOT be the same.  Therefore,
you could possibly get friends to set up exits in their areas as "triggers"
for your events.
60 lines displayed.


34)  #52097  INDEX.MUF __________________ GREYWOLF _______ @LIST #52097=1-24
(header, 24 lines -- Index.muf, programmed by Jordan Greywolf
This program is designed primarily for use with the "programs" global.  If the
action is called in the format of "{action} {text}", it will search a list of
properties on the action {or a reference object indicated by _proploc} for any
and all matches, displaying additional information.
Props to set on action:
_proploc: If set, the prop/info list will be searched for on the db object
   indicated.
_proplist: name of property list to be checked.  Example, if this is set to
   "item", then the list of "item1"..."item2"...etc. will be searched.  If
   not set, default setting is "index_". "/#/" will be tacked on, such as:
   "index_/#/1" "index/#/2", etc.
_infolist: name of property list to be referenced if a match is made.  If the
   text string is found in a property "{propname}{n}", then the information
   in "{infopropname}{n}" is displayed, where "{infopropname}" is set by this
   property.  Default setting is "info_".
_pagemode?: yes -- If set, allows multiple "pages" of info or prop listings,
   in format of "item_1/#/1", the first number being the "page", the second
   being the "item #".
_index: displayed if no text is specified.  Program calls are valid.
_showstring?: yes -- If set, the string in which a match was found will
   be displayed before the corresponding information.
23 lines displayed.


35)  #28771  INTERCOM.MUF _______________ GREYWOLF _______ @LIST #28771=1-26
(header 26 lines -- Intercom.muf, Programmed by Jordan Greywolf
The purpose of this program is to allow an "intercom" to be set up in much
the same way as the broadcast program, except that optionally a check may be
made to see that the "intercom" is turned on or off, and it is possible that
the message broadcast may be heard from a mobile object rather than just
in a fixed room.
On action:
com_fail: Message to user if the intercom is "off".
com_switch: off -- If this is set, the intercom will be "off", not functioning.
com_msg: Message format displayed to user.  Any occurrence of "%text" is
   replaced by the text of the message.
com_omsg: Message format displayed to people in same room as "broadcaster".
com_bmsg: Message format displayed to people in target room{s}.  %text and
   pronoun substitutions are made.
com_send: Room{s} that broadcast message is sent to, separated by spaces.
   Example -- com_send: 20846 7720 22157
On room:
com_ok?: yes -- Unless room is already owned by owner of action, the room must
   have this set for the message to be displayed.  If the target is an object,
   the object must share ownership or have this setting as well as the room in
   which it is located.
com_tattle?: yes -- If the room has this setting, any broadcasts into the room
   will prompt the following message to be displayed:
   "[Broadcast by %n]"  -- where %n is substituted with the *name* of the
   broadcaster.
26 lines displayed.


36)  #35719  MIRROR-HACK.MUF ____________ GREYWOLF _______ @LIST #35719=1-9
(Mirror-Hack.muf, header 9 lines
Hacked by Jordan Greywolf.  Originally by Bunny.
Include a call to this program in the @desc in the form of:
@desc {object}=@49514 {text.... text....} %mirror {... text}
It is at the point of the occurrence of "%mirror" that the reflection of the
user will be inserted.
6 lines displayed.


37)  #42833  MULTI-COMMAND.MUF __________ GREYWOLF _______ @LIST #42833=1-32
(header 32 lines -- Multi-Command.muf, programmed by Jordan Greywolf
Last Updated: 5/19/93
This action is meant to allow a single action placed in your room or
environment to handle a variety of simple "actions", based on the name
actually typed in.  This is a very primitive form of the planned program,
and features are likely to be added later -- Attempts will be made to
make this backwards-compatible, but if problems crop up, contact Greywolf.
The ideal setup is that you can create an action, say, "jump;sit;laugh",
linked to #42833 {this program}, then set the appropriate props so that
if you type "jump", it will say "You jump."  Sit -- "You sit".  etc.  This
would be with osucc messages and possible program calls in the succ message
as well.  Later versions will hopefully allow locks on each action.
Props to set on action:
_mc/lock_{com}:{text} -- lock string to set on action to test when called.
_mc/call_{com}:{db#} -- leave out the "#".  If used, it will call the program and
   pass along anything on the stack.  This is executed *after* the succ message.
_mc/succ_{com}:{text} -- displayed when {command} is typed in.  Program
   calls are allowed.  If you want no message to be displayed, set to "@0".
   If no such prop is found for {command}, it will give the standard "Huh?"
   failure message.
_mc/osucc_{com}:{text} -- displayed to others in room.
_mc/fail_{com}:{text} -- displayed if action is locked out.
_mc/ofail_{com}:{text} -- displayed to others.
_mc/alias/{n}:{word}={list of words} -- If command name is in list of words
   on right side, it is substituted with value on left.
Props to set on room/environment:
_mc/ok_{com}:no -- Locks out use of this "action" in the particular
   room/environment.  If set "huh", gives "Huh" message.
28 lines displayed.


38)  #32153  OBJEXIT.MUF ________________ GREYWOLF _______ @LIST #32153=1-15
( header 15 lines -- Objexit.muf, programmed by Jordan Greywolf
An exit linked to this program will take the user to the location of an
object specified.  The owner of the action and of the target object
must be the same.  The object must be in a room set '_vok?:yes'.
If the target room is set 'noexit:yes', the exit attempt will fail.
Properties on action:
goto: {target object #} {if not set on action, a prop on the room in which the
 user is located will be checked}
exit_osucc: {displayed to others in car when passenger uses exit}
exit_drop: {message displayed to passenger upon arrival}
exit_odrop:{message displayed to others upon arrival}
exit_fail: {message displayed to passenger if target room is noexit:yes}
exit_ofail: {message displayed to others if target room is noexit:yes}
14 lines displayed.


39)  #11145  OPTION.MUF _________________ GREYWOLF _______ @LIST #11145=1-107
( header 107 lines -- Option.muf, by Jordan Greywolf -- last updated 7/13/93
WARNING:  This program utilizes the "command @" variable as a storage space,
   so problems may occur if this program is called by or calling other
   programs that require use of this variable.
Propnames are listed as "opt_{field}_..." etc., but different formats are
supported.  You may precede a prop with a "_" for a protected prop {which will
have precedence}, and you may optionally substitute "/" in the propname so that
you can utilize subdirectories.  An example of the hierarchy would be:
_opt_propset_foobar:
_opt/propset/foobar:
opt_propset_foobar:
opt/propset/foobar:
This is a monster do-all program that allows various props to be set, objects
to be moved around, etc. based on what "selection" one types after the action
name.  Optional setups allow for a "toggling" action {cycles through various
settings} as well.
optionprop: property to be altered by the program {optional -- this
   program will still function even if no property is altered.}
optionchange: room, object, etc. that the property to be changed is
   attached to.  If none is specified, the default is the room to which
   the trigger action is attached.
option{selection}: string which the altered property will take if selected
optiondefault: ... if none is selected.
----- messages -----
optm{selection}: displayed to user {optional}
optom{selection}: displayed to others in room {optional} prepends user name
   {for optm and optom, "%option" will be replaced with the selection name}
   {"%setting" will be replaced with the option{selection} setting.}
optmd: displayed to user {default}
optomd: displayed to others {default} prepends user name
optfail: message displayed to user if a wrong selection is made
-----
      The following features are based on those in Adv-Reset.muf, and are
      all optional, only being used if the appropriate properties are set.
-----
opt_message:{list of db#s}={text}
   Displays message in each room listed, as long as room is owned by
   owner of action.  Standard pronoun subs are made, "%n" is replaced by
   user's name, name is *not* automatically prepended, and replacements of
   %option --> {selection}  and %location {name of location} are done.  In
   db list, "here" is substituted by user's location.
-----
opt_message_{selection}:{list of db#s}={text}
   Identical to opt_message, but specific to a particular selection.
-----
opt_move_{selection}:-- {list of items, separated by spaces} Pairs of items
   and locations are stored here.  Upon using the selection, the items
   are moved to the specified locations.  For example, if opt_move_{} is set as:
   25517 20846 36100 7720
   ...upon running the action, object #25517 will be moved to location #20846,
   and object #36100 will be moved to location #7720.  Normally, spaces are
   used, but . , or - will be treated the same.  "me" will be replaced by user's
   db#.  "here" will be replaced by user's location.
-----
opt_alias{n}:{selection}={list of words} -- If the option typed is included
   in the list of words on the right hand side of the = sign, it will be
   replaced with the value on the left.
-----
Note: in text, %%selection will be replaced with {selection}.  Warning:  If
   you make use of this feature, there is the chance that a user typing
   in an "=" or ":" as part of the selection *might* cause errors.  For this
   reason, you might want to filter out those characters.  {c.f.}
opt_propset{n}_{selection}:-- A number of these properties may be set up.  Each one
   will reset a property to the specified value on the specified object, in
   the format of:
   {db#} {property}={propsetting} -or- {db#};{db#};... {property}={propsetting}
opt_delimiter:      -- If this is set, the "=" delimiter for opt_propset may
   be replaced with whatever character is desired.  {This is a precaution
   in case the user may desire to reset properties that have "=" in their
   names.}
-----
opt_moveto_{selection}:-- If this is set, the user will be moved to the specified
   location.  Destination room must be owned by owner of action OR be set
   link_ok and jump_ok OR the target room must have the following prop set:
   _opt_permit: {list of db#s} -- The db # of the player must be included
   in this property on the target room if the previous conditions are not met.}
opt_odrop_{selection}:-- Message displayed upon user arriving at destination.
   User's name will be prepended to message, with normal pronoun subs.  %from
   is substituted with the name of the place the user came from.
opt_odrop:-- Default "@odrop" message. "%%selection" is usable here.
-----
opt_summon:{db#} {here}-- If this is set, the appropriate object will be moved
   to user's inventory.  Must belong to owner of action.  If string "here" is
   added after db#, object will be summoned to user's location instead.
-----
opt_toggle: {integer}
   If set {only a value of 2 or greater is meaningful}, every time action is
   triggered, and no option is specified, the action will cycle through
   selecting a numeric selection, starting at 1, ending at the value listed
   here, then cycling back to 1 again.
opt_lockout?: yes  {any settings indicated after typing the action will be
    ignored.  This is mostly used if you want a single command that toggles
    between different settings.  The setting will be "default".}
-----
opt_failsetting: {setting}
   If this is set, and no matched "setting" is specified by the user, the
   program will substitute this setting and will proceed to make propchanges,
   etc., appropriately.
-----
opt_match?: yes
   If set, the text typed as "option" will be used for a match on the user's
   environment.  If a match is made, the db# is used as the "selection".
-----
opt_filter: {string}
   Will filter out any occurrences of word listed in string, separated by
   spaces.
106 lines displayed.


40)  #44926  PARROT-HACK.MUF ____________ GREYWOLF _______ @LIST #44926=1-62
(header, 62 lines -- Parrot.Hack.muf, hacked version of Parrot.muf, by Khars
 <malcolmc@spider.co.uk>
Revised with added features by Greywolf -- No warranty expressed nor implied
***  NOTICE  ***
If a room or environment has "_parrot/shutup?:yes" set on it, parrots will not
speak/pose while in that room.
Instructions:
To create a "parrot", create an object to serve as the "parrot", set it J,
and attach a "say" action to it, linked to this program.  Any exits that the
parrot will be allowed to go through {following people} should be set
_parrot: {# of parrot}.
The parrot has a random chance of "learning" what is said in its presence,
learning up to 15 different phrases {default}.  It will also store the name of
the person who said that remark.
On "parrot" object:
_puppet?:yes -- REQUIRED
parrot/max: -- max # of statements the parrot can memorize.  Default is 15.
 Max is 30.
parrot/posemax: -- max # of "actions" on the parrot.
_parrot/delay: -- # of seconds between actions/statements.  Default: 10
_parrot/mode?: no -- If not set, "parrot" defaults will be used for when the
 parrot speaks.  If this is set, the object's name will be used.
_osay: -- If not in "parrot" mode, "says," will be replaced with this.
parrot/follow: no -- If set, parrot does not follow players out of room
parrot/follow: always -- If set, parrot *always* follows whoever leaves room.
parrot/succ: message displayed when parrot follows user of trigger.
parrot/osucc: message displayed to others in room that parrot leaves.
parrot/odrop: message displayed to people in room that parrot arrives in.
  {pronoun subs are made.  %user is replaced with the name of the person the
   parrot is following}
parrot/wander: if "yes", parrot will wander upon every "trigger".  Otherwise,
  will wander once in every {n} chances, where {n} equals the setting.  The
  parrot may wander through exits set _robot_ok?:yes.
parrot/env?:  If "yes", props for the pose feature will be checked with an
  envpropstr rather than getpropstr.  If you don't know what this means,
  don't mess with it.
On room/environment:
_parrot_ok?: yes -- If not set, the parrot cannot "learn" anything said in
 its presence.  It will still function normally otherwise.
On exits {if the parrot is meant to move through them}:
_parrot: {#db of parrot object}
{@lock exits to this program}
On "say", "pose" or "say;pose" action attached to parrot:
_learn?: no {anything said/posed with this action will not be "learned"}
_react?: yes {if set, the parrot may "react" to keywords...}
Keyword Reactions -- Set the following props on the parrot if you want
it to be able to respond to certain keywords.
_parrot/filter: {list of words separated by semi-colons, which will be
   "filtered" out of what was said before checking for keywords}
   {usually "the;a;is;at", etc.}
_parrot/subst/{n}:{item}={item;item;item}  {list of substitutions to be made}
   {example:  "where=where is;which way is;where can I find;which way to..."}
_parrot/key/{n}: {list of "keywords" -- If these words appear, may get reaction}
_parrot/react/{n}: {reaction message to matching keyword}
55 lines displayed.


41)  #41241  RAND-EXIT.MUF ______________ GREYWOLF _______ @LIST #41241=1-33
(header, 33 lines; Rand-Exit.muf, programmed by Jordan Greywolf
This allows a single "exit" to provide either a "random exit" or else
multiple links depending upon what "destination" is selected, in the
form of "{action} {destinationname}".
Props on action:
rand_exits: {list} -- List of db#s from which the destination is randomly
   selected.  Separate with spaces {i.e. 20846 7720 31600}
rand_match?: yes   -- If set, a fail occurs if no match is made with the
   exit_{s} props.  {c.f.}
rand_fail:         -- fail message
rand_prop:         -- if set, the program will instead look for a numerical
   string value stored in a property specified by {rand_prop} rather than
   randomly generating a number, this value determining which item in the
   {rand_exits} list is selected.  This may be used in conjunction with
   Option.muf or Khars' propset to make a "selectable" exit.
exit_{s}: {db#}    -- if set, and {s} equals the text typed after the action,
   the room specified by this prop will be the destination.
exitsucc_{s}:      -- success message
exitosucc_{s}:     -- osuccess message
exitodrop_{s}:     -- odrop message
   {Note: If it is a randomly selected or by-number exit, if {s} equals the
    number of the exit on the list, it will display the appropriate message.
    So, you could have exitsucc_1, exitsucc_2, etc.}
exitodrop:         -- generic "odrop" message used as a default
On target room{s}:
rand_jump: {list}  -- The jump will be successful if either the db# of the
   exit used, the owner of the exit or the room from which the jump takes
   place is found on the list.  This match is necessary unless the target
   room is link_ok, or the owner of the exit equals the owner of the target
   room.
30 lines displayed.


42)  #58411  ROUTE.MUF __________________ GREYWOLF _______ @LIST #58411=1-43
(Route.muf, header 43 lines -- programmed by Jordan Greywolf
This program is similar in structure to event.muf, in that this program
operates by having various actions scattered around {or a "say", etc.
action located in the environment} locked to this.  When the action is
activated, this program will operate "invisibly", not interfering with the
normal operation of the trigger.  When this is triggered, a proploc indicated
on the trigger action will be referenced for the props used by this program.
If enough time has passed since the last movement, a specified object will be
moved along a predefined route, with accompanying messages being displayed as
desired.  The primary purpose of this program is to allow for a vehicle to
follow a regular route, such as a bus, train, or airliner.
Props to set on trigger:
 "Triggers" consist of actions, exits, etc. that you own that you may @lock to
 this program.  The more that are used, the more smoothly this program will run,
 if people use the action{s} frequently.
 _ref: {db#} -- proploc referenced for props required for this program.
Props to set on reference/proploc:
 _route_delay: {i} -- number of seconds that must pass between each step in
    the "route".  {default setting -- overridden by following}
 _route_delay_{n}: {i} -- number of seconds before next step {optional}
 route_pos: -- This is set by the program, indicating at what point on
    the list the vehicle/object is on now.
 _route_loc_{n}: {db#} -- db# of room that object will visit at the nth step
    on its route.
 _route_object: {db#} -- db# of object that will be moved along the route.
    It must be set J, just as all rooms along the route must be.
 _route_osucc: {msg} -- message displayed to all in any room the object leaves.
 _route_odrop: {msg} -- message displayed to all in room object arrives in.
 _route_msg_{n}_{x}: {db#}={msg} -- "n" represents the number of the position on
    the route, and a number of such props {numbered by "x"} may be set.
    In the room on the left of the "=" sign, the message will be displayed.
Props to set on route rooms:
 Each room must be set "J".  Also, if the rooms do not belong to the owner of
 the reference location and object...
 _route_ok:{db# list} -- For a message to be displayed in the room,
    the db# of the reference location must be listed.
NOTE: Leave out all # signs in props that call for a db#!  Also, due to the
setup, if this does not work, there are no error messages to help you figure
things out.
39 lines displayed.


43)  #67396  RIDDLE.MUF _________________ GREYWOLF _______ @LIST #67396=1-28
(header, 28 lines -- Riddle.muf, programmed by Jordan Greywolf
This program randomly selects a question from a list of questions
stored on the action, then expects a response.  The intended
setup is thus:  First, have the _Arrive in the
"puzzle room" linked to this program.  Thus, entering this room
will trigger the program, randomly choose a puzzle, and display
it to all in the room.  Then, in the room, install an action
called "say", linked to this program.  If the person answers
the riddle correctly, a prop will be set on the room called
"riddle/solved?:yes".  If this is already set, further speaking or
entering this room will not trigger the questioning sequence.
On the room, set the following props:
_riddle/q/#:   {number of questions to choose from}
_riddle/q/{n}: {riddle}
_riddle/a/{n}: {answer};{answer};{answer}...
{You can have several possible answers, separated by semi-colon}
_riddle/msg:   {message to all in room upon entering and being
questioned. %riddle will be substituted with the text of the riddle.}
_riddle/succ:  {message upon successfully answering question}
_riddle/fail:  {message upon failure at answering question}
_riddle/failed: {message if player, somehow still in room, continues
to try to answer question after failing}
_riddle/sweep: {location player is swept to upon failing}
_riddle/filter: {list of words separated by semi-colons, which will be
   "filtered" out of what was said before checking for keywords or answer}
   {usually "the;a;is;at", etc.}
_riddle/subst/{n}:{item}={item;item;item}  {list of substitutions to be made}
   {example:  "where=where is;which way is;where can I find;which way to..."}
28 lines displayed.


44)  #25984  RUNAWAY.MUF ________________ GREYWOLF _______ @LIST #25984=1-44
(header, 44 lines -- Runaway.muf, programmed by Jordan Greywolf
This program was originally meant for a program where you're trying to chase
down some elusive critter.  =>  To set things up-
-
First off, you might want a room where somebody can go into to start off the
whole chase.  This is meant mainly for a one-person chase, so the critter
won't enter a room that has any players in it.
-
@set here=_Arrive:#25984
@set here=_runaway/wontgo?:yes
@set here=_runaway/present?:no
@set here=_runaway/message:{text of what happens when you enter this room
-  and it prompts the critter to appear or run away}
@set here=_runaway/object:{db# of object we're testing for -- the "critter"}
@set here=_runaway/destination:{db# of room critter runs to}
-
Now, on successive rooms where you manage to catch up with the critter and
enter the room, set same props as appropriate, except:
-
@set here=_runaway/present?:yes
-
What this means is that, the first room assumes the critter *won't* be in the
room where you set this off.  He'll be in an adjoining room for our purposes.
However, where you have _runaway/present?:yes set, the message and all will
only be triggered if the critter is in the same room.
-
If the destination room has somebody in it, the creature will simply run away
to its home {wherever its link is set}.
-
Also, let's say that at the end of the "hunt", there's a chance you can
actually enter the room without the critter running away, if you have a
proper object and some props are properly set... On that room, set:
-
@set here=_runaway/key:{db# of object needed}
@set here=_runaway/set1:{db#} {propname}={setting}
@set here=_runaway/keymsg:{text of what happens *instead*}
-  {other stuff } -
@set here=_runaway/willgo?:yes  {if set, critter *will* move even if people
   are in room}
@set {critter}=_runaway/msg:{message when critter bounds away.  %loc is
   substituted with name of location critters goes to.}
@set {critter}=_runaway/arrive:{arrival message}
@set {critter}=_runaway/arrive/{room#}:{for *specific* room}
43 lines displayed.


45)  #52356  SCORE.MUF __________________ GREYWOLF _______ @LIST #52356=1-50
(header, 50 lines -- Score.muf, programmed by Jordan Greywolf
An action may be @locked to this program, only succeeding if several conditions
are met, which are specified by props set on the action.  These conditions can
involve particular prop settings on objects or locations of objects.
Props to set on action:
_condition/{n}:{item#} {prop}={setting}
   The item# should be the object's db#.  {do not use a # sign.}  If "me" is
   substituted, the person triggering the action will be used.  If "here" is
   substituted, the location of the user will be used.
   The "prop" indicates a property that will be referenced.  However, if
   "@loc" is indicated, it will test the object's location instead,
   "@lloc" is the object's location's location.
_startscore:{value}
   initial value for "score". Default is 0.
_score/{n}:{value}
   For each condition that is met, the appropriate "score" is added.  Negative
   scores are permissable.  Default score is 1 per condition.
_succ/{n}:{text}
   If set, this message will be displayed upon this condition being met.
_osucc/{n}:{text}
_fail/{n}:{text}
   If set, this message will be displayed upon this condition not being met.
_ofail/{n}:{text}
-----
_rating/{n}:{value} {text}
   A 'rating' variable will be given a text value depending upon the 'score'
   tallied.  Make sure that the rating props have progressively higher score
   values, or weird things may happen.  If the player has this score or more,
   this will be his 'rating'.  {Examples may be to assign the player titles
   of "Novice", "Adventurer", "Expert", "Master Adventurer", etc.
_minimum:{value}
   If the score is less than this value, a "0" will be returned by this
   program, indicating failure.  Default value is 1.
_succmsg:{text}
   Displayed if minimum score is met.
_succomsg:{text}
   Displayed to others if minimum score is met.
_failmsg:{text}
   Displayed if minimum score is not met.
-----
_result:{text}
   This message is displayed at the end.  The following substitutions are made:
   %score : the total score
   %rating : the assigned "rating"
----- miscellaneous feeps -----
_succmove: {list of db# pairs}
   Sample setting -- 24567 7720 54121 20846
   If executed, object #24576 would be moved to #7720, and #54121 to #20846.
   This only occurs if the _minimum score is attained.
49 lines displayed.


46)  #67962  TREASURE-THIEF.MUF _________ GREYWOLF _______ @LIST #67962=1-13
(Steal-Item.muf -- programmed by Jordan Greywolf
This is a special-purpose program to simulate a "thief" that may steal
items from players present in room, then return to his/her "base".
On location/environment, set:
_steal/thief:db# of thief object
_steal/ok?:yes
On thief item:
_steal/items:item{s} thief will steal
_steal/msg{db}:message displayed when item is taken, prepended by Thief's name.
   %from is substituted by name of location item is stolen from.
_steal/msg:default message, %item is sub'd by item name
_steal/homemsg:message when thief arrives at its home.
12 lines displayed.


47)  #36002  WINDOW.MUF _________________ GREYWOLF _______ @LIST #36002=1-43
( header 43 lines
 Window -- Greywolf's Window Code
  Displays the room through an exit which is "linked" to an object, meant for
  use with the Objexit.muf program.  Also, may be used to allow a "window" to
  show the contents of multiple target rooms.  This "window" may be set on an
  exit, room, object, etc.  This program can be called through a @ call on
  an exit {to this program}, or it can also be used with look-trap.
  On the trigger {or room, for look-trap}, you can set a "show" prop, which
  will determine what elements of the target room will be shown.  For example,
  the default would be -- show: ndc.  "n" shows name, "d" shows description,
  "c" shows contents, and "s" shows the success message.
  Other props needed or optional:
  goto: {db # of object that exit is "linked" to -- must be owned by owner
     of action.  May also be set to a specific room.}
  _drivecode:  {optional -- if this property is set on the room in which
     the object is located, the properties must match.  If _drivecode: in
     the target room is set "owner", then the owners of the room and the
     action must be equal}
  _lookfail: {message displayed if unable to see contents of room}
  goto_list: {list of db objects/rooms} Optional, to be set for "multiple
     windows", in lieu of the single "goto" setting.

  Nothing will be visible unless the target room {or its environment} is set
  vehicle_ok?: yes  OR look_ok?: yes
  Also, for compatibility with look-trap:
  A line can be in the format of --
  @{prog} #{dbnumber} {text}
  This will treat the item indicated by {dbnumber} as the target object.
  Also --
  @{prog} ##{dbnumber} {matchitem} {text}
  This will look at the location of {dbnumber}, perform a match with
  {matchitem} to find an exit, and give that description, prepended with
  {text}.  The exit must be set "_trans?:yes" or have a call to this program in
  its description to be seen through.
35 lines displayed.


48)  #26749  WOLFACTION.MUF _____________ GREYWOLF _______ @LIST #26749=1-58
(WolfAction.Muf -- header, 64 lines. Version 2.0 Thu Apr 7 1993
Based on a program originally written by Jeremy/ Salvaged by Greywolf
Hacked upon by Lunatic to be more general and to look a lot nicer.
changed to allow %[a-z] in the text given to it.
Rehacked by Greywolf to add more features.
**** NOTICE ****
This program is essentially just an on-board macro.  What you could do with
this you can pretty much do with a pose.  However, for some reason a lot of
folks {particularly "Toons"} have this bizarre mentality that because they do
it through one of Greywolf's programs, what would otherwise be rude {such as
bashing somebody or blasting somebody} is suddenly okay when done with a
program.  I consider such use an abuse of my program, which is meant for
harmless stuff such as ordering food in a restaurant, etc.
Although it may not do much, anybody can set him/herself _wolfaction?:no
to avoid being subject to the various wolfaction "weapons" created with this
program, that require an object match for the 'target'.  This can be also set
on a room/environment to lock out usage for a room.
**** SETUP ****
To set up, create an action, linked to this program.  Properties on action:
    _msg or msg: Message displayed to user of action.
    _omsg or omsg: Message displayed to others in room.
    In [_]msg and [_]omsg, pronoun substitutions are made, and the user's
name is prepended to the beginning of the omsg message.  Furthermore, when
the action is called in the form of {actionname} {text}, any occurrences of
%text in the properties of msg and omsg are replaced with whatever {text}
the user typed.  As well, %extran is replaced with an 'n' if txt takes "an",
returns null otherwise.  [_]msg and [_]omsg are each optional. If they are
not present then nothing is said.
Example: action bash, with property msg: You bash a%extran %text.
  bash treasure chest --> You bash a treasure chest
  bash apple computer --> You bash an apple computer
Note that you have two cases of pronoun subs. %[a-z] are taken from the
player doing the action, and %%[a-z] from the action itself, so if you
had a shrink gun with a dial action that set %d to a number, you can have
the shoot action with _omsg: shoots %text, shrinking them to %%d inches tall!
Note: To get a % in your text, use %%%%.
--- expanded props for "randomizer" setting ---
msg_rand: -- number of possible random msg settings to choose from
msg_{n}: -- numbered props with alternate settings for msg
omsg_{n}: -- ... for omsg
If these props are set, instead of using _msg/_omsg, a random number will be
chosen from 1 to {setting of msg_rand} and the appropraite msg_{n} prop will be
used.
--- misc features ---
action_nothing: {text} -- Optional: message displayed if player does not select
   any object to "affect" with the action.
action_onothing: {text} -- Optional: as above, but to others in room.
action_match?: yes -- Will make a match of %text to see if it is in the room
action_fail: -- If match fails, display this message to user
action_ofail: -- If match fails, display this message to others
action_gohome?: yes -- If set, the thing the action is attached to will be
   sent home upon successful use of the action.  {If action_match? is not used,
   any use will be considered "successful".}
action_react: -- Only usable with action_match?: yes.  If target has
   react_{text}:{message} set, where {text} is set in action_react: on the
   action, this message will be displayed to user.  oreact_{text} will be
   displayed to others in room.
57 lines displayed.


49)  #3839   CHESSBOARD-PROGRAM _________ JEREMY _________ (NONE)
"Commands available:"
"Blank   -- Takes one parameter (square) and deletes whatever piece is there."
"Clear   -- Clears entire board of pieces."
"Display -- Display entire chessboard"
"Help    -- Give this message"
"Move    -- Takes two parameters (squares).  Moves one to the other, erasing the"
"           contents of the target.  Empty squares may be moved."
"Place   -- Takes two parameters (1 piece, 1 square) and places the piece on the"
"           square."
"Reset   -- Reset board to standard chess starting position"
"Swap    -- Takes two parameters (squares) and swaps the contents."
"Squares are of format a1, b8, etc....  Pieces are P, N, B, R, Q, K, or lower-"
"case for the black player's pieces."
"This is only a board, and cannot play chess for you.  Special moves such as"
"castling or pawn promotion must be done by hand (i.e. moving both pieces)."
"[This chessboard was written entirely by Jiro.]"


50)  #4567   LOOK-SIMULATION-PROGRAM ____ JEREMY _________ (NONE)
(This program simulates a "normal" look, given a dbref as a parameter.)
(Hacked to allow seeing dark people)
[I'm not sure what the point of this one is. -- TA]


51)  #3694   OBJECT-NAME-PROGRAM ________ JEREMY _________ (NONE)
[No docs at all on this one; appears to list out the object number and
flags, given an object, room, player, or thing.  -- TA]


52)  #8274   DESCER _____________________ KARREJANSHI ____ (NONE)
( way to set  %sub[x] for @6800. Beats typing it manually. )
    "Useage: <prog> A [B]"
    "where "A" is the property to set and "B" is the property"
    "containing the text to show. If "B" is not specified then"
    "the default value for "B" is taken from the property"
    "_default_A."
    "Example: "<prog> clothes" would set clothes to the value in _default_clothes"
    "If default_clothes is "causal" then clothes would be set to"
    ""Casual". If there is no _default_clothes, then <prog>"
    " will not work. This is to prevent you from accidentally changing"
    "a property by accident."


53)  #19944  EXIT-USE-NOTIFY ____________ KARREJANSHI ____ (NONE)
( exit_use_notify [formerly tellme] 1.3 - Karrejanshi 6/18/92 )
( Notifies you if someone uses your exit. Does not notify if you are the )
(  user or if you are in the destination. )
( To use, lock the exit to this program. @lock <exit>=#19944 )
( Parameters:none )
( Properties:trigger:_tellme - the message to send you. Works just like )
(                              osucc. )
(           _tellme_prefix - string to prefix all messages with )
(           _tellme_suffix - string to append after all messages )
(            _notellme - disables messages if this property is set )
(           user:_tellme_notify - lets user know when he/she/it is using )
(                                 an exit with _exit_use_notify enabled. )


54)  #19999  SHOWWHO ____________________ KARREJANSHI ____ (NONE)
( Shows the players in a list of rooms. You must own each of the rooms. )
( Version 1.0, 11/20/91, Karrejanshi )

( To use: @link <exit>=#19999 )
( Parameters: none )
( Properties: _searchlist - list of rooms to search. )
(  For example, to search rooms #123, #1234, and #12345, )
(  @set showwho=_searchlist:123 1234 12345 )
( Thanks to Revar and Lynn Onyx for helping with one of the nastier )
(  bugs. )


55)  #20060  ONLYFEMALES.MUF ____________ LANYA __________ (NONE)
[I think this one returns true if it's being used by a female, or false if
the user is anything else.  I suppose this is intended to be used to lock an
exit, to allow only females through.  -- TA]


56)  #19683  ONLYMALES.MUF ______________ LANYA __________ (NONE)
[Looks like the exact opposite of the above; returns true if the user is a
male, or false otherwise.  -- TA]


57)  #13071  CAPACITY-LOCK.DISK _________ LYNN_ONYX ______ (NONE)
[Appears to check the number of people in the room agains the capacity property,
and not allow any more people once the room has reached its limit.  -- TA]


58)  #11293  KNOCK.DISK _________________ LYNN_ONYX ______ (NONE)
( by Lynn_Onyx, 6/16/91                                                    )
(                                                                          )
( This program allows you to 'knock' in a certain direction.  The exit     )
( must be set K--which normally means 'Kill_OK', but for purposes of this  )
( program, we will consider it to mean Knock_OK.                           )
(                                                                          )
( The following properties on the exit are used:                           )
( -============================================-                           )
( _knock : room1 room2 room3 ...                                           )
(          This list of dbref numbers tells which rooms to notify when     )
(          someone knocks on the exit.  The default is the room that       )
(          the exit is linked to.                                          )
( _oknock_format:  blah blah blah %n blah blah %l blah blah %d             )
(                  This is the message that is displayed in the target     )
(                  room[s] when the 'knock' command is used.  The default  )
(                  format is:                                              )
(                  %n knocks %d from %l.                                   )
( _knock_format:  blah blah blah %d blah blah blah                         )
(                 This is the message that the knocker sees when knocking  )
(                 on the exit.  The default format is:                     )
(                 You knock %d.                                            )
( The following substitutions are used, for both _oknock_format and        )
( _knock_format:                                                           )
(                    %n : The player's name                                )
(                    %d : The direction--name of the exit                  )
(                    %l : The location of the player                       )
(                    Standard pronoun-subs may be used as well             )
( Creating a 'doorbell':  @open doorbell = here
                          @lock doorbell = #0
                          @fail doorbell = @11293 <direction of door>
                          @set <direction of door> = K
                          @set <direction of door> = _knock_format, etc. )


59)  #13485  RANDOM-LOCK.DISK ___________ LYNN_ONYX ______ (NONE)
[This one looks like it checks the odds property, which contains the
probabiltiy that the lock will open (in percent).  It then generates a random
number, and succeeds or fails depending on the value of the number.  -- TA]


60)  #8004   CMD-SAY-FILTER _____________ LYNX ___________ (NONE)
cmd-say version 1.1 by Lynx, last revised on March 26, 1992

This program lets you modify the default message '%n says, "%m"' to whatever
you wish; thus you may link an action to this program that changes a normal
verbal say to purring, singing, thinking, et cetera.

Properties must be set on one object, which may be the say action itself,
yourself, or your proploc.

@set say = _say:You purr, "%m"
@set say = _osay:purrs, "%m"

%m is replaced with your message.  Other pronoun substitutions are also
carried out appropiately.  Your name is prepended in front of all osay
messages.

%n will be replaced by your name.  If you want your %n property to be shown,
use %%n.

If you do not set the properties, they will default.

You may also filter your speech through this program.  It will look for
the "filter" list and replace those with entries from the "subst" list.

Example:
lsedit say = filter
r
i
.end
lsedit say = subst
rrr
y
.end
say This is a test of the purr filter.
Lynx purrs, "Thys ys a test of the purrrrrr fylterrr."
[These are looked for on the same place that your say properties are found]

cmd-say-filter will now check if there is a say action linked to a program
in the room or its environment.  If there is, it will look for a pose action
and pass it to the program connected there.  If not, then it will simply
proceed as normal and ignore the room's say action.


61)  #10979  COPY-PROP-TO-PROPLOC _______ LYNX ___________ (NONE)
( spc-copy-prop-to-proploc
  This program can be used to copy properties to your proploc so that
  you need not re-enter them.  The properties must be stored on yourself.
  If successfully copied, the properties are deleted from yourself.

  Usage:
    @action copy-prop = me
    @link copy-prop = #10979
    copy-prop <name of property to copy>


62)  #9576   DO-NOTHING _________________ LYNX ___________ (NONE)
do-nothing version 1.0 by Lynx, last revised on April 11, 1991

This program is used for linking exits to, in order to match keywords, and
does precisely nothing.


63)  #355    TMP-DIE-ROLL _______________ LYNX ___________ (NONE)
[No documentation, but it may be the program that implements the ROLL
global.  See the separate file GLOBALS.TXT.  -- TA]


64)  #6800   GEN-DESC (REVENGE OF LOOK-NO LYNX ___________ @LIST $DESC-DOCS
[This is the famous @6800 program.  See the separate file GEN-DESC.TXT.  -- TA]


65)  #7125   CMD-SPOOF __________________ LYNX ___________ (NONE)
Spoof version 2.3 by Lynx, last revised October 29, 1991

Type 'spoof' for usage instruction.
Type 'spoof #install' for instructions on installing a spoof action.
Type 'spoof #examples' for instructions on using and installing spoofs.

To spoof something beginning with #, add "#" in front of it, i.e. 'spoof ##'

[This appears to be the program used to implement the SPOOF global.  See the
separate file GLOBALS.TXT for more information.  -- TA]


66)  #24709  RECORD.MUF _________________ FOXX_FOX _______ @LIST #24709=1-52
( record.muf   v 2.1  By: Neikrad  @view #<prog>=1-52 )
( --Notation-- )
  ( ACTION = trigger <usually an exit linked to this program>           )
  ( OBJECT = location of trigger <usually a kind of recording object>   )
  ( <num> = number string   <txt> = text string   <db> = dbref# string  )
  ( <hc> = hard-coded in program   <fmt> = timefmt format string        )
( --Setup-- )
( +--[ACTION]-<trigger>------------------------>link to [record.muf]----+ )
( | _rec/download:yes  Direct-Entry mode.  Append list until '.end'     | )
( | _rec/erase:yes     Erase props. <If download mode, clear props 1st> | )
( | _rec/silent:yes    Program works silently.  No prompts/error msgs   | )
( +---------------------------------------------------------------------+ )
(   |                                                                     )
( +--[OBJECT]-<location of trigger>-------------------------------------+ )
( | rec/limit:<num>        Max # of list props [default: unlimited]     | )
( | rec/over_limit:<txt>   Displayed if over rec/limit [default: <hc>]  | )
( | rec/not_proploc:<db>   Set to NOT record on specified proploc. *1   | )
( | rec/only_proploc:<txt> Rec. ONLY on proploc. If not, display <txt>. | )
( | rec/namestamp:yes      Appends user name to front of recording *2   | )
( | rec/timestamp:yes|<fmt>Appends time to front of recording.     *2 *3| )
( | rec/listname:<txt>     Name of list [default: "record"]             | )
( | _proploc:<db>          dbref # used as proploc for OBJECT           | )
( +---------------------------------------------------------------------+ )
( -- Footnotes-- )
( *1 rec/not_proploc displays 'rec/only_proploc's text upon failure.      )
(    rec/not_proploc doesn't do anything if rec/only_proploc ISN'T set.   )
( *2 If in 'download' mode, text is placed on 1st line by itself.         )
( *3 may be set to 'yes' or a 'timefmt' primative's 'format string'       )
(    default = "%a %b %e %T %Y"  [e.g. Tue Sep 22 22:45:56 1992]          )

(   record.muf  is used to allow one to record a list of properties on an )
( object  or  a  proploc of an object.  ALL properties optional.  ACTION, )
( OBJECT,  and  OBJECT's  _proploc <if any> must all be owned by the same )
( player for this program to work.                                        )
(   Normally, when ACTION is used, the text after ACTION is appended to a )
( list of properties on OJBECT or on its _proploc setting.  This behavior )
( can be changed by setting up to 3 'mode-flags' on ACTION.               )
( DOWNLOAD:  This mode places the user in a loop which appends each typed )
(    line to the list until the user types '.end' or '.' alone on a line. )
(    Text  typed after ACTION is ignored.  Timestamp & namestamp data are )
(    placed alone on the first line.                                      )
( ERASE:   Erase  mode is usually set on a separate action to erase items )
(    in  the  list  of properties.  This action can be @locked to prevent )
(    'unauthorized' erasing of recorded items.  When ERASE & DOWNLOAD are )
(    both  set,  the  entire  list  of properties is cleared, then normal )
(    DOWNLOAD operation proceeds.  Usage of an erase action can be:       )
    (      ACTION            [ erase first line only ]               )
    (      ACTION <num>      [ erase item <num> from list ]          )
    (      ACTION all        [ erase entire list ]                   )
( SILENT:  This mode makes the program work silently.  No confirmation or )
(    error  messages  are  given EXCEPT if an ownership violation occurs, )
(    i.e. ACTION, OBJECT, and _proploc's owner doesn't match. )
52 lines displayed.


67)  #3933   DICE-ROLLER ________________ REVAR __________ (NONE)
[No documentation, but it may be the program that implements the ROLL
global.  See the separate file GLOBALS.TXT.  -- TA]


68)  #10522  GEN-CROWDLOCK ______________ REVAR __________ (NONE)
[Appears to check the number of people in the room agains the capacity
property, and not allow any more people once the room has reached its limit.
This one checks for guests and sleepers, I wonder if this is the program used
to limit the number of players in the Truth or Dare pools?  -- TA]


69)  #6435   GEN-MESGBOARD ______________ WIZARD _________ (NONE)
( MUFmessageBoard v0.80   Copyright 5/31/91 by Garth Minette )
(                                           foxen@netcom.com )
( A program for storing and displaying multi-line messages   )

( This code may be freely distributed, and code from it may
  used in other non-similar programs, but the author's name
  must be credited.                                          )

[This appears to be the program that implements the bulletin boards.
Internal documentation is a little sparse, but I think that to install it,
create an object to be the message board itself, then link the 'read',
'write', and 'erase' actions to this program.  -- TA]


70)  #10746  GEN-MULTILOCK ______________ REVAR __________ (NONE)
[No documentation, again.  This one appears to combine the guest-list type of
lock with the crowd lock.  -- TA]

[All right!  I know a lot of you are MUCK.Wizards and/or Really Amazing MUF
Programmers, but not everyone can RTFSC and figure out what these are
supposed to do and how to set them up.  :)  If a program is listed in this
index, don't you think there should be some documentation so that furries can
figure out how to use it without bugging the author, the helpstaff, or the
wizards?  If your program is listed with documentation of "(NONE)", consider
yourself taken to task for poor program documentation skills.  -- TA]


71)  #8452   GEN-PLAYERLIST _____________ REVAR __________ (NONE)
( GEN-PlayerList     Copyright 4/15/91 by Garth Minette          )
(                                 foxen@netcom.netcom.com        )
(                                                                )
( The author of this code grants the right for anyone to use     )
( code so long as the author's name remains intact.              )
( The author also reserves the right to revoke the usage of this )
( code from any muck, should the author choose to do so.         )

"GEN-PlayerList v1.00 by Tygryss"  "Updated 5/3/91"   "   Page1"
"------------------------------------------------------------------------"
"To display who all is on the list:           'list'"
"To clear the list of all players:            'clear'"
"To add players to the list:                  'add <plyr> [<plyr>...]'"
"To accept pages from a player again:         'remove <plyr> [<plyr>...]'"
"-- Words in <> are parameters.        Parameters in [] are optional. --"
"-- Prefix all previous commands by the name of the playerlist action --"
" "
"-Propertyname---- -Where set-------- -Use---------------------------------"
"_listdbref        playerlist action  Defines where the list to edit is."
"_listname         playerlist action  Defines the name of the list to edit."

[No real documentation, except for the above,  This may be the program that
implements the PWHO global.  See the separate file GLOBALS.TXT.  -- TA]



72)  #15046  GEN-SETIT __________________ REVAR __________ (NONE)
[Aparrently sets a property.  No documentation, though.  -- TA]


73)  #4958   GEN-TIMEDESC _______________ REVAR __________ (NONE)
(  Timedesc    written 2/11/91 7:37am   by Tygryss

   allows a desc/succ/fail/drop of an object give different messages
   depending on the time of day.

   Use by @desc/@succ/@fail/@drop'ing the object to '@4958 <propname>'
   where <propname> is an optional argument that lets you specify the
   names of the properties it will use.  If this argument is omitted,
   then it will default to 'deschour'.  You can have the desc, succ,
   fail, and drop all use different time besed messages by using
   different <propname>'s for each one.

   the description to be displayed is selected from a list of descs
   stored in a series of properties named from '<propname>0' to
   '<propname>23', where <propname> is the previously mentioned
   <propname> string.  '<propname>0' corresponds to 12am to 12:59am
   on the machine the server runs on, and '<propname>23' corresponds
   to 11pm to 11:59pm.  If a property for the current hour does not
   exist, then it will search back through the hours looking for a
   string to use.  If it reaches '<propname>0', and fails to find a
   string there, it will start searching back from '<propname>23'.
   This means that if you have descs set for 6am, 12noon, and 8pm, then
   at 4pm it will use the 12noon desc, and at 6am it will use the 6am
   desc, but at 5am, it will use the 8pm desc.


74)  #5020   GEN-TRANS-EXIT _____________ REVAR __________ (NONE)
( Generic transparent exit look code                                )
( by Tygryss        Bugfix added by Jeridy                          )
(                                                                   )
( Use: @desc the exit to @<number of this program>                  )
(      This will show the _trans_desc: property of the exit         )
(      and the visible contents _if_ the object is not Dark.
(
  PROPERTIES:
     _trans_desc:       Message shown to player as the target room's desc.
                         Set on the exit itself.  Uses %n for the target
                         room name.
     _trans_format:     Message shown for the rooms contents list.  Set on
                         the exit itself.  Uses %* for the contents list
                         substitution, and %b for "is" or "are" depending
                         on how many items are visible in the destination
                         room.


75)  #6875   GEN-BROADCASTER ____________ LYNX ___________ (NONE)
[No documentation on this one; but it seems to be a way of broadcasting a
message or pose to everyone with the _broadcast?:yes property.  This may be
the program for the @SHOUT global.  See the separate file GLOBALS.TXT.  -- TA]


76)  #14118  OBVEXITS ___________________ SHATERRI _______ (NONE)
( ObivousExits -- Lists the exits out of a room

  Usage:
    @succ here = @<this-program>
    @set here = mesg/obvexit: <header message>


77)  #5137   GEN-PROGLOCK _______________ LYNX ___________ (NONE)
( gen-proglock   written 2-12-91 by Tygryss
  To use, open a series of exits from the room into another set of
  rooms as you want them, then lock them all to this program.
  They must all share the exact same name.


78)  #8813   PDC-MORPH.MUF ______________ SLATE __________ @LIST #8813=1-97
( %M% 1.%I% %E% -- a program for general changes to properties
* Author: P. Damian Cugley.  Please email problems and suggestions to
*  Damian.Cugley@comlab.ox.ac.uk.
*
*  This program is designed to be useful for making an object {such as a
*  player} with a description that can be easily changed with one short
*  command.  The idea is to set up your object to use one of the
*  properties-based general-description programs to generate a description;
*  then all that this program needs to do is change some properties and
*  print appropriate messages.
*
*  By making this program able to change several props in one operation, it
*  is possible to {for example} make a shape-changer whose _scent changes
*  to match their new form.  {It also means that the program is general
*  enough that it is not restricted to making morphing characters.}
*
*  To use this program, create an action properties and
*  print appropriate messages.
*
*  By making this program able to change several props in one operation, it
*  is possible to {for example} make a shape-changer whose _scent changes
*  to match their new form.  {It also means that the program is general
*  enough that it is not restricted to making morphing characters.}
*
*  To use this program, create an action linked to it.  For example:
*
*      @action morph = me
*      @link morph = #8813
*
*  You can call the action anything you like {personally I find "morph"
*  hard to type in a hurry}; from now on "<command>" will be used to
*  stand for the action name.  If the action is not attached to the
*  target object {the one being changed} then do
*
*      @set <command> =  _<command>/target: <target object>
*
*  Now add the list of properties on <target object> that can be
*  affected by the command:
*
*      lsedit <command> = _<command>/prop
*      <property names on separate lines>
*      .end
*
*  {note the trailing slash, and that property names go on separate
*  lines}.  Now you can use the command
*
*      <command> #define <new state>
*
*  to define new states {use "<command> #help #define" for more info on that}
*  and
*
*      <command> <new state>
*
*  to switch to a new state that has been defined.
*
*  The "help" pages for the command contain more information.
*
* EXAMPLE
*  Here's a fairly complete example of how you might set youself up
*  with two animal species, and the ability to switch sex.  Note that
*  sex-changing is completely orthogonal to species, and format/oformat
*  have ben omitted for clarity.  An asterix in the left margin
*  indicates a prompt from the program, everything else is what the use
*  types.
*
*      @desc me = @$desc %sub[_desc/%sub[species]]
*      @set me=_desc/cat: A blue cat, %p eyes are gold.
*      @set me=_desc/fox: A golden fox, %p eyes are green.
*
*      @action morph = me
*      @link morph = #8813
*      lsedit morph=_morph/prop
*      species
*      _scent
*      sex
*      .end
*
*      morph #define fox
*   *  @set #xxx=_morph/fox/species:
*      fox
*   *  @set #xxx=_morph/fox/_scent:
*      Foxy and %sub[sex].
*   *  @set @xxx=_morph/fox/sex:
*                                               [presses SPACE then RETURN]
*   *  ok                                       [we are finished]
*
*       [...similar for cat...]
*
*      morph #define male
*   *  @set #xxx=_morph/male/species:
*                                               [presses SPACE then RETURN]
*   *  @set #xxx=_morph/male/_scent:
*                                               [ditto]
*   *  @set @xxx=_morph/male/sex:
*      male
*   *  ok                                       [we are finished]
*
97 lines displayed.


79)  #60904  PDC-TIME.MUF _______________ SLATE __________ @LIST #60904=1-32
(* pdc-time.muf 1.1.2 93/04/30 -- print the time
 * Author: P. Damian Cugley <Damian.Cugley@comlab.ox.ac.uk>
 *
 *  Create a simple dual-time clock by linking an action "time" to this
 *  program.  Usage summary:
 *
 *      time { <option> } [ <zone> ] [ = <format> ]
 *
 *  A <zone> specifies a different time zone in which to display the
 *  time {as well as Furry's local time}.  It is either a time zone
 *  abbrev in pdc-time's database {CST, CDT, etc.} or a five-character
 *  sequence of the form +hhmm or -hhmm where hhmm is the offset from
 *  GMT in hours and minutes.  For example, EST and -0500 are equivalent
 *  zones.
 *
 *  The <format> specifies the format used to print the time.  It is a
 *  string with %-substitutions, as described in the manual under
 *  "timefmt" {use the command "man timefmt" to read this}.
 *
 * Options:
 *  #verbose
 *      Prints some more information, such as the zones used.
 *
 * Properties {searched for on you and your environment}:
 *  _time/zone: <zone>
 *      Your default zone, if none is specified on the command line.
 *
 *  _time/format: <format>
 *      Your default format, if none is specified on the command line.
 *      If neither is set, time will be printed like "1993/04/07 21:42 BST"
 *
 *)
32 lines displayed.


80)  #22998  DESC-AREA.MUF ______________ VERIN __________ @LIST #22998 = 1-40
desc-area.muf by Verin

this program is used to further expand the area affect of
broadcast exits, letting people to look at objects in other
rooms in the area as if they were local.  In other words,
normally 'look verin' would only work if I was in the room,
with this program 'look verin' would work fine if I was in
the same 'area', like two or three rooms that make up a large
room or meadow or beach.

this program uses Erma Felna's look-trap program for local
use, so any look-traps set in a room are still of use.  since
that look program is in so much use, Im not going to worry
about it going away anytime soon.

the program takes advantage of obv-area's set up, so it
uses the "_area" property on a room with a list of dbref's
of rooms, but a room has to be set "_area_rlook?" yes for
a room to be able to looked into from afar.

To install the program, in the room you want to be able to look
out of or in an enviornment room so it works everywhere, make an
action named "l;lo;loo;look" and link it to this program.  If
that is already done, only the props below need to be set.

the prop needed on the room looked out of:
_area       set to a list of numbers separated by spaces, the db
            numbers of the other rooms in the 'area'...  for
            example if you were in a bed <db #1234> and wanted
            to be able to look at things in the bedroom <#4321>
            and the couch <#52>, you would go to the bed and type:
            @set here = _area: 4321 52

the prop on the rooms looked into:
_area_rlook?   set to yes if this room is far lookable.  to carry on
               the other examples, you would go to the couch and the
               bedroom, in turn, and in each place type:
               @set here = _area_rlook?:yes
38 lines displayed.


81)  #75482  OBV-AREA.MUF _______________ VERIN __________ @LIST #75482 = 1-35
(Obv-area.muf  by Verin      revision: 4/28/93

 This is Verin's first program.  Its was designed to help an
 area affect with the _broadcast? exits, but become much more
 useful.

 It basicly displays a comma separated list of a room's contents
 when triggered.  or more than one room.  For an example, if you
 have a pond room, and a beach room, and you want to see the
 contents of the beach to show up in the pond's description.  Or
 if you want the contents of a bed to show up in the bedroom's.
 Or if you want the contents of a container room to show up when
 you look at the container <look bookcase>.  Or if you want to
 set up a bank of security monitors <look monitor 10> to see what
 is in the room. <not like windows, just shows the contents>

  Properties:
    _area          A list of rooms to displayed, separated by spaces
                   like: @set here = _area: 5877 72886 9982
                   This goes on the action/room/object that is
                   succed/desced/linked/failed  to this program

    _area_format   if set on the trigger, it can affect the display.
                   if the string contains:
                       p       it will list players
                       t       it will list things
                       m       it will list programs
                       d       it will list dark things, players, programs
                       n       it will show a nothing display
                   default is: ptm

    _area_header   The string that preceeds the contents list. for
                   example: @set here = _area_header: In bed:
                   This goes on the rooms that are in the _area
                   property.  The default is "In <roomname>:"
35 lines displayed.


82)  #27531  GEN-CHANGE _________________ LYNX ___________ (NONE)
(* gen-change morphing program.        Programmer: Vulpis              *)
( This is a general 'morphing' program, used to chnage values of properties
  from one value to another.

    Properties on the action:
        _proploc  [proploc for properties.]
        _target   [property to be changed by the program]
        _target_obj [object with property to be changed--defaults to object
                      with calling action.]
        _default  [default message to be displayed when program is called.]
        _odefault [default omessage to be dieplayed when program is called.]

     Properties on the proploc [defaults to the action]
        <property>:<value> [property and value given to the target property
                            when <action> <property> is called.]
        _msg_<property> [message to be displayed when <action> <property>
                         is called.]
        _omsg_<property> [omessage to be displayer when <action> <property>
                          is called.]
        _name_<property> [name to be given to target object when <action>
                          <property> is called. If target object is a player,
                          this is ignored.]

     Properties on <target object>
        <property named by '_target'> [property that is changed by the
                                       program--usually related to a @6800
                                       desc.]


83)  #4708   ED.MUF _____________________ WHITEFIRE ______ (NONE)
  EDit.muf - 1991 Kinomon Firestar
  Version 1.0.2 - A PRISM MUF Group program.

  This program edits lists of properties on players/objects/rooms/etc.
  What to edit is passed on the command line.

  "The following commands are avalible in the editor:"
  "[<line#> [<line#>]] delete"
    "If no arguments are given, the curent line is deleted. If one argument"
    "is given, that line is deleted. If two arguments are given that range"
    "of lines is deleted."
  "help"
    "Print this help text."
  "[<line#>] insert"
    "Insert lines before the curent or the line given as an argument."
  "[<line#> [<line#>]] list"
    "List lines, will display line numbers depending on the setting of"
    "numbers (see numbers command). If no arguments are given, it lists"
    "the curent line. If one is given that line is listed, if two are"
    "given, that range is listed."
  "numbers"
    "Toggle line numbering on/off for listings."
  "quit"
    "Quit the editor, changes are alwase saved."
    "All commands can be given as one letter."
  "( Text editor version 1.0.2 by Kinomon (dragon@glia.biostr.washington.edu) )"

[Note that this is *not* LSEDIT.  -- TA]


84)  #41107  LOCKMGR.MUF ________________ WIZARD _________ (NONE)
WhiteFire / Peter A. Torkelson  1992 -- kinomon@glia.biostr.washington.edu

Version 0.3.0, Jan 17, 1992
This program is designed for use with WhiteFire's lock.muf, and manages
the lock properties for a lock.
Usage:
 *  lock [#show] [<lockname>]           Shows the status of a lock.
 *  lock #help [<subject>]              Gives you help on this program.
 *  lock #guest [<lockname>=]<players>  Add players to the guest list.
 *  lock #!guest [<lockname>=]<players> Remove players to the guest list.
 *  lock #ban [<lockname>=]<players>    Add players to the banned list.
 *  lock #!ban [<lockname>=]<players>   Remove players to the banned list.
 *  lock #maint [<lockname>=]<players>  Add players to the maintenance list.
 *  lock #!maint [<lockname>=]<players> Remove players to the maintenance list.
 *  lock #max [<lockname>=][<limit>]    Set a crowd limit for the lock.
 *  lock #public [<lockname>]           Set the lock to public status.
 *  lock #private [<lockname>]          Set the lock to private status.
 *  lock #set [<lockname>=]<dbref>      Set a lock alias or the default lock.

 * Following abreviations are valid:
   #g, #!g, #b, #!b, #a, #d
Properties:
    [on lock exit:]
    _lock_dbref:<dbref>             Where to find the lock properties.
    _lock_<name>:<dbref>            Lock aliases.

    [on the lock:]
    _banned:<dbref-list>            People banned from passing this exit.
    _guests:<dbref-list>            People who may alwase pass here.
    _maxcrowd:<number>              Max number in room before full.
    _public?:<yes|no>               May people not on the guest list enter?
    _[o]<banned|max|fail|succ>-msg:<message>
                                    Various messages printed on exit use.
    _maintaners:<dbref-list>        Who may alter this lock.


TA   #50173  LOCK.MUF ___________________ WHITEFIRE ______ (NONE)
WhiteFire / Peter A. Torkelson  1992 -- kinomon@glia.biostr.washington.edu

Version 1.0.0, March 5, 1992
Designed to be used as a lock on an exit and managed by wf-lkmgr.muf.

Usage: @lock exit=#<this-prog>
Props:
    _time_lock:<dbref-list>
    _time_lock/<dbref>:<time to wait to>
    _lock_dbref:<dbref>             Where to find lock properties.
    _banned:<dbref-list>            People banned from passing this exit.
    _guests:<dbref-list>            People who may alwase pass here.
    _maxcrowd:<number>              Max number in room before full.
    _public?:<yes|no>               May people not on the guest list enter?
    _[o]<banned|max|fail|succ|time>-msg:<message>
                                    Various messages printed on exit use.
 x  _maintaners:<dbref-list>        <used by wf-lkmgr.muf>


85)  #17812  MORPH.MUF __________________ WHITEFIRE ______ @LIST #17812=1-115
Morph.muf - 1991, 92 WhiteFire / Peter A. Torkelson
                     kinomon@glia.biostr.washington.edu

Version 1.5.1, June 29, 1992

This program is designed to make transformations of your character
easy to do baised on the server, not on a whole army of tiny* macros.

BASICS:
To set yourself up add the following properties to your character:

  _race:<curent race>           This is the race you curently are.
  _race-<race>:ok               This tells the program this race is
                                'ok' to switch to. Keeps you from beacoming
                                a 'oxtaur' by mistake. One for each race.
  _morph-<race>-desc:<text>     The description to set for a particular race.

Thats the basics, now create an @action attached to yourself, like
'morph', and then @link it to this program.
To alter yourself type 'morph [-][+]<race>[=<message>]'.
The prepended - requests the change be made silently.
The prepended + allows you to overide restrictions on morphing to/from
    certain races.
The appended =<message> lets you overide the message morph would
    normaly print with one of your own.

FUN STUFF:
Alternate prop locations:
  _morph_proploc:<dbref>        Tells the program to look at this dbref
                                for morph properties. Useful to keep
                                clutter down on your character.
  _proploc:<dbref>              Same as above.

Transformation messages:
  _morph-<race1>-<race2>:<text> Prints a message when changing from
                                race1 to race2. 'def' may be put in place
                                of either. The message will be prepended
                                with your name, and pronoun subs work [use
                                %% to get subs on the new sex], as
                                well as %oldrace and %newrace.
  _morph-def:<text>             If none of the above are from the text
                                from here is used.
  _morph-<race>-name:<name>     Set the name for the %newrace and %oldrace
                                substitutions.

Sex changes:
  _morph-<race>-sex:<sex>       Change the character's sex: property
                                when morphing.
  _morph-def-sex:<sex>          Default when morphing if there is not
                                one for the race..

Misc:
  _morph-<race>-prop-<n>:<prop>[=<value>]
                                This list allows you to change a set of
                                properties when changing to a race. If
                                you do not provide a <value> the prop
                                is removed.
  _morph-def-desc:<text>        Default description if there is no
                                _morph-<race>-desc: for the race.
  _morph-<race>-<race>:no       Dissalow changing from a certain race
                                to another directly.
  _morph-<alias>-alias:<race>   Alias for a race, useful to make it typing
                                it easier.

Set by the program on you:
  _race-name:                   This is set to the 'full name' of the race
                                you curently are.
  _race:                        Set to your new race when you morph.
)
( ------------------------------------------------------------------------- )
(
CHANGE HISTORY:

Changes as of 1.4.0: Jan 13, 1992
  * property changes [_morph-<race>-prop-<n>:<prop>[=<value>]]
  * illegal transformations [_morph-<race>-<race>:no]
  * expanded race names [_morph-<race>-name:<name>]
  * Add search of the trigger for properties.
  * Program defualts to telling you your curent race if one is given.
  * Added the - option for silent morphing.
  x Removed default race option [_morph-def-race:<race>]

Changes as of 1.5.0: Jan 17, 1992
  * Default change message.
  * Pronoun subs for morph messages.
  * Desc setting [_morph-<race>-desc:<text> & _morph-def-desc:<text>]
  * Aliases [_morph-<alias>-alias:<race>]

Changes as of 1.5.1: June 29, 1992
  * Added a message to morph -<race>
  * fixed minor errors
  * Made "no" work with all the change messages.
  * Added "+" to overide chage restrictions.
  * Added "=<message>" to the command line.
  * Added the "_race-name:" prop wich keeps the full name for the
    curent race.

To do:
    Help system
( ------------------------------------------------------------------------- )
CREDITS:
  * MadraRua, who had the idea for printing you current race as the default
        action, and for the idea for a silent morph. She also told me to
        add a message to the silent morph option. :]
  * MadraRua, for asking me to make 'no' work with the various default
        change messages, and for suggesting the '+' to overide this
        feature. Also thanks for bugging me into doing 1.5.1. :]
  * Crys, various ideas and suggestions.
  * Neikrad, for the idea to be able to change various other properties
        while morphing.
( ------------------------------------------------------------------------- )
115 lines displayed.


86)  #43157  NAG2.MUF ___________________ VISION _________ @LIST #43157=2-28
 NAG.MUF v2.0 Hacked together on 5/16/93, updated 8/25/93 by Vision!

 This program is for those who have waken up and inadvertently walked
 Into public areas a little less dressed than they'd like to be in
 public. It checks a specified propery for a specified value at login,
 and displays a message to you if that prop matches. It will continue to
 notify you every 20 seconds until the property is changed, or you use
 the 'nagkill' or 'nagstop' action.

 Global Setup:
                     @act nag;nagon;nagoff;nagkill;nagstop;nagset=#0
                     @link nag=nag2.muf


 Properties:

       nag/nagprop : Property to check at login
     nag/nagstring : Value to check for
                     If a '!' is placed at the front of the string,
                     then nag will be triggered if the string in the
                     property specified by nagprop does NOT match nagstring.
        nag/nagmsg : Message to be displayed if nagstring matches the
                     value of the prop specified in nagprop. This
                     message will be displayed to you until you change
                     the value of the property specified in nagprop, or
                     until the 'nagkill' or 'nagoff' command is given.
27 lines displayed.


87)  #70367  LINGO.MUF __________________ VISION _________ @LIST #70367=2-42
LINGO.MUF v1.0 by Vision

Lets you speak text that only certain people can understand. Good for
roleplaying and confusing people. :>

make an @action and link it to this program.
to use, 'action <message>'
Properties:

on trigger action:

lingo/language:  name of the 'language' being spoken
                 <example: 'lingo/language:wookiee'>
lingo/say:       "says," string.
                 <example: 'lingo/say:gronks,'>
lingo/quote:     Quotes string. %m is substitued for the message spoken.
                 <example: 'lingo/quote:"%m"'>
lingo/string:    <optional> string or strings of gibberish displayed to those
                 who can't understand you. Can be a single string, or many
                 small strings seperated by |'s.
                 <example: 'lingo/string:grr|rar|arr|rrr|arl'>
lingo/langname?: If set to 'yes', will tack 'in <language>' to the end of
                 all output strings.

on players:

lingo/<language>:yes - a prop with the name of the language spoken set 'yes'
                       will allow players to understand what is spoken.

Using the examples above, say the action is named 'wsay'.
You type 'wsay Yes, I'm a wookiee'

Players with 'lingo/wookiee:yes' set will see:
      Chewbacca gronks, "<Yes, I'm a wookiee>"
All others will see something like this:
      Chewbacca gronks, "rargrrarrrrrarlrrrarrrararlrar"

Send bug reports to Vision.

41 lines displayed.


88)  #60782  NARC.MUF ___________________ VISION _________ @LIST #60782=2-44
 narc.muf v1.1 written by Vision <a.k.a. Pat Carson>

 This is a small alarm system for when you want to catch the little thief
 that's taking things from your room.

 Setup:

       @act get;ge;take;tak;ta;narc=<room>
       @link get=#60782

 This program records any attempts to take an object from the room the
 action is in. It also optionally Informs you immediately if you are awake,
 and optionally displays an 'alarm' message to the whole room.

 When installed, the command 'narc' will list all attempts to take objects
 from the room since you last checked, if such attempts are recorded.

 Properties:

 On the room-

 narc/lockignore?: If set to yes, NARC ignores all attempts to pick up
                   locked objects.
 narc/narc_owner?: If set to yes, NARC will watch for you picking up
                   objects as well as others. NARC usually ignores you.
  narc/narc_alarm: String to display to entire room. NARC displays nothing
                   if this prop is blank. Pronoun Subs work here.
narc/narc_notify?: Determines whether to notify you immediately if you are
                   awake. Defaults to "yes"
   narc/narc_log?: Determines whether NARC will record attempts to take
                   objects from room. Defaults to 'yes'
 On objects-

     narc_ignore?: If set to "yes" on an object, NARC will ignore attempts
                   to take that object.

NOTE: All objects to be taken using this program must currently be set
      JUMP_OK

page #mail all bugreports, suggestions, etc. to Vision.

Have Fun!
43 lines displayed.


89)  #94523  PASSENGER-LIST.MUF _________ GREYWOLF _______ @LIST #94523=1-17
( header, 17 lines -- Passenger-List.muf, programmed by Jordan Greywolf
 last updated 9 July 94
A call to this program, given a dbref number for a room, will return a
string containing a list of the characters [and objects set "Z" or
_puppet?:yes] in that room.  The target room must be set "_view/ok?:yes" or
else "nobody" will be returned.  Also, if no characters can be found in the
room, "nobody" is returned.
:
Intended usage is to include a call to this program in the description on a
vehicle, so you can see who's inside.  Example:
@desc vehicle=@6800 It's a rusty little Volkswagen.  Inside you see
%@94523[#12345].
:
[where #12345 would be the dbref of the interior of the vehicle]
:
No warranties expressed nor implied.
16 lines displayed.


90)  #26889  FOODQUERY.MUF ______________ BOINGDRAGON ____ @LIST #26889=1-58
(foodquery.muf -- Original by Verin, modifications by BoingDragon
 Settings: on trigger
  pass:yes = use passed string instead of requests through query process.
    This is useful for making menus or actions that create a specific item.
    Parameters follow the order:
      name;description;scent;format;bites;oformat;finishmesg
    Examples of 'pass:yes' use:
     In the @succ or @fail of an action:
       @6800 %call[26889,a glass of water;A cool glass of water;it smells
       like water;You take a refreshing swallow from %text;4;takes a
       drink from %text;, getting the very last drop!]
     Or with MPI in the @succ or @fail:
       {muf:#26889,<parameters>}
       To have an action that creates food of any given name and uses default
       values for the rest: {muf:#26889,{&arg};;;;;;}
     Using an action 'order' linked to foodquery.muf:
       order a glass of water;A cool glass of water;it smells like water;
       yes;You take a refreshing swallow from %text;4;takes a drink from
       %text;, getting the very last drop!

 query:<flags> = What properties to query for {omitted flags get the default
   settings}. The flags are n {name}, d {desc}, s {scent}, f {eat format},
   b {# of bites}, e {eat oformat} and x {finish message}.
   All the flags would be 'query:ndsfbex', the default is 'query:n'

 In the following messages, %text is replaced by the name of the food item.
 Only properties whose query flags are set will use prompts, all others will
 use the set defaults or built-in defaults.

 nquery:<string> = String for item name prompt {default: "Name?"}
 ndef:<string>   = default name if no name query {default: "something"}

 dquery:<string> = Item description prompt {default: "Description?"}
 ddef:<string>   = default description if no desc query {default: "something"}

 squery:<string> = Item scent prompt {default: "Scent?"}
 sdef:<string>   = default if no scent query {default: "something"}

 fquery:<string> = Prompt for format {default: "Format?"}
 fdef:<string>   = default if no eat format query
   {default: "You eat a bit of %text, savoring the wonderful flavor"}

 bquery:<string> = Prompt for # of bites {default: "Number of bites?"}
 bdef:<number>   = default # if no bites query {default: "3"}

 equery:<string> = Prompt for eat oformat message {default: "Oformat?"}
 edef:<string>   = default message if no eat oformat query
   {default: "eats a bit of %text"}

 xquery:<string> = Prompt for finish message {default: "Finish mesg?"}
 xdef:<string>   = default message if no finish default.
   {default: ", finishing it."}

Messages: on trigger/room

 query_mesg:<string>  = Message user sees after final query or pass:yes
 query_omesg:<string> = Message room sees after final query or pass:yes
57 lines displayed.


91)  #101765 SUPER-INDEXER.MUF __________ GREYWOLF _______ @LIST #101765=1-9
( header, 9 lines -- Super-Indexer.muf, programmed by Jordan Greywolf
Last Updated: 22 Jul 94
This program is meant to be used for a "help" or "news" action, with
online editing to facilitate easy access by the owner.  Just link an
action to this program, and use {action} #help to get more information.
You are welcome to transport this program to your own MUCK, as long as
I am still credited.  This program requires level M3 to function, due
to usage of the "nextprop" function.  Uses FB5.31 and supports MPI.
8 lines displayed.