Building Guidelines

I'm still in the process of hypertexting this document. Until I'm done, here's the flat ASCII version. -- Telzey


At this writing, building quotas have been installed in FurryMUCK.  If you wish
to construct anything over the base quota limit of 20 objects and 20 rooms per
player, you must contact the building wizard, currently Tugrik.

The following is an attempt at a collection of information regarding tips on
building on FurryMUCK.  If you have any suggestions for alterations,
clarifications, corrections, additions, etc. to this text, please send email
to "Greywolf" at: peacoct6503@iscsvax.uni.edu.

Your input is appreciated.
   --Jordan

Last update: 8/12/93
----------

Most of the basic techniques for building can be found by working your way
through the "help files" built into FurryMUCK, for each available command
("help @dig", "help @action", etc.).  However, this is an attempt to expand
upon this, including mention of particular programs that may be of use for
construction that are peculiar to FurryMUCK.

It is assumed that you should already know how to create (and recycle) rooms,
objects, and to create links between rooms.  For an example of other tricks
that can be done with building, visit Town Hall on FurryMUCK -- From WCotP, go:
s, s, s, s, w.  There, you will find a walk-through "tutorial" that shows a few
"tricks of the trade" for building on FurryMUCK.

***** Building "Etiquette" for Areas

When building an area (your home, an adventure, an area to explore, etc.) that
others may go through, there are a few conventions to keep in mind:

- Use standard compass directions and abbreviations, plus out/exit/leave.  For
example, if a "north" exit is used, the name may include "n" in the name as
well.  If the exit leads out of a room, adding out;exit;leave to the name is
standard.

Ex:
 @open east;e;enter;cave;in;opening=#12345

- Naming an exit after a player can cause complications, particularly if that
player is in the same room!  A common practice in "apartment building" setups
is to name the room exits after the occupants, but you can run into some weird
situations if anyone tries to chat in the hallway...

- @describe your exits.  It is much preferable to be able to look in a
direction and see a short description of what may lie in that direction, rather
than a "You see nothing special."

Ex:
 @desc east=To the east, you see the opening of a dark cave.

- Use @succ, @osucc, @odrop on exits.  For @osucc and @odrop, the message
should indicate which way the character has gone or come from, respectively.
Remember that the @osucc and @odrop messages always have the name of the
character prepended.

Ex:
 @succ east=You enter the dark cave.
 @osucc east=enters the dark cave to the east.
 @odrop east=comes into the cave, from the west.

- Once you have set the @osucc and @odrop messages on an exit, the "-- has
arrived." and "-- has left." standard messages are unneeded.  To remove these
messages from an exit, type:

 @set {exit}=d

This makes the exit "dark" (no default messages when using the exit)  Make sure
that you have @osucc and @odrop exits set for dark exits, or nobody will be
able to see you come or go at all when you use one!

- Keeping things "map-sensible" is a bonus.  If a passage to the east leads to
a room, then a passage from that room to the west should (in most case) lead
back to the first position.

- In most cases, exits from a room should be evident in the room description.
If nothing else, it should be at least easy to leave the area (i.e. typing
"out", "exit" or "leave" several times in succession should allow a player to
get out of the area.)

- The @succ set on a *room* can be useful for additional room information.  In
most areas where the stepdiscs are set up, this message ("A glossy white
stepdisc is set in the pavement.") is usually in the @succ on a room.  It is
also common to put "Visible Exits: " in the @succ on a room, though not
required.

Ex:

 @succ here=Visible Exits: Out, East, Northwest

- It's a nice courtesy, if you have a large area, to make use of the "map"
global to set up a "map" for your room.  For more information on this program,
type "map #help" while on the MUCK.  Maps are compatible with vehicle code.

- The Wizards frown upon "jumprooms".  These are basically rooms where some
clever person has decided to create a long list of exits linking to various
places on the MUCK as "shortcuts".  Exits are not regulated under building
quotas (yet) but take up just as much memory as rooms or objects.  Several
players each having their own "jumprooms" to the various interesting parts of
Furry add up quickly to a lot of database eaten up by "shortcuts".

***** Parent Rooms

By default, every room's "parent" is #0, "Furry Nothingness".  This is the room
in which all global actions/commands as well as the default "fail messages"
(i.e. what happens if you try to go north/south/east/west/etc. if there is no
exit in that direction) are set up.

To set a room's parent, enter that room and type:

@tel here=#{parentroomnumber}

A parent room (also referred to as an environment room) allows you to set
defaults for an area.  Whenever you try to use an action/exit (or look at one),
the program will first check for the longest match to be found on the room.
Failing that, it will check for actions/exits stored on the person that fit the
match.  And then, after that, it will check for the room's environment -- i.e.,
it will check for a match in the room's parent room, and, if *that* room has a
parent, then in that one, and so on and so forth.

So, if you type "north" in a room that does not have a "north" exit attached to
it, in most cases you will get "You cannot go that way.", because a match has
been found in room #0 (Furry Nothingness) -- an exit named
north;south;east;west;northeast;southeast;southwest;northwest;n;s;e;w;ne;se;sw;nw,
which happens to be @locked so that it is impossible to successfully use the
exit.  It also has the default "up" and "down" false exits.  (i.e. Have you
ever typed "up" and get the message that you have just jumped?  Or, have you
tried "look up" and you see a ceiling, even though you're supposedly
"outside"?  Try "look down" on most of the roads of Furry, and you will notice
a "rug on the floor".  =)  )

