/
lib/objects/
lib/rooms/
lib/scripts/
lib/security/
src/banner/
src/util/

#include <stdio.h>

#include "protos.h"

#if HASH
extern struct hash_header room_db;
#else
extern struct room_data *room_db;
#endif
extern struct index_data *mob_index;
extern struct index_data *obj_index;
void boot_the_shops();
void assign_the_shopkeepers();

struct special_proc_entry {
  int	vnum;
  int	(*proc)();
};

int fighter_mage(struct char_data *ch, int cmd, char *arg, struct char_data *mob, int type);
int fighter_cleric(struct char_data *ch, int cmd, char *arg, struct char_data *mob, int type);
int cleric_mage(struct char_data *ch, int cmd, char *arg, struct char_data *mob, int type);


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

/* murder is disabled for now */
#define MAX_MUTYPE 16
int is_murdervict(struct char_data *ch)
{
#if 0
 int i;
 int mutype[MAX_MUTYPE] = {
 	3060,  /* killing these mobs will make the PC a murderer */
 	3067,
 	3069,
 	3072,
 	3141,
 	3661,
 	3662,
 	3663,
 	3682,
 	16101,
 	17809,
 	18215,
 	18222,
 	18223,
 	22601,
 	27011
 	
 };

for (i=0;i< MAX_MUTYPE;i++) {
    if (mob_index[ch->nr].virtual == mutype[i])
       return(TRUE);
   }
#endif   
   return(FALSE);
}


