diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/act.informative.c /cryptic_alliances/src/act.informative.c
--- /tbamud-3.59/src/act.informative.c	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/act.informative.c	2009-08-03 20:23:41.000000000 -0400
@@ -414,9 +414,9 @@ static void do_auto_exits(struct char_da
     if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED) && !CONFIG_DISP_CLOSED_DOORS)
       continue;
     if (EXIT_FLAGGED(EXIT(ch, door), EX_CLOSED))
-      send_to_char(ch, "%s(%c)%s ", CCRED(ch, C_NRM), LOWER(*dirs[door]), CCCYN(ch, C_NRM));
+      send_to_char(ch, "%s(%s)%s ", CCRED(ch, C_NRM), autoexits[door] , CCCYN(ch, C_NRM));
     else
-      send_to_char(ch, "%c ", LOWER(*dirs[door]));
+      send_to_char(ch, "%s ", autoexits[door]);
     slen++;
   }
 
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/asciimap.c /cryptic_alliances/src/asciimap.c
--- /tbamud-3.59/src/asciimap.c	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/asciimap.c	2009-08-02 15:18:16.000000000 -0400
@@ -36,8 +36,8 @@
 #define MAX_MAP_SIZE (CANVAS_WIDTH - 1)/4
 #define MAX_MAP      CANVAS_WIDTH
 
-#define MAX_MAP_DIR 6
-#define MAX_MAP_FOLLOW 4
+#define MAX_MAP_DIR 10
+#define MAX_MAP_FOLLOW 10
 
 #define SECT_EMPTY 30 /* anything greater than num sect types */
 #define SECT_STRANGE (SECT_EMPTY + 1)
@@ -47,15 +47,22 @@
 #define DOOR_EW   -2
 #define DOOR_UP   -3
 #define DOOR_DOWN -4
-#define VDOOR_NS  -5
-#define VDOOR_EW  -6
-#define DOOR_NONE -7
-#define NUM_DOOR_TYPES 7
+	#define DOOR_DIAGNE      -5
+	#define DOOR_DIAGNW      -6
+	#define VDOOR_NS         -7
+	#define VDOOR_EW         -8
+	#define VDOOR_DIAGNE     -9
+	#define VDOOR_DIAGNW     -10
+	#define DOOR_UP_AND_NE   -11
+	#define DOOR_DOWN_AND_SE -12
+	#define DOOR_NONE        -13
+	#define NUM_DOOR_TYPES 13 
 
 #define MAP_CIRCLE    0
 #define MAP_RECTANGLE 1
 
 #define MAP_NORMAL  0
+#define MAP_NORMAL  0
 #define MAP_COMPACT 1
 
 struct map_info_type
