/* ************************************************************************
* 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"
/* external globals */
extern int mini_mud;
/* external functions */
SPECIAL(dump);
SPECIAL(pet_shops);
SPECIAL(postmaster);
SPECIAL(cityguard);
SPECIAL(receptionist);
SPECIAL(cryogenicist);
SPECIAL(guild_guard);
SPECIAL(puff);
SPECIAL(fido);
SPECIAL(janitor);
SPECIAL(mayor);
SPECIAL(snake);
SPECIAL(thief);
SPECIAL(magic_user);
SPECIAL(bank);
SPECIAL(lyrzaxyn);
SPECIAL(azimer);
SPECIAL(dziak);
SPECIAL(cleric_ao);
SPECIAL(cleric_marduk);
/* local functions */
void assign_mobiles(void);
void assign_objects(void);
void assign_rooms(void);
void ASSIGNROOM(room_vnum room, SPECIAL(fname));
void ASSIGNMOB(mob_vnum mob, SPECIAL(fname));
void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname));
/* functions to perform assignments */
void ASSIGNMOB(mob_vnum mob, SPECIAL(fname))
{
mob_rnum rnum;
if ((rnum = real_mobile(mob)) != NOBODY)
mob_index[rnum].func = fname;
else if (!mini_mud)
log("SYSERR: Attempt to assign spec to non-existant mob #%d", mob);
}
void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname))
{
obj_rnum rnum;
if ((rnum = real_object(obj)) != NOTHING)
obj_index[rnum].func = fname;
else if (!mini_mud)
log("SYSERR: Attempt to assign spec to non-existant obj #%d", obj);
}
void ASSIGNROOM(room_vnum room, SPECIAL(fname))
{
room_rnum rnum;
if ((rnum = real_room(room)) != NOWHERE)
world[rnum].func = fname;
else if (!mini_mud)
log("SYSERR: Attempt to assign spec to non-existant room #%d", room);
}
/* ********************************************************************
* Assignments *
******************************************************************** */
/* assign special procedures to mobiles */
void assign_mobiles(void)
{
/* Tower of the Ordeal */
ASSIGNMOB(103, magic_user);
/* The followers of Dziak */
ASSIGNMOB(401, magic_user);
ASSIGNMOB(402, magic_user);
ASSIGNMOB(403, cleric_marduk);
ASSIGNMOB(404, dziak);
/* Buried temple */
ASSIGNMOB(600, snake);
ASSIGNMOB(603, magic_user);
/* Timmoth */
ASSIGNMOB(1404, cleric_marduk);
ASSIGNMOB(1405, cleric_marduk);
/* Elysium */
/* Aghazstamn's Lair */
ASSIGNMOB(2104, magic_user);
/* School of Wizardry */
ASSIGNMOB(2505, azimer);
/* First Quest */
ASSIGNMOB(2902, cleric_marduk);
ASSIGNMOB(2903, magic_user);
/* Kortaal */
ASSIGNMOB(3005, receptionist);
ASSIGNMOB(3010, postmaster);
ASSIGNMOB(3012, magic_user);
ASSIGNMOB(3013, magic_user);
ASSIGNMOB(3014, magic_user);
ASSIGNMOB(3015, magic_user);
ASSIGNMOB(3024, guild_guard);
ASSIGNMOB(3025, guild_guard);
ASSIGNMOB(3026, guild_guard);
ASSIGNMOB(3027, guild_guard);
ASSIGNMOB(3028, guild_guard);
ASSIGNMOB(3029, guild_guard);
ASSIGNMOB(3059, cityguard);
ASSIGNMOB(3060, cityguard);
ASSIGNMOB(3061, janitor);
ASSIGNMOB(3062, fido);
ASSIGNMOB(3066, fido);
/* Outside Kortaal */
ASSIGNMOB(3106, receptionist);
ASSIGNMOB(3107, receptionist);
/* Fields of the Dead */
ASSIGNMOB(3304, magic_user);
/* Kings Roads */
ASSIGNMOB(3601, cleric_ao);
/* PC Mobs */
ASSIGNMOB(4203, magic_user);
ASSIGNMOB(4204, cleric_ao);
ASSIGNMOB(4205, magic_user);
ASSIGNMOB(4206, magic_user);
ASSIGNMOB(4208, cleric_ao);
ASSIGNMOB(4213, magic_user);
ASSIGNMOB(4214, magic_user);
/* Secret Tunnel */
ASSIGNMOB(4342, lyrzaxyn);
/* MORIA */
ASSIGNMOB(4000, snake);
ASSIGNMOB(4001, snake);
ASSIGNMOB(4053, snake);
ASSIGNMOB(4100, magic_user);
ASSIGNMOB(4102, snake);
ASSIGNMOB(4219, cityguard);
/* Drow City */
ASSIGNMOB(5103, magic_user);
ASSIGNMOB(5104, cleric_marduk);
ASSIGNMOB(5107, magic_user);
ASSIGNMOB(5108, magic_user);
/* Castle Kilgrave */
ASSIGNMOB(5506, magic_user);
ASSIGNMOB(5507, cleric_marduk);
/* Kings Forest */
ASSIGNMOB(6023, receptionist);
ASSIGNMOB(6033, cleric_ao);
ASSIGNMOB(6034, cleric_ao);
ASSIGNMOB(6035, cleric_ao);
ASSIGNMOB(6036, cleric_ao);
ASSIGNMOB(6037, cleric_ao);
/* FOREST */
ASSIGNMOB(6112, magic_user);
ASSIGNMOB(6113, snake);
ASSIGNMOB(6114, magic_user);
ASSIGNMOB(6115, magic_user);
ASSIGNMOB(6116, cleric_ao);
/* SEWERS */
ASSIGNMOB(7006, snake);
ASSIGNMOB(7009, magic_user);
ASSIGNMOB(7015, guild_guard);
ASSIGNMOB(7016, guild_guard);
/* Ohari */
ASSIGNMOB(8002, cityguard);
ASSIGNMOB(8003, cityguard);
ASSIGNMOB(8004, cityguard);
ASSIGNMOB(8005, cityguard);
ASSIGNMOB(8006, cityguard);
ASSIGNMOB(8007, cleric_ao);
ASSIGNMOB(8008, cityguard);
ASSIGNMOB(8009, magic_user);
ASSIGNMOB(8013, magic_user);
ASSIGNMOB(8014, magic_user);
ASSIGNMOB(8018, cleric_ao);
ASSIGNMOB(8022, magic_user);
/* Nangalen */
ASSIGNMOB(8504, cleric_ao);
ASSIGNMOB(8517, cleric_ao);
ASSIGNMOB(8518, cleric_ao);
ASSIGNMOB(8519, magic_user);
ASSIGNMOB(8523, magic_user);
ASSIGNMOB(8524, magic_user);
ASSIGNMOB(8529, cleric_ao);
ASSIGNMOB(8534, magic_user);
/* Church of Ao */
ASSIGNMOB(9000, cityguard);
/* Maakan */
ASSIGNMOB(11001, cleric_ao);
ASSIGNMOB(11002, cleric_ao);
ASSIGNMOB(11003, cleric_ao);
ASSIGNMOB(11004, cleric_ao);
ASSIGNMOB(11005, cleric_ao);
ASSIGNMOB(11014, receptionist);
ASSIGNMOB(11020, guild_guard);
/* Tekaro */
ASSIGNMOB(12000, receptionist);
ASSIGNMOB(12004, receptionist);
ASSIGNMOB(12006, guild_guard);
ASSIGNMOB(12010, guild_guard);
ASSIGNMOB(12008, guild_guard);
/* Helgor */
ASSIGNMOB(11803, receptionist);
/* Woeld */
ASSIGNMOB(11903, cityguard);
ASSIGNMOB(11925, receptionist);
ASSIGNMOB(11927, guild_guard);
}
/* assign special procedures to objects */
void assign_objects(void)
{
ASSIGNOBJ(3034, bank); /* atm */
ASSIGNOBJ(3036, bank); /* cashcard */
}
/* assign special procedures to rooms */
void assign_rooms(void)
{
room_rnum i;
ASSIGNROOM(3030, dump);
ASSIGNROOM(3035, pet_shops);
ASSIGNROOM(1635, pet_shops);
if (CONFIG_DTS_ARE_DUMPS)
for (i = 0; i <= top_of_world; i++)
if (ROOM_FLAGGED(i, ROOM_DEATH))
world[i].func = dump;
}