From: Primacy <jmrobins@wired.uvm.edu>
Subject: Redbutton Spec

Here's some code I wrote for a 'Red Button' that when pushed,
will teleport the character to a random room somewhere in the mud.
In spec_assign.c add this to assign_objects():

        SPECIAL(redbutton);  
        ASSIGNOBJ(32, redbutton);     /* transport button */

In spec_procs.c add this in at the bottom:

SPECIAL (redbutton)
{
  struct obj_data *obj = (struct obj_data *) me;
  struct obj_data *port;
  char obj_name[MAX_STRING_LENGTH];
  int z;
 
    if (!CMD_IS("push")) return FALSE;

    argument = one_argument(argument,obj_name);
    if (!(port = get_obj_in_list_vis(ch,obj_name,world[ch->in_room].contents))) {
      return(FALSE);
    }
    
    if (port != obj)
      return(FALSE);
    
        act("$n pushes $p and fades away.", FALSE, ch, port, 0, TO_ROOM);
        act("You push $p, and you are transported elsewhere", FALSE, ch, port, 0, TO_CHAR);
        char_from_room(ch);
        char_to_room(ch, number(0, top_of_world));
        look_at_room(ch, 0);
        act("$n slowly materializes from nowhere...", FALSE, ch, 0, 0, TO_ROOM);
        return(TRUE);
}

Finally, you will want to ensure that you have the 'push'
command, so add this line in the command list in interpreter.c:

  { "push"     , POS_DEAD    , do_not_here , 0, 0 },

---------
Now, you should create the object itself and put it into 0.obj.

#32
button red~
a red button~
A large red button is protruding from the wall here.~
~
13 0 0
0 0 0 0
1000 0 -1 0


Presto!  Load object 32 somewhere in the mud... and have someone
'push button', and away they go!

