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 }