/* assign special procedures to mobiles */
void assign_mobiles()
{

  static struct special_proc_entry specials[] = {

    { 1, puff },
    { 2, Ringwraith },
    { 3, tormentor },
    { 4, Inquisitor},
    { 6, AcidBlob },
    { 25, magic_user },

    { 30, MageGuildMaster }, 
    { 31, ClericGuildMaster }, 
    { 32, ThiefGuildMaster }, 
    { 33, WarriorGuildMaster },
    { 34, MageGuildMaster }, 
    { 35, ClericGuildMaster }, 
    { 36, ThiefGuildMaster }, 
    { 37, WarriorGuildMaster },
    { 38, fighter},  /* armor golem */
#if 0
    { 39, creeping_death},  
#endif
    {199, AGGRESSIVE},
    {200, AGGRESSIVE},
/*
**  Doom Island
*/

	{205,fighter},
	{206,fighter},
	{208,fighter},
	{208,thief},
	{209,fighter},
	{210,cleric},
	{211,magic_user},
	{212,fighter},
	{213,Barbarian},
	{214,thief},
	{215,cleric},
	{216,magic_user},
	{217,fighter},
	{218,fighter},
/* end doom island */
		
/*
**  D&D Standard MOBS
*/

#if 0
    { 210, snake },	   /* spider */
    { 211, fighter},       /* gnoll  */
#endif
    
    { 220, fighter},       /* fighter */
    { 221, fighter},       /* bugbear */
    { 223, ghoul },	   /* ghoul */
    { 226, fighter },	   /* ogre */
    { 236, ghoul },	    /* ghast */
    { 227, snake },	/* spider */
    { 230, BreathWeapon }, /* baby black */
    { 232, blink },       /* blink dog */
    { 233, BreathWeapon }, /* baby blue */
    { 234, cleric }, /* cleric */
    { 239, shadow },      /* shadow    */
    { 240, snake },       /* toad      */
    { 243, BreathWeapon }, /* teenage white */
    { 247, fighter}, /* minotaur */
    { 251, CarrionCrawler },
    { 261, fighter },
    { 262, regenerator },
    { 264, fighter },
    { 265, magic_user},
    { 266, magic_user },
    { 267, Devil},
    { 269, Demon},
    { 271, regenerator },
    { 248, snake },       /* snake       */
    { 249, snake },       /* snake       */
    { 250, snake },       /* snake       */
    { 257, magic_user },  /* magic_user  */

    {600, DruidChallenger},
    {601, DruidChallenger},
    {602, DruidChallenger},
    {603, DruidChallenger},
    {604, DruidChallenger},
    {605, DruidChallenger},
    {606, DruidChallenger},
    {607, DruidChallenger},
    {608, DruidChallenger},
    {609, DruidChallenger},
    {610, DruidChallenger},
    {611, DruidChallenger},
    {612, DruidChallenger},
    {613, DruidChallenger},
    {614, DruidChallenger},
    {615, DruidChallenger},
    {616, DruidChallenger},
    {617, DruidChallenger},
    {618, DruidChallenger},
    {619, DruidChallenger},
    {620, DruidChallenger},
    {621, DruidChallenger},
    {622, DruidChallenger},
    {623, DruidChallenger},
    {624, DruidChallenger},
    {625, DruidChallenger},
    {626, DruidChallenger},
    {627, DruidChallenger},
    {628, DruidChallenger},
    {629, DruidChallenger},
    {630, DruidChallenger},
    {631, DruidChallenger},
    {632, DruidChallenger},
    {633, DruidChallenger},
    {634, DruidChallenger},
    {635, DruidChallenger},
    {636, DruidChallenger},
    {637, DruidChallenger},
    {638, DruidChallenger},
    {639, DruidChallenger},
    {640, DruidChallenger},
    {641, DruidGuildMaster},
    {642, DruidGuildMaster},

    {651, MonkChallenger},
    {652, MonkChallenger},
    {653, MonkChallenger},
    {654, MonkChallenger},
    {655, MonkChallenger},
    {656, MonkChallenger},
    {657, MonkChallenger},
    {658, MonkChallenger},
    {659, MonkChallenger},
    {660, MonkChallenger},
    {661, MonkChallenger},
    {662, MonkChallenger},
    {663, MonkChallenger},
    {664, MonkChallenger},
    {665, MonkChallenger},
    {666, MonkChallenger},
    {667, MonkChallenger},
    {668, MonkChallenger},
    {669, MonkChallenger},
    {670, MonkChallenger},
    {671, MonkChallenger},
    {672, MonkChallenger},
    {673, MonkChallenger},
    {674, MonkChallenger},
    {675, MonkChallenger},
    {676, MonkChallenger},
    {677, MonkChallenger},
    {678, MonkChallenger},
    {679, MonkChallenger},
    {680, MonkChallenger},
    {681, MonkChallenger},
    {682, MonkChallenger},
    {683, MonkChallenger},
    {684, MonkChallenger},
    {685, MonkChallenger},
    {686, MonkChallenger},
    {687, MonkChallenger},
    {688, MonkChallenger},
    {689, MonkChallenger},
    {690, MonkChallenger},
    {691, monk_master},

/*
  frost giant area 
*/

    { 9401, fighter },
    { 9403, magic_user },
    { 9404, fighter },
    { 9405, thief },
    { 9406, fighter },
    { 9407, fighter },
    { 9408, fighter },
    { 9409, fighter },
    { 9410, fighter },
    { 9411, fighter },
    { 9412, fighter },
    { 9413, fighter },
    { 9414, fighter },
    { 9415, fighter },
    { 9416, fido},
    { 9418, BreathWeapon },
    { 9419, BreathWeapon },
    { 9420, fighter },
    { 9421, fighter },
    { 9424, StormGiant },
    { 9426, MonkChallenger },
    { 9427, cleric },
    { 9428, magic_user },
    { 9429, fighter },
    { 9430, regenerator },
    { 9431, snake },
    { 9432, magic_user },
    { 9433, fighter },
    { 9434, fighter },
    { 9435, snake  },
    { 9436, fido },

/*
**   shire
*/
    { 1000, magic_user },
    { 1010, fighter},
    { 1011, fighter},
    { 1012, fighter},
    { 1014, fighter},
    { 1015, fighter},
    { 1016, fighter},
    { 1017, fighter},
    { 1001, fighter},
    { 1021, fighter},
    
    { 1023, fighter},
    { 1026, fighter},
    { 1031, receptionist },
    { 1032, fighter},
    
    {1163, magic_user},	/* Saruman */
    {1164, fighter},	/* orcs */
    {1171, thief},	/* thieves */

    { 1701, monk},
    { 1702, monk},
    { 1703, monk},
    { 1704, monk},
    { 1705, monk},
    { 1706, monk},
    { 1707, monk},
    { 1708, monk},
    { 1709, monk},
    { 1710, monk},
    { 1711, monk},
    { 1712, monk},
    { 1713, monk},
    { 1714, monk},
    { 1715, monk},
    { 1716, monk},
    { 1717, monk},
    { 1718, monk},

    { 6001, real_rabbit},
    { 6005, real_fox},
/*
  prydain
*/
    { 6601, PrydainGuard},
    { 6602, PrydainGuard},
    { 6604, fighter},
    { 6605, PrydainGuard},
    { 6606, PrydainGuard},
    { 6608, fighter},
    { 6613, fighter},
    { 6619, PrydainGuard},
    { 6620, PrydainGuard},
    { 6621, fighter},
    { 6622, fighter},
    { 6614, PrydainGuard},
    { 6609, BreathWeapon},
    { 6642, BreathWeapon},
    { 6640, jugglernaut },
    { 6612, magic_user },
    { 6615, magic_user },
    { 6616, magic_user },
    { 6624, magic_user },
    { 6637, magic_user },
    { 6634, fighter },
    { 6635, BreathWeapon},
    { 6625, Demon},
    { 6638, StatTeller},

/*
  deadhame
*/
    { 24782, fighter },

/*
**  G1
*/
    { 9200, fighter },
    { 9201, fighter },
    { 9202, fighter },
    { 9203, fighter },
    { 9204, fighter },
    { 9206, fighter },
    { 9207, fighter },
    { 9211, fighter },
    { 9212, fighter },
    { 9216, fighter },
    { 9213, CarrionCrawler},
    { 9208, cleric },
    { 9217, BreathWeapon},
    { 9218, fighter},

/*
**  chessboard
*/
    { 1400, chess_game },  /* black pieces */
    { 1401, chess_game },
    { 1402, chess_game },
    { 1403, chess_game },
    { 1404, chess_game },
    { 1405, chess_game },
    { 1406, chess_game },
    { 1407, chess_game },
    { 1408, chess_game },
    { 1409, chess_game },
    { 1410, chess_game },
    { 1411, chess_game },
    { 1412, chess_game },
    { 1413, chess_game },
    { 1414, chess_game },
    { 1415, chess_game },
    
    { 1448, chess_game },  /* white pieces */
    { 1449, chess_game },
    { 1450, chess_game },
    { 1451, chess_game },
    { 1452, chess_game },
    { 1453, chess_game },
    { 1454, chess_game },
    { 1455, chess_game },
    { 1456, chess_game },
    { 1457, chess_game },
    { 1458, chess_game },
    { 1459, chess_game },
    { 1460, chess_game },
    { 1461, chess_game },
    { 1462, chess_game },
    { 1463, chess_game },
    
#if 0
    { 1401, fighter}, 
    { 1404, fighter}, 
    { 1406, fighter}, 
    { 1457, fighter}, 
    { 1460, fighter}, 
    { 1462, fighter}, 
#endif

    { 1499, sisyphus }, 
    { 1471, paramedics }, 
    { 1470, jabberwocky },
    { 1472, flame }, 
    { 1437, banana }, 
    { 1428, jugglernaut },
    { 1495, delivery_elf },  
    { 1493, delivery_beast },

/*
**  Bandits Temple
*/
    { 2113, ghoul },
    { 2115, ghost },
    { 2116, ghost },
    { 2111, cleric },
    { 2112, cleric },
    { 2117, druid_protector },


    /* Astral plane */
    { 2715, astral_portal },
    { 2716, astral_portal },
    { 2717, astral_portal },
    { 2718, astral_portal },
    { 2719, astral_portal },
    { 2720, astral_portal },
    { 2721, astral_portal },
    { 2722, astral_portal },
    { 2723, astral_portal },
    { 2724, astral_portal },
    { 2725, astral_portal },
    { 2726, astral_portal },
    { 2727, astral_portal },
    { 2728, astral_portal },
    { 2729, astral_portal },
    { 2730, astral_portal },
    { 2731, astral_portal },
    { 2732, astral_portal },

    { 2703, fighter	},
    { 2702, magic_user  },
    { 2701, fighter	},
/*
**  Valley of the Mage
*/
    { 21106, snake },
    { 21107, RustMonster},
    { 21108, wraith},
    { 21111, web_slinger},
    { 21112, trapper},
    { 21114, troguard},
    { 21121, trogcook},
    { 21122, shaman},
    { 21123, troguard},
    { 21124, golgar},
    { 21118, troguard},
    { 21119, troguard},

/* I put the guy back ,msw */
    { 21130, Valik},
    
    { 21135, regenerator},
    { 21138, ghostsoldier},
    { 21139, ghostsoldier},
/*
    { 21140, keystone},
    { 21141, lattimore},
    { 21142, guardian},
*/
    { 21144, troguard},
    { 21145, troguard},
    { 21146, coldcaster},
    { 21147, RustMonster},

/*
**  New Thalos
*/
    { 3600, MageGuildMaster },
    { 3601, ClericGuildMaster },
    { 3602, WarriorGuildMaster },
    { 3603, ThiefGuildMaster },
    { 3604, receptionist},
    { 3619, fighter},
    { 3620, fighter},
    { 3632, fighter},
    { 3634, fighter},
    { 3636, fighter},
    { 3638, fighter},
    { 3639, fighter}, /* caramon */
    { 3641, cleric},  /* curley g. */
    { 3640, magic_user},  /* raist */
    { 3656, NewThalosGuildGuard},
    { 3657, NewThalosGuildGuard},
    { 3658, NewThalosGuildGuard},
    { 3659, NewThalosGuildGuard},
    { 3661, SultanGuard},   /* wandering */
    { 3662, SultanGuard},   /* not */
    { 3682, SultanGuard},   /* royal */
    { 3670, BreathWeapon},  /* Cryohydra */
    { 3674, BreathWeapon},  /* Behir */
    { 3675, BreathWeapon},  /* Chimera */
    { 3676, BreathWeapon},  /* Couatl */
    { 3681, cleric },       /* High priest */
    { 3689, NewThalosMayor }, /* Guess */
    { 3644, fido},
    { 3635, thief}, 
/*
**  Skexie
*/
    { 15813, magic_user},
    { 15815, magic_user},
    { 15820, magic_user },	
    { 15821, vampire },	
    { 15844, cleric },	
    { 15847, fighter },	
    { 15831, fighter },	
    { 15832, fighter },	
    { 15822, fighter },	
    { 15819, fighter },	
    { 15805, fighter },	
/*
**  Challenge
*/
    { 15858, BreathWeapon },
    { 15861, magic_user },
    { 15862, magic_user },
    { 15863, fighter },
    { 15864, sisyphus },
    { 15877, magic_user },
    { 15868, snake },
    { 15866, magic_user },
    { 15810, magic_user },
    { 15880, fighter },
    { 15879, BreathWeapon },
    { 15873, magic_user },
    { 15871, magic_user },
    { 15852, fighter },
    { 15875, cleric },
    { 15869, magic_user },
    
/*
**  abyss
*/
    { 25000, magic_user },      /* Demi-lich  */
    { 25001, Keftab }, 
    { 25009, BreathWeapon },    /* hydra */
    { 25002, vampire },	        /* Crimson */
    { 25003, StormGiant },      /* MistDaemon */
    { 25006, StormGiant },      /* Storm giant */
    { 25014, StormGiant },      /* DeathKnight */    
    { 25009, BreathWeapon },    /* hydra */
    { 25017, AbyssGateKeeper }, /* Abyss Gate Keeper */
    { 25013, fighter},          /* kalas */
    { 25008, magic_user},       /* efreeti */
    { 25025, acid_monster},
    { 25026, acid_monster},
    { 25034, fighter },         /* marilith */
    { 25035, magic_user},       /* balor  */

/*
**  Paladin's guild
*/
    { 3028, PaladinGuildGuard},
    { 21363, PaladinGuildmaster},    
    
/*
**  Abyss Fire Giants
*/
    { 25500, fighter },
    { 25501, fighter },
    { 25502, fighter },
    { 25505, fighter },
    { 25504, BreathWeapon},
    { 25503, cleric  },

/*
**  Temple Labrynth
*/

    { 10900, temple_labrynth_liar },
    { 10901, temple_labrynth_liar },
    { 10902, temple_labrynth_sentry},

/*
**  Gypsy Village
*/

    { 16106, fido},
    { 16107, CaravanGuildGuard},
    { 16108, CaravanGuildGuard},
    { 16109, CaravanGuildGuard},
    { 16110, CaravanGuildGuard},
    { 16111, WarriorGuildMaster},
    { 16112, MageGuildMaster},
    { 16113, ThiefGuildMaster},
    { 16114, ClericGuildMaster},
    { 16122, receptionist},
    { 16105, StatTeller},

/*
**  Draagdim
*/

    { 2500, PrisonGuard },  /* jailer */
/*
**  mordilnia
*/
    {18200, magic_user},
    {18205, receptionist},
    {18206, MageGuildMaster},
    {18207, ClericGuildMaster},    
    {18208, ThiefGuildMaster},
    {18209, WarriorGuildMaster},    
    {18210, MordGuildGuard},  /*18266 3*/  
    {18211, MordGuildGuard},  /*18276 1*/
    {18212, MordGuildGuard},  /*18272 0*/
    {18213, MordGuildGuard},  /*18256 2*/
    {18215, MordGuard },    
    {18216, janitor},
    {18217, fido},    
    {18218, fighter},    
    {18221, fighter},
    {18222, MordGuard},
    {18223, MordGuard},    

/*
**  Graecia:
*/

    {13706, fighter},
    {13709, fighter},
    {13711, fighter},
    {13714, fighter},
    {13721, fighter},
    {13722, fighter},
    {13726,LightningBreather},
    {13732, snake},
    {13762, fighter},
    {13764, fighter},
    {13765, acid_monster},
    {13766, fighter},
    {13769, fighter},
    {13771, fighter},
    {13775, fighter},

    {13779, magic_user},
    {13784, magic_user},
    {13785, magic_user},
    {13787, magic_user},
    {13789, magic_user},
    {13791, magic_user},
    {13793, magic_user},
    {13795, magic_user},
    {13797, magic_user},
    { 13843, fighter },


    
/*
**  Eastern Path
*/
    
    {16001, fighter},
    {16006, fighter},
    {16007, fighter},
    {16008, fighter},
    {16009, fighter},
    {16016, fighter},
    {16017, fighter},
    {16020, snake },
    {16021, cleric},
    {16022, fighter},
    {16023, thief},
    {16027, fighter},
    {16033, fighter},
    {16034, fighter},
    {16035, fighter},
    {16036, magic_user},
    {16043, fighter},
    {16050, fighter},
    {16052, fighter},
    {16048, fighter},
    {16056, cleric},
    {16057, magic_user},
    {16037, DwarvenMiners },
    {16014, magic_user},
    {16039, Tyrannosaurus_swallower},

/*
**  undercaves.. level 1
*/
    {16201, magic_user},
    {16204, magic_user},
    {16205, magic_user},
    {16206, magic_user},
    {16210, fighter},
    {16211, magic_user},
    {16213, acid_monster},
    {16214, fighter},
    {16215, fighter},
    {16216, cleric},
    {16217, magic_user},
    {16219, death_knight},

/*
** Sauria
*/
    {21803, Tyrannosaurus_swallower},
    {21810, Tyrannosaurus_swallower},

/*
**  Bay Isle
*/
    {16610, Demon},
    {16620, BreathWeapon},
    {16640, cleric},
    {16650, cleric},

#if 0
/*
**  King's Mountain
*/
    {16700, BreathWeapon},
    {16702, shadow},
    {16703, magic_user},
    {16709, vampire},
    {16710, Devil},
    {16711, Devil},
    {16712, Devil},
    {16713, ghoul},
    {16714, ghoul},
    {16715, wraith},
    {16717, fighter},
    {16720, Devil},
    {16721, Devil},
    {16724, Devil},
    {16725, magic_user},
    {16726, cleric},
    {16727, Devil},
    {16728, Devil},
    {16730, Devil},
    {16731, Devil},
    {16732, Demon},
    {16733, Demon},
    {16734, Demon},
    {16735, Demon},
    {16736, cleric},
    {16738, BreathWeapon},
#endif

/*
**  Sewer Rats
*/
    {7002, attack_rats},
    {2531, DragonHunterLeader},
    {3063, HuntingMercenary},

/*
**  Mages Tower
*/
    {1500, shadow},
    {1504, magic_user},
    {1506, magic_user},
    {1507, magic_user},
    {1508, magic_user},
    {1510, magic_user},
    {1514, magic_user},
    {1515, magic_user},
    {1516, magic_user},
    {1517, magic_user},
    {1518, magic_user},
    {1520, magic_user},
    {1521, magic_user},
    {1522, magic_user},
    {1523, magic_user},
    {1524, magic_user},
    {1525, magic_user},
    {1526, magic_user},
    {1527, magic_user},
    {1528, magic_user},
    {1529, magic_user},
    {1530, magic_user},
    {1531, magic_user},
    {1532, magic_user},
    {1533, magic_user},
    {1534, magic_user},
    {1537, magic_user},
    {1538, magic_user},
    {1540, magic_user},
    {1541, magic_user},
    {1548, magic_user},
    {1549, magic_user},
    {1552, magic_user},
    {1553, magic_user},
    {1554, magic_user},
    {1556, magic_user},
    {1557, magic_user},
    {1559, magic_user},
    {1560, magic_user},
    {1562, magic_user},
    {1564, magic_user},
    {1565, magic_user},
/*
** Wert's stuff
*/

	{12000, thief},
	{12001, thief},
	{12002, thief},
	{12003, thief},
	{12004, thief},
	{12006, thief},
	{12007, fighter},
	{12008, fighter},
	{12009, thief},
        {12010, FireBreather}, 
        {12011, FireBreather}, 
/*
**	Alun's stuff
*/

	{6241,TreeThrowerMob},
/* 
** Celestian's Specials
*/
   { 1943, mage_specialist_guildmaster }, /* specialist gm */
   { 1901, PostMaster},	/* PostMaster for mail/send/receive */
/*   { 1900, avatar_celestian},     */
	{ 1900, archer},
   
   { 1904, fighter}, 			/* chief     */
   { 1905, fighter},			/* villagers */
   { 1907, cleric},  			/* doctor    */
   { 1908, village_princess},
   { 1921, fighter}, 			/* lizardmen */
   { 1922, lizardman_shaman},
   { 1944, fighter}, 			/* low priest */
   { 1945, cleric},   			/* mid priest */
   { 1946, cleric},			/* high priest */
   { 1947, snake_avt},			/* snake god avatar */
   { 1948, snake_guardians},		/* snake guard */
   { 1949, snake},			/* pet snake   */
   { 1950, virgin_sac},			/* virgin sac person */
   { 1951, snake}, 			/* flying snake */
   { 1953, fighter},			/* jungle giant */
   { 1953, magic_user},			/* second god_avt */
   { 2012, fighter},			/* fresh water hag */
   { 21366, PsiGuildmaster},
   { 21367, RangerGuildmaster},


/* 
***		Spider Haunt, Celestians
*/
	{9601,goblin_sentry},
	{9602,goblin_sentry},
	{9605,fighter},  /* sleepers */
	{9604,fighter},  /* general goblin */
	{9606, fighter}, /* goblin king */
	{9608,fighter},  /* half-giant worker */
	{9607, fighter}, /* forger goblin */
	{9609, fighter}, /* female cook */
	{9611, snake} , /* bitch of a spider in the woods */

/*
* Celestian's Menzborranzan
*/

	{9700, Drow}, /* guard */
	{9701, Drow}, /* wanderer */
	{9702, Drow}, /* high priest */
	{9703, Drow}, /* wandering female */
	{9704, Drow}, /* briza */
	{9705, Drow}, /* matron */
	{9706, Drow}, /* rizzen */
	{9707, Drow}, /* vierna */
	{9708, Drow}, /* maya */
	{9709, Drow}, /* dinin */
	{9710, Drow}, /* zaknafien */
	{9711, Drow}, /* drizzit */
	{9712, Drow}, /* wandering mage */
	{9713, Drow}, /* worker */

/*
	Blackmouths Tower
*/

	{24007,magic_user},
	{24009,magic_user},
	{24010,magic_user},
	{16738,FireBreather},
	{5209,raven_iron_golem},
	{24003,magic_user},
	{24004,magic_user},
	{24005,magic_user},
	{24006,magic_user},
	{24000,snake},
	
	{25012,fighter_mage},
	
/*
** Celestian's Ravenloft Area
*/


	{ 30000, strahd_zombie }, 
	{ 30113, strahd_vampire },
	{ 30004, banshee	}, /* BANSHEE */
	{ 30005, fighter	}, /* guardian */
	{ 30006, fighter	}, /* accountant lief */
	{ 30007, fighter	}, /* werewolf */
	{ 30100, magic_user	}, /* witch one */
	{ 30101, magic_user	}, /* witch two */
	{ 30111, magic_user	}, /* witch 3 */
	{ 30102, vampire	}, /* helga */
	{ 30103, wraith		}, /* wraith */
	{ 30105, mad_gertruda   }, /* gertruda */
	{ 30107, raven_iron_golem }, /* iron golem */
	{ 30108, mad_cyrus	}, /* cyrus belview */
	{ 30109, fighter	}, /* zombie normal */
	{ 30106, wraith		}, /* familiar cats */
	{ 30112, Demon  	}, /* shadow demon */
	{ 30114, wraith		}, /* elf corpse */
	{ 30115, ghoul		}, /* roo corpse */
	{ 30116, vampire	}, /* spectre */
	{ 30117, ghost		}, /* ghost */
	{ 30118, shadow		}, /* lost souls */
		
/*
***	 Ator's Mobs
*/	

	{3402,ghoul},
	{3404,wraith},
	{3405,fighter},
	{3406,fighter},
	{3407,fighter},
	{3408,ghost},
	{3409,ghoul},
	{3410,FireBreather},
	{3411,lich_church}, 	
	{3412,medusa},
	{3413,fighter},
	{3414,magic_user},
	{3415,FireBreather},
	{3416,vampire},
	{3417,regenerator},
	{3418,fighter},
	{3424,Slavalis},	

/*
**  Forest of Rhowyn
*/

    {13901, ThrowerMob },

/*
**  Quikland
*/
    {6202, fighter},
    {6204, magic_user},
    {6206, fighter},
    {6207, fighter},
    {6208, fighter},
/*
** Dwarf Village
*/
    {6500, fighter},
    {6501, fighter},
    {6502, wraith},
    {6506, fighter},
    {6507, fighter},
    {6508, fighter},
    {6514, fighter},
    {6516, fighter},
    {6516, snake},
    {6517, snake},

/*
**  Lycanthropia
*/
    {16901, fighter},
    {16902, fighter},
    {16903, fighter},
    {16904, fighter},
    {16905, fighter},
    {16906, fighter},
    {16907, magic_user},
    {16908, fighter},
    {16910, fighter},
    {16911, fighter},

/*
**  Main City
*/

    { 3000, magic_user }, 
    { 3060, MidgaardCityguard }, 
    { 3067, MidgaardCityguard }, 
    { 3061, janitor },
    { 3062, fido }, 
    { 3066, fido },
    { 3005, receptionist },
    { 3020, MageGuildMaster }, 
    { 3021, ClericGuildMaster }, 
    { 3022, ThiefGuildMaster }, 
    { 3023, WarriorGuildMaster },

    { 3007, sailor },    /* Sailor */
    { 3024, guild_guard }, 
    { 3025, guild_guard }, 
    { 3026, guild_guard },
    { 3027, guild_guard },
    { 3070, RepairGuy }, 
    { 3071, RepairGuy },
    { 3069, MidgaardCityguard },	/* post guard */
    { 3068, ninja_master },
    { 3073, loremaster },
    { 3074, hunter },
    { 3076, archer_instructor },
    { 3077, barbarian_guildmaster},

/*
**  Lower city
*/
    { 3047, DogCatcher },
    { 3143, mayor },
    { 7009, MidgaardCityguard },

/*
**   Hammor's Stuff
*/
    { 3900, eric_johnson }, 
    { 3901, andy_wilcox }, 
    { 3950, zombie_master },
    { 3952, BreathWeapon },

/* 
**  MORIA 
*/
    { 4000, snake }, 
    { 4001, snake }, 
    { 4053, snake },

    { 4103, thief }, 
    { 4100, magic_user }, 
    { 4101, regenerator },
    { 4102, snake },

/*
**  Pyramid
*/

    { 5308, RustMonster },
    { 5303, vampire },

/*
**  Arctica
*/
    { 6800, fighter},
    { 6803, fighter},
    { 6801, BreathWeapon },
    { 6802, BreathWeapon },
    { 6815, magic_user },
    { 6821, snake },
    { 6824, BreathWeapon },
    { 6825, thief },

/* 
** SEWERS 
*/
    { 7009, fighter},
    { 7006, snake },
    { 7008, snake },
    { 7042, magic_user },	/* naga       */
    { 7040, BreathWeapon },     /* Red    */
    { 7041, magic_user },	/* sea hag    */
    { 7200, magic_user },	/* mindflayer */ 
    { 7201, magic_user },	/* senior     */
    { 7202, magic_user },	/* junior     */

/* 
** FOREST 
*/

    { 6111, magic_user },	/* tree */
    { 6113, snake },
    { 6114, snake },
    { 6112, BreathWeapon }, /* green */
    { 6910, magic_user },

/*
**  Great Eastern Desert
*/
    { 5000, thief },	/* rag. dervish */
    { 5002, snake },	/* coral snake */
    { 5003, snake },	/* scorpion    */
    { 5004, acid_monster},/* purple worm  */
    { 5014, cleric },	/* myconoid */
    { 5005, BreathWeapon }, /* brass */

/*
**  Drow (edition 1)
*/
    { 5010, magic_user },	/* dracolich */
    { 5104, cleric },
    { 5103, magic_user },	/* drow mage */
    { 5107, cleric },	/* drow mat. mot */
    { 5108, magic_user },	/* drow mat. mot */
    { 5109, cleric },	/* yochlol */
    { 5101, Drow},
    { 5102, Drow},
    { 5105, Drow},
    { 5106, Drow},

/*
**   Thalos
*/
    { 5200, Beholder },	/* beholder    */

/*
**  Zoo
*/
    { 9021, snake },	/* Gila Monster */

/*
**  Castle Python
*/
    { 11001, fighter},  /* lord python */
    { 11002, fighter},
    { 11004, fighter},
    { 11005, fighter},
    { 11006, fighter},
    { 11007, fighter},
    { 11016, receptionist },
    { 11017, NudgeNudge },
    { 11039, magic_user},
    { 11026, fighter},
    

/*
**  miscellaneous
*/
    { 9061, vampire},	/* vampiress  */

/*
**  White Plume Mountain
*/

    { 17004, magic_user }, /* gnyosphinx   */
    { 17017, magic_user }, /* ogre magi   */
    { 17014, ghoul },	/* ghoul  */
    { 17009, geyser },	/* geyser  */
    { 17011, vampire },	/* vampire Amelia  */
    { 17002, wraith },	/* wight*/
    { 17005, shadow },	/* shadow */
    { 17010, green_slime }, /* green slime */

/*
**  Arachnos
*/

    { 20001, snake },	/* Young (large) spider */
    { 20003, snake },	/* wolf (giant) spider  */
    { 20005, snake },	/* queen wasp      */
    { 20006, snake },	/* drone spider    */
    { 20010, snake },	/* bird spider     */
    { 20009, magic_user }, /* quasit         */
    { 20014, magic_user }, /* Arachnos        */
    { 20015, magic_user }, /* Ki Rin          */

    { 20002, BreathWeapon }, /* Yevaud */
    { 20017, BreathWeapon }, /* Elder  */
    { 20016, BreathWeapon }, /* Baby   */
    { 20012, fighter}, /* donjonkeeper */


/*
**  Sunsor's elf area
*/
	{ 22602, archer},	/* archer warrior */
    { 22605, timnus },         /* timnus */
    { 22604, baby_bear},	/* mother bear */
    { 22624, baby_bear},	/* baby bears. */

#if 0
/*
**   The Darklands
*/

    { 24050, cleric },
    { 24052, magic_user2 }, 
    { 24053, magic_user2 }, 
    { 24054, magic_user2 }, 
    { 24055, magic_user2 }, 
    { 24056, magic_user2 }, 
    { 24057, magic_user2 }, 
    { 24058, magic_user2 }, 
    { 24059, magic_user2 }, 
#endif

#if 0

/*
**   Abbarach
*/

    { 27001, magic_user },
    { 27002, magic_user },
    { 27003, magic_user },
    { 27004, magic_user },
    { 27005, magic_user },
    { 27006, Tytan },
    { 27007, replicant },
    { 27016, AbbarachDragon },
    { 27014, magic_user },
    { 27017, magic_user },
    { 27018, magic_user },
    { 27019, magic_user },
    { 27025, Samah}, 
#endif

/* roo/Land down under */

    { 27401, fighter},
    { 27403, fighter},
    { 27407, fighter},
    { 27408, fighter},
    { 27409, fighter},
    { 27411, fighter},
    { 27415, fighter},
    { 27416, fighter},
    { 27417, fighter},
    { 27418, fighter},
    { 27419, fighter},
    { 27420, fighter},
    { 27404, magic_user},
    { 27405, magic_user},
    { 27422, magic_user},
    { 27413, cleric},
    { 27414, cleric},
    { 27429, AGGRESSIVE },
    { 27430, AGGRESSIVE },

    { 7526, winger},
    { 7522, magic_user},
    { 7531, magic_user},
    {7510, fighter},
    {7514, fighter},
    {7515, fighter},
    {7516, fighter},
    {7527, fighter},
    {7528, fighter},
    {7530, fighter},

    { -1, NULL },
  };

  int	i, rnum;
  char buf[MAX_STRING_LENGTH];

  for (i=0; specials[i].vnum>=0; i++) {
    rnum = real_mobile(specials[i].vnum);
    if (rnum<0) {
      sprintf(buf, "mobile_assign: Mobile %d not found in database.",
	      specials[i].vnum);
      log_string(buf);
    } else {
      mob_index[rnum].func = specials[i].proc;
    }
  }

	boot_the_shops();
	assign_the_shopkeepers();
}