@@ -67,8 +74,14 @@ struct map_info_type
 static struct map_info_type door_info[] =
 {
   { DOOR_NONE, "   " },
+	{ DOOR_DOWN_AND_SE, "@r-@n\\ " },
+	{ DOOR_UP_AND_NE,   "@r+@n/ " },
+	{ VDOOR_DIAGNW,     " @m+@n " },
+	{ VDOOR_DIAGNE,     " @m+@n "}, 
   { VDOOR_EW,  " @m+@n " },
   { VDOOR_NS,  " @m+@n "},
+	{ DOOR_DIAGNW,      " \\ " },
+	{ DOOR_DIAGNE,      " / " }, 
   { DOOR_DOWN, "@r-@n  " },
   { DOOR_UP,   "@r+@n  " },
   { DOOR_EW,   " - " },
@@ -78,8 +91,14 @@ static struct map_info_type door_info[] 
 static struct map_info_type compact_door_info[] =
 {
   { DOOR_NONE, " " },
+	{ DOOR_DOWN_AND_SE, "@R\\@n" },
+	{ DOOR_UP_AND_NE,   "@R/@n" },
+	{ VDOOR_DIAGNW,   "@m+@n" },
+	{ VDOOR_DIAGNE,   "@m+@n"}, 
   { VDOOR_EW,  " @m+@n " },
   { VDOOR_NS,  " @m+@n "},
+	{ DOOR_DIAGNW,"\\" },
+	{ DOOR_DIAGNE,"/" }, 
   { DOOR_DOWN, "@r-@n" },
   { DOOR_UP,   "@r+@n" },
   { DOOR_EW,   "-" },
@@ -165,10 +184,12 @@ static struct map_info_type world_map_in
 
 
 static int map[MAX_MAP][MAX_MAP];
-static int offsets[4][2] ={ {-2, 0},{ 0, 2},{ 2, 0},{ 0, -2} };
-static int offsets_worldmap[4][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1} };
-static int door_offsets[6][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1},{ -1, 1},{ 1, 1} };
-static int door_marks[6] = { DOOR_NS, DOOR_EW, DOOR_NS, DOOR_EW, DOOR_UP, DOOR_DOWN };
+
+	static int offsets[10][2] ={ {-2, 0},{ 0, 2},{ 2, 0},{ 0, -2},{0, 0},{ 0, 0},{ -2, -2},{ -2, 2},{2, 2},{ 2, -2} };
+	static int offsets_worldmap[10][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1},{0, 0},{ 0, 0},{ -1, -1},{ -1, 1},{1, 1},{ 1, -1} };
+	static int door_offsets[10][2] ={ {-1, 0},{ 0, 1},{ 1, 0},{ 0, -1},{ -1, 1},{ 1, 1},{ -1, -1},{ -1, 1},{ 1, 1},{ 1, -1} };
+	static int door_marks[10] = { DOOR_NS, DOOR_EW, DOOR_NS, DOOR_EW, DOOR_UP, DOOR_DOWN, DOOR_DIAGNW, DOOR_DIAGNE, DOOR_DIAGNW, DOOR_DIAGNE};
+
 static int vdoor_marks[4] = { VDOOR_NS, VDOOR_EW, VDOOR_NS, VDOOR_EW };
 /******************************************************************************
  * End Local (File Scope) Defines and Global Variables
@@ -250,6 +271,18 @@ static void MapArea(room_rnum room, stru
       case WEST:
         if(ypos > 0 || xpos!=x_exit_pos) continue;
         break;
+	case NORTHWEST:
+	if(xpos > 0 || ypos!=y_exit_pos || ypos > 0 || xpos!=x_exit_pos) continue;
+	break;
+	case NORTHEAST:
+	if(xpos > 0 || ypos!=y_exit_pos || ypos < ew_size || xpos!=x_exit_pos) continue;
+	break;
+	case SOUTHEAST:
+	if(xpos < ns_size || ypos!=y_exit_pos || ypos < ew_size || xpos!=x_exit_pos) continue;
+	break;
+	case SOUTHWEST:
+	if(xpos < ns_size || ypos!=y_exit_pos || ypos > 0 || xpos!=x_exit_pos) continue;
+	break; 
       }
 
 
@@ -263,8 +296,21 @@ static void MapArea(room_rnum room, stru
         return;
         }
 
-      if(!worldmap)
-        map[x+door_offsets[door][0]][y+door_offsets[door][1]] = door_marks[door] ;
+	if(!worldmap) {
+		if ((map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_NONE) ||
+			(map[x+door_offsets[door][0]][y+door_offsets[door][1]] == SECT_EMPTY)  ) {
+			map[x+door_offsets[door][0]][y+door_offsets[door][1]] = door_marks[door];
+		} else {
+			if ( ((door == NORTHEAST) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_UP)) ||
+			((door == UP) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_DIAGNE))  ) {
+			map[x+door_offsets[door][0]][y+door_offsets[door][1]] = DOOR_UP_AND_NE;
+			}
+			else if ( ((door == SOUTHEAST) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_DOWN)) ||
+			((door == DOWN) && (map[x+door_offsets[door][0]][y+door_offsets[door][1]] == DOOR_DIAGNW))  ) {
+				map[x+door_offsets[door][0]][y+door_offsets[door][1]] = DOOR_DOWN_AND_SE;
+			}
+		}
+	} 
 
       prospect_xpos = prospect_ypos = 0;
       switch (door) {
@@ -277,6 +323,14 @@ static void MapArea(room_rnum room, stru
         prospect_ypos = ew_size;
       case EAST:
         prospect_xpos = world[prospect_room].dir_option[rev_dir[door]] ? x_exit_pos : ns_size/2;
+	break;
+	case NORTHEAST:
+	case NORTHWEST:
+	case SOUTHEAST:
+	case SOUTHWEST:
+		prospect_xpos = world[prospect_room].dir_option[rev_dir[door]] ? x_exit_pos : ns_size/2;
+		prospect_ypos = world[prospect_room].dir_option[rev_dir[door]] ? y_exit_pos : ew_size/2;
+	break; 
       }
 
       if(worldmap) {
 
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/constants.c /cryptic_alliances/src/constants.c
--- /tbamud-3.59/src/constants.c	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/constants.c	2009-08-02 20:58:44.000000000 -0400
@@ -40,6 +40,10 @@ const char *dirs[] =
   "west",
   "up",
   "down",
+	"northwest",
+	"northeast",
+	"southeast",
+	"southwest", 
   "\n"
 };
 
@@ -770,7 +784,11 @@ int rev_dir[] =
   NORTH,
   EAST,
   DOWN,
-  UP
+	UP,
+	SOUTHEAST,
+	SOUTHWEST,
+	NORTHWEST,
+	NORTHEAST 
 };
 
 /** How much movement is lost moving through a particular sector type. */
