Hiding and the relevant commands needs some explaing to be understood fully.
The phenomenon of hiding as such is akin to invisibility and is in fact
handled much the same way by the same code in the mudlib. The controlling
properties are OBJ_I_HIDE, ROOM_I_HIDE and LIVE_I_SNEAK. The skills involved
are SS_HIDE, SS_SNEAK and SS_AWARENESS.

Hide
----

Let's begin with hiding as such. A player may hide himself or an object in
any room that allows it. A room can control this by setting the property
ROOM_I_HIDE. If the property is set to -1 hiding is not allowed under any
circustances. If it is positive it is used as a difficulty when computing
the success of the player's attempt to hide.

ROOM_I_HIDE is set to 10 by default unless that value is changed by the
creator of the room.

The formula is: 

Hidden = (SS_HIDE - ROOM_I_HIDE) / 2  + random((SS_HIDE - ROOM_I_HIDE) / 2);

That value, if positive, is stored in the hidden object as the property 
OBJ_I_HIDE and is later used for detection purposes. As long as the property
is != 0 the object stays hidden.

When a player looks inside a room the player will see hidden objects if
random(SS_AWARENESS) > OBJ_I_HIDE. An effect of this is that it is possible
for a player with good hiding skill and bad awareness to hide an object
so effectively he can't even find it himself afterwords. Too prevent this
he can type "hide <object> poorly" in which case it will be hidden poorly
enough for him always too see it, using the player's awareness as the 
limiting parameter.

* A player may not hide in a room where other living objects are present.

* A player may only hide such objects that he is able to pick up and
  hold. They must be in his hands when he performs the hiding command. If a
  wizard wants to hide something for gaming purposes he needs only set
  the property OBJ_I_HIDE in the object for it to be hidden.

* A player will become visible if he changes his light value, neither can
  he hide if he already emits light of a value larger than the surrounding
  room.

* A player will become visible if performing "noisy" commands. This is
  a somewhat arbitrary term, but must be determined by common sense, not
  rules.

* A player will become visible if he attacks someone or something. Likewise
  will he become visible if he is attacked.

* A player will become visible if someone else performs a "visibility
  inducing" command on him, a nudge or something like that. Of course, this
  requires that the other player can see the hidden player.

* A player that is invisible and tries to hide does so with only half
  his usual success value. This is due to the fact that when invisible it
  is hard to determine if you really have managed to hide or not.

If you need to reveal a player against his will, call the function 
"reveal_me()" in the player object. The text "You are startled to find
NNNN suddenly standing next to you!" will be displayed to everyone in the 
room. Do 'sman reveal_me' to find out about arguments, returns.


Reveal
------

A player that sees a hidden object may reveal it, bringing it visible to
all by typing "reveal <object>". The command "reveal me" will reveal
oneself, effectivly just bringing you out of hiding.
 
Search
------

A player may search anywhere and if he manages to find anything hidden 
it will become visible for all to see. If he wants to find it for himself 
only he must take it quickly and then hide it again.

You find something when SS_AWARENESS > OBJ_I_HIDE, in other words just the
same as with looking except for the random call. When you search you search
with all your attentiveness focused on searching.

Sneak
-----

Sneaking is a somewhat more complicated operation. Sneaking can be performed
from anywhere to anywhere. However, success is dependant on both skill and
the ROOM_I_HIDE parameter of both rooms. If you are visible when sneaking
away you will be seen leaving, if you are hidden you will leave unnoticed.

Success is computed as:
success = (SS_SNEAK * 2 + SS_HIDE) / 3 - ROOM_I_HIDE;

The reasoning being that if you can't hide, you can't sneak either. The
success value is used as a temporary OBJ_I_HIDE value for the player while
he moves from one room to the other. When he has arrived he will
automatically, regardless of wether he was hidden before or not, attempt
to hide again. If he fails he will become visible.
