diff -BbuprN -x '*.o' src/srcbak/act.wizard.c src/src/act.wizard.c
--- src/srcbak/act.wizard.c	2004-10-03 13:17:09.000000000 -0400
+++ src/src/act.wizard.c	2004-10-02 17:01:02.000000000 -0400
@@ -532,7 +533,7 @@ void list_zone_commands_room(struct char
 
 void do_stat_room(struct char_data *ch, room_rnum location)
 {
-  char buf2[MAX_STRING_LENGTH];
+  char buf2[MAX_STRING_LENGTH], buf[MAX_STRING_LENGTH];
   struct extra_descr_data *desc;
   struct room_data *rm;
   int i, found, column;
@@ -554,6 +555,9 @@ void do_stat_room(struct char_data *ch, 
   sprintbitarray(rm->room_flags, room_bits, RF_ARRAY_MAX, buf2);
   send_to_char(ch, "SpecProc: %s, Flags: %s\r\n", rm->func == NULL ? "None" : "Exists", buf2);
 
+  sprintbitarray(rm->spells, spell_list, SP_ARRAY_MAX, buf);
+  send_to_char(ch, "Room has these Anti-spell affects: [%s%s%s]\r\n", CCGRN(ch, C_NRM), buf, CCNRM(ch, C_NRM));
+
   send_to_char(ch, "Description:\r\n%s", rm->description ? rm->description : "  None.\r\n");
 
   if (rm->ex_description) {
diff -BbuprN -x '*.o' src/srcbak/constants.c src/src/constants.c
--- src/srcbak/constants.c	2004-10-02 16:45:05.000000000 -0400
+++ src/src/constants.c	2004-10-02 17:06:51.000000000 -0400
@@ -362,6 +362,133 @@ const char *connected_types[] = {
 };
 
 
+const char *spell_list[] = {
+  "Reserved",
+  "Armor",
+  "Teleport",
+  "Bless",
+  "Blindness",
+  "Burning_hands",
+  "Call_lightning",
+  "Charm",
+  "Chill_touch",
+  "Clone",
+  "Color_spray",
+  "Control_weather",
+  "Create_food",
+  "Create_water",
+  "Cure_blind",
+  "Cure_critic",
+  "Cure_light",
+  "Curse",
+  "Detect_align",
+  "Detect_invis",
+  "Detect_magic",
+  "Detect_poison",
+  "Dispel_evil",
+  "Earthquake",
+  "Enchant_weapon",
+  "Energy_drain",
+  "Fireball",
+  "Harm",
+  "Heal",
+  "Invisible",
+  "Lightning_bolt",
+  "Locate_object",
+  "Magic_missile",
+  "Poison",
+  "Prot_from_evil",
+  "Remove_Curse",
+  "Sanctuary",
+  "Shocking_grasp",
+  "Sleep",
+  "Strength",
+  "Summon",
+  "Ventriloquate",
+  "Word_of_recall",
+  "Remove_poison",
+  "Sense_life",
+  "Animate_dead",
+  "Dispel_good",
+  "Group_armor",
+  "Group_heal",
+  "Group_recall",
+  "Infravision",
+  "Waterwalk",
+  "Portal",
+  "Paralize",
+  "Cause_light",
+  "Cause_critic",
+  "Identify",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Unused",
+  "Backstab",
+  "Bash",
+  "Hide",
+  "Kick",
+  "Pick_lock",
+  "Lay_hands",
+  "Rescue",
+  "Sneak",
+  "Steal",
+  "Track",
+  "Disarm",
+  "Turning",
+  "\n"
+};
+
+
 /*
  * WEAR_x - for eq list
  * Not use in sprinttype() so no \n.
diff -BbuprN -x '*.o' src/srcbak/constants.h src/src/constants.h
--- src/srcbak/constants.h	2004-10-02 16:45:05.000000000 -0400
+++ src/src/constants.h	2004-10-02 16:51:51.000000000 -0400
@@ -6,6 +6,7 @@ extern const char *abbr_dirs[];
 extern const char *room_bits[];
 extern const char *exit_bits[];
 extern const char *sector_types[];
+extern const char *spell_list[];
 extern const char *genders[];
 extern const char *position_types[];
 extern const char *player_bits[];
diff -BbuprN -x '*.o' src/srcbak/db.c src/src/db.c
--- src/srcbak/db.c	2004-10-03 13:25:24.000000000 -0400
+++ src/src/db.c	2004-10-02 17:02:13.000000000 -0400
@@ -1073,7 +1073,7 @@ void parse_room(FILE *fl, int virtual_nr
   int t[10], i, retval;
   char line[READ_SIZE], flags[128], flags2[128], flags3[128];
   char flags4[128], buf2[MAX_STRING_LENGTH], buf[128];
-  struct extra_descr_data *new_descr;
+  char flags5[READ_SIZE], flags6[READ_SIZE], flags7[READ_SIZE], flags8[READ_SIZE];  struct extra_descr_data *new_descr;
   char letter;
 
   /* This really had better fit or there are other problems. */
@@ -1099,7 +1099,7 @@ void parse_room(FILE *fl, int virtual_nr
     exit(1);
   }
  
-  if (((retval = sscanf(line, " %d %s %s %s %s %d ", t, flags, flags2, flags3, flags4, t + 2)) == 3) && (bitwarning == TRUE)) {
+  if (((retval = sscanf(line, " %d %s %s %s %s %d %d %d %d %d ", t, flags, flags2, flags3, flags4, t + 2, t + 3, t + 4, t + 5, t + 6)) == 3) && (bitwarning == TRUE)) {
     log("WARNING: Conventional worldfiles detected. Please read 128bit.readme.");
     exit(1);
   } else if ((retval == 3) && (bitwarning == FALSE)) {
@@ -1138,6 +1138,20 @@ void parse_room(FILE *fl, int virtual_nr
   world[room_nr].room_flags[3] = asciiflag_conv(flags4);
 
   world[room_nr].sector_type = t[2];
+
+  sprintf(flags, "object #%d", virtual_nr);	/* sprintf: OK (until 399-bit integers) */
+  for(taeller=0; taeller < AF_ARRAY_MAX; taeller++) 
+    check_bitvector_names(world[room_nr].room_flags[taeller], room_bits_count, flags, "room");
+ } else if (retval == 10) {
+    int taeller;
+
+  world[room_nr].room_flags[0] = asciiflag_conv(flags);
+  world[room_nr].room_flags[1] = asciiflag_conv(flags2);
+  world[room_nr].room_flags[2] = asciiflag_conv(flags3);
+  world[room_nr].room_flags[3] = asciiflag_conv(flags4);
+
+  world[room_nr].sector_type = t[2];
+
   sprintf(flags, "object #%d", virtual_nr);	/* sprintf: OK (until 399-bit integers) */
   for(taeller=0; taeller < AF_ARRAY_MAX; taeller++) 
     check_bitvector_names(world[room_nr].room_flags[taeller], room_bits_count, flags, "room");
@@ -1165,6 +1179,25 @@ void parse_room(FILE *fl, int virtual_nr
       exit(1);
     }
     switch (*line) {
+    case 'A':
+    if (!get_line(fl, line)) {
+      log("SYSERR: Expecting Anti_room_flags in room #%d but file ended!",
+	virtual_nr);
+      exit(1);
+    }
+    if ((retval = sscanf(line, "%s %s %s %s %s %s %s %s", flags, flags2, flags3, flags4, flags5, flags6, flags7, flags8)) != 8) { 
+      log("SYSERR: Format error in Anti_room_flags of room #%d Number count %d", virtual_nr, retval);
+      exit(1);
+    }
+     world[room_nr].spells[0]              = asciiflag_conv(flags); 
+     world[room_nr].spells[1]              = asciiflag_conv(flags2); 
+     world[room_nr].spells[2]              = asciiflag_conv(flags3); 
+     world[room_nr].spells[3]              = asciiflag_conv(flags4); 
+     world[room_nr].spells[4]              = asciiflag_conv(flags5); 
+     world[room_nr].spells[5]              = asciiflag_conv(flags6); 
+     world[room_nr].spells[6]              = asciiflag_conv(flags7); 
+     world[room_nr].spells[7]              = asciiflag_conv(flags8); 
+     break;
     case 'D':
       setup_dir(fl, room_nr, atoi(line + 1));
       break;
diff -BbuprN -x '*.o' src/srcbak/genwld.c src/src/genwld.c
--- src/srcbak/genwld.c	2004-10-03 13:25:55.000000000 -0400
+++ src/src/genwld.c	2004-10-02 16:53:54.000000000 -0400
@@ -295,6 +295,8 @@ int save_rooms(zone_rnum rzone)
   char buf[MAX_STRING_LENGTH], buf1[MAX_STRING_LENGTH];
   char rbuf1[MAX_STRING_LENGTH], rbuf2[MAX_STRING_LENGTH];
   char rbuf3[MAX_STRING_LENGTH], rbuf4[MAX_STRING_LENGTH];
+  char rbuf5[MAX_STRING_LENGTH], rbuf6[MAX_STRING_LENGTH];
+  char rbuf7[MAX_STRING_LENGTH], rbuf8[MAX_STRING_LENGTH];
 
 #if CIRCLE_UNSIGNED_INDEX
   if (rzone == NOWHERE || rzone > top_of_zone_table) {
@@ -403,6 +405,21 @@ int save_rooms(zone_rnum rzone)
 			"%s~\n", xdesc->keyword, buf);
 	}
       }
+
+  /* if Room anti spell exists write out all existing values */
+      sprintascii(rbuf1, room->spells[0]);
+      sprintascii(rbuf2, room->spells[1]);
+      sprintascii(rbuf3, room->spells[2]);
+      sprintascii(rbuf4, room->spells[3]);
+      sprintascii(rbuf5, room->spells[4]);
+      sprintascii(rbuf6, room->spells[5]);
+      sprintascii(rbuf7, room->spells[6]);
+      sprintascii(rbuf8, room->spells[7]);
+      fprintf(sf, 	"A\n"
+                        "%s %s %s %s %s %s %s %s\n",
+                        rbuf1, rbuf2, rbuf3, rbuf4, rbuf5, rbuf6, rbuf7, rbuf8);
+
+
       fprintf(sf, "S\n");
       script_save_to_disk(sf, room, WLD_TRIGGER);
     }
diff -BbuprN -x '*.o' src/srcbak/oasis.h src/src/oasis.h
--- src/srcbak/oasis.h	2004-10-03 13:20:39.000000000 -0400
+++ src/src/oasis.h	2004-10-02 16:58:26.000000000 -0400
@@ -278,6 +278,8 @@ extern const char *nrm, *grn, *cyn, *yel
 #define REDIT_EXTRADESC_KEY 		15
 #define REDIT_EXTRADESC_DESCRIPTION 	16
 #define REDIT_DELETE			17
+#define REDIT_ANTI_SPELLS               18
+
 
 /*
  * Submodes of ZEDIT connectedness.
@@ -528,6 +530,7 @@ void redit_disp_sector_menu(struct descr
 void redit_disp_menu(struct descriptor_data *d);
 void redit_parse(struct descriptor_data *d, char *arg);
 void free_room(struct room_data *room);
+void redit_disp_spell_menu(struct descriptor_data *d);
 ACMD(do_oasis_redit);
 
 void sedit_setup_new(struct descriptor_data *d);
diff -BbuprN -x '*.o' src/srcbak/redit.c src/src/redit.c
--- src/srcbak/redit.c	2004-10-03 13:16:47.000000000 -0400
+++ src/src/redit.c	2004-10-02 17:03:14.000000000 -0400
@@ -36,6 +36,7 @@ extern const char *sector_types[];
 extern const char *exit_bits[];
 extern struct zone_data *zone_table;
 extern struct descriptor_data *descriptor_list;
+extern struct spell_info_type spell_info[];
 
 /*------------------------------------------------------------------------*/
 
@@ -417,6 +418,25 @@ void redit_disp_exit_flag_menu(struct de
   OLC_MODE(d) = REDIT_EXIT_DOORFLAGS;
 }
 
+void redit_disp_spell_menu(struct descriptor_data *d)
+{
+  int counter, columns = 0;
+  char buf[MAX_STRING_LENGTH];
+  
+  get_char_colors(d->character);
+  clear_screen(d);
+
+  for (counter = 1; counter < MAX_CUR_SKILLS; counter++) {
+    write_to_output(d, "%s%2d%s) %s%-20.20s %s", grn, counter + 1, nrm, yel,
+		spell_info[counter].name, !(++columns % 3) ? "\r\n" : "");
+  }
+  
+  sprintbitarray(OLC_ROOM(d)->spells, spell_list, SP_ARRAY_MAX, buf);
+  write_to_output(d, "\r\nAnti spells assigned: &R%s&n\r\n"
+          "Enter spell choice (0 to exit) : ", buf);
+  OLC_MODE(d) = REDIT_ANTI_SPELLS;
+}
+
 
 /*
  * For room flags.
@@ -459,6 +479,7 @@ void redit_disp_sector_menu(struct descr
  */
 void redit_disp_menu(struct descriptor_data *d)
 {
+  char buf[MAX_STRING_LENGTH];
   char buf1[MAX_STRING_LENGTH];
   char buf2[MAX_STRING_LENGTH];
   struct room_data *room;
@@ -467,6 +488,7 @@ void redit_disp_menu(struct descriptor_d
   clear_screen(d);
   room = OLC_ROOM(d);
 
+  sprintbitarray(room->spells, spell_list, SP_ARRAY_MAX, buf);  
   sprintbitarray(room->room_flags, room_bits, RF_ARRAY_MAX, buf1);
   sprinttype(room->sector_type, sector_types, buf2, sizeof(buf2));
   write_to_output(d,
@@ -484,7 +506,6 @@ void redit_disp_menu(struct descriptor_d
 	  "%sH%s) Extra descriptions menu\r\n"
 	  "%sX%s) Delete Room\r\n"
 	  "%sS%s) Script      : %s%s\r\n"
-	  "%sQ%s) Quit\r\n"
 	  "Enter choice : ",
 
 	  cyn, OLC_NUM(d), nrm,
@@ -532,9 +553,15 @@ void redit_disp_menu(struct descriptor_d
 	  grn, nrm,
           grn, nrm,
           grn, nrm, cyn, OLC_SCRIPT(d) ? "Set." : "Not Set."
-          grn, nrm 
 	  );
 
+  write_to_output(d,
+          "%sV%s) Change anti_room_spells : %s%s%s\r\n"     
+	  "%sQ%s) Quit\r\n"
+	  "Enter choice : ",
+ 	  grn, nrm, grn, buf, nrm,          
+          grn, nrm 
+	  );
 
   OLC_MODE(d) = REDIT_MAIN_MENU;
 }
@@ -690,6 +717,11 @@ void redit_parse(struct descriptor_data 
       dg_script_menu(d);
       return;
 
+    case 'v':
+    case 'V':
+      redit_disp_spell_menu(d);
+      break;
+
     default:
       write_to_output(d, "Invalid choice!");
       redit_disp_menu(d);
@@ -735,6 +767,20 @@ void redit_parse(struct descriptor_data 
     }
     return;
 
+  case REDIT_ANTI_SPELLS:
+    number = atoi(arg);
+    if (number < 0 || number > MAX_SKILLS) {
+      write_to_output(d, "That is not a valid choice!\r\n");
+      redit_disp_spell_menu(d);
+    } else if (number == 0)
+      break;
+    else {
+     TOGGLE_BIT_AR(OLC_ROOM(d)->spells, number - 1);
+     redit_disp_spell_menu(d);
+    }
+    return;
+
+
   case REDIT_SECTOR:
     number = atoi(arg);
     if (number < 0 || number >= NUM_ROOM_SECTORS) {
diff -BbuprN -x '*.o' src/srcbak/spell_parser.c src/src/spell_parser.c
--- src/srcbak/spell_parser.c	2004-10-03 13:14:14.000000000 -0400
+++ src/src/spell_parser.c	2004-10-02 17:27:18.000000000 -0400
@@ -230,6 +230,12 @@ int call_magic(struct char_data *caster,
     return (0);
   }
   
+  if (ROOM_ANTISPELL(IN_ROOM(caster), spellnum)) {
+    send_to_char(caster, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, caster, 0, 0, TO_ROOM);
+    return (0);
+  }      
+
 
   /* determine the type of saving throw */
   switch (casttype) {
diff -BbuprN -x '*.o' src/srcbak/spells.c src/src/spells.c
--- src/srcbak/spells.c	2004-10-03 13:13:45.000000000 -0400
+++ src/src/spells.c	2004-10-02 17:20:18.000000000 -0400
@@ -47,6 +47,12 @@ ASPELL(spell_create_water)
     return;
   /* level = MAX(MIN(level, LVL_IMPL), 1);	 - not used */
 
+  if (ROOM_ANTISPELL(IN_ROOM(victim), SPELL_WORD_OF_RECALL)) {
+    send_to_char(victim, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, victim, 0, 0, TO_ROOM);
+    return;
+  }
+
   if (GET_OBJ_TYPE(obj) == ITEM_DRINKCON) {
     if ((GET_OBJ_VAL(obj, 2) != LIQ_WATER) && (GET_OBJ_VAL(obj, 1) != 0)) {
       name_from_drinkcon(obj);
@@ -73,6 +79,12 @@ ASPELL(spell_recall)
   if (victim == NULL || IS_NPC(victim))
     return;
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_TELEPORT)) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+
   act("$n disappears.", TRUE, victim, 0, 0, TO_ROOM);
   char_from_room(victim);
   char_to_room(victim, real_room(CONFIG_MORTAL_START));
@@ -91,6 +103,12 @@ ASPELL(spell_teleport)
   if (victim == NULL || IS_NPC(victim))
     return;
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_SUMMON)) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+
   do {
     to_room = rand_number(0, top_of_world);
   } while (ROOM_FLAGGED(to_room, ROOM_PRIVATE | ROOM_DEATH | ROOM_GODROOM));
@@ -119,6 +137,12 @@ ASPELL(spell_summon)
     return;
   }
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), 0) == SPELL_SUMMON || ROOM_ANTISPELL(IN_ROOM(ch), 1) == SPELL_SUMMON ||
+      ROOM_ANTISPELL(IN_ROOM(ch), 2) == SPELL_SUMMON || ROOM_ANTISPELL(IN_ROOM(ch), 3) == SPELL_SUMMON) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
 
   if (!CONFIG_PK_ALLOWED) {
     if (MOB_FLAGGED(victim, MOB_AGGRESSIVE)) {
@@ -181,6 +205,12 @@ ASPELL(spell_locate_object)
     return;
   }
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_LOCATE_OBJECT)) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+
   strlcpy(name, fname(obj->name), sizeof(name));
   j = level / 2;
 
@@ -217,6 +247,11 @@ ASPELL(spell_charm)
   if (victim == NULL || ch == NULL)
     return;
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_CHARM)){
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
 
   if (victim == ch)
     send_to_char(ch, "You like yourself even better!\r\n");
@@ -270,6 +305,13 @@ ASPELL(spell_identify)
   size_t len;
 
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_IDENTIFY)) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+
+  
   if (obj) {
     char bitbuf[MAX_STRING_LENGTH];
 
@@ -366,6 +408,12 @@ ASPELL(spell_enchant_weapon)
     return;
 
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_ENCHANT_WEAPON)) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+  
   /* Either already enchanted or not a weapon. */
   if (GET_OBJ_TYPE(obj) != ITEM_WEAPON || OBJ_FLAGGED(obj, ITEM_MAGIC))
     return;