#if 0
void assign_objects()
{
/*        obj_index[real_object(15)].func = SlotMachine; */
        obj_index[real_object(30)].func = scraps;
        obj_index[real_object(23)].func = jive_box;
        obj_index[real_object(31)].func = portal;
        obj_index[real_object(3097)].func = board;
        obj_index[real_object(3098)].func = board;
        obj_index[real_object(3099)].func = board;
        obj_index[real_object(25015)].func = BerserkerItem;
        obj_index[real_object(25102)].func = board;
        obj_index[real_object(21122)].func = nodrop;
        obj_index[real_object(21130)].func = soap;
        obj_index[real_object(27038)].func = BerserkerItem;
 
#if EGO
        obj_index[real_object(35000)].func = EvilBlade; 
        obj_index[real_object(35001)].func = GoodBlade;
/*        obj_index[real_object(35002)].func = NeutralBlade;*/
#endif

}
#else
/* assign special procedures to objects */
void assign_objects()
{
  static struct special_proc_entry specials[] = {
    {15, SlotMachine},
    {30, scraps},
    {23, jive_box},
    {31, portal},
    {3097, board},
    {3098, board},
    {3099, board},
    {25015, BerserkerItem},
    {25102, board},
    {21122, nodrop},
    {21130, soap},
    {27038, BerserkerItem},
#if 0 /*EGO*/
    {35000, EvilBlade},
    {35001, GoodBlade},
    {35002, NeutralBlade},
#endif
    { -1, NULL },
  };
 
  int   i, rnum;
  char buf[MAX_STRING_LENGTH];
 
  for (i=0; specials[i].vnum>=0; i++) {
    rnum = real_object(specials[i].vnum);
    if (rnum<0) {
      sprintf(buf, "object_assign: Object %d not found in database.",
              specials[i].vnum);
      log_string(buf);
    } else {
      obj_index[rnum].func = specials[i].proc;
    }
  }
}
#endif
/* assign special procedures to rooms */
void assign_rooms()
{

  static struct special_proc_entry specials[] = {

    {   99,  Donation},
    { 500,   druid_challenge_prep_room},
    { 501,   druid_challenge_room},
    { 550,   monk_challenge_prep_room},
    { 551,   monk_challenge_room},
    { 3030,  dump },
    { 13547, dump },
    { 3054,  pray_for_items },

    { 2188,  Magic_Fountain},
    { 2189,  Magic_Fountain},

    { 3005,  Fountain}, /* Meeting SQ */
    { 13518, Fountain},
    { 11014, Fountain},
    { 5234,  Fountain},
    { 3141,  Fountain},
    { 13406,  Fountain},
    { 22642,  Fountain},
    { 22644,  Fountain},
    { 22646,  Fountain},
    { 22648,  Fountain},
    { 26010,	Fountain},
    { 13530, pet_shops },

    { 2000,  bank },
    { 13521, bank },

#if 0
    { 250,   House },
    { 715,   House },
    { 716,   House },
    { 718,   House },
    { 3099,  House },  /* Franz's house   */
    { 3143,  House },  /* justine's house */
    { 3144,  House },  /* zip's house     */
    { 3145,  House },  /* crimson's house */
    { 3146,  House },  /* hugh's house    */
    { 3147,  House },  /* crimson's house */
    { 3148,  House },  /* hugh's house    */
    { 3152,  House },  /* Kojiro's house    */
    { 3154,  House },  /* Magnus's house    */
    { 3155,  House },  /* Rincewinds's house    */
    { 3156,  House },  /* Comptons's house    */
    { 3158,  House },
    { 3159,  House },
    { 3160,  House },
    { 3161,  House }, /* rodgrim  */
    { 3162,  House }, /* riffraff */
    { 3163,  House }, /* fanchon  */
    { 13495,  House }, /* conner */
    { 13496,  House }, /* conner */
    { 13497,  House }, /* conner */
    { 13498,  House }, /* conner */
    { 3827,  House },
    { 5198,  House }, /*  Rambozo */
    { 5199,  House }, /*  shadowspawns */
    { 5700,  House }, /*  Dalamar */
    { 5896,  House }, /*  Dalamar */
    { 6697,  House },
    { 6698,  House },
    { 6699,  House },
    { 7697,  House },
    { 7698,  House },
    { 9260,  House },
    { 9261,  House },
    { 9262,  House },
    { 9265,  House },
    { 9266,  House },
    { 13100, House },  /* SEDUCTIoN */
    { 13729, House },
    { 13730, House },
    { 13799, House },  /* Glopglyph's house   */
    { 17995, House },
    { 17998, House },
    { 17990, House },  /* Turnip */
    { 10100, House },  /* Darrel's house      */
    { 20200, House },  /* Bag's house         */
    { 21336, House }, /* House for Blah */
    { 21337, House },  /* House for Insane */
    { 24000, House },  /* Pat's House         */
    { 27081, House },
#endif
	{3422,ChurchBell},
    
    { -1, NULL},
  };
  int i;
  struct room_data *rp;
  
  for (i=0; specials[i].vnum>=0; i++) {
    rp = real_roomp(specials[i].vnum);
    if (rp==NULL) {
      log_string("assign_rooms: unknown room");
    } else
      rp->funct = specials[i].proc;
  }
}