/ circle3.1 / src / spec_assign.c
spec_assign.c
  1  /* ************************************************************************
  2  *   File: spec_assign.c                                 Part of CircleMUD *
  3  *  Usage: Functions to assign function pointers to objs/mobs/rooms        *
  4  *                                                                         *
  5  *  All rights reserved.  See license.doc for complete information.        *
  6  *                                                                         *
  7  *  Copyright (C) 1993, 94 by the Trustees of the Johns Hopkins University *
  8  *  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
  9  ************************************************************************ */
 10  
 11  #include "conf.h"
 12  #include "sysdep.h"
 13  
 14  #include "structs.h"
 15  #include "db.h"
 16  #include "interpreter.h"
 17  #include "utils.h"
 18  
 19  
 20  /* external globals */
 21  extern int dts_are_dumps;
 22  extern int mini_mud;
 23  
 24  /* external functions */
 25  SPECIAL(dump);
 26  SPECIAL(pet_shops);
 27  SPECIAL(postmaster);
 28  SPECIAL(cityguard);
 29  SPECIAL(receptionist);
 30  SPECIAL(cryogenicist);
 31  SPECIAL(guild_guard);
 32  SPECIAL(guild);
 33  SPECIAL(puff);
 34  SPECIAL(fido);
 35  SPECIAL(janitor);
 36  SPECIAL(mayor);
 37  SPECIAL(snake);
 38  SPECIAL(thief);
 39  SPECIAL(magic_user);
 40  SPECIAL(bank);
 41  SPECIAL(gen_board);
 42  void assign_kings_castle(void);
 43  
 44  /* local functions */
 45  void assign_mobiles(void);
 46  void assign_objects(void);
 47  void assign_rooms(void);
 48  void ASSIGNROOM(room_vnum room, SPECIAL(fname));
 49  void ASSIGNMOB(mob_vnum mob, SPECIAL(fname));
 50  void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname));
 51  
 52  /* functions to perform assignments */
 53  
 54  void ASSIGNMOB(mob_vnum mob, SPECIAL(fname))
 55  {
 56    mob_rnum rnum;
 57  
 58    if ((rnum = real_mobile(mob)) != NOBODY)
 59      mob_index[rnum].func = fname;
 60    else if (!mini_mud)
 61      log("SYSERR: Attempt to assign spec to non-existant mob #%d", mob);
 62  }
 63  
 64  void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname))
 65  {
 66    obj_rnum rnum;
 67  
 68    if ((rnum = real_object(obj)) != NOTHING)
 69      obj_index[rnum].func = fname;
 70    else if (!mini_mud)
 71      log("SYSERR: Attempt to assign spec to non-existant obj #%d", obj);
 72  }
 73  
 74  void ASSIGNROOM(room_vnum room, SPECIAL(fname))
 75  {
 76    room_rnum rnum;
 77  
 78    if ((rnum = real_room(room)) != NOWHERE)
 79      world[rnum].func = fname;
 80    else if (!mini_mud)
 81      log("SYSERR: Attempt to assign spec to non-existant room #%d", room);
 82  }
 83  
 84  
 85  /* ********************************************************************
 86  *  Assignments                                                        *
 87  ******************************************************************** */
 88  
 89  /* assign special procedures to mobiles */
 90  void assign_mobiles(void)
 91  {
 92    assign_kings_castle();
 93  
 94    ASSIGNMOB(1, puff);
 95  
 96    /* Immortal Zone */
 97    ASSIGNMOB(1200, receptionist);
 98    ASSIGNMOB(1201, postmaster);
 99    ASSIGNMOB(1202, janitor);
100  
101    /* Midgaard */
102    ASSIGNMOB(3005, receptionist);
103    ASSIGNMOB(3010, postmaster);
104    ASSIGNMOB(3020, guild);
105    ASSIGNMOB(3021, guild);
106    ASSIGNMOB(3022, guild);
107    ASSIGNMOB(3023, guild);
108    ASSIGNMOB(3024, guild_guard);
109    ASSIGNMOB(3025, guild_guard);
110    ASSIGNMOB(3026, guild_guard);
111    ASSIGNMOB(3027, guild_guard);
112    ASSIGNMOB(3059, cityguard);
113    ASSIGNMOB(3060, cityguard);
114    ASSIGNMOB(3061, janitor);
115    ASSIGNMOB(3062, fido);
116    ASSIGNMOB(3066, fido);
117    ASSIGNMOB(3067, cityguard);
118    ASSIGNMOB(3068, janitor);
119    ASSIGNMOB(3095, cryogenicist);
120    ASSIGNMOB(3105, mayor);
121  
122    /* MORIA */
123    ASSIGNMOB(4000, snake);
124    ASSIGNMOB(4001, snake);
125    ASSIGNMOB(4053, snake);
126    ASSIGNMOB(4100, magic_user);
127    ASSIGNMOB(4102, snake);
128    ASSIGNMOB(4103, thief);
129  
130    /* Redferne's */
131    ASSIGNMOB(7900, cityguard);
132  
133    /* PYRAMID */
134    ASSIGNMOB(5300, snake);
135    ASSIGNMOB(5301, snake);
136    ASSIGNMOB(5304, thief);
137    ASSIGNMOB(5305, thief);
138    ASSIGNMOB(5309, magic_user); /* should breath fire */
139    ASSIGNMOB(5311, magic_user);
140    ASSIGNMOB(5313, magic_user); /* should be a cleric */
141    ASSIGNMOB(5314, magic_user); /* should be a cleric */
142    ASSIGNMOB(5315, magic_user); /* should be a cleric */
143    ASSIGNMOB(5316, magic_user); /* should be a cleric */
144    ASSIGNMOB(5317, magic_user);
145  
146    /* High Tower Of Sorcery */
147    ASSIGNMOB(2501, magic_user); /* should likely be cleric */
148    ASSIGNMOB(2504, magic_user);
149    ASSIGNMOB(2507, magic_user);
150    ASSIGNMOB(2508, magic_user);
151    ASSIGNMOB(2510, magic_user);
152    ASSIGNMOB(2511, thief);
153    ASSIGNMOB(2514, magic_user);
154    ASSIGNMOB(2515, magic_user);
155    ASSIGNMOB(2516, magic_user);
156    ASSIGNMOB(2517, magic_user);
157    ASSIGNMOB(2518, magic_user);
158    ASSIGNMOB(2520, magic_user);
159    ASSIGNMOB(2521, magic_user);
160    ASSIGNMOB(2522, magic_user);
161    ASSIGNMOB(2523, magic_user);
162    ASSIGNMOB(2524, magic_user);
163    ASSIGNMOB(2525, magic_user);
164    ASSIGNMOB(2526, magic_user);
165    ASSIGNMOB(2527, magic_user);
166    ASSIGNMOB(2528, magic_user);
167    ASSIGNMOB(2529, magic_user);
168    ASSIGNMOB(2530, magic_user);
169    ASSIGNMOB(2531, magic_user);
170    ASSIGNMOB(2532, magic_user);
171    ASSIGNMOB(2533, magic_user);
172    ASSIGNMOB(2534, magic_user);
173    ASSIGNMOB(2536, magic_user);
174    ASSIGNMOB(2537, magic_user);
175    ASSIGNMOB(2538, magic_user);
176    ASSIGNMOB(2540, magic_user);
177    ASSIGNMOB(2541, magic_user);
178    ASSIGNMOB(2548, magic_user);
179    ASSIGNMOB(2549, magic_user);
180    ASSIGNMOB(2552, magic_user);
181    ASSIGNMOB(2553, magic_user);
182    ASSIGNMOB(2554, magic_user);
183    ASSIGNMOB(2556, magic_user);
184    ASSIGNMOB(2557, magic_user);
185    ASSIGNMOB(2559, magic_user);
186    ASSIGNMOB(2560, magic_user);
187    ASSIGNMOB(2562, magic_user);
188    ASSIGNMOB(2564, magic_user);
189  
190    /* SEWERS */
191    ASSIGNMOB(7006, snake);
192    ASSIGNMOB(7009, magic_user);
193    ASSIGNMOB(7200, magic_user);
194    ASSIGNMOB(7201, magic_user);
195    ASSIGNMOB(7202, magic_user);
196  
197    /* FOREST */
198    ASSIGNMOB(6112, magic_user);
199    ASSIGNMOB(6113, snake);
200    ASSIGNMOB(6114, magic_user);
201    ASSIGNMOB(6115, magic_user);
202    ASSIGNMOB(6116, magic_user); /* should be a cleric */
203    ASSIGNMOB(6117, magic_user);
204  
205    /* ARACHNOS */
206    ASSIGNMOB(6302, magic_user);
207    ASSIGNMOB(6309, magic_user);
208    ASSIGNMOB(6312, magic_user);
209    ASSIGNMOB(6314, magic_user);
210    ASSIGNMOB(6315, magic_user);
211  
212    /* Desert */
213    ASSIGNMOB(5004, magic_user);
214    ASSIGNMOB(5005, guild_guard); /* brass dragon */
215    ASSIGNMOB(5010, magic_user);
216    ASSIGNMOB(5014, magic_user);
217  
218    /* Drow City */
219    ASSIGNMOB(5103, magic_user);
220    ASSIGNMOB(5104, magic_user);
221    ASSIGNMOB(5107, magic_user);
222    ASSIGNMOB(5108, magic_user);
223  
224    /* Old Thalos */
225    ASSIGNMOB(5200, magic_user);
226    ASSIGNMOB(5201, magic_user);
227    ASSIGNMOB(5209, magic_user);
228  
229    /* New Thalos */
230  /* 5481 - Cleric (or Mage... but he IS a high priest... *shrug*) */
231    ASSIGNMOB(5404, receptionist);
232    ASSIGNMOB(5421, magic_user);
233    ASSIGNMOB(5422, magic_user);
234    ASSIGNMOB(5423, magic_user);
235    ASSIGNMOB(5424, magic_user);
236    ASSIGNMOB(5425, magic_user);
237    ASSIGNMOB(5426, magic_user);
238    ASSIGNMOB(5427, magic_user);
239    ASSIGNMOB(5428, magic_user);
240    ASSIGNMOB(5434, cityguard);
241    ASSIGNMOB(5440, magic_user);
242    ASSIGNMOB(5455, magic_user);
243    ASSIGNMOB(5461, cityguard);
244    ASSIGNMOB(5462, cityguard);
245    ASSIGNMOB(5463, cityguard);
246    ASSIGNMOB(5482, cityguard);
247  /*
248  5400 - Guildmaster (Mage)
249  5401 - Guildmaster (Cleric)
250  5402 - Guildmaster (Warrior)
251  5403 - Guildmaster (Thief)
252  5456 - Guildguard (Mage)
253  5457 - Guildguard (Cleric)
254  5458 - Guildguard (Warrior)
255  5459 - Guildguard (Thief)
256  */
257  
258    /* ROME */
259    ASSIGNMOB(12009, magic_user);
260    ASSIGNMOB(12018, cityguard);
261    ASSIGNMOB(12020, magic_user);
262    ASSIGNMOB(12021, cityguard);
263    ASSIGNMOB(12025, magic_user);
264    ASSIGNMOB(12030, magic_user);
265    ASSIGNMOB(12031, magic_user);
266    ASSIGNMOB(12032, magic_user);
267  
268    /* King Welmar's Castle (not covered in castle.c) */
269    ASSIGNMOB(15015, thief);      /* Ergan... have a better idea? */
270    ASSIGNMOB(15032, magic_user); /* Pit Fiend, have something better?  Use it */
271  
272    /* DWARVEN KINGDOM */
273    ASSIGNMOB(6500, cityguard);
274    ASSIGNMOB(6502, magic_user);
275    ASSIGNMOB(6509, magic_user);
276    ASSIGNMOB(6516, magic_user);
277  }
278  
279  
280  
281  /* assign special procedures to objects */
282  void assign_objects(void)
283  {
284    ASSIGNOBJ(3096, gen_board);	/* social board */
285    ASSIGNOBJ(3097, gen_board);	/* freeze board */
286    ASSIGNOBJ(3098, gen_board);	/* immortal board */
287    ASSIGNOBJ(3099, gen_board);	/* mortal board */
288  
289    ASSIGNOBJ(3034, bank);	/* atm */
290    ASSIGNOBJ(3036, bank);	/* cashcard */
291  }
292  
293  
294  
295  /* assign special procedures to rooms */
296  void assign_rooms(void)
297  {
298    room_rnum i;
299  
300    ASSIGNROOM(3030, dump);
301    ASSIGNROOM(3031, pet_shops);
302  
303    if (dts_are_dumps)
304      for (i = 0; i <= top_of_world; i++)
305        if (ROOM_FLAGGED(i, ROOM_DEATH))
306  	world[i].func = dump;
307  }