@@ -406,6 +454,12 @@ ASPELL(spell_enchant_weapon)
 
 ASPELL(spell_detect_poison)
 {
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_DETECT_POISON)){
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+
   if (victim) {
     if (victim == ch) {
       if (AFF_FLAGGED(victim, AFF_POISON))
@@ -447,6 +501,12 @@ ASPELL(spell_portal)
     return;
 
 
+  if (ROOM_ANTISPELL(IN_ROOM(ch), SPELL_PORTAL)) {
+    send_to_char(ch, "The room seems to absorb your magic!\r\n");
+    act("The room absorbes $n's magic spell!", FALSE, ch, 0, 0, TO_ROOM);
+    return;
+  }
+
   if (ZONE_FLAGGED(rm->zone,  ZONE_QUEST)) {
     send_to_char(ch, "You can not create a portal to that room.\r\n");
     return;
diff -BbuprN -x '*.o' src/srcbak/spells.h src/src/spells.h
--- src/srcbak/spells.h	2004-10-02 16:45:05.000000000 -0400
+++ src/src/spells.h	2004-10-02 17:04:54.000000000 -0400
@@ -133,6 +133,10 @@
 #define MIN_WP                      170
 #define MAX_WP                      182
 
+/*Current Max skills you have in your game not the acutal array max */
+#define MAX_CUR_SKILLS              132
+
+
 /*
  *  NON-PLAYER AND OBJECT SPELLS AND SKILLS
  *  The practice levels for the spells and skills below are _not_ recorded
diff -BbuprN -x '*.o' src/srcbak/structs.h src/src/structs.h
--- src/srcbak/structs.h	2004-10-03 13:31:03.000000000 -0400
+++ src/src/structs.h	2004-10-02 16:46:30.000000000 -0400
@@ -632,6 +632,7 @@
 #define TW_ARRAY_MAX    4
 #define EF_ARRAY_MAX    4
 #define ZF_ARRAY_MAX    4
+#define SP_ARRAY_MAX    8
 
 /* other #defined constants **********************************************/
 
@@ -894,7 +895,7 @@ struct room_data {
    struct extra_descr_data *ex_description; /* for examine/look       */
    struct room_direction_data *dir_option[NUM_OF_DIRS]; /* Directions */
    int room_flags[RF_ARRAY_MAX];   /* DEATH,DARK ... etc */
-
+   int spells[SP_ARRAY_MAX];    /* Anti room spells --Cunning        */
 
    struct trig_proto_list *proto_script; /* list of default triggers  */
    struct script_data *script;  /* script info for the object         */
diff -BbuprN -x '*.o' src/srcbak/utils.h src/src/utils.h
--- src/srcbak/utils.h	2004-10-03 13:21:20.000000000 -0400
+++ src/src/utils.h	2004-10-02 16:47:29.000000000 -0400
@@ -221,6 +221,7 @@ void	update_pos(struct char_data *victim
 #define ROOM_FLAGS(loc)	(world[(loc)].room_flags)
 #define SPELL_ROUTINES(spl)	(spell_info[spl].routines)
 #define ZONE_FLAGS(loc) (zone_table[(loc)].zone_flags)
+#define ROOM_SPELL(loc)		(world[(loc)].spells)
 /*
  * See http://www.circlemud.org/~greerga/todo/todo.009 to eliminate MOB_ISNPC.
  * IS_MOB() acts as a VALID_MOB_RNUM()-like function.
@@ -234,6 +235,7 @@ void	update_pos(struct char_data *victim
 #define AFF_FLAGGED(ch, flag) (IS_SET_AR(AFF_FLAGS(ch), (flag)))
 #define PRF_FLAGGED(ch, flag) (IS_SET_AR(PRF_FLAGS(ch), (flag)))
 #define ROOM_FLAGGED(loc, flag) (IS_SET_AR(ROOM_FLAGS(loc), (flag)))
+#define ROOM_ANTISPELL(loc, flag)  (IS_SET_AR(ROOM_SPELL(loc), (flag)))
 #define ZONE_FLAGGED(loc, flag) (IS_SET_AR(ZONE_FLAGS(loc), (flag)))
 #define EXIT_FLAGGED(exit, flag) (IS_SET((exit)->exit_info, (flag)))
 #define OBJAFF_FLAGGED(obj, flag) (IS_SET(GET_OBJ_AFFECT(obj), (flag)))

