diff -uprN -x *.o ./bpl12/src/act.informative.c ./bpl12.weather/src/act.informative.c
--- ./bpl12/src/act.informative.c	Tue Oct 28 22:16:21 1997
+++ ./bpl12.weather/src/act.informative.c	Thu Nov  6 11:55:01 1997
@@ -829,6 +829,8 @@ ACMD(do_time)
 
 ACMD(do_weather)
 {
+  extern struct zone_data *zone_table;
+
   static char *sky_look[] = {
     "cloudless",
     "cloudy",
@@ -836,8 +838,10 @@ ACMD(do_weather)
   "lit by flashes of lightning"};
 
   if (OUTSIDE(ch)) {
-    sprintf(buf, "The sky is %s and %s.\r\n", sky_look[weather_info.sky],
-	    (weather_info.change >= 0 ? "you feel a warm wind from south" :
+    sprintf(buf, "The sky is %s and %s.\r\n", 
+            sky_look[zone_table[world[ch->in_room].zone].sky],
+	    (zone_table[world[ch->in_room].zone].change >= 0 ? 
+             "you feel a warm wind from south" :
 	     "your foot tells you bad weather is due"));
     send_to_char(buf, ch);
   } else
diff -uprN -x *.o ./bpl12/src/db.c ./bpl12.weather/src/db.c
--- ./bpl12/src/db.c	Tue Oct 28 22:16:24 1997
+++ ./bpl12.weather/src/db.c	Thu Nov  6 11:55:01 1997
@@ -77,7 +77,6 @@ struct help_index_element *help_table = 
 int top_of_helpt = 0;		/* top of help index table	 */
 
 struct time_info_data time_info;/* the infomation about the time    */
-struct weather_data weather_info;	/* the infomation about the weather */
 struct player_special_data dummy_mob;	/* dummy spec area for mobs	 */
 struct reset_q_type reset_q;	/* queue of zones to be reset	 */
 
@@ -334,36 +333,19 @@ void reset_time(void)
   time_info = mud_time_passed(time(0), beginning_of_time);
 
   if (time_info.hours <= 4)
-    weather_info.sunlight = SUN_DARK;
+    sunlight = SUN_DARK;
   else if (time_info.hours == 5)
-    weather_info.sunlight = SUN_RISE;
+    sunlight = SUN_RISE;
   else if (time_info.hours <= 20)
-    weather_info.sunlight = SUN_LIGHT;
+    sunlight = SUN_LIGHT;
   else if (time_info.hours == 21)
-    weather_info.sunlight = SUN_SET;
+    sunlight = SUN_SET;
   else
-    weather_info.sunlight = SUN_DARK;
+    sunlight = SUN_DARK;
 
   sprintf(buf, "   Current Gametime: %dH %dD %dM %dY.", time_info.hours,
 	  time_info.day, time_info.month, time_info.year);
   log(buf);
-
-  weather_info.pressure = 960;
-  if ((time_info.month >= 7) && (time_info.month <= 12))
-    weather_info.pressure += dice(1, 50);
-  else
-    weather_info.pressure += dice(1, 80);
-
-  weather_info.change = 0;
-
-  if (weather_info.pressure <= 980)
-    weather_info.sky = SKY_LIGHTNING;
-  else if (weather_info.pressure <= 1000)
-    weather_info.sky = SKY_RAINING;
-  else if (weather_info.pressure <= 1020)
-    weather_info.sky = SKY_CLOUDY;
-  else
-    weather_info.sky = SKY_CLOUDLESS;
 }
 
 
@@ -1239,6 +1221,22 @@ void load_zones(FILE * fl, char *zonenam
     fprintf(stderr, "SYSERR: Format error in 3-constant line of %s", zname);
     exit(1);
   }
+
+  Z.pressure = 960;
+  if ((time_info.month >= 7) && (time_info.month <= 12))
+    Z.pressure += dice(1, 50);
+  else
+    Z.pressure += dice(1, 80);
+  Z.change = 0;
+  if (Z.pressure <= 980)
+    Z.sky = SKY_LIGHTNING;
+  else if (Z.pressure <= 1000)
+    Z.sky = SKY_RAINING;
+  else if (Z.pressure <= 1020)
+    Z.sky = SKY_CLOUDY;
+  else
+    Z.sky = SKY_CLOUDLESS;
+
   cmd_no = 0;
 
   for (;;) {
diff -uprN -x *.o ./bpl12/src/db.h ./bpl12.weather/src/db.h
--- ./bpl12/src/db.h	Tue Oct 28 22:16:24 1997
+++ ./bpl12.weather/src/db.h	Thu Nov  6 11:55:01 1997
@@ -89,6 +89,8 @@ int	real_object(int virtual);
 struct obj_data *read_object(int nr, int type);
 int	vnum_object(char *searchname, struct char_data *ch);
 
+int sunlight;	/* What state the sun is at */
+
 #define REAL 0
 #define VIRTUAL 1
 
@@ -126,6 +128,9 @@ struct zone_data {
    int	reset_mode;         /* conditions for reset (see below)   */
    int	number;		    /* virtual number of this zone	  */
    struct reset_com *cmd;   /* command table for reset	          */
+   int  pressure;	/* How is the pressure ( Mb ) */
+   int  change;		/* How fast and what way does it change. */
+   int  sky;		/* How is the sky. */
 
    /*
 	*  Reset mode:                              *
diff -uprN -x *.o ./bpl12/src/magic.c ./bpl12.weather/src/magic.c
--- ./bpl12/src/magic.c	Tue Oct 28 22:16:27 1997
+++ ./bpl12.weather/src/magic.c	Thu Nov  6 11:55:01 1997
@@ -24,7 +24,6 @@ extern struct obj_data *object_list;
 extern struct char_data *character_list;
 extern struct index_data *obj_index;
 
-extern struct weather_data weather_info;
 extern struct descriptor_data *descriptor_list;
 extern struct zone_data *zone_table;
 
diff -uprN -x *.o ./bpl12/src/spells.c ./bpl12.weather/src/spells.c
--- ./bpl12/src/spells.c	Tue Oct 28 22:16:29 1997
+++ ./bpl12.weather/src/spells.c	Thu Nov  6 11:55:01 1997
@@ -26,7 +26,6 @@ extern struct cha_app_type cha_app[];
 extern struct int_app_type int_app[];
 extern struct index_data *obj_index;
 
-extern struct weather_data weather_info;
 extern struct descriptor_data *descriptor_list;
 extern struct zone_data *zone_table;
 
diff -uprN -x *.o ./bpl12/src/structs.h ./bpl12.weather/src/structs.h
--- ./bpl12/src/structs.h	Tue Oct 28 22:16:29 1997
+++ ./bpl12.weather/src/structs.h	Thu Nov  6 11:55:01 1997
@@ -376,14 +376,14 @@
 #define THIRST       2
 
 
-/* Sun state for weather_data */
+/* Sun state for sunlight */
 #define SUN_DARK	0
 #define SUN_RISE	1
 #define SUN_LIGHT	2
 #define SUN_SET		3
 
 
-/* Sky conditions for weather_data */
+/* Sky conditions for weather */
 #define SKY_CLOUDLESS	0
 #define SKY_CLOUDY	1
 #define SKY_RAINING	2
@@ -983,14 +983,6 @@ struct int_app_type {
 struct con_app_type {
    sh_int hitp;
    sh_int shock;
-};
-
-
-struct weather_data {
-   int	pressure;	/* How is the pressure ( Mb ) */
-   int	change;	/* How fast and what way does it change. */
-   int	sky;	/* How is the sky. */
-   int	sunlight;	/* And how much sun. */
 };
 
 
diff -uprN -x *.o ./bpl12/src/utils.c ./bpl12.weather/src/utils.c
--- ./bpl12/src/utils.c	Tue Oct 28 22:16:30 1997
+++ ./bpl12.weather/src/utils.c	Thu Nov  6 11:55:01 1997
@@ -21,7 +21,7 @@
 
 extern struct time_data time_info;
 extern struct room_data *world;
-
+extern int sunlight;
 
 /* creates a random number in interval [from;to] */
 int number(int from, int to)
diff -uprN -x *.o ./bpl12/src/utils.h ./bpl12.weather/src/utils.h
--- ./bpl12/src/utils.h	Wed Oct 29 15:04:08 1997
+++ ./bpl12.weather/src/utils.h	Thu Nov  6 11:55:49 1997
@@ -11,8 +11,6 @@
 
 /* external declarations and prototypes **********************************/
 
-extern struct weather_data weather_info;
-
 #define log(x) basic_mud_log(x)
 
 /* public functions in utils.c */
@@ -193,8 +191,8 @@ void	update_pos(struct char_data *victim
                          (ROOM_FLAGGED(room, ROOM_DARK) || \
                           ( ( SECT(room) != SECT_INSIDE && \
                               SECT(room) != SECT_CITY ) && \
-                            (weather_info.sunlight == SUN_SET || \
-			     weather_info.sunlight == SUN_DARK)) ) )
+                            (sunlight == SUN_SET || \
+			     sunlight == SUN_DARK)) ) )
 
 #define IS_LIGHT(room)  (!IS_DARK(room))
 
diff -uprN -x *.o ./bpl12/src/weather.c ./bpl12.weather/src/weather.c
--- ./bpl12/src/weather.c	Fri Apr 12 21:39:22 1996
+++ ./bpl12.weather/src/weather.c	Thu Nov  6 11:55:01 1997
@@ -41,19 +41,19 @@ void another_hour(int mode)
   if (mode) {
     switch (time_info.hours) {
     case 5:
-      weather_info.sunlight = SUN_RISE;
+      sunlight = SUN_RISE;
       send_to_outdoor("The sun rises in the east.\r\n");
       break;
     case 6:
-      weather_info.sunlight = SUN_LIGHT;
+      sunlight = SUN_LIGHT;
       send_to_outdoor("The day has begun.\r\n");
       break;
     case 21:
-      weather_info.sunlight = SUN_SET;
+      sunlight = SUN_SET;
       send_to_outdoor("The sun slowly disappears in the west.\r\n");
       break;
     case 22:
-      weather_info.sunlight = SUN_DARK;
+      sunlight = SUN_DARK;
       send_to_outdoor("The night has begun.\r\n");
       break;
     default:
@@ -79,100 +79,116 @@ void another_hour(int mode)
 
 void weather_change(void)
 {
-  int diff, change;
-  if ((time_info.month >= 9) && (time_info.month <= 16))
-    diff = (weather_info.pressure > 985 ? -2 : 2);
-  else
-    diff = (weather_info.pressure > 1015 ? -2 : 2);
-
-  weather_info.change += (dice(1, 4) * diff + dice(2, 6) - dice(2, 6));
-
-  weather_info.change = MIN(weather_info.change, 12);
-  weather_info.change = MAX(weather_info.change, -12);
-
-  weather_info.pressure += weather_info.change;
-
-  weather_info.pressure = MIN(weather_info.pressure, 1040);
-  weather_info.pressure = MAX(weather_info.pressure, 960);
-
-  change = 0;
-
-  switch (weather_info.sky) {
-  case SKY_CLOUDLESS:
-    if (weather_info.pressure < 990)
-      change = 1;
-    else if (weather_info.pressure < 1010)
-      if (dice(1, 4) == 1)
-	change = 1;
-    break;
-  case SKY_CLOUDY:
-    if (weather_info.pressure < 970)
-      change = 2;
-    else if (weather_info.pressure < 990)
-      if (dice(1, 4) == 1)
-	change = 2;
-      else
-	change = 0;
-    else if (weather_info.pressure > 1030)
-      if (dice(1, 4) == 1)
-	change = 3;
-
-    break;
-  case SKY_RAINING:
-    if (weather_info.pressure < 970)
-      if (dice(1, 4) == 1)
-	change = 4;
-      else
-	change = 0;
-    else if (weather_info.pressure > 1030)
-      change = 5;
-    else if (weather_info.pressure > 1010)
-      if (dice(1, 4) == 1)
-	change = 5;
-
-    break;
-  case SKY_LIGHTNING:
-    if (weather_info.pressure > 1010)
-      change = 6;
-    else if (weather_info.pressure > 990)
-      if (dice(1, 4) == 1)
-	change = 6;
+  int diff, change, i;
+  struct descriptor_data *j;
+  extern int top_of_zone_table;
+  extern struct zone_data *zone_table;
+  extern struct descriptor_data *descriptor_list;
+  extern struct room_data *world;
+
+  for (i = 0; i <= top_of_zone_table; i++) {
+
+    if ((time_info.month >= 9) && (time_info.month <= 16))
+      diff = (zone_table[i].pressure > 985 ? -2 : 2);
+    else
+      diff = (zone_table[i].pressure > 1015 ? -2 : 2);
+
+    zone_table[i].change += (dice(1, 4) * diff + dice(2, 6) - dice(2, 6));
+    zone_table[i].change = MIN(zone_table[i].change, 12);
+    zone_table[i].change = MAX(zone_table[i].change, -12);
+
+    zone_table[i].pressure += zone_table[i].change;
+    zone_table[i].pressure = MIN(zone_table[i].pressure, 1040);
+    zone_table[i].pressure = MAX(zone_table[i].pressure, 960);
 
-    break;
-  default:
     change = 0;
-    weather_info.sky = SKY_CLOUDLESS;
-    break;
-  }
 
-  switch (change) {
-  case 0:
-    break;
-  case 1:
-    send_to_outdoor("The sky starts to get cloudy.\r\n");
-    weather_info.sky = SKY_CLOUDY;
-    break;
-  case 2:
-    send_to_outdoor("It starts to rain.\r\n");
-    weather_info.sky = SKY_RAINING;
-    break;
-  case 3:
-    send_to_outdoor("The clouds disappear.\r\n");
-    weather_info.sky = SKY_CLOUDLESS;
-    break;
-  case 4:
-    send_to_outdoor("Lightning starts to show in the sky.\r\n");
-    weather_info.sky = SKY_LIGHTNING;
-    break;
-  case 5:
-    send_to_outdoor("The rain stops.\r\n");
-    weather_info.sky = SKY_CLOUDY;
-    break;
-  case 6:
-    send_to_outdoor("The lightning stops.\r\n");
-    weather_info.sky = SKY_RAINING;
-    break;
-  default:
-    break;
+    switch (zone_table[i].sky) {
+    case SKY_CLOUDLESS:
+      if (zone_table[i].pressure < 990)
+        change = 1;
+      else if (zone_table[i].pressure < 1010)
+        if (dice(1, 4) == 1)
+  	  change = 1;
+      break;
+    case SKY_CLOUDY:
+      if (zone_table[i].pressure < 970)
+        change = 2;
+      else if (zone_table[i].pressure < 990)
+        if (dice(1, 4) == 1)
+	  change = 2;
+        else
+  	  change = 0;
+      else if (zone_table[i].pressure > 1030)
+        if (dice(1, 4) == 1)
+  	  change = 3;
+
+      break;
+    case SKY_RAINING:
+      if (zone_table[i].pressure < 970)
+        if (dice(1, 4) == 1)
+	  change = 4;
+        else
+  	  change = 0;
+      else if (zone_table[i].pressure > 1030)
+        change = 5;
+      else if (zone_table[i].pressure > 1010)
+        if (dice(1, 4) == 1)
+	  change = 5;
+
+      break;
+    case SKY_LIGHTNING:
+      if (zone_table[i].pressure > 1010)
+        change = 6;
+      else if (zone_table[i].pressure > 990)
+        if (dice(1, 4) == 1)
+          change = 6;
+
+      break;
+    default:
+      change = 0;
+      zone_table[i].sky = SKY_CLOUDLESS;
+      break;
+    }
+
+    switch (change) {
+    case 0:
+      break;
+    case 1:
+      sprintf(buf, "The sky starts to get cloudy.\r\n");
+      zone_table[i].sky = SKY_CLOUDY;
+      break;
+    case 2:
+      sprintf(buf, "It starts to rain.\r\n");
+      zone_table[i].sky = SKY_RAINING;
+      break;
+    case 3:
+      sprintf(buf, "The clouds disappear.\r\n");
+      zone_table[i].sky = SKY_CLOUDLESS;
+      break;
+    case 4:
+      sprintf(buf, "Lightning starts to show in the sky.\r\n");
+      zone_table[i].sky = SKY_LIGHTNING;
+      break;
+    case 5:
+      sprintf(buf, "The rain stops.\r\n");
+      zone_table[i].sky = SKY_CLOUDY;
+      break;
+    case 6:
+      sprintf(buf, "The lightning stops.\r\n");
+      zone_table[i].sky = SKY_RAINING;
+      break;
+    default:
+      break;
+    }
+
+    if ((change >= 1) && (change <= 6)) {
+      for (j = descriptor_list; j; j = j->next)
+        if (!j->connected && j->character && AWAKE(j->character) &&
+            OUTSIDE(j->character) && 
+            (zone_table[world[j->character->in_room].zone].number == i))
+          SEND_TO_Q(buf, j);
+    }
+
   }
 }