@@ -785,7 +803,8 @@ int movement_loss[] =
   4,	/* Swimming   */
   1,	/* Unswimable */
   1,	/* Flying     */
-  5   /* Underwater */
+  5,   /* Underwater */
+	  4   /* Fungus Field */
 };
 
 /** The names of the days of the mud week. Not used in sprinttype(). */
@@ -910,6 +929,37 @@ const char *history_types[] = {
   "auction",
   "\n"
 };
+
+/*const char *autoexits[] =
+{
+  "n",
+  "e",
+  "s",
+  "w",
+  "u",
+  "d",
+  "ne",
+  "se",
+  "sw",
+  "nw",
+  "\n"
+}; */
+
+const char *autoexits[] =
+{
+  "n",
+  "e",
+  "s",
+  "w",
+  "u",
+  "d",
+  "nw",
+  "ne",
+  "se",
+  "sw",
+  "\n"
+}; 
+
 /* --- End of constants arrays. --- */
 
 /* Various arrays we count so we can check the world files.  These
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/constants.h /cryptic_alliances/src/constants.h
--- /tbamud-3.59/src/constants.h	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/constants.h	2009-08-02 15:27:08.000000000 -0400
@@ -57,4 +57,6 @@ extern size_t affected_bits_count;
 extern size_t extra_bits_count;
 extern size_t wear_bits_count;
 
+extern const char *autoexits[];
+
 #endif /* _CONSTANTS_H_ */
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/interpreter.c /cryptic_alliances/src/interpreter.c
--- /tbamud-3.59/src/interpreter.c	2009-04-04 19:50:12.000000000 -0400
+++ /cryptic_alliances/src/interpreter.c	2009-08-02 15:04:06.000000000 -0400
@@ -68,6 +68,14 @@ cpp_extern const struct command_info cmd
   { "west"     , "w"       , POS_STANDING, do_move     , 0, SCMD_WEST },
   { "up"       , "u"       , POS_STANDING, do_move     , 0, SCMD_UP },
   { "down"     , "d"       , POS_STANDING, do_move     , 0, SCMD_DOWN },
