/* ************************************************************************
* 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;
}