Useage Agreement:
Feel free to use and distribute this code as long as the headers and comments
within the code are left intact, you give me, Talon of Twilight of the Gods
MUD (tgods.mudhaven.com 8000) credit for it somewhere on your MUD, and send
me an email at tgods@xerxes.mudhaven.com telling me that you are using my
code on your MUD (a MUD address would be nice cause I love to see other MUDs).
If you have any questions, ideas for upgrading this code, or would just like
to drop me a note  you  can reach me at the aforementioned email address. Also,
please remember to support the MUDding community by posting your own original
snippets no matter how big or small! A little bit sometimes goes a long
way. Happy MUDding!

DISCLAIMER: The author of this code is in no way responsible for any loss or
damage due to the use, misuse, or abuse of this code. If you have any
technical questions or problems please contact me, Talon, at
tgods@xerxes.mudhaven.com.

NOTE: At the very bottom of this code there is a section with a reverse
direction message. If your MUD doesn't have reverse direction names in
simply follow the instructions I've given you.

-------------------------------

Define an exit type in MERC.H called EX_CLIMB (it should go with the other 
stuff like EX_LOCKED, EX_CLOSED, etc.)

------------------------

Put this in void move_char in ACT_MOVE.C (it should go before the actual 
player moving stuff.. you don't want the message to go to them after
they've already moved to the room !!!):

    /* Climbable exits - Talon of TOTG tgods.mudhaven.com 8000 */
    if ( IS_SET( pexit->exit_info, EX_CLIMB ) )
    {
        send_to_char( "You have to climb to go in that direction.\n\r", ch );
        return;
    }

------------------------

Put at the bottom of ACT_MOVE.C:

/* Climbing exits. Great for tree and mountain rooms - Talon of TOTG MUD
  * tgods.mudhaven.com 8000
  * Email: tgods@mudhaven.com. All code copyrighted (c) 1999 NML
  */
void do_climb( CHAR_DATA *ch, char *argument )
{
    EXIT_DATA       *pexit;
    int             door;

    if ( argument[0] == '\0' )
    {
        send_to_char( "What direction do you want to climb?\n\r", ch );
        return;
    }

         if ( !str_prefix( argument, "north" ) ) door = DIR_NORTH;
    else if ( !str_prefix( argument, "east"  ) ) door = DIR_EAST;
    else if ( !str_prefix( argument, "south" ) ) door = DIR_SOUTH;
    else if ( !str_prefix( argument, "west"  ) ) door = DIR_WEST;
    else if ( !str_prefix( argument, "up"    ) ) door = DIR_UP;
    else if ( !str_prefix( argument, "down"  ) ) door = DIR_DOWN;
    else
    {
        for ( door = 0; door < MAX_DIR; door++ )
        {
            if ( ( pexit = ch->in_room->exit[door] )
                && pexit->keyword
                && is_name( argument, pexit->keyword ) )
                return;
        }
        act( "You can't go $T here.", ch, NULL, argument, TO_CHAR );
        return;
    }

    /* This is a bit repetitive but just in case */
    if ( !( pexit = ch->in_room->exit[door] ) )
    {
        act( "There is no direction $T here.", ch, NULL, argument, TO_CHAR );
        return;
    }

    if ( !IS_SET( pexit->exit_info, EX_CLIMB ) )
    {
        act( "You don't have to climb in that direction.",
	     ch, NULL, argument, TO_CHAR );
        return;
    }

    if ( IS_SET( pexit->exit_info, EX_CLOSED ) )
    {
        act( "The exit $T is closed.", ch, NULL, argument, TO_CHAR );
        return;
    }

    act( "You climb $T.", ch, NULL, dir_name[door], TO_CHAR );
    act( "$n climbs $T.", ch, NULL, dir_name[door], TO_ROOM ); 
    char_from_room( ch );
    char_to_room( ch, pexit->to_room );
    do_look( ch, "auto" );
/* If your MUD doesn't have reverse exit names use this string and delete this
   part of the comment as well as the string with dir_rev[door]:

    act( "$n climbs in.", ch, NULL, NULL, TO_ROOM );

*/
    act( "$n climbs in from $T.", ch, NULL, dir_rev[door], TO_ROOM );
    return;
}

