deltamud/deltamud/
deltamud/deltamud/bin/
deltamud/deltamud/cnf/
deltamud/deltamud/lib/
deltamud/deltamud/lib/etc/
deltamud/deltamud/lib/misc/
deltamud/deltamud/lib/plrobjs/
deltamud/deltamud/lib/text/
deltamud/deltamud/lib/text/help/
deltamud/deltamud/lib/world/
deltamud/deltamud/lib/world/trg/
/* ************************************************************************
   *   File: spec_assign.c                                 Part of CircleMUD *
   *  Usage: Functions to assign function pointers to objs/mobs/rooms        *
   *                                                                         *
   *  All rights reserved.  See license.doc for complete information.        *
   *                                                                         *
   *  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
   *  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
   ************************************************************************ */

#include "conf.h"
#include "sysdep.h"

#include "structs.h"
#include "db.h"
#include "interpreter.h"
#include "utils.h"

extern struct room_data *world;
extern int top_of_world;
extern int mini_mud;
extern struct index_data *mob_index;
extern struct index_data *obj_index;

/* functions to perform assignments */

void 
ASSIGNMOB (int mob, SPECIAL (fname))
{
  if (real_mobile (mob) >= 0)
    mob_index[real_mobile (mob)].func = fname;
  else if (!mini_mud)
    {
      sprintf (buf, "SYSERR: Attempt to assign spec to non-existant mob #%d",
	       mob);
      log (buf);
    }
}

void 
ASSIGNOBJ (int obj, SPECIAL (fname))
{
  if (real_object (obj) >= 0)
    obj_index[real_object (obj)].func = fname;
  else if (!mini_mud)
    {
      sprintf (buf, "SYSERR: Attempt to assign spec to non-existant obj #%d",
	       obj);
      log (buf);
    }
}

void 
ASSIGNROOM (int room, SPECIAL (fname))
{
  if (real_room (room) >= 0)
    world[real_room (room)].func = fname;
  else if (!mini_mud)
    {
      sprintf (buf, "SYSERR: Attempt to assign spec to non-existant rm. #%d",
	       room);
      log (buf);
    }
}


/* ********************************************************************
   *  Assignments                                                        *
   ******************************************************************** */

/* assign special procedures to mobiles */
void 
assign_mobiles (void)
{
  SPECIAL (postmaster);
  SPECIAL (cityguard);
  SPECIAL (receptionist);
  SPECIAL (cryogenicist);
  SPECIAL (guild_guard);
  SPECIAL (guild);
  SPECIAL (puff);
  SPECIAL (fido);
  SPECIAL (janitor);
  SPECIAL (mayor);
  SPECIAL (snake);
  SPECIAL (thief);
  SPECIAL (magic_user);
  SPECIAL (librarian);
  SPECIAL (temple_cleric);
  SPECIAL (temple_healer);
  SPECIAL (temple_mana_regenerator);
  SPECIAL (generic_citizen);
  SPECIAL (trainer);
  SPECIAL (arenaentrancemaster);

  /* Limbo */
  ASSIGNMOB (1, puff);

  /* Immortal Zone */
  ASSIGNMOB (1200, receptionist);

  ASSIGNMOB (1201, postmaster);
  ASSIGNMOB (1202, janitor);

  /* Battle Arena */
  ASSIGNMOB (4800, arenaentrancemaster);        /* Thargor 7/25/98 */
  ASSIGNMOB (4801, temple_healer);	        /* Thargor 7/25/98 */
  ASSIGNMOB (4802, temple_mana_regenerator);	/* Thargor 7/28/98 */

  /* Itrius */
  ASSIGNMOB (199, postmaster);
  ASSIGNMOB (101, receptionist);
  ASSIGNMOB (102, librarian);
}



/* assign special procedures to objects */
void 
assign_objects (void)
{
  SPECIAL (bank);
  SPECIAL (gen_board);
  SPECIAL (portal);
  SPECIAL (tent);

  ASSIGNOBJ (20, portal); /* generic portal */
  ASSIGNOBJ (500, tent);

           /* mortal boards go below */ 
  ASSIGNOBJ (199, gen_board);  /* general board */
  ASSIGNOBJ (198, gen_board);  /* social board */
  ASSIGNOBJ (197, gen_board);  /* auction board */

           /* immortal boards go below */
  ASSIGNOBJ (1200, gen_board);  /* implementor board */
  ASSIGNOBJ (1201, gen_board);  /* general board */
  ASSIGNOBJ (1202, gen_board);  /* ideas board */
  ASSIGNOBJ (1203, gen_board);  /* quest board */
  ASSIGNOBJ (1204, gen_board);  /* relations board */
  ASSIGNOBJ (1205, gen_board);  /* frozen board */
  ASSIGNOBJ (1206, gen_board);  /* typos board */
  ASSIGNOBJ (1207, gen_board);  /* bugs board */
  ASSIGNOBJ (1208, gen_board);  /* reimbursement board */
  ASSIGNOBJ (1209, gen_board);  /* builders  board */
           /* clan boards go below */
}



/* assign special procedures to rooms */
void 
assign_rooms (void)
{
  extern int dts_are_dumps;
  int i;

  SPECIAL (dump);
  SPECIAL (pet_shops);
  SPECIAL (pray_for_items);

  if (dts_are_dumps)
    for (i = 0; i < top_of_world; i++)
      if (IS_SET (ROOM_FLAGS (i), ROOM_DEATH))
	world[i].func = dump;
}