diff -uprN -x *.o ./stock12/src/act.wizard.c ./spec12/src/act.wizard.c
--- ./stock12/src/act.wizard.c	Tue Oct 28 22:16:22 1997
+++ ./spec12/src/act.wizard.c	Fri Nov 14 10:32:25 1997
@@ -68,7 +68,6 @@ extern char *connected_types[];
 /* extern functions */
 int level_exp(int class, int level);
 
-
 ACMD(do_echo)
 {
   skip_spaces(&argument);
@@ -329,7 +328,6 @@ ACMD(do_vnum)
 }
 
 
-
 void do_stat_room(struct char_data * ch)
 {
   struct extra_descr_data *desc;
@@ -350,7 +348,7 @@ void do_stat_room(struct char_data * ch)
 
   sprintbit((long) rm->room_flags, room_bits, buf2);
   sprintf(buf, "SpecProc: %s, Flags: %s\r\n",
-	  (rm->func == NULL) ? "None" : "Exists", buf2);
+	  (rm->func ? lookup_special_name(rm->func) : "None"), buf2);
   send_to_char(buf, ch);
 
   send_to_char("Description:\r\n", ch);
@@ -431,7 +429,6 @@ void do_stat_room(struct char_data * ch)
 }
 
 
-
 void do_stat_object(struct char_data * ch, struct obj_data * j)
 {
   int i, virtual, found;
@@ -445,7 +442,8 @@ void do_stat_object(struct char_data * c
   send_to_char(buf, ch);
   sprinttype(GET_OBJ_TYPE(j), item_types, buf1);
   if (GET_OBJ_RNUM(j) >= 0)
-    strcpy(buf2, (obj_index[GET_OBJ_RNUM(j)].func ? "Exists" : "None"));
+    strcpy(buf2, (obj_index[GET_OBJ_RNUM(j)].func ? 
+                  lookup_special_name(obj_index[GET_OBJ_RNUM(j)].func) : "None"));
   else
     strcpy(buf2, "None");
   sprintf(buf, "VNum: [%s%5d%s], RNum: [%5d], Type: %s, SpecProc: %s\r\n",
@@ -726,7 +724,8 @@ void do_stat_character(struct char_data 
 
   if (IS_MOB(k)) {
     sprintf(buf, "Mob Spec-Proc: %s, NPC Bare Hand Dam: %dd%d\r\n",
-	    (mob_index[GET_MOB_RNUM(k)].func ? "Exists" : "None"),
+	    (mob_index[GET_MOB_RNUM(k)].func ? 
+             lookup_special_name(mob_index[GET_MOB_RNUM(k)].func) : "None"),
 	    k->mob_specials.damnodice, k->mob_specials.damsizedice);
     send_to_char(buf, ch);
   }
diff -uprN -x *.o ./stock12/src/constants.c ./spec12/src/constants.c
--- ./stock12/src/constants.c	Tue Oct 28 22:16:24 1997
+++ ./spec12/src/constants.c	Fri Nov 14 10:36:39 1997
@@ -818,4 +818,3 @@ const char *month_name[] = {
   "Month of the Ancient Darkness",
   "Month of the Great Evil"
 };
-
diff -uprN -x *.o ./stock12/src/handler.c ./spec12/src/handler.c
--- ./stock12/src/handler.c	Tue Oct 28 22:16:25 1997
+++ ./spec12/src/handler.c	Fri Nov 14 10:37:43 1997
@@ -1212,3 +1212,15 @@ int find_all_dots(char *arg)
   } else
     return FIND_INDIV;
 }
+
+char *lookup_special_name(SPECIAL(*func))
+{
+  extern struct specials mob_specials[];
+  int i;
+
+  for (i = 0; *mob_specials[i].name != '\n'; i++)
+    if (mob_specials[i].func == func)
+      return mob_specials[i].name;
+
+  return "Unknown";
+}
diff -uprN -x *.o ./stock12/src/handler.h ./spec12/src/handler.h
--- ./stock12/src/handler.h	Tue Oct 28 22:16:26 1997
+++ ./spec12/src/handler.h	Fri Nov 14 10:22:27 1997
@@ -25,6 +25,7 @@ struct obj_data *create_money(int amount
 int	isname(char *str, char *namelist);
 char	*fname(char *namelist);
 int	get_number(char **name);
+char	*lookup_special_name(SPECIAL(*func));
 
 /* ******** objects *********** */
 
diff -uprN -x *.o ./stock12/src/spec_assign.c ./spec12/src/spec_assign.c
--- ./stock12/src/spec_assign.c	Fri Apr 12 21:39:22 1996
+++ ./spec12/src/spec_assign.c	Fri Nov 14 10:43:02 1997
@@ -294,7 +294,6 @@ void assign_rooms(void)
 
   SPECIAL(dump);
   SPECIAL(pet_shops);
-  SPECIAL(pray_for_items);
 
   ASSIGNROOM(3030, dump);
   ASSIGNROOM(3031, pet_shops);
diff -uprN -x *.o ./stock12/src/spec_procs.c ./spec12/src/spec_procs.c
--- ./stock12/src/spec_procs.c	Fri Apr 12 21:39:22 1996
+++ ./spec12/src/spec_procs.c	Fri Nov 14 10:44:07 1997
@@ -725,3 +725,63 @@ SPECIAL(bank)
     return 0;
 }
 
+/* Have to prototype the SPECIALs that are declared in other files here. */
+
+SPECIAL(postmaster);
+SPECIAL(receptionist);
+SPECIAL(cryogenicist);
+SPECIAL(gen_board);
+SPECIAL(CastleGuard);
+SPECIAL(James);
+SPECIAL(DicknDavid);
+SPECIAL(tim);
+SPECIAL(tom);
+SPECIAL(king_welmar);
+SPECIAL(training_master);
+SPECIAL(peter);
+SPECIAL(jerry);
+
+
+/*
+JTE 11-14-97 <evansj@hi-line.net>
+Order does not matter. You can alphabetize this list, group all the mobs at
+the top, stick them in randomly or whatever. The last line in the list MUST remain:
+{ "\n", NULL }
+*/
+
+struct specials mob_specials[] = {
+        /* Mob specials */
+  { "Postmaster", postmaster },
+  { "CityGuard", cityguard },
+  { "Receptionist", receptionist },
+  { "Cryogenicist", cryogenicist },
+  { "Guild Guard", guild_guard },
+  { "Guild", guild },
+  { "Puff", puff },
+  { "Fido", fido },
+  { "Janitor", janitor },
+  { "Mayor", mayor },
+  { "Snake", snake },
+  { "Thief", thief },
+  { "Magic User", magic_user },
+
+        /* Obj specials */
+  { "Bank", bank },
+  { "Generic Board", gen_board },
+
+        /* Room specials */
+  { "Dump", dump },
+  { "Pet Shops", pet_shops },
+
+        /* Specials from castle.c */
+  { "Castle Guard", CastleGuard },
+  { "James", James },
+  { "Dick and David", DicknDavid },
+  { "Tim", tim },
+  { "Tom", tom },
+  { "King Welmar", king_welmar },
+  { "Training Master", training_master },
+  { "Peter", peter },
+  { "Jerry", jerry },
+  { "\n", NULL }        /* This one MUST be last */
+};
diff -uprN -x *.o ./stock12/src/structs.h ./spec12/src/structs.h
--- ./stock12/src/structs.h	Tue Oct 28 22:16:29 1997
+++ ./spec12/src/structs.h	Fri Nov 14 10:15:15 1997
@@ -1007,3 +1007,8 @@ struct index_data {
    int	number;     /* number of existing units of this mob/obj	*/
    SPECIAL(*func);
 };
+
+struct specials {
+  char *name;
+  SPECIAL(*func);
+};