To create your own parent room, simply @dig a room, and create a personal exit
to get there.  For example:

@dig My Environment Room

{You will receive a db # for the room, which you should write down.  For this
example, I will pretend that it is #12345.}

@action goparent=me
@link goparent=#12345

{this creates a personal action attached to yourself and linked to the
environment room, so that if you type "goparent", you will be sent there.}

goparent

{Now, let us say that you wish to set up an environment room that has
default messages that suggest a generic forest area...}

@open north;south;east;west;n;s;e;w;northeast;southeast;southwest;northwest;
 ne;se;sw;nw=here
@lock north=me&!me
{the exit is impossible to successfully use, since you can not be "me" and "not
me" at the same time.}
@fail north=The undergrowth is too thick in that direction to permit passage.
@desc north=You see that you cannot go that way, for the undergrowth is too
 thick.

@open climb;up;u;sky;ceiling=here
@lock up=me&!me
@fail up=There is nothing suitable to climb up here.
@desc up=You look up and see the sky above.

@open down;d;sit=here
@lock down=me&!me
@fail down=You take a seat on a nearby log.
@ofail down=sits down on a log.
@desc down=You look down at the ground and see nothing special.

{Then, to set the parent for any room to your new environment room, simply go
to each room, and type:}

@tel here=#12345

...

Currently, I have a few environment rooms that have already been set up, which
I will refer to later.  These include:

Outdoors Environment Room -- #20846
  This is my "master parent room", and is set up for an outdoors/forested
setting.  It also includes some special commands/exits that are included in my
other parent rooms:

* look -- linked to ErmaFelna's look-trap (c.f.)
* nex;nexus -- shortcut to the Underground Nexus
* commands -- lists other special commands installed in the environment

Indoors Environment Room -- #7720
  My generic "indoors" environment room.

In each of these rooms, you can reset the "fail messages" by setting the
following props:

updesc: {description when one looks up}
upfail: {message when one tries to go up}
upofail: {message displayed to others (if any) when up attempt fails}

downdesc, downfail, downofail, exitdesc, exitfail, exitofail work similarly.

Program calls (such as to @6800) ARE allowed in these prop settings.

***** Setting Flags on Rooms

Setting flags on rooms have different (and often useful) results.  To set a
particular flag on a room, type it in the format of:

 @set here={flag}

For example, to set the Abode flag on a room, you would type:

 @set here=a

To *unset* the flag, you would type:

 @set here=!a

Flag Settings:
A -- Abode -- Allows others to @link themselves, objects or even rooms (set
parents) to this room.
C -- Chown_ok -- Allows others to take ownership of this room with the @chown
command.  However, to limit who may @chown the room, you may @lock the room.
(For instance, if you only want yourself, Joe and Sally to be able to @chown
the room, you could type:  @lock here=me|*Joe|*Sally  ... Note the * -- This is
necessary when the item/player being referred to in the @lock is not currently
present in the room at the time you are setting the @lock.)
D -- Dark -- Objects in the room will not be visible.
H -- Haven -- Characters cannot be killed in this room.
J -- Jump_ok -- Required for characters to be able to be "teleported" to/from
the room via programs, etc.
K -- Kill_ok -- Honestly, I'm not sure what this would do!
S -- Sticky -- If the drop-to on your room is set (c.f.), items will not be
"dropped" until all players (sleeping players included) have left.

***** Drop-to's

If you wish, you may prevent "litter" in your room by setting a "drop-to" for
objects to be sent to from your room, via the @link command.  To do so, type:

@link here=#{number of room you wish dropped objects to be sent to}

If the room is not set Sticky, items will immediately go to the "holding" room.
If, when setting the drop-to, you type:

@link here=home

...then all objects dropped here will be sent to their respective homes
instead.

***** Transparent Exits

There are a couple of programs currently available that allow for "transparent"
exits, so that one can "look" into another room.

@5020 -- When @describing the room, insert a @5020 at the start of the text.
Whenever anyone looks at the exit, they will see the contents of the adjoined
room.  This will *not* work with exits that are attached to objects or players.

Ex:

 @desc east=@5020 You peer into the dark cave, and see a stone chamber inside.

When Sally types "look east", and Joe is inside the cave, Sally will see:

 You peer into the dark cave, and see a stone chamber inside.  There you see:
 Joe.

@14490 -- This program can be used on exits regardless of where they are
attached.  Also, you can specify how much/little you want to be shown.  For
more information, @list #14490 to see the help at the start of the listing.
A "show" property on the exit defines what will be shown.  For example, the
default is nd (name and description).  To set an exit to show the name,
description, contents and @succ message in the room, you could type:

 @desc east=@14490 You peer into the dark cave, and see a stone chamber inside.
 @set east=show:ndcs

***** Broadcasting Exits

With the advent of the new global Say action by Warwick, it is possible to set
up exits such that, if someone is talking in a room with a "broadcast" exit,
someone in the adjoining room may hear them.  To set an exit so that any
speech will be "broadcast" through it, type:

 @set {exit}=_broadcast?:yes

***** Scents on Rooms

If you want to set a "smell" for a room or environment, then use:

@set here=_scent:{text of what person gets if they smell the room}

This message will be displayed to the user if he/she/it does a "smell here".
It can be a nice way to add extra detail to a room, possibly additional clues
for an adventure game, etc.

***** Knocking on Doors

Lynn_Onyx's "Knock" program is installed in my parent rooms, and more info can
be found on it (and how to install a "knock" action in your own environment
rooms, if you are not using mine) in the Library.  Although customization via
properties is possible, you can very simply set up an exit so that it is
possible to "knock" on the exit by typing:

 @set {exit}=k

{technically, this means "kill_ok", but killing an exit is nonsense, so the
program uses it to mean "knock_ok".}

So, one could type "knock {exit}" to "knock" on the exit, so that a person in
the adjoining room will receive an appropriate message.

***** ErmaFelna's Property-Look ("Look-Trap") Program

A "look" global is currently installed in my environment rooms, and you can
install one in your rooms by creating a "look;loo;lo;l" action and linking it
to Erma's program (for the program #, check the Library), or else @tel'ing your
environment room(s) to one of mine to "inherit" the action.  This program, for
the most part, works transparently, though there is some trouble with using
@fail messages on a room while this is in operation.

Instead of creating "false exits" to add extra detail to a room, you can create
"false objects" via this program much more cheaply.  In a room that you own
that has the "look" action set up or inherited, type "look #help" for a
built-in help info.  This program can be used to add extra 'details' to a room.

Ex:

 @desc here=You are in a rather drab room, except for a painting that hangs on
  one wall.  The only obvious exit is out to the east.

 look #add painting picture portrait

{program asks for one-line description}

 It is a colorful ink drawing of a pretty female unicorn standing on a balcony
 with a small songbird perched on her outstretched hand.

When someone types:

 look picture

...they will see the appropriate message, even though there is not necessarily
a "picture" object or exit present.

***** Vehicles

If you want to set up your room so that vehicles may pass through it, the
room (or environment) must be set "_vok?:yes".  If you want vehicles to be
able to pass through exits in the room, each exit must be set "_vok?:yes" as
well.

***** Assorted Permissions Props

There are various programs that require certain props to be set on the room
or environment for them to work / not work in that area.  While these are
covered in the docs for each program, here is an assortment of more common ones
which may be of interest:

-- Throw -- To ban "throwing" of objects to/from your areas, set the following:
 _throw_allowed?: no
 _throw_far?: no

-- Parrots -- "Parrots" are a primitive type of "puppet" created with
 Parrot-hack.muf which randomly spout off lines they've "learned".  To put a
 clamp on annoying "parrots" in your area, set:
 _parrot/shutup?:yes