+	{ "northwest", "northw"  , POS_STANDING, do_move     , 0, SCMD_NW },
+	{ "nw"       , "nw"      , POS_STANDING, do_move     , 0, SCMD_NW },
+	{ "northeast", "northe"  , POS_STANDING, do_move     , 0, SCMD_NE },
+	{ "ne"       , "ne"      , POS_STANDING, do_move     , 0, SCMD_NE },
+	{ "southeast", "southe"  , POS_STANDING, do_move     , 0, SCMD_SE },
+	{ "se"       , "se"      , POS_STANDING, do_move     , 0, SCMD_SE },
+	{ "southwest", "southw"  , POS_STANDING, do_move     , 0, SCMD_SW },
+	{ "sw"       , "sw"      , POS_STANDING, do_move     , 0, SCMD_SW }, 
 
   /* now, the main list */
   { "at"       , "at"      , POS_DEAD    , do_at       , LVL_IMMORT, 0 },
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/interpreter.h /cryptic_alliances/src/interpreter.h
--- /tbamud-3.59/src/interpreter.h	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/interpreter.h	2009-08-02 15:04:42.000000000 -0400
@@ -99,6 +99,10 @@ struct alias_data {
 #define SCMD_WEST    WEST
 #define SCMD_UP      UP
 #define SCMD_DOWN    DOWN
+	#define SCMD_NW      NORTHWEST
+	#define SCMD_NE      NORTHEAST
+	#define SCMD_SE      SOUTHEAST
+	#define SCMD_SW      SOUTHWEST 
 
 /** @deprecated all old do_poof stuff is deprecated and unused. */
 #define SCMD_POOFIN   0
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/redit.c /cryptic_alliances/src/redit.c
--- /tbamud-3.59/src/redit.c	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/redit.c	2009-08-02 17:13:24.000000000 -0400
@@ -418,13 +418,13 @@ static void redit_disp_menu(struct descr
 	  "%s2%s) Description :\r\n%s%s"
 	  "%s3%s) Room flags  : %s%s\r\n"
 	  "%s4%s) Sector type : %s%s\r\n"
-	  "%s5%s) Exit north  : %s%d\r\n"
-	  "%s6%s) Exit east   : %s%d\r\n"
-	  "%s7%s) Exit south  : %s%d\r\n"
-	  "%s8%s) Exit west   : %s%d\r\n"
+		"%s5%s) Exit north  : %s%d%s,  %sB%s) Exit northwest : %s%d\r\n"
+		"%s6%s) Exit east   : %s%d%s,  %sC%s) Exit northeast : %s%d\r\n"
+		"%s7%s) Exit south  : %s%d%s,  %sD%s) Exit southeast : %s%d\r\n"
+		"%s8%s) Exit west   : %s%d%s,  %sE%s) Exit southwest : %s%d\r\n" 
 	  "%s9%s) Exit up     : %s%d\r\n"
 	  "%sA%s) Exit down   : %s%d\r\n"
-	  "%sB%s) Extra descriptions menu\r\n"
+		"%sF%s) Extra descriptions menu\r\n" 
 	  "%sS%s) Script      : %s%s\r\n"
           "%sW%s) Copy Room\r\n"
 	  "%sX%s) Delete Room\r\n"
@@ -440,15 +440,27 @@ static void redit_disp_menu(struct descr
 	  grn, nrm, cyn,
 	  room->dir_option[NORTH] && room->dir_option[NORTH]->to_room != NOWHERE ?
 	  world[room->dir_option[NORTH]->to_room].number : -1,
+		nrm, grn, nrm, cyn,
+		room->dir_option[NORTHWEST] && room->dir_option[NORTHWEST]->to_room != NOWHERE ?
+		world[room->dir_option[NORTHWEST]->to_room].number : -1,
 	  grn, nrm, cyn,
 	  room->dir_option[EAST] && room->dir_option[EAST]->to_room != NOWHERE ?
 	  world[room->dir_option[EAST]->to_room].number : -1,
+		nrm, grn, nrm, cyn,
+		room->dir_option[NORTHEAST] && room->dir_option[NORTHEAST]->to_room != NOWHERE ?
+		world[room->dir_option[NORTHEAST]->to_room].number : -1, 
 	  grn, nrm, cyn,
 	  room->dir_option[SOUTH] && room->dir_option[SOUTH]->to_room != NOWHERE ?
 	  world[room->dir_option[SOUTH]->to_room].number : -1,
+		nrm, grn, nrm, cyn,
+		room->dir_option[SOUTHEAST] && room->dir_option[SOUTHEAST]->to_room != NOWHERE ?
+		world[room->dir_option[SOUTHEAST]->to_room].number : -1,   
 	  grn, nrm, cyn,
 	  room->dir_option[WEST] && room->dir_option[WEST]->to_room != NOWHERE ?
 	  world[room->dir_option[WEST]->to_room].number : -1,
+		nrm, grn, nrm, cyn,
+		room->dir_option[SOUTHWEST] && room->dir_option[SOUTHWEST]->to_room != NOWHERE ?
+		world[room->dir_option[SOUTHWEST]->to_room].number : -1, 
 	  grn, nrm, cyn,
 	  room->dir_option[UP] && room->dir_option[UP]->to_room != NOWHERE ?
 	  world[room->dir_option[UP]->to_room].number : -1,
@@ -560,6 +572,26 @@ void redit_parse(struct descriptor_data 
       break;
     case 'b':
     case 'B':
+		OLC_VAL(d) = NORTHWEST;
+		redit_disp_exit_menu(d);
+		break;
+	case 'c':
+	case 'C':
+		OLC_VAL(d) = NORTHEAST;
+		redit_disp_exit_menu(d);
+		break;
+	case 'd':
+	case 'D':
+		OLC_VAL(d) = SOUTHEAST;
+		redit_disp_exit_menu(d);
+		break;
+	case 'e':
+	case 'E':
+		OLC_VAL(d) = SOUTHWEST;
+		redit_disp_exit_menu(d);
+		break;
+	case 'f':
+	case 'F':
       /* If the extra description doesn't exist. */
       if (!OLC_ROOM(d)->ex_description)
 	CREATE(OLC_ROOM(d)->ex_description, struct extra_descr_data, 1);
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/spec_procs.c /cryptic_alliances/src/spec_procs.c
--- /tbamud-3.59/src/spec_procs.c	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/spec_procs.c	2009-08-02 15:27:54.000000000 -0400
@@ -434,7 +434,7 @@ SPECIAL(guild_guard) 
    
   /* find out what direction they are trying to go */ 
   for (direction = 0; direction < NUM_OF_DIRS; direction++) 
-    if (!strcmp(cmd_info[cmd].command, dirs[direction])) 
+    if (!strcmp(cmd_info[cmd].command, dirs[direction]) || !strcmp(cmd_info[cmd].command, autoexits[direction])) 
       break; 
 
   for (i = 0; guild_info[i].guild_room != NOWHERE; i++) { 
diff -BburpN -x '*.o' -x '*.BAK' /tbamud-3.59/src/structs.h /cryptic_alliances/src/structs.h
--- /tbamud-3.59/src/structs.h	2009-04-04 19:46:49.000000000 -0400
+++ /cryptic_alliances/src/structs.h	2009-08-02 20:44:38.000000000 -0400
@@ -64,10 +64,15 @@
 #define WEST           3    /**< The direction west */
 #define UP             4    /**< The direction up */
 #define DOWN           5    /**< The direction down */
+#define NORTHWEST      6    /**< The direction north-west */
+#define NORTHEAST      7    /**< The direction north-east */
+#define SOUTHEAST      8    /**< The direction south-east */
+#define SOUTHWEST      9    /**< The direction south-west */
+
 /** Total number of directions available to move in. BEFORE CHANGING THIS, make
  * sure you change every other direction and movement based item that this will
  * impact. */
-#define NUM_OF_DIRS    6
+#define NUM_OF_DIRS    10
 
 /* Room flags: used in room_data.room_flags */
 /* WARNING: In the world files, NEVER set the bits marked "R" ("Reserved") */
