diff -BENbdpru old_src/db.c src/db.c
--- old_src/db.c	2004-12-21 13:01:30.000000000 -0500
+++ src/db.c	2005-01-16 20:49:04.746500000 -0500
@@ -1751,7 +1751,7 @@ char *parse_object(FILE *obj_f, int nr)
 void load_zones(FILE *fl, char *zonename)
 {
   static zone_rnum zone = 0;
-  int cmd_no, num_of_cmds = 0, line_num = 0, tmp, error;
+  int cmd_no, num_of_cmds = 0, line_num = 0, tmp, error, arg_num;
   char *ptr, buf[READ_SIZE], zname[READ_SIZE], buf2[MAX_STRING_LENGTH];
   int zone_fix = FALSE;
   char t1[80], t2[80];
@@ -1858,9 +1858,13 @@ void load_zones(FILE *fl, char *zonename
         ZCMD.sarg2 = strdup(t2);
       }
     } else {
-      if (sscanf(ptr, " %d %d %d %d ", &tmp, &ZCMD.arg1, &ZCMD.arg2,
-		 &ZCMD.arg3) != 4)
+      if ((arg_num = sscanf(ptr, " %d %d %d %d %d ", &tmp, &ZCMD.arg1, &ZCMD.arg2,
+                 &ZCMD.arg3, &ZCMD.arg4)) != 5){
+        if (arg_num != 4)
 	error = 1;
+        else
+          ZCMD.arg4 = 0;
+        }
     }
 
     ZCMD.if_flag = tmp;
@@ -2221,6 +2225,8 @@ void log_zone_error(zone_rnum zone, int 
 void reset_zone(zone_rnum zone)
 {
   int cmd_no, last_cmd = 0;
+  int mob_load = FALSE; /* ### */
+  int obj_load = FALSE; /* ### */
   struct char_data *mob = NULL;
   struct obj_data *obj, *obj_to;
   room_vnum rvnum;
@@ -2230,7 +2236,7 @@ void reset_zone(zone_rnum zone)
 
   for (cmd_no = 0; ZCMD.command != 'S'; cmd_no++) {
 
-    if (ZCMD.if_flag && !last_cmd)
+    if (ZCMD.if_flag && !last_cmd && !mob_load && !obj_load)
       continue;
 
     /*  This is the list of actual zone commands.  If any new
@@ -2244,29 +2250,32 @@ void reset_zone(zone_rnum zone)
       break;
 
     case 'M':			/* read a mobile */
-      if (mob_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((mob_index[ZCMD.arg1].number < ZCMD.arg2) && (rand_number(1, 1000) <= ZCMD.arg4)) {
 	mob = read_mobile(ZCMD.arg1, REAL);
 	char_to_room(mob, ZCMD.arg3);
         load_mtrigger(mob);
         tmob = mob;
 	last_cmd = 1;
+	mob_load = TRUE;
       } else
 	last_cmd = 0;
       tobj = NULL;
       break;
 
     case 'O':			/* read an object */
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) && (rand_number(1, 1000) <= ZCMD.arg4)) {
 	if (ZCMD.arg3 != NOWHERE) {
 	  obj = read_object(ZCMD.arg1, REAL);
 	  obj_to_room(obj, ZCMD.arg3);
 	  last_cmd = 1;
+	  obj_load = TRUE;
           load_otrigger(obj);
           tobj = obj;
 	} else {
 	  obj = read_object(ZCMD.arg1, REAL);
 	  IN_ROOM(obj) = NOWHERE;
 	  last_cmd = 1;
+	  obj_load = TRUE;
           tobj = obj;
 	}
       } else
@@ -2275,7 +2284,7 @@ void reset_zone(zone_rnum zone)
       break;
 
     case 'P':			/* object to object */
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) && obj_load && (rand_number(1, 1000) <= ZCMD.arg4)) {
 	obj = read_object(ZCMD.arg1, REAL);
 	if (!(obj_to = get_obj_num(ZCMD.arg3))) {
 	  ZONE_ERROR("target obj not found, command disabled");
@@ -2297,7 +2306,7 @@ void reset_zone(zone_rnum zone)
 	ZCMD.command = '*';
 	break;
       }
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) && mob_load && (rand_number(1, 1000) <= ZCMD.arg3)) {
 	obj = read_object(ZCMD.arg1, REAL);
 	obj_to_char(obj, mob);
 	last_cmd = 1;
@@ -2314,7 +2323,7 @@ void reset_zone(zone_rnum zone)
 	ZCMD.command = '*';
 	break;
       }
-      if (obj_index[ZCMD.arg1].number < ZCMD.arg2) {
+      if ((obj_index[ZCMD.arg1].number < ZCMD.arg2) && mob_load && (rand_number(1, 1000) <= ZCMD.arg4)) {
 	if (ZCMD.arg3 < 0 || ZCMD.arg3 >= NUM_WEARS) {
 	  ZONE_ERROR("invalid equipment pos number");
 	} else {
diff -BENbdpru old_src/db.h src/db.h
--- old_src/db.h	2004-12-21 13:01:30.000000000 -0500
+++ src/db.h	2005-01-16 20:50:15.262125000 -0500
@@ -152,6 +152,7 @@ struct reset_com {
    int	arg1;		/*                                      */
    int	arg2;		/* Arguments to the command             */
    int	arg3;		/*                                      */
+   int  arg4;		/* This is for the % loads              */
    int line;		/* line number this command appears on  */
    char *sarg1;		/* string argument                      */
    char *sarg2;		/* string argument                      */
diff -BENbdpru old_src/genzon.c src/genzon.c
--- old_src/genzon.c	2005-01-16 17:25:42.043375000 -0500
+++ src/genzon.c	2005-01-16 22:44:55.168375000 -0500
@@ -306,17 +306,13 @@ void create_world_index(int znum, const 
     fprintf(newfile, "%s\n", buf);
   }
 
-  if (!fclose(newfile))
-	  log("newfile %s not closing", newfile);
-  if (!fclose(oldfile))
-	  log("oldfile %s not closing", oldfile);
+  fclose(newfile);
+  fclose(oldfile);
   /*
    * Out with the old, in with the new.
    */
-  if (!remove(old_name))
-	  log("old file %s not being removed", old_name);
-  if (!rename(new_name, old_name))
-	  log("unable to rename file %s not being removed", new_name);
+  remove(old_name);
+  rename(new_name, old_name);
 }
 
 /*-------------------------------------------------------------------*/
@@ -360,7 +356,7 @@ void remove_room_zone_commands(zone_rnum
  */
 int save_zone(zone_rnum zone_num)
 {
-  int subcmd, arg1 = -1, arg2 = -1, arg3 = -1;
+  int subcmd, arg1 = -1, arg2 = -1, arg3 = -1, arg4 = -1;
   char fname[128], oldname[128];
   const char *comment = NULL;
   FILE *zfile;
@@ -401,18 +397,18 @@ int save_zone(zone_rnum zone_num)
 	/*
 	 * Handy Quick Reference Chart for Zone Values.
 	 *
-	 * Field #1    Field #3   Field #4  Field #5
-	 * -------------------------------------------------
-	 * M (Mobile)  Mob-Vnum   Wld-Max   Room-Vnum
-	 * O (Object)  Obj-Vnum   Wld-Max   Room-Vnum
-	 * G (Give)    Obj-Vnum   Wld-Max   Unused
-	 * E (Equip)   Obj-Vnum   Wld-Max   EQ-Position
-	 * P (Put)     Obj-Vnum   Wld-Max   Target-Obj-Vnum
+	 * Field #1    Field #3   Field #4  Field #5        Field #6
+	 * ------------------------------------------------------------
+	 * M (Mobile)  Mob-Vnum   Wld-Max   Room-Vnum       LoadChance
+	 * O (Object)  Obj-Vnum   Wld-Max   Room-Vnum       LoadChance
+	 * G (Give)    Obj-Vnum   Wld-Max   LoadChance
+	 * E (Equip)   Obj-Vnum   Wld-Max   EQ-Position     LoadChance
+	 * P (Put)     Obj-Vnum   Wld-Max   Target-Obj-Vnum LoadChance
 	 * D (Door)    Room-Vnum  Door-Dir  Door-State
 	 * R (Remove)  Room-Vnum  Obj-Vnum  Unused
          * T (Trigger) Trig-type  Trig-Vnum Room-Vnum
          * V (var)     Trig-type  Context   Room-Vnum Varname Value
-	 * -------------------------------------------------
+	 * ------------------------------------------------------------
 	 */
 
   for (subcmd = 0; ZCMD(zone_num, subcmd).command != 'S'; subcmd++) {
@@ -421,43 +417,50 @@ int save_zone(zone_rnum zone_num)
       arg1 = mob_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = world[ZCMD(zone_num, subcmd).arg3].number;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = mob_proto[ZCMD(zone_num, subcmd).arg1].player.short_descr;
       break;
     case 'O':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = world[ZCMD(zone_num, subcmd).arg3].number;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'G':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = -1;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'E':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = ZCMD(zone_num, subcmd).arg3;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'P':
       arg1 = obj_index[ZCMD(zone_num, subcmd).arg1].vnum;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = obj_index[ZCMD(zone_num, subcmd).arg3].vnum;
+      arg4 = ZCMD(zone_num, subcmd).arg4;
       comment = obj_proto[ZCMD(zone_num, subcmd).arg1].short_description;
       break;
     case 'D':
       arg1 = world[ZCMD(zone_num, subcmd).arg1].number;
       arg2 = ZCMD(zone_num, subcmd).arg2;
       arg3 = ZCMD(zone_num, subcmd).arg3;
+      arg4 = 0;
       comment = world[ZCMD(zone_num, subcmd).arg1].name;
       break;
     case 'R':
       arg1 = world[ZCMD(zone_num, subcmd).arg1].number;
       arg2 = obj_index[ZCMD(zone_num, subcmd).arg2].vnum;
-      comment = obj_proto[ZCMD(zone_num, subcmd).arg2].short_description;
       arg3 = -1;
+      arg4 = 0;
+      comment = obj_proto[ZCMD(zone_num, subcmd).arg2].short_description;
       break;
     case 'T':
       arg1 = ZCMD(zone_num, subcmd).arg1; /* trigger type */
@@ -480,8 +483,8 @@ int save_zone(zone_rnum zone_num)
       continue;
     }
     if (ZCMD(zone_num, subcmd).command != 'V')
-    fprintf(zfile, "%c %d %d %d %d \t(%s)\n",
-		ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, comment);
+    fprintf(zfile, "%c %d %d %d %d %d \t(%s)\n",
+		ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, arg4, comment);
     else
       fprintf(zfile, "%c %d %d %d %d %s %s\n",
               ZCMD(zone_num, subcmd).command, ZCMD(zone_num, subcmd).if_flag, arg1, arg2, arg3, 
diff -BENbdpru old_src/oasis.h src/oasis.h
--- old_src/oasis.h	2004-12-21 13:01:32.000000000 -0500
+++ src/oasis.h	2005-01-16 21:28:27.293375000 -0500
@@ -290,6 +290,8 @@ extern const char *nrm, *grn, *cyn, *yel
 #define ZEDIT_ZONE_BUILDERS		15
 #define ZEDIT_SARG1			20
 #define ZEDIT_SARG2			21
+#define ZEDIT_PROB			22
+#define ZEDIT_PROB2			23
 
 /*
  * Submodes of MEDIT connectedness.
diff -BENbdpru old_src/zedit.c src/zedit.c
--- old_src/zedit.c	2004-12-21 13:01:32.000000000 -0500
+++ src/zedit.c	2005-01-16 21:39:05.777750000 -0500
@@ -481,45 +481,45 @@ void zedit_disp_menu(struct descriptor_d
     write_to_output(d, "%s%d - %s", nrm, counter++, yel);
     switch (MYCMD.command) {
     case 'M':
-      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d    (%d/1000)",
               MYCMD.if_flag ? " then " : "",
               mob_proto[MYCMD.arg1].player.short_descr, cyn,
-              mob_index[MYCMD.arg1].vnum, yel, MYCMD.arg2
+              mob_index[MYCMD.arg1].vnum, yel, MYCMD.arg2, MYCMD.arg4
               );
       break;
     case 'G':
-      write_to_output(d, "%sGive it %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sGive it %s [%s%d%s], Max : %d    (%d/1000)",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'O':
-      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sLoad %s [%s%d%s], Max : %d    (%d/1000)",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'E':
-      write_to_output(d, "%sEquip with %s [%s%d%s], %s, Max : %d",
+      write_to_output(d, "%sEquip with %s [%s%d%s], %s, Max : %d    (%d/1000)",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
 	      equipment_types[MYCMD.arg3],
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'P':
-      write_to_output(d, "%sPut %s [%s%d%s] in %s [%s%d%s], Max : %d",
+      write_to_output(d, "%sPut %s [%s%d%s] in %s [%s%d%s], Max : %d    (%d/1000)",
 	      MYCMD.if_flag ? " then " : "",
 	      obj_proto[MYCMD.arg1].short_description,
 	      cyn, obj_index[MYCMD.arg1].vnum, yel,
 	      obj_proto[MYCMD.arg3].short_description,
 	      cyn, obj_index[MYCMD.arg3].vnum, yel,
-	      MYCMD.arg2
+	      MYCMD.arg2, MYCMD.arg4
 	      );
       break;
     case 'R':
@@ -569,8 +569,9 @@ void zedit_disp_menu(struct descriptor_d
 	  "%sN%s) Insert new command.\r\n"
 	  "%sE%s) Edit a command.\r\n"
 	  "%sD%s) Delete a command.\r\n"
+	  "%sC%s) Change a command's chance of happening.\r\n"
 	  "%sQ%s) Quit\r\nEnter your choice : ",
-	  nrm, counter, grn, nrm, grn, nrm, grn, nrm, grn, nrm
+	  nrm, counter, grn, nrm, grn, nrm, grn, nrm, grn, nrm, grn, nrm
 	  );
 
   OLC_MODE(d) = ZEDIT_MAIN_MENU;
@@ -745,6 +746,48 @@ void zedit_disp_arg3(struct descriptor_d
   OLC_MODE(d) = ZEDIT_ARG3;
 }
 
+/*-------------------------------------------------------------------*/
+
+/*
+ * Print the appropriate message for the command type for arg3 and set
+ * up the input catch clause.
+ */
+void zedit_disp_arg4(struct descriptor_data *d)
+{
+  write_to_output(d, "\r\n");
+
+  switch (OLC_CMD(d).command) {
+  case 'E':
+    write_to_output(d, "Initial Load Chance?\r\n");
+    break;
+  case 'P':
+    write_to_output(d, "Initial Load Chance?\r\n");
+    break;
+  case 'M':
+    write_to_output(d, "Initial Load Chance?\r\n");
+    break;
+  case 'O':
+    write_to_output(d, "Initial Load Chance?\r\n");
+    break;
+  case 'G':
+    write_to_output(d, "Initial Load Chance?\r\n");
+    break;
+  case 'D':
+  case 'V':
+  case 'T':
+  case 'R':
+  default:
+    /*
+     * We should never get here, just in case.
+     */
+    cleanup_olc(d, CLEANUP_ALL);
+    mudlog(BRF, LVL_BUILDER, TRUE, "SYSERR: OLC: zedit_disp_arg4(): Help!");
+    write_to_output(d, "Oops...\r\n");
+    return;
+  }
+  OLC_MODE(d) = ZEDIT_PROB2;
+}
+
 /**************************************************************************
   The GARGANTAUN event handler
  **************************************************************************/
@@ -889,6 +932,14 @@ void zedit_parse(struct descriptor_data 
 		"Enter new zone reset type : ");
       OLC_MODE(d) = ZEDIT_ZONE_RESET;
       break;
+    case 'c':
+    case 'C':
+      /*
+       *      Change loadchance 
+       */
+      send_to_char(d->character, " \r\nWhich command? ");
+      OLC_MODE(d) = ZEDIT_PROB;
+      break;
     default:
       zedit_disp_menu(d);
       break;
@@ -996,6 +1047,34 @@ void zedit_parse(struct descriptor_data 
     break;
 
 /*-------------------------------------------------------------------*/
+  case ZEDIT_PROB:
+    /*
+     *       Which command to change loadchance for? :/
+     */
+     
+    pos = atoi(arg);
+    if (isdigit(*arg) && start_change_command(d, pos)) {
+      OLC_MODE(d) = ZEDIT_PROB2;
+      OLC_ZONE(d)->age = 1;
+      send_to_char(d->character, "\r\nChance of loading (0-1000) (input 1000 for 'always load'): "); 
+      break;
+    } else
+      send_to_char(d->character, "\r\nInvalid choice.\r\n\r\n");
+      zedit_disp_menu(d);
+    break;
+/*-------------------------------------------------------------------*/
+  case ZEDIT_PROB2:
+    /*
+     *       Change the loadchance
+     */    
+     
+    OLC_CMD(d).arg4 = atoi(arg);
+    OLC_MODE(d) = ZEDIT_MAIN_MENU;
+    zedit_disp_menu(d);   
+    break;    
+    
+ 
+/*-------------------------------------------------------------------*/
   case ZEDIT_ARG1:
     /*
      * Parse the input for arg1, and goto next quiz.
@@ -1058,11 +1137,11 @@ void zedit_parse(struct descriptor_data 
     case 'O':
       OLC_CMD(d).arg2 = MIN(MAX_DUPLICATES, atoi(arg));
       OLC_CMD(d).arg3 = real_room(OLC_NUM(d));
-      zedit_disp_menu(d);
+      zedit_disp_arg4(d);
       break;
     case 'G':
       OLC_CMD(d).arg2 = MIN(MAX_DUPLICATES, atoi(arg));
-      zedit_disp_menu(d);
+      zedit_disp_arg4(d);
       break;
     case 'P':
     case 'E':
@@ -1135,13 +1214,13 @@ void zedit_parse(struct descriptor_data 
 	write_to_output(d, "Try again : ");
       else {
 	OLC_CMD(d).arg3 = pos;
-	zedit_disp_menu(d);
+	zedit_disp_arg4(d);
       }
       break;
     case 'P':
       if ((pos = real_object(atoi(arg))) != NOTHING) {
 	OLC_CMD(d).arg3 = pos;
-	zedit_disp_menu(d);
+	zedit_disp_arg4(d);
       } else
 	write_to_output(d, "That object does not exist, try again : ");
       break;
