/* ************************************************************************
* 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"
#include "log.h"
#include "base.h"
#include "dao.h"
#include "item.h"
#include "room.h"
#include "mobile.h"
/* external globals */
extern int dts_are_dumps;
extern int mini_mud;
/* external functions */
SPECIAL(dump);
SPECIAL(pet_shops);
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(bank);
SPECIAL(gen_board);
void assign_kings_castle(void);
/* local functions */
void assign_mobiles(void);
void assign_objects(void);
void assign_rooms(void);
/* functions to perform assignments */
void ASSIGNMOB(char *segVnum, SPECIAL(fname)) {
charData_t *mob = charData_findMobilePrototype(segVnum);
if (mob != NULL)
mob->func = fname;
else if (!mini_mud)
log("SYSERR: Attempt to assign spec to non-existant mobile '%s'", segVnum);
}
void ASSIGNITEM(char *segVnum, SPECIAL(fname)) {
itemData_t *obj = itemData_find(segVnum);
if (obj != NULL)
obj->func = fname;
else if (!mini_mud)
log("SYSERR: Attempt to assign spec to non-existant object '%s'", segVnum);
}
void ASSIGNROOM(char *segVnum, SPECIAL(fname)) {
roomData_t *room = roomData_find(segVnum);
if (room != NULL)
room->func = fname;
else if (!mini_mud)
log("SYSERR: Attempt to assign spec to non-existant room '%s'", segVnum);
}
/* ********************************************************************
* Assignments *
******************************************************************** */
/* assign special procedures to mobiles */
void assign_mobiles(void)
{
assign_kings_castle();
ASSIGNMOB("limbo:1", puff);
/* Immortal Zone */
ASSIGNMOB("godSimplex:1200", receptionist);
ASSIGNMOB("godSimplex:1201", postmaster);
ASSIGNMOB("godSimplex:1202", janitor);
/* Midgaard */
ASSIGNMOB("midgaardNorth:3005", receptionist);
ASSIGNMOB("midgaardNorth:3010", postmaster);
ASSIGNMOB("midgaardNorth:3020", guild);
ASSIGNMOB("midgaardNorth:3021", guild);
ASSIGNMOB("midgaardNorth:3022", guild);
ASSIGNMOB("midgaardNorth:3023", guild);
ASSIGNMOB("midgaardNorth:3024", guild_guard);
ASSIGNMOB("midgaardNorth:3025", guild_guard);
ASSIGNMOB("midgaardNorth:3026", guild_guard);
ASSIGNMOB("midgaardNorth:3027", guild_guard);
ASSIGNMOB("midgaardNorth:3059", cityguard);
ASSIGNMOB("midgaardNorth:3060", cityguard);
ASSIGNMOB("midgaardNorth:3061", janitor);
ASSIGNMOB("midgaardNorth:3062", fido);
ASSIGNMOB("midgaardNorth:3066", fido);
ASSIGNMOB("midgaardNorth:3067", cityguard);
ASSIGNMOB("midgaardNorth:3068", janitor);
ASSIGNMOB("midgaardNorth:3095", cryogenicist);
ASSIGNMOB("midgaardNorth:3105", mayor);
/* MORIA */
ASSIGNMOB("moria:4000", snake);
ASSIGNMOB("moria:4001", snake);
ASSIGNMOB("moria:4053", snake);
ASSIGNMOB("moria:4100", magic_user);
ASSIGNMOB("moria:4102", snake);
ASSIGNMOB("moria:4103", thief);
/* Redferne's */
ASSIGNMOB("redferne:7900", cityguard);
/* PYRAMID */
ASSIGNMOB("pyramid:5300", snake);
ASSIGNMOB("pyramid:5301", snake);
ASSIGNMOB("pyramid:5304", thief);
ASSIGNMOB("pyramid:5305", thief);
ASSIGNMOB("pyramid:5309", magic_user); /* should breath fire */
ASSIGNMOB("pyramid:5311", magic_user);
ASSIGNMOB("pyramid:5313", magic_user); /* should be a cleric */
ASSIGNMOB("pyramid:5314", magic_user); /* should be a cleric */
ASSIGNMOB("pyramid:5315", magic_user); /* should be a cleric */
ASSIGNMOB("pyramid:5316", magic_user); /* should be a cleric */
ASSIGNMOB("pyramid:5317", magic_user);
/* High Tower Of Sorcery */
ASSIGNMOB("towerOfMagic:2501", magic_user); /* should likely be cleric */
ASSIGNMOB("towerOfMagic:2504", magic_user);
ASSIGNMOB("towerOfMagic:2507", magic_user);
ASSIGNMOB("towerOfMagic:2508", magic_user);
ASSIGNMOB("towerOfMagic:2510", magic_user);
ASSIGNMOB("towerOfMagic:2511", thief);
ASSIGNMOB("towerOfMagic:2514", magic_user);
ASSIGNMOB("towerOfMagic:2515", magic_user);
ASSIGNMOB("towerOfMagic:2516", magic_user);
ASSIGNMOB("towerOfMagic:2517", magic_user);
ASSIGNMOB("towerOfMagic:2518", magic_user);
ASSIGNMOB("towerOfMagic:2520", magic_user);
ASSIGNMOB("towerOfMagic:2521", magic_user);
ASSIGNMOB("towerOfMagic:2522", magic_user);
ASSIGNMOB("towerOfMagic:2523", magic_user);
ASSIGNMOB("towerOfMagic:2524", magic_user);
ASSIGNMOB("towerOfMagic:2525", magic_user);
ASSIGNMOB("towerOfMagic:2526", magic_user);
ASSIGNMOB("towerOfMagic:2527", magic_user);
ASSIGNMOB("towerOfMagic:2528", magic_user);
ASSIGNMOB("towerOfMagic:2529", magic_user);
ASSIGNMOB("towerOfMagic:2530", magic_user);
ASSIGNMOB("towerOfMagic:2531", magic_user);
ASSIGNMOB("towerOfMagic:2532", magic_user);
ASSIGNMOB("towerOfMagic:2533", magic_user);
ASSIGNMOB("towerOfMagic:2534", magic_user);
ASSIGNMOB("towerOfMagic:2536", magic_user);
ASSIGNMOB("towerOfMagic:2537", magic_user);
ASSIGNMOB("towerOfMagic:2538", magic_user);
ASSIGNMOB("towerOfMagic:2540", magic_user);
ASSIGNMOB("towerOfMagic:2541", magic_user);
ASSIGNMOB("towerOfMagic:2548", magic_user);
ASSIGNMOB("towerOfMagic:2549", magic_user);
ASSIGNMOB("towerOfMagic:2552", magic_user);
ASSIGNMOB("towerOfMagic:2553", magic_user);
ASSIGNMOB("towerOfMagic:2554", magic_user);
ASSIGNMOB("towerOfMagic:2556", magic_user);
ASSIGNMOB("towerOfMagic:2557", magic_user);
ASSIGNMOB("towerOfMagic:2559", magic_user);
ASSIGNMOB("towerOfMagic:2560", magic_user);
ASSIGNMOB("towerOfMagic:2562", magic_user);
ASSIGNMOB("towerOfMagic:2564", magic_user);
/* SEWERS */
ASSIGNMOB("sewerFirst:7006", snake);
ASSIGNMOB("sewerFirst:7009", magic_user);
ASSIGNMOB("sewerMaze:7200", magic_user);
ASSIGNMOB("sewerMaze:7201", magic_user);
ASSIGNMOB("sewerMaze:7202", magic_user);
/* FOREST */
ASSIGNMOB("haonDorDark:6112", magic_user);
ASSIGNMOB("haonDorDark:6113", snake);
ASSIGNMOB("haonDorDark:6114", magic_user);
ASSIGNMOB("haonDorDark:6115", magic_user);
ASSIGNMOB("haonDorDark:6116", magic_user); /* should be a cleric */
ASSIGNMOB("haonDorDark:6117", magic_user);
/* ARACHNOS */
ASSIGNMOB("arachnos:6302", magic_user);
ASSIGNMOB("arachnos:6309", magic_user);
ASSIGNMOB("arachnos:6312", magic_user);
ASSIGNMOB("arachnos:6314", magic_user);
ASSIGNMOB("arachnos:6315", magic_user);
/* Desert */
ASSIGNMOB("desert:5004", magic_user);
ASSIGNMOB("desert:5005", guild_guard); /* brass dragon */
ASSIGNMOB("desert:5010", magic_user);
ASSIGNMOB("desert:5014", magic_user);
/* Drow City */
ASSIGNMOB("drow:5103", magic_user);
ASSIGNMOB("drow:5104", magic_user);
ASSIGNMOB("drow:5107", magic_user);
ASSIGNMOB("drow:5108", magic_user);
/* Old Thalos */
ASSIGNMOB("thalos:5200", magic_user);
ASSIGNMOB("thalos:5201", magic_user);
ASSIGNMOB("thalos:5209", magic_user);
/* New Thalos */
/* 5481 - Cleric (or Mage... but he IS a high priest... *shrug*) */
ASSIGNMOB("thalosNew:5404", receptionist);
ASSIGNMOB("thalosNew:5421", magic_user);
ASSIGNMOB("thalosNew:5422", magic_user);
ASSIGNMOB("thalosNew:5423", magic_user);
ASSIGNMOB("thalosNew:5424", magic_user);
ASSIGNMOB("thalosNew:5425", magic_user);
ASSIGNMOB("thalosNew:5426", magic_user);
ASSIGNMOB("thalosNew:5427", magic_user);
ASSIGNMOB("thalosNew:5428", magic_user);
ASSIGNMOB("thalosNew:5434", cityguard);
ASSIGNMOB("thalosNew:5440", magic_user);
ASSIGNMOB("thalosNew:5455", magic_user);
ASSIGNMOB("thalosNew:5461", cityguard);
ASSIGNMOB("thalosNew:5462", cityguard);
ASSIGNMOB("thalosNew:5463", cityguard);
ASSIGNMOB("thalosNew:5482", cityguard);
/*
5400 - Guildmaster (Mage)
5401 - Guildmaster (Cleric)
5402 - Guildmaster (Warrior)
5403 - Guildmaster (Thief)
5456 - Guildguard (Mage)
5457 - Guildguard (Cleric)
5458 - Guildguard (Warrior)
5459 - Guildguard (Thief)
*/
/* ROME */
ASSIGNMOB("rome:12009", magic_user);
ASSIGNMOB("rome:12018", cityguard);
ASSIGNMOB("rome:12020", magic_user);
ASSIGNMOB("rome:12021", cityguard);
ASSIGNMOB("rome:12025", magic_user);
ASSIGNMOB("rome:12030", magic_user);
ASSIGNMOB("rome:12031", magic_user);
ASSIGNMOB("rome:12032", magic_user);
/* King Welmar's Castle (not covered in castle.c) */
ASSIGNMOB("welmarCastle:15015", thief); /* Ergan... have a better idea? */
ASSIGNMOB("welmarCastle:15032", magic_user); /* Pit Fiend, have something better? Use it */
/* DWARVEN KINGDOM */
ASSIGNMOB("dwarven:6500", cityguard);
ASSIGNMOB("dwarven:6502", magic_user);
ASSIGNMOB("dwarven:6509", magic_user);
ASSIGNMOB("dwarven:6516", magic_user);
}
/* assign special procedures to objects */
void assign_objects(void)
{
ASSIGNITEM("midgaardNorth:3096", gen_board); /* social board */
ASSIGNITEM("midgaardNorth:3097", gen_board); /* freeze board */
ASSIGNITEM("midgaardNorth:3098", gen_board); /* immortal board */
ASSIGNITEM("midgaardNorth:3099", gen_board); /* mortal board */
ASSIGNITEM("midgaardNorth:3034", bank); /* atm */
ASSIGNITEM("midgaardNorth:3036", bank); /* cashcard */
}
/* assign special procedures to rooms */
void assign_rooms(void)
{
/* roomVnum_t i; */
ASSIGNROOM("midgaardNorth:3030", dump);
ASSIGNROOM("midgaardNorth:3031", pet_shops);
/*
* Port? Remove?
*
if (dts_are_dumps)
for (i = 0; i <= top_of_world; i++)
if (ROOM_FLAGGED(i, ROOM_DEATH))
world[i].func = dump;
*/
}