diff -urN backup/act.informative.c src/act.informative.c
--- backup/act.informative.c	Sun Jun 10 17:04:26 2001
+++ src/act.informative.c	Fri Dec 14 02:57:20 2001
@@ -282,10 +282,14 @@
     strcat(buf, " (invisible)");
   if (AFF_FLAGGED(i, AFF_HIDE))
     strcat(buf, " (hidden)");
-  if (!IS_NPC(i) && !i->desc)
-    strcat(buf, " (linkless)");
-  if (!IS_NPC(i) && PLR_FLAGGED(i, PLR_WRITING))
-    strcat(buf, " (writing)");
+  if (!IS_NPC(i)) {
+    if (!i->desc)
+      strcat(buf, " (linkless)");
+    if (PLR_FLAGGED(i, PLR_WRITING))
+      strcat(buf, " (writing)");
+    if (PRF_FLAGGED(i, PRF_BUILDWALK))
+      strcat(buf, " (buildwalk)");
+  }
 
   if (GET_POS(i) != POS_FIGHTING)
     strcat(buf, positions[(int) GET_POS(i)]);
@@ -1075,6 +1079,8 @@
 	strcat(buf, " (notell)");
       if (PRF_FLAGGED(tch, PRF_QUEST))
 	strcat(buf, " (quest)");
+      if (PRF_FLAGGED(tch, PRF_BUILDWALK))
+   strcat(buf, " (buildwalk)");
       if (PLR_FLAGGED(tch, PLR_THIEF))
 	strcat(buf, " (THIEF)");
       if (PLR_FLAGGED(tch, PLR_KILLER))
diff -urN backup/act.movement.c src/act.movement.c
--- backup/act.movement.c	Sun Jun 10 17:04:26 2001
+++ src/act.movement.c	Fri Dec 14 02:57:26 2001
@@ -180,10 +180,11 @@
 {
   room_rnum was_in;
   struct follow_type *k, *next;
+  int buildwalk(struct char_data *ch, int dir);
 
   if (ch == NULL || dir < 0 || dir >= NUM_OF_DIRS || FIGHTING(ch))
     return (0);
-  else if (!EXIT(ch, dir) || EXIT(ch, dir)->to_room == NOWHERE)
+  else if ((!EXIT(ch, dir) && !buildwalk(ch, dir)) || EXIT(ch, dir)->to_room == NOWHERE)
     send_to_char("Alas, you cannot go that way...\r\n", ch);
   else if (EXIT_FLAGGED(EXIT(ch, dir), EX_CLOSED)) {
     if (EXIT(ch, dir)->keyword) {
diff -urN backup/act.other.c src/act.other.c
--- backup/act.other.c	Sun Jun 10 17:04:26 2001
+++ src/act.other.c	Fri Dec 14 02:57:36 2001
@@ -884,7 +884,9 @@
     {"Autoexits disabled.\r\n",
     "Autoexits enabled.\r\n"},
     {"Will no longer track through doors.\r\n",
-    "Will now track through doors.\r\n"}
+    "Will now track through doors.\r\n"},
+    {"BuildWalk disabled.\r\n",
+    "BuildWalk enabled.\r\n"}
   };
 
 
@@ -942,6 +944,9 @@
     break;
   case SCMD_TRACK:
     result = (track_through_doors = !track_through_doors);
+    break;
+  case SCMD_BUILDWALK:
+    result = PRF_TOG_CHK(ch, PRF_BUILDWALK);
     break;
   default:
     log("SYSERR: Unknown subcmd %d in do_gen_toggle.", subcmd);
diff -urN backup/comm.c src/comm.c
--- backup/comm.c	Sun Jun 10 17:04:26 2001
+++ src/comm.c	Fri Dec 14 02:58:24 2001
@@ -961,6 +961,11 @@
   } else if (d->str)
     strcpy(prompt, "] ");
    else if (STATE(d) == CON_PLAYING && !IS_NPC(d->character)) {
+
+ if (PRF_FLAGGED(d->character, PRF_BUILDWALK))
+      strcpy(prompt, "< BuildWalking > ");
+ else {
+
     int count = 0;
     *prompt = '\0';
 
@@ -977,6 +982,8 @@
       count += sprintf(prompt + count, "%dV ", GET_MOVE(d->character));
 
     strcat(prompt, "> ");
+ }
+
   } else if (STATE(d) == CON_PLAYING && IS_NPC(d->character))
     sprintf(prompt, "%s> ", GET_NAME(d->character));
   else
diff -urN backup/constants.c src/constants.c
--- backup/constants.c	Sun Jun 10 17:04:26 2001
+++ src/constants.c	Fri Dec 14 02:58:26 2001
@@ -182,6 +182,8 @@
   "NO_GOS",
   "NO_GTZ",
   "RMFLG",
+  "CLS",
+  "BWLK",
   "\n"
 };
 
diff -urN backup/depend src/depend
--- backup/depend	Sun Jun 10 17:50:32 2001
+++ src/depend	Fri Dec 14 03:07:44 2001
@@ -41,8 +41,9 @@
  interpreter.h
 genshp.o: genshp.c conf.h sysdep.h structs.h utils.h db.h shop.h \
  genolc.h genshp.h genzon.h
-genwld.o: genwld.c conf.h sysdep.h structs.h utils.h db.h handler.h \
- comm.h genolc.h genwld.h genzon.h
+genwld.o: genwld.c conf.h sysdep.h structs.h utils.h db.h \
+ interpreter.h handler.h comm.h genolc.h genwld.h genzon.h oasis.h \
+ screen.h constants.h
 genzon.o: genzon.c conf.h sysdep.h structs.h utils.h db.h genolc.h \
  genzon.h
 graph.o: graph.c conf.h sysdep.h structs.h utils.h comm.h \
diff -urN backup/genwld.c src/genwld.c
--- backup/genwld.c	Sun Jun 10 17:04:26 2001
+++ src/genwld.c	Fri Dec 14 03:01:52 2001
@@ -11,11 +11,15 @@
 #include "structs.h"
 #include "utils.h"
 #include "db.h"
+#include "interpreter.h"
 #include "handler.h"
 #include "comm.h"
 #include "genolc.h"
 #include "genwld.h"
 #include "genzon.h"
+#include "oasis.h"
+#include "screen.h"
+#include "constants.h"
 
 extern struct room_data *world;
 extern struct zone_data *zone_table;
@@ -486,3 +490,77 @@
   return TRUE;
 }
 
+/****************************************************************************
+* BuildWalk - OasisOLC Extension by D. Tyler Barnes                         *
+****************************************************************************/
+
+/* For buildwalk. Finds the next free vnum in the zone */
+room_vnum redit_find_new_vnum(zone_rnum zone) {
+
+  room_vnum vnum;
+  room_rnum rnum = real_room((vnum = zone_table[zone].number * 100));
+
+  if (rnum != NOWHERE) {
+    for(;;) {
+       if (vnum > zone_table[zone].top)
+          return(NOWHERE);
+       if (rnum > top_of_world || world[rnum].number > vnum)
+          break;
+       rnum++;
+       vnum++;
+    }
+  }
+  return(vnum);
+
+}
+
+int buildwalk(struct char_data *ch, int dir) {
+
+  struct room_data *room;
+  room_vnum vnum;
+  room_rnum rnum;
+
+  if (!IS_NPC(ch) && PRF_FLAGGED(ch, PRF_BUILDWALK) &&
+   GET_LEVEL(ch) >= LVL_BUILDER) {
+   
+    if (zone_table[world[ch->in_room].zone].number != GET_OLC_ZONE(ch)
+     && GET_LEVEL(ch) < LVL_IMPL) {
+      send_to_char("You do not have build permissions in this zone.\r\n", ch);
+    } else if ((vnum = redit_find_new_vnum(world[ch->in_room].zone)) == NOWHERE)
+      send_to_char("No free vnums are available in this zone!\r\n", ch);
+    else {
+      
+      /* Set up data for add_room function */
+      CREATE(room, struct room_data, 1);
+      room->name = str_dup("New BuildWalk Room");
+      sprintf(buf, "This unfinished room was created by %s.\r\n", GET_NAME(ch));
+      room->description = str_dup(buf);
+      room->number = vnum;
+      room->zone = world[ch->in_room].zone;
+      
+      /* Add the room */
+      add_room(room);
+
+      /* Link rooms */
+      CREATE(EXIT(ch, dir), struct room_direction_data, 1);
+      EXIT(ch, dir)->to_room = (rnum = real_room(vnum));
+      CREATE(world[rnum].dir_option[rev_dir[dir]], struct room_direction_data, 1);
+      world[rnum].dir_option[rev_dir[dir]]->to_room = ch->in_room;
+
+      /* Memory cleanup */
+      free(room->name);
+      free(room->description);
+      free(room);
+
+      /* Report room creation to user */
+      sprintf(buf, "%sRoom #%d created by BuildWalk.%s\r\n", CCYEL(ch, C_SPR),
+       vnum, CCNRM(ch, C_SPR));
+      send_to_char(buf, ch);
+
+      return(1);
+    }
+
+  }
+
+  return(0);
+}
diff -urN backup/interpreter.c src/interpreter.c
--- backup/interpreter.c	Sun Jun 10 17:04:26 2001
+++ src/interpreter.c	Fri Dec 14 02:59:16 2001
@@ -247,6 +247,7 @@
   { "burp"     , POS_RESTING , do_action   , 0, 0 },
   { "buy"      , POS_STANDING, do_not_here , 0, 0 },
   { "bug"      , POS_DEAD    , do_gen_write, 0, SCMD_BUG },
+  { "buildwalk", POS_STANDING, do_gen_tog,   LVL_BUILDER, SCMD_BUILDWALK },
 
   /* -c- */
   { "cast"     , POS_SITTING , do_cast     , 1, 0 },
@@ -1689,6 +1690,10 @@
 		     d->character);
       }
       d->has_prompt = 0;
+
+      /* Just in case.. to prevent building accidents */
+      REMOVE_BIT(PRF_FLAGS(d->character), PRF_BUILDWALK);
+
       break;
 
     case '2':
diff -urN backup/interpreter.h src/interpreter.h
--- backup/interpreter.h	Sun Jun 10 17:04:26 2001
+++ src/interpreter.h	Fri Dec 14 02:59:24 2001
@@ -119,6 +119,7 @@
 #define SCMD_SLOWNS	14
 #define SCMD_AUTOEXIT	15
 #define SCMD_TRACK	16
+#define SCMD_BUILDWALK 17
 
 /* do_wizutil */
 #define SCMD_REROLL	0
diff -urN backup/structs.h src/structs.h
--- backup/structs.h	Sun Jun 10 17:04:26 2001
+++ src/structs.h	Fri Dec 14 02:57:40 2001
@@ -202,7 +202,7 @@
 #define PRF_NOGRATZ	(1 << 20) /* Can't hear grats channel		*/
 #define PRF_ROOMFLAGS	(1 << 21) /* Can see room flags (ROOM_x)	*/
 #define PRF_CLS		(1 << 22) /* Clear screen in OasisOLC		*/
-
+#define PRF_BUILDWALK (1 << 23) /* BuildWalk mode enabled */
 
 /* Affect bits: used in char_data.char_specials.saved.affected_by */
 /* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */
