
  Heck Patch 1d
  Kelly Bailey

  Copy to your nethack-3.4.1 source folder and
  $ patch -p1 < thisfile

  You might need to edit your top level Makefile to
  include all of new dungeon levels in the build process.

  Currently, you need to change the code that includes:
	sanctum.lev    ->    santcm-1.lev sanctm-2.lev

  The new levels will not go away if you undefine HECK_PATCH.
  If you have anything in your dat/ directory that would be
  difficult to replace you should back it up before installing
  this patch.

diff -ru -x '*.o' --strip-trailing-cr nh341/dat/dungeon.def heck1b/dat/dungeon.def
--- nh341/dat/dungeon.def	2003-02-23 05:43:16.000000000 -0800
+++ heck1b/dat/dungeon.def	2003-06-04 00:11:50.000000000 -0700
@@ -53,7 +53,7 @@
 ALIGNMENT:	noalign
 BRANCH:		"Vlad's Tower" @ (9, 5) up
 LEVEL:		"valley" "V" @ (1, 0)
-LEVEL:		"sanctum" "none" @ (-1, 0)
+RNDLEVEL:	"sanctm" "none" @ (-1, 0) 2
 LEVEL:		"juiblex" "J" @ (4, 4)
 LEVEL:		"baalz" "B" @ (6, 4)
 LEVEL:		"asmodeus" "A" @ (2, 6)
diff -ru -x '*.o' --strip-trailing-cr nh341/dat/gehennom.des heck1b/dat/gehennom.des
--- nh341/dat/gehennom.des	2003-02-23 05:43:16.000000000 -0800
+++ heck1b/dat/gehennom.des	2003-06-04 00:11:50.000000000 -0700
@@ -274,7 +274,29 @@
 #
 MAZE:"orcus",random
 FLAGS: noteleport,shortsighted
-GEOMETRY:right,center
+
+GEOMETRY:left,center
+MAP
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+------
+ENDMAP
+
+GEOMETRY:half-right,center
 # A ghost town
 MAP
 .|....|....|....|..............|....|........
@@ -423,10 +445,11 @@
 |---+------------...|
 |.....|.........|-+--
 |..---|.........|....
-|..|..S.........|....
+|..|..S.........|.\..
 |..|..|.........|....
 |..|..|.........|-+--
 |..|..-----------...|
+|..|..........|.....|
 |..S..........|.....|
 ---------------------
 ENDMAP
@@ -441,9 +464,11 @@
 #
 STAIR:(13,07),down
 # Non diggable walls
-NON_DIGGABLE:(00,00,20,11)
+NON_DIGGABLE:(00,00,20,12)
 # Entire main area
 REGION:(01,01,20,10),unlit,"ordinary"
+# Spolight for the throne
+REGION:(18,6,18,6),lit,"ordinary"
 # The fellow in residence
 MONSTER:'&',"Asmodeus",(12,07)
 # Some random weapons and armor.
@@ -473,22 +498,64 @@
 MONSTER:'V',random,random
 MONSTER:'V',random,random
 MONSTER:'V',random,random
-# Second part
+# Second part, great hall
 GEOMETRY:half-right,center
 MAP
 ---------------------------------
-................................|
+|...............................|
+|.---..---..---..---..---..---..|
+..---..---..---..---..---..---..|
 ................................+
-................................|
+..---..---..---..---..---..---..|
+|.---..---..---..---..---..---..|
+|...............................|
 ---------------------------------
 ENDMAP
-MAZEWALK:(32,02),east
+MAZEWALK:(32,04),east
 # Non diggable walls
-NON_DIGGABLE:(00,00,32,04)
-DOOR:closed,(32,02)
+NON_DIGGABLE:(00,00,32,08)
+DOOR:locked,(32,04)
+# Asmodeus's court
+MONSTER[10%]:'&',"pit fiend",random,"Goab"
+MONSTER[10%]:'&',"pit fiend",random,"Gorson"
+MONSTER[10%]:'&',"pit fiend",random,"Amaymon"
+MONSTER[10%]:'&',"pit fiend",random,"Zimimar"
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
 MONSTER:'&',random,random
 MONSTER:'&',random,random
 MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'&',random,random
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',random,random,hostile
+MONSTER:'i',"lemure",random,hostile
+MONSTER:'i',"lemure",random,hostile
+MONSTER:'i',"lemure",random,hostile
+MONSTER:'i',"lemure",random,hostile
+MONSTER:'i',"lemure",random,hostile
+TRAP:"anti magic", random
+TRAP:"fire", random
+TRAP:"magic", random
 TRAP:"anti magic", random
 TRAP:"fire", random
 TRAP:"magic", random
@@ -498,26 +565,82 @@
 #
 MAZE:"baalz",random
 FLAGS: noteleport
+
+# Courtyards
+GEOMETRY:left,center
+MAP
+ - - --- --
+-------...-
+ - - - ... 
+-------...-
+ - - --- --
+ENDMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+
+GEOMETRY:half-left,top
+MAP
+ - - 
+--.--
+--.--
+-...-
+ ... 
+-...-
+-- --
+ENDMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+
+GEOMETRY:half-left,bottom
+MAP
+-- --
+-...-
+ ... 
+-...-
+--.--
+--.--
+ - -
+ENDMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+
 GEOMETRY:right,center
 MAP
--------------------------------------------------
-|                    ---               ----      
-|          ----      |   ------------  |         
-| ------      |  --------|..........|---         
-| |....|  -------|...........--------------      
----....|--|..................S............|----  
-....--....S..----------------|............S...|  
----....|--|..................|............|----  
-| |....|  -------|...........-----S--------      
-| ------      |  --------|..........|---         
-|          ----     |    ------------  |         
-|                   ---                ----      
--------------------------------------------------
+ - ------------.-.----.S.----------------- - - - 
+-----..........--.....--................---------
+-----...----...-......-..------------...------ - 
+|..........-...S.-------S|..........-.......-----
+|...F.F...-------|...........---S----------.---- 
+|..F.F.F--|..................|............|------
+S...FFF.S.S..----------------|............S...|- 
+|..F.F.F--|..................|............|------
+|...F.F...------S|...........--------S-----.---- 
+|..........-...-.--------|..........-.......-----
+-----...----...S......-..------------...---S-- - 
+-----..........--.....--................----S----
+ - ------------.-.----.S.----------------- - - - 
 ENDMAP
 STAIR:levregion(01,00,15,20),levregion(15,1,70,16),up
 BRANCH:levregion(01,00,15,20),levregion(15,1,70,16)
 TELEPORT_REGION:levregion(01,00,15,20),levregion(15,1,70,16)
-NON_DIGGABLE:(00,00,46,12)
+REGION:(5,5,5,5),lit,"ordinary"
+REGION:(4,6,4,6),lit,"ordinary"
+REGION:(6,6,6,6),lit,"ordinary"
+REGION:(5,7,5,7),lit,"ordinary"
+NON_DIGGABLE:(0,2,44,10)
+NON_DIGGABLE:(4,0,40,12)
+NON_DIGGABLE:(45,4,46,8)
+NON_DIGGABLE:(42,11,43,11)
+
 MAZEWALK:(00,06),west
 STAIR:(44,06),down
 # The fellow in residence
@@ -546,6 +669,9 @@
 MONSTER:'&',"horned devil",(32,05)
 MONSTER:'&',"barbed devil",(38,07)
 MONSTER:'L',random,random
+MONSTER:'y',"black light",(5,4),asleep
+MONSTER:'y',"black light",(5,8),asleep
+
 # Some Vampires for good measure
 MONSTER:'V',random,random
 MONSTER:'V',random,random
@@ -553,7 +679,7 @@
 #
 # The Sanctum Level
 #
-MAZE:"sanctum", ' '
+MAZE:"sanctm-1", ' '
 FLAGS: noteleport,hardfloor,nommap
 GEOMETRY:center,center
 MAP
@@ -672,3 +798,101 @@
 MONSTER:'V',random,random
 MONSTER:'V',random,random
 STAIR:(63,15),up
+
+MAZE:"sanctm-2", ' '
+FLAGS: noteleport,hardfloor,nommap
+GEOMETRY:center,center
+MAP
+                     . ..        ----------              --------
+            --------- .  .       |........|              |..||..|
+            |.......|    .    ----.--..--.---         ----......----
+------------|..---..|    .    |....--..--.B.|         |.....--.....|
+|..||..||..|-..---..-----S-----.--........B.|----------.--..--..--.|
+|...........B.......||.||.||.||.--.BBBBBBBB.||.||.||.||.--......--.|
+|...........B.......+.........S....B........+.........S............|
+|...........B.......||.||.||.||.--.BBBBBBBB.||.||.||.||.--......--.|
+|..||..||..|-..---..-----------.--........B.|----S-----.--..--..--.|
+------------|..---..|         |....--..--.B.|    .    |.....--.....|
+            |.......|         ----.--..--.-S-    .    ----......----
+            ---------            |........|.......       |..||..| 
+                                 ----------              -------- 
+ENDMAP
+RANDOM_PLACES:(22,5),(22,7),(25,7),(28,5),(28,7),(46,5),(46,7),(49,5),(52,5),(52,7)
+REGION:(1,4,11,8),lit,"temple"
+ALTAR:(2,6),noalign,sanctum
+REGION:(34,4,42,8),unlit,"morgue",filled,true
+NON_DIGGABLE:(0,0,67,12)
+NON_PASSWALL:(21,0,29,12)
+
+FOUNTAIN:(37,6)
+
+DOOR:locked,(20,6)
+DOOR:locked,(44,6)
+
+OBJECT:'[',random,(13,2)
+OBJECT:'[',random,(14,2)
+OBJECT:'[',random,(15,2)
+OBJECT:'!',random,(17,2)
+OBJECT:'!',random,(18,2)
+OBJECT:'!',random,(19,2)
+OBJECT:'?',random,(13,10)
+OBJECT:'?',random,(14,10)
+OBJECT:'?',random,(15,10)
+OBJECT:')',random,(17,10)
+OBJECT:')',random,(18,10)
+OBJECT:')',random,(19,10)
+
+MONSTER:'&',"horned devil",(1,5)
+MONSTER:'&',"barbed devil",(2,5)
+MONSTER:'&',"erinys",(2,5)
+MONSTER:'&',"marilith",(1,7)
+MONSTER:'&',"nalfeshnee",(2,7)
+MONSTER:'&',"sandestin",(3,7)
+
+MONSTER:'@',"aligned priest",(14,2),noalign,hostile
+MONSTER:'@',"aligned priest",(14,5),noalign,hostile
+MONSTER:'@',"aligned priest",(14,7),noalign,hostile
+MONSTER:'@',"aligned priest",(14,10),noalign,hostile
+MONSTER:'@',"aligned priest",(17,2),noalign,hostile
+MONSTER:'@',"aligned priest",(17,5),noalign,hostile
+MONSTER:'@',"aligned priest",(17,7),noalign,hostile
+MONSTER:'@',"aligned priest",(17,10),noalign,hostile
+MONSTER:'@',"aligned priest",(13,6),noalign,hostile
+
+
+TRAP:random,(25,6)
+TRAP:random,(43,6)
+TRAP:"fire",(18,5)
+TRAP:"fire",(18,6)
+TRAP:"fire",(18,7)
+TRAP:"fire",(19,5)
+TRAP:"fire",(19,7)
+TRAP:"fire",(25,3)
+TRAP:"magic",(25,1)
+OBJECT:'`',"boulder",(23,0)
+TRAP:random,(22,1)
+ENGRAVING:(21,0),engrave,"Closed for Repairs"
+
+TRAP:"spiked pit", random
+TRAP:"fire", random
+TRAP:"sleep gas", random
+TRAP:"anti magic", random
+TRAP:"fire", random
+TRAP:"magic", random
+
+MONSTER:'v',"fire vortex",place[0],asleep,hostile
+MONSTER:'v',"fire vortex",place[1],asleep,hostile
+MONSTER:'v',"fire vortex",place[2],asleep,hostile
+MONSTER:'v',"fire vortex",place[3],asleep,hostile
+MONSTER:'v',"fire vortex",place[4],asleep,hostile
+CONTAINER:'`',"statue",place[5],"flaming sphere",0
+CONTAINER:'`',"statue",place[6],"flaming sphere",0
+CONTAINER:'`',"statue",place[7],"flaming sphere",0
+CONTAINER:'`',"statue",place[8],"flaming sphere",0
+CONTAINER:'`',"statue",place[9],"flaming sphere",0
+MONSTER:'v',"fire vortex",(25,5),asleep,hostile
+MONSTER:'v',"fire vortex",(49,7),asleep,hostile
+
+STAIR:(62,6),up
+MONSTER:'y',"black light",(60,2),peaceful
+MONSTER:'y',"black light",(60,10),peaceful
diff -ru -x '*.o' --strip-trailing-cr nh341/dat/yendor.des heck1b/dat/yendor.des
--- nh341/dat/yendor.des	2003-02-23 05:43:18.000000000 -0800
+++ heck1b/dat/yendor.des	2003-06-04 00:11:50.000000000 -0700
@@ -3,52 +3,184 @@
 #	Copyright (c) 1992 by M. Stephenson and Izchak Miller
 # NetHack may be freely redistributed.  See license for details.
 #
+
 # The top (real) wizard level.
 # Keeping the Moat for old-time's sake
-MAZE:"wizard1",random
+
+
+MAZE:"wizard1",'-'
 FLAGS:noteleport,hardfloor
+
+GEOMETRY:center,center
+MAP
+--------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.----------
+---------------------------------------------------------------------------
+--------.-.-.-.-.-.-.-------------------------------.-.-.-.-.-.-.----------
+-----------------------                           -------------------------
+--------.-.-------.-.--                           --.-.-------.-.----------
+-----------------------                           -------------------------
+--------.-.-------.-.--                           --.-.-------.-.----------
+-----------------------                           -------------------------
+--------.-.-------.-.--                           --.-.-------.-.----------
+-----------------------                           -------------------------
+--------.-.-------.-.--                           --.-.-------.-.----------
+-----------------------                           -------------------------
+--------.-.-------.-.--                           --.-.-------.-.----------
+-----------------------                           -------------------------
+--------.-.-.-.-.-.-.-------------------------------.-.-.-.-.-.-.----------
+---------------------------------------------------------------------------
+--------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.----------
+---------------------------------------------------------------------------
+ENDMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+OBJECT:random,random,random
+
+
+
+GEOMETRY:center,center
+MAP
+-------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - ----------
+---------------------------------------------------------------------------
+-------- - - - - - - ------------------------------- - - - - - - ----------
+-----------------------                           -------------------------
+-------- - -.....- - --                           -- - -.....- - ----------
+------------.....------                           ------.....--------------
+-------- - -.....- - --                           -- - -.....- - ----------
+------------.....------                           ------.....--------------
+-------- - B.....B - --                           -- - B.....B - ----------
+------------.....------                           ------.....--------------
+-------- - -.....- - --                           -- - -.....- - ----------
+------------.....------                           ------.....--------------
+-------- - -.....- - --                           -- - -.....- - ----------
+-----------------------                           -------------------------
+-------- - - - - - - ------------------------------- - - - - - - ----------
+---------------------------------------------------------------------------
+-------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - ----------
+---------------------------------------------------------------------------
+ENDMAP
+RANDOM_MONSTERS:'T','H','O','C'
+MAZEWALK:(16,0),east
+# Barracks of Minions
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[0],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+MONSTER:monster[1],random,random,hostile
+# Their equipment
+OBJECT:')',"battle-axe",random,cursed,3
+OBJECT:')',"broadsword",random,cursed,3
+OBJECT:')',"broadsword",random,cursed,3
+OBJECT:')',"battle-axe",random,cursed,3
+OBJECT:')',"two-handed sword",random,cursed,3
+OBJECT:')',"two-handed sword",random,cursed,3
+OBJECT:')',random,random,cursed,3
+OBJECT:')',random,random,cursed,3
+OBJECT:')',random,random,cursed,3
+OBJECT:')',random,random,cursed,3
+OBJECT:'/',"secret door detection",random
+OBJECT:'!',"paralysis",random
+OBJECT:'!',"paralysis",random
+OBJECT:'!',"paralysis",random
+OBJECT:'!',"paralysis",random
+OBJECT:'[',"plate mail",random,cursed,3
+OBJECT:'[',"plate mail",random,cursed,3
+OBJECT:'[',"plate mail",random,cursed,3
+OBJECT:'[',random,random,cursed,3
+OBJECT:'[',random,random,cursed,3
+
 GEOMETRY:center,center
 MAP
-----------------------------.
-|.......|..|.........|.....|.
-|.......S..|.}}}}}}}.|.....|.
-|..--S--|..|.}}---}}.|---S-|.
-|..|....|..|.}--.--}.|..|..|.
-|..|....|..|.}|...|}.|..|..|.
-|..--------|.}--.--}.|..|..|.
-|..|.......|.}}---}}.|..|..|.
-|..S.......|.}}}}}}}.|..|..|.
-|..|.......|.........|..|..|.
-|..|.......|-----------S-S-|.
-|..|.......S...............|.
-----------------------------.
+-----------------------------
+|.......|..|.........|......|
+|.......S..|.}}}}}}}.|......|
+|..--S--|..|.}}---}}.|---S--|
+|..|....|..|.}--.--}.|..|...|
+|..|....|..|.}|...|}.|..|...|
+|..--------|.}--.--}.|..|...|
+|..|.......|.}}---}}.|..|...|
+|..S.......|.}}}}}}}.|..|...|
+|..|.......|.........|..|...|
+|..|.......|-----------S-S--|
+|..|.......S................|
+-----------------------------
 ENDMAP
 STAIR:levregion(01,00,79,20),(0,0,28,12),up
 STAIR:levregion(01,00,79,20),(0,0,28,12),down
 BRANCH:levregion(01,00,79,20),(0,0,28,12)
-TELEPORT_REGION:levregion(01,00,79,20),(0,0,27,12)
+TELEPORT_REGION:levregion(01,00,79,20),(0,0,28,12)
 # Make it a morgue for rm id in mkmaze.c
 # for the purpose of random sdoor placement
 REGION:(12,01,20,09),unlit,"morgue",unfilled
-MAZEWALK:(28,05),east
 LADDER:(06,05),down
 # Non diggable walls
 # Walls inside the moat stay diggable
 NON_DIGGABLE:(00,00,11,12)
 NON_DIGGABLE:(11,00,21,00)
-NON_DIGGABLE:(11,10,27,12)
-NON_DIGGABLE:(21,00,27,10)
+NON_DIGGABLE:(11,10,28,12)
+NON_DIGGABLE:(21,00,28,10)
 # Non passable walls
 NON_PASSWALL:(00,00,11,12)
 NON_PASSWALL:(11,00,21,00)
-NON_PASSWALL:(11,10,27,12)
-NON_PASSWALL:(21,00,27,10)
-# The wizard and his guards
-MONSTER:'@',"Wizard of Yendor",(16,05),asleep
-MONSTER:'d',"hell hound",(15,05)
-MONSTER:'V',"vampire lord",(17,05)
-# The local treasure
-OBJECT:'+',"Book of the Dead",(16,05)
+NON_PASSWALL:(11,10,28,12)
+NON_PASSWALL:(21,00,28,10)
+# The wizard?
+MONSTER:'@',"wizard",(16,5),"the Wizard of Yendor",asleep,hostile
 # Surrounding terror
 MONSTER:';',"kraken",(14,02)
 MONSTER:';',"giant eel",(17,02)
@@ -68,7 +200,9 @@
 MONSTER:'&',random,random
 MONSTER:'&',random,random
 # And to make things a little harder.
-TRAP:"board",(16,04)
+#TRAP:"board",(16,04)
+PORTAL:(16,4,16,4),(0,0,0,0),"wizard2"
+OBJECT:'`',"boulder",(16,4)
 TRAP:"board",(16,06)
 TRAP:"board",(15,05)
 TRAP:"board",(17,05)
@@ -91,39 +225,83 @@
 # The middle wizard level.
 MAZE:"wizard2",random
 FLAGS:noteleport,hardfloor
+
+GEOMETRY:right,center
+MAP
+ - - - - ----------
+-------------------
+ - - - - ----------
+-------------------
+ - ----- ----------
+-------------------
+ ------- ----------
+------.....--------
+-----... ...-------
+------.....--------
+ ------- ----------
+-------------------
+ - ----- ----------
+-------------------
+ - - - - ----------
+-------------------
+ - - - - ----------
+ENDMAP
+MAZEWALK:(8,2),south
+GEOMETRY:left,center
+MAP
+-------- - - - - 
+-----------------
+-------- - - - - 
+-----------------
+-------- ----- - 
+-----------------
+-------- ------- 
+------.....------
+-----... ...-----
+------.....------
+-------- ------- 
+-----------------
+-------- ----- - 
+-----------------
+-------- - - - - 
+-----------------
+-------- - - - - 
+ENDMAP
+MAZEWALK:(8,2),south
+
+
 GEOMETRY:center,center
 MAP
-----------------------------.
-|.....|.S....|.............|.
-|.....|.-------S--------S--|.
-|.....|.|.........|........|.
-|..-S--S|.........|........|.
-|..|....|.........|------S-|.
-|..|....|.........|.....|..|.
-|-S-----|.........|.....|..|.
-|.......|.........|S--S--..|.
-|.......|.........|.|......|.
-|-----S----S-------.|......|.
-|............|....S.|......|.
-----------------------------.
+-----------------------------
+|.....|.S....|..............|
+|.....|.----------------S---|
+|.....|.|...}}}}}}|.........|
+|..-S--S|..} } } }|.........|
+|..|BB..|.}}}}}}}}|------S--|
+|..|BB..|} } } } }|.BBBB|...|
+|-S-----|}}}}}}}}}|.BBBB|...|
+|.......|} } } }..|S--S--...|
+|.......|}}}}}}}..|.|.......|
+|-----S------------.|.......|
+|............S....S.|.......|
+-----------------------------
 ENDMAP
 STAIR:levregion(01,00,79,20),(0,0,28,12),up
 STAIR:levregion(01,00,79,20),(0,0,28,12),down
 BRANCH:levregion(01,00,79,20),(0,0,28,12)
-TELEPORT_REGION:levregion(01,00,79,20),(0,0,27,12)
-REGION:(09,03,17,09),unlit,"zoo"
-DOOR:closed,(15,02)
-DOOR:closed,(11,10)
-MAZEWALK:(28,05),east
+TELEPORT_REGION:levregion(01,00,79,20),(0,0,28,12)
+MAZEWALK:(10,6),east
+REGION:(21,6,27,11),unlit,"zoo"
+REGION:(1,1,5,6),unlit,"zoo"
 LADDER:(12,01),up
-LADDER:(14,11),down
+LADDER:(14,01),down
 # Non diggable walls everywhere
-NON_DIGGABLE:(00,00,27,12)
+NON_DIGGABLE:(00,00,28,12)
 #
-NON_PASSWALL:(00,00,06,12)
-NON_PASSWALL:(06,00,27,02)
-NON_PASSWALL:(16,02,27,12)
-NON_PASSWALL:(06,12,16,12)
+NON_PASSWALL:(00,00,08,12)
+NON_PASSWALL:(08,00,28,02)
+NON_PASSWALL:(16,02,18,12)
+NON_PASSWALL:(08,12,18,12)
 # Random traps.
 TRAP:"spiked pit",random
 TRAP:"sleep gas",random
@@ -136,53 +314,156 @@
 OBJECT:'?',random,random
 OBJECT:'+',random,random
 # treasures
-OBJECT:'"',random,(04,06)
+OBJECT:'"',random,(06,06)
+
+# The wizard and his guards
+MONSTER:'@',"Wizard of Yendor",(9,3),asleep
+MONSTER:'d',"hell hound",(10,3)
+MONSTER:'V',"vampire lord",(9,4),asleep
+MONSTER:''',"iron golem",(11,3)
+MONSTER:''',"iron golem",(9,5)
+# The local treasure
+OBJECT:'+',"Book of the Dead",(9,3)
+OBJECT:')',"glaive",(11,3),cursed,5
+OBJECT:')',"glaive",(9,5),cursed,5
+#
+PORTAL:(17,9,17,9),(0,0,0,0),"wizard1"
+
 
 
 # The bottom wizard level.
 # Memorialize the fakewiz setup.
 MAZE:"wizard3",random
 FLAGS:noteleport,hardfloor
+INIT_MAP:'.','-',false,true,unlit,false
+GEOMETRY:left,center
+MAP
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+ENDMAP
+MAZEWALK:(0,0),south
+
+GEOMETRY:right,center
+MAP
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+-----
+ - - 
+ENDMAP
+MAZEWALK:(0,0),south
+
+# Small chance of no join, but no big deal.
+
 GEOMETRY:center,center
 MAP
-----------------------------.
-|..|............S..........|.
-|..|..------------------S--|.
-|..|..|.........|..........|.
-|..S..|.}}}}}}}.|..........|.
-|..|..|.}}---}}.|-S--------|.
-|..|..|.}--.--}.|..|.......|.
-|..|..|.}|...|}.|..|.......|.
-|..---|.}--.--}.|..|.......|.
-|.....|.}}---}}.|..|.......|.
-|.....S.}}}}}}}.|..|.......|.
-|.....|.........|..S.......|.
-----------------------------.
+ - - - - - - - - - - - - - - - - 
+---------------------------------
+ ------------------------------- 
+---                           ---
+ --                           -- 
+---                           ---
+ --                           -- 
+---                           ---
+ --                           -- 
+---                           ---
+ --                           -- 
+---                           ---
+ --                           -- 
+---                           ---
+ ------------------------------- 
+---------------------------------
+ - - - - - - - - - - - - - - - - 
 ENDMAP
-STAIR:levregion(01,00,79,20),(0,0,28,12),up
-STAIR:levregion(01,00,79,20),(0,0,28,12),down
+MAZEWALK:(0,0),south
+
+NOMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+
+GEOMETRY:center,center
+MAP
+-----------------------------
+|..|............S...........|
+|..|..------------------S---|
+|..|..|.........|...........|
+|..S..|.}}}}}}}.|...........|
+|..|..|.}}---}}.|-S---------|
+|..|..|.}--.--}.|..|........|
+|..|..|.}|...|}.|..|........|
+|..---|.}--.--}.|..|........|
+|.....|.}}---}}.|..|........|
+|.....S.}}}}}}}.|..|........|
+|.....|.........|..S........|
+-----------------------------
+ENDMAP
+STAIR:levregion(01,00,50,20),(0,0,28,12),up
+STAIR:levregion(40,00,79,20),(0,0,28,12),down
 BRANCH:levregion(01,00,79,20),(0,0,28,12)
-TELEPORT_REGION:levregion(01,00,79,20),(0,0,27,12)
+TELEPORT_REGION:levregion(01,00,79,20),(0,0,28,12)
 PORTAL:(25,11,25,11),(0,0,0,0),"fakewiz1"
-MAZEWALK:(28,09),east
 REGION:(07,03,15,11),unlit,"morgue",unfilled
 REGION:(17,06,18,11),unlit,"beehive"
 # make the entry chamber a real room; it affects monster arrival;
 # `unfilled' is a kludge to force an ordinary room to remain a room
-REGION:(20,06,26,11),unlit,"ordinary",unfilled
+REGION:(20,06,27,11),unlit,"ordinary",unfilled
 DOOR:closed,(18,05)
 DOOR:closed,(19,11)
 LADDER:(11,07),up
 # Non diggable walls
 # Walls inside the moat stay diggable
 NON_DIGGABLE:(00,00,06,12)
-NON_DIGGABLE:(06,00,27,02)
-NON_DIGGABLE:(16,02,27,12)
+NON_DIGGABLE:(06,00,28,02)
+NON_DIGGABLE:(16,02,28,12)
 NON_DIGGABLE:(06,12,16,12)
 #
 NON_PASSWALL:(00,00,06,12)
-NON_PASSWALL:(06,00,27,02)
-NON_PASSWALL:(16,02,27,12)
+NON_PASSWALL:(06,00,28,02)
+NON_PASSWALL:(16,02,28,12)
 NON_PASSWALL:(06,12,16,12)
 #
 MONSTER:'L',random,(10,07)
@@ -217,7 +498,96 @@
 # The former decoy wizard levels.
 # There are two of these, and we need to
 # distinguish between them for the portal.
-MAZE:"fakewiz1",random
+MAZE:"fakewiz1",'-'
+# put in monsters/traps at known safe locations (unfortunately mazewalks
+# are done last, so we have to make the locations safe by force
+GEOMETRY:center,center
+MAP
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
+----------------------------.-.-.-.-.-.-.-.-.-
+----------------------------------------------------
+----------------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------
+----------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------
+----------.-.-.-.-.-.-.-.-.-.-.-.-------.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------------
+----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------------
+----------.-.-.-.-.-.-.-.-.-.-.-.-------.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------
+----------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------
+----------------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------
+----------------------------.-.-.-.-.-.-.-.-.-
+---------------------------------------------------------------------------
+ENDMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+GEOMETRY:center,center
+MAP
+------------------------ - - - - - - - - --------------------------
+-------------------------------------------------------------------
+------------------ - - - - - - - - - - - - - - --------------------
+-------------------------------------------------------------------
+------------ - - - - - - - -.. . . ..- - - - - - - - --------------
+----------------------------.-------.------------------------------
+------ - - - - - - - - - - - ------- - - - - - - - - - - - --------
+----------------------------.-------.------------------------------
+ - - - - - - - - - - - - - - ------- - - - - - - - - - - - - - - --
+----------------------------.-------.------------------------------
+------ - - - - - - - - - - - ------- - - - - - - - - - - - --------
+----------------------------.-------.------------------------------
+------------ - - - - - - - -.. . . ..- - - - - - - - --------------
+-------------------------------------------------------------------
+------------------ - - - - - - - - - - - - - - --------------------
+-------------------------------------------------------------------
+------------------------ - - - - - - - - --------------------------
+-------------------------------------------------------------------
+ENDMAP
+NON_DIGGABLE:(0,0,23,1)
+NON_DIGGABLE:(41,0,66,1)
+NON_DIGGABLE:(0,2,17,3)
+NON_DIGGABLE:(47,2,66,3)
+NON_DIGGABLE:(0,4,11,5)
+NON_DIGGABLE:(53,4,66,5)
+NON_DIGGABLE:(0,6,5,7)
+NON_DIGGABLE:(59,6,66,7)
+#
+NON_DIGGABLE:(0,15,23,17)
+NON_DIGGABLE:(41,15,66,17)
+NON_DIGGABLE:(0,13,17,14)
+NON_DIGGABLE:(47,13,66,14)
+NON_DIGGABLE:(0,11,11,12)
+NON_DIGGABLE:(53,11,66,12)
+NON_DIGGABLE:(0,9,5,10)
+NON_DIGGABLE:(59,9,66,10)
 GEOMETRY:center,center
 MAP
 .........
@@ -246,7 +616,98 @@
 TRAP:"board",(05,04)
 
 
-MAZE:"fakewiz2",random
+MAZE:"fakewiz2",'-'
+
+# put in monsters/traps at known safe locations (unfortunately mazewalks
+# are done last, so we have to make the locations safe by force
+GEOMETRY:center,center
+MAP
+---------------------------------------------------------------------------
+---------------------------------------------------------------------------
+----------------------------.-.-.-.-.-.-.-.-.-
+----------------------------------------------------
+----------------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------
+----------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------
+----------.-.-.-.-.-.-.-.-.-.-.-.-------.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------------
+----.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------------
+----------.-.-.-.-.-.-.-.-.-.-.-.-------.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------------
+----------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------------
+----------------------.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
+----------------------------------------------------
+----------------------------.-.-.-.-.-.-.-.-.-
+---------------------------------------------------------------------------
+ENDMAP
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+MONSTER:random,random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+TRAP:random,random
+GEOMETRY:center,center
+MAP
+------------------------ - - - - - - - - --------------------------
+-------------------------------------------------------------------
+------------------ - - - - - - - - - - - - - - --------------------
+-------------------------------------------------------------------
+------------ - - - - - - - -.. . . ..- - - - - - - - --------------
+----------------------------.-------.------------------------------
+------ - - - - - - - - - - - ------- - - - - - - - - - - - --------
+----------------------------.-------.------------------------------
+ - - - - - - - - - - - - - - ------- - - - - - - - - - - - - - - --
+----------------------------.-------.------------------------------
+------ - - - - - - - - - - - ------- - - - - - - - - - - - --------
+----------------------------.-------.------------------------------
+------------ - - - - - - - -.. . . ..- - - - - - - - --------------
+-------------------------------------------------------------------
+------------------ - - - - - - - - - - - - - - --------------------
+-------------------------------------------------------------------
+------------------------ - - - - - - - - --------------------------
+-------------------------------------------------------------------
+ENDMAP
+NON_DIGGABLE:(0,0,23,1)
+NON_DIGGABLE:(41,0,66,1)
+NON_DIGGABLE:(0,2,17,3)
+NON_DIGGABLE:(47,2,66,3)
+NON_DIGGABLE:(0,4,11,5)
+NON_DIGGABLE:(53,4,66,5)
+NON_DIGGABLE:(0,6,5,7)
+NON_DIGGABLE:(59,6,66,7)
+#
+NON_DIGGABLE:(0,15,23,17)
+NON_DIGGABLE:(41,15,66,17)
+NON_DIGGABLE:(0,13,17,14)
+NON_DIGGABLE:(47,13,66,14)
+NON_DIGGABLE:(0,11,11,12)
+NON_DIGGABLE:(53,11,66,12)
+NON_DIGGABLE:(0,9,5,10)
+NON_DIGGABLE:(59,9,66,10)
+
 GEOMETRY:center,center
 MAP
 .........
@@ -274,3 +735,4 @@
 TRAP:"board",(05,04)
 # treasures
 OBJECT:'"',random,(04,04)
+
diff -ru -x '*.o' --strip-trailing-cr nh341/include/config.h heck1b/include/config.h
--- nh341/include/config.h	2003-02-23 05:43:20.000000000 -0800
+++ heck1b/include/config.h	2003-06-04 00:11:50.000000000 -0700
@@ -352,6 +352,8 @@
 
 /*#define GOLDOBJ */	/* Gold is kept on obj chains - Helge Hafting */
 
+#define HECK_PATCH	/* Funky Gehennom mazes - Kelly Bailey */
+
 /* End of Section 5 */
 
 #include "global.h"	/* Define everything else according to choices above */
diff -ru -x '*.o' --strip-trailing-cr nh341/src/mhitu.c heck1b/src/mhitu.c
--- nh341/src/mhitu.c	2003-02-23 05:43:28.000000000 -0800
+++ heck1b/src/mhitu.c	2003-06-04 00:11:50.000000000 -0700
@@ -1105,9 +1105,16 @@
 		break;
 	    case AD_DRLI:
 		hitmsg(mtmp, mattk);
+#ifdef HECK_PATCH
+		if ((uncancelled || mdat==&mons[PM_VLAD_THE_IMPALER]) &&
+			!rn2(3) && !Drain_resistance) {
+		    losexp("life drainage");
+		}
+#else
 		if (uncancelled && !rn2(3) && !Drain_resistance) {
 		    losexp("life drainage");
 		}
+#endif
 		break;
 	    case AD_LEGS:
 		{ register long side = rn2(2) ? RIGHT_SIDE : LEFT_SIDE;
@@ -1855,6 +1862,17 @@
 	register struct attack  *mattk;
 {
 	switch(mattk->adtyp) {
+#ifdef HECK_PATCH
+	    case AD_PLYS:
+		if(!mtmp->mcan && canseemon(mtmp) && (multi >= 0) && mtmp->mcansee &&
+			(rnd(20) > (ACURR(A_WIS)-(int)mattk->damd))) {
+		    You("are mesmerized by %s gaze!",s_suffix(Monnam(mtmp)));
+		    nomovemsg = 0;
+		    nomul(-rnd(4));
+		    exercise(A_DEX,FALSE);
+		}
+		break;
+#endif
 	    case AD_STON:
 		if (mtmp->mcan || !mtmp->mcansee) {
 		    if (mtmp->data == &mons[PM_MEDUSA] && canseemon(mtmp)) {
diff -ru -x '*.o' --strip-trailing-cr nh341/src/mkmaze.c heck1b/src/mkmaze.c
--- nh341/src/mkmaze.c	2003-02-23 05:43:28.000000000 -0800
+++ heck1b/src/mkmaze.c	2003-06-04 00:31:31.000000000 -0700
@@ -24,7 +24,36 @@
 STATIC_DCL void NDECL(setup_waterlevel);
 STATIC_DCL void NDECL(unsetup_waterlevel);
 
+#ifdef HECK_PATCH
 
+extern void FDECL(mkmap, (lev_init *));
+STATIC_DCL void FDECL(move8,(int *,int *, int));
+STATIC_DCL void FDECL(flood,(int,int,int[COLNO][ROWNO],int));
+STATIC_DCL int FDECL(tocenter_join,(int,int,int [COLNO][ROWNO],int,int));
+STATIC_DCL void FDECL(dumb_join,(int map[COLNO][ROWNO],int));
+STATIC_DCL int FDECL(floodmark_map,(int[COLNO][ROWNO]));
+STATIC_DCL void FDECL(do_join,(SCHAR_P));
+
+STATIC_DCL void FDECL(atmos,(int,int,int,int,int));
+STATIC_DCL void FDECL(translate,(int,int));
+STATIC_DCL void FDECL(paintrect,(int,int,int,int,int,int));
+STATIC_DCL void NDECL(overlaymaze);
+STATIC_DCL void NDECL(overlaymaze2);
+STATIC_DCL void FDECL(overlaymaze3,(int));
+STATIC_DCL void NDECL(overlaymaze4);
+STATIC_DCL void NDECL(overlaymaze5);
+STATIC_DCL void NDECL(overlaymaze6);
+STATIC_DCL void FDECL(overlaymaze7,(int));
+STATIC_DCL int FDECL(distance_to_level,(d_level *));
+STATIC_DCL void NDECL(frame_maze);
+STATIC_DCL void NDECL(check_enough_room);
+STATIC_DCL void NDECL(corridorify);
+STATIC_DCL void FDECL(do_lev_init,(int,int,int,int,int,int));
+STATIC_DCL void FDECL(lavalight,(int));
+STATIC_DCL void NDECL(secretdoorify);
+STATIC_DCL void NDECL(make_extra_maze);
+#endif /* HECK_PATCH */
+	
 STATIC_OVL boolean
 iswall(x,y)
 int x,y;
@@ -558,6 +587,9 @@
 
 	level.flags.is_maze_lev = TRUE;
 
+#ifdef HECK_PATCH
+	make_extra_maze();
+#else
 #ifndef WALLIFIED_MAZE
 	for(x = 2; x < x_maze_max; x++)
 		for(y = 2; y < y_maze_max; y++)
@@ -576,6 +608,7 @@
 #ifdef WALLIFIED_MAZE
 	wallification(2, 2, x_maze_max, y_maze_max);
 #endif
+#endif /* HECK_PATCH */
 	mazexy(&mm);
 	mkstairs(mm.x, mm.y, 1, (struct mkroom *)0);		/* up */
 	if (!Invocation_lev(&u.uz)) {
@@ -643,6 +676,10 @@
 	for(x = rn1(5,7); x; x--) {
 		mazexy(&mm);
 		(void) makemon((struct permonst *) 0, mm.x, mm.y, NO_MM_FLAGS);
+#ifdef HECK_PATCH
+		if(In_hell(&u.uz) && rn2(3))
+			(void) makemon((struct permonst *) 0, mm.x, mm.y, NO_MM_FLAGS);
+#endif
 	}
 	for(x = rn1(6,7); x; x--) {
 		mazexy(&mm);
@@ -652,6 +689,71 @@
 		mktrap(0,1,(struct mkroom *) 0, (coord*) 0);
 }
 
+#ifdef HECK_PATCH
+/* Modified to "punch out" of maze drawing area if desired.
+ * Kludgily uses glyphs as temporary storage.  Vile.
+ */
+STATIC_OVL void
+walkfrom2(x, y, intyp, outtyp, breaks)
+int x,y; schar intyp,outtyp; int breaks;
+{
+    int a,dirs[4],q,nx,ny,to_glyph;
+    levl[x][y].typ = INVALID_TYPE;
+    to_glyph = levl[x][y].glyph; /* assume not INVALID_TYPE */
+    levl[x][y].glyph = -1;
+    while(1) {
+    	q = 0;	
+	for(a=0;a<4;a++) {
+	    nx = x; ny = y;
+	    move(&nx,&ny,a);
+	    move(&nx,&ny,a);
+	    if(nx>=3 && nx<=x_maze_max && ny>=3 && ny<=y_maze_max &&
+	       (levl[nx][ny].typ == intyp || ((levl[nx][ny].typ != INVALID_TYPE) && breaks>0)))
+	    	dirs[q++] = a;
+	}
+	if(!q) {
+	    a = levl[x][y].glyph;
+	    levl[x][y].typ = outtyp;
+	    levl[x][y].flags = 0;
+	    levl[x][y].glyph = to_glyph;
+	    if(a==-1) {
+	    	return;
+	    }
+	    move(&x,&y,a);
+	    move(&x,&y,a);
+	    continue;
+	} else {
+	    a = dirs[rn2(q)];
+	    move(&x,&y,a);
+	    if(!IS_DOOR(levl[x][y].typ)) {
+		levl[x][y].typ = outtyp;
+		levl[x][y].flags = 0;
+	    }
+
+	    move(&x,&y,a);
+	    if(levl[x][y].typ != intyp) {
+	    	breaks--;
+	    }
+	    levl[x][y].typ = INVALID_TYPE;
+	    levl[x][y].glyph = (a&1) ? 4-a : 2-a;
+	}
+    }
+}
+
+void
+walkfrom(x,y)
+int x,y;
+{
+#ifdef WALLIFIED_MAZE
+    walkfrom2(x,y,STONE,ROOM,0);
+#else
+    walkfrom2(x,y,STONE,CORR,0);
+#endif
+}
+
+#else /* ndef HECK_PATCH */
+
+
 #ifdef MICRO
 /* Make the mazewalk iterative by faking a stack.  This is needed to
  * ensure the mazewalk is successful in the limited stack space of
@@ -740,6 +842,7 @@
 	}
 }
 #endif /* MICRO */
+#endif /* HECK_PATCH */
 
 STATIC_OVL void
 move(x,y,dir)
@@ -762,6 +865,23 @@
 {
 	int cpt=0;
 
+#ifdef HECK_PATCH
+	do {
+	    if(cpt&1) {
+		/* try any location, not only x,y odd */
+	    	cc->x = rn2(COLNO-3)+2;
+	    	cc->y = rn2(ROWNO-2)+1;
+	    } else {
+		cc->x = 3 + 2*rn2((x_maze_max>>1) - 1);
+		cc->y = 3 + 2*rn2((y_maze_max>>1) - 1);
+	    }
+	    if( levl[cc->x][cc->y].typ == ROOM || levl[cc->x][cc->y].typ == CORR)
+	    	break;
+	    cpt++;
+	} while (cpt < 200);
+
+	if (cpt >= 200) {
+#else
 	do {
 	    cc->x = 3 + 2*rn2((x_maze_max>>1) - 1);
 	    cc->y = 3 + 2*rn2((y_maze_max>>1) - 1);
@@ -774,19 +894,16 @@
 #endif
 		);
 	if (cpt >= 100) {
+#endif /* HECK_PATCH */
 		register int x, y;
 		/* last try */
-		for (x = 0; x < (x_maze_max>>1) - 1; x++)
-		    for (y = 0; y < (y_maze_max>>1) - 1; y++) {
-			cc->x = 3 + 2 * x;
-			cc->y = 3 + 2 * y;
-			if (levl[cc->x][cc->y].typ ==
-#ifdef WALLIFIED_MAZE
-			    ROOM
-#else
-			    CORR
-#endif
-			   ) return;
+		for (x = 3; x < x_maze_max - 1; x++)
+		    for (y = 3; y < y_maze_max - 1; y++) {
+			cc->x = x;
+			cc->y = y;
+			if (levl[cc->x][cc->y].typ == ROOM ||
+			    	levl[cc->x][cc->y].typ == CORR)
+			    return;
 		    }
 		panic("mazexy: can't find a place!");
 	}
@@ -1384,4 +1501,875 @@
 	}
 }
 
+
+#ifdef HECK_PATCH
+/*
+ * Extra stuff for hellish mazes
+ */
+
+#define TYP_NOT(x) (-((int)(x))-1)
+/* TYP_MATCH is not transitive */
+#define TYP_MATCH(x,y) ((((int) x)<0) ? \
+		TYP_NOT((int)(x))==(int)(y) : (int)(x)==(int)(y))
+#define XMM x_maze_max
+#define YMM y_maze_max
+
+/* Join stuff */
+/* There is some repition of idea between this and the code in
+ * mkmap.c; The join code there is too finicky about foreground
+ * types and rooms, and 64 rooms might not be enough...
+ */
+
+STATIC_OVL void
+move8(x,y,dir8)
+int *x,*y,dir8;
+{
+	if(dir8<0) {
+		dir8 = -dir8-1;
+		dir8 = (dir8+2) % 4 + (dir8 & 4);
+	}
+
+	switch(dir8) {
+		case 0 : (*y)--; break;
+		case 1 : (*x)++; break;
+		case 2 : (*y)++; break;
+		case 3 : (*x)--; break;
+		case 4 : (*x)++; (*y)--; break;
+		case 5 : (*x)++; (*y)++; break;
+		case 6 : (*x)--; (*y)++; break;
+		case 7 : (*x)--; (*y)--; break;
+	}
+}
+
+STATIC_OVL void
+flood(x,y,map,group)
+int x,y,map[COLNO][ROWNO],group;
+{
+
+	int nx,ny;
+	int q,go_dir,i,dirs[8],to_glyph;
+	const char STARTFLOOD = 9;
+
+	map[x][y] = group;
+	to_glyph = levl[x][y].glyph;
+	levl[x][y].glyph = STARTFLOOD;
+	while(1) {
+
+		q = 0;
+		for(i=0;i<8;i++) {
+			nx = x; ny = y;
+			move8(&nx,&ny,i);
+			if(nx>=1 && ny>=0 && nx < COLNO && ny < ROWNO
+			   && map[nx][ny] == -1)
+				dirs[q++]=i;
+		}
+
+		if(q) {
+			go_dir = dirs[rn2(q)];
+			move8(&x,&y,go_dir);
+			levl[x][y].glyph = go_dir;
+			map[x][y] = group;
+			continue;
+		} else {
+			/* back up */
+			go_dir = levl[x][y].glyph;
+			levl[x][y].glyph = to_glyph;
+			if(go_dir == STARTFLOOD)
+				return;
+			move8(&x,&y,-go_dir-1);
+		}
+	}
+}
+
+/* link up to another non-zero square, return true if we
+   merged */
+STATIC_OVL int
+tocenter_join(x,y,map,destx,desty)
+int x,y,map[COLNO][ROWNO],destx,desty;
+{
+
+	int startmarker = map[x][y];
+	int newmarker;
+	int dx,dy,iters,first;
+/*	pline("xycxcy:%d,%d,%d,%d",x,y,destx,desty); */
+	while( !(x == destx && y == desty) ) {
+		first = TRUE;
+		iters = ((x&1)&&(y&1)) ? 2 : 1;
+		while(iters--) {
+			if(first) {
+				dx = sgn(destx-x);
+				dy = sgn(desty-y);
+				if(rn2(3))
+					dy = 0;
+				else
+					dx = 0;
+				first = FALSE;
+			}
+			x += dx;
+			y += dy;
+					
+			if(map[x][y] && (map[x][y] != startmarker)) {
+				int xx,yy;
+				newmarker = map[x][y];
+				/* we hit another place! */
+				/* pline("%d>%d",startmarker,newmarker); */
+				for(xx=0;xx<COLNO;xx++)
+					for(yy=0;yy<ROWNO;yy++)
+						if(map[xx][yy] == startmarker)
+							map[xx][yy] = newmarker;
+				return TRUE;
+			}
+	
+			/* technically this can join us up to other groups,
+			 * but we don't worry about that.
+			 */
+			map[x][y] = startmarker;
+		}
+	}
+	return FALSE;
+}
+
+STATIC_OVL void
+dumb_join(map,m)
+int map[COLNO][ROWNO],m;
+{
+		
+	int *done = (int *) alloc((unsigned int) m*sizeof(int));
+	int i,x,y,cx,cy,joins,marker, faux, fill_order=1;
+
+/*	FILE * fp = fopen("bonk.txt","w");
+	for(y=0;y<ROWNO;y++) {
+		for(x=1;x<COLNO;x++)
+			fprintf(fp,"%d",map[x][y]);
+		fprintf(fp,"\n");
+	}
+	fclose(fp);
+*/
+
+	for(i=0;i<m;i++)
+		done[i]=0;
+	cx = COLNO/2+1; cy = ROWNO/2+1;
+
+	joins = 0;
+	if (map[cx][cy] > 0 && map[cx][cy] < m) {
+		done[map[cx][cy]-1] = 1;
+		joins++;
+	}
+
+	for(faux=1;faux<COLNO;faux++) {
+                if(fill_order) {
+                        if(faux&1)
+                                x = cx + (faux>>1)-1;
+                        else
+                                x = cx - (faux>>1);
+                }
+                else
+                        x = faux;
+
+		for(y=0;y<ROWNO;y++) {
+			marker = map[x][y];
+			if(!marker || done[marker-1]) /* obstacle */
+				continue;
+/*			pline("j%d@%d",marker,x); */
+			tocenter_join(x,y,map,cx,cy);
+			done[marker-1] = 1;
+			joins++;
+		}
+	}
+	free(done);
+}
+
+
+STATIC_OVL int 
+floodmark_map(map)
+int map[COLNO][ROWNO];
+{
+	int x,y,area;
+	
+	area=0;
+	for(x=1;x<COLNO;x++)
+		for(y=0;y<ROWNO;y++)
+			if(map[x][y] == -1) {
+				++area;
+				flood(x,y,map,area);
+			}
+	return area;
+}
+
+STATIC_OVL void
+do_join(join_typ)
+schar join_typ;
+{
+
+	int map[COLNO][ROWNO];
+	int x,y,groups;
+
+	/* set up for floodmark */
+	for(x=0;x<COLNO;x++)
+		for(y=0;y<ROWNO;y++) {
+			if(!x || IS_STWALL(levl[x][y].typ))
+				map[x][y] = 0;
+			else
+				map[x][y] = -1;
+		}
+
+	groups = floodmark_map(map);
+	
+/*	FILE *fp;
+	fp = fopen("mapdump","w");
+	for(y=3;y<YMM;y++) {
+	    for(x=3;x<XMM;x++)
+	    	fprintf(fp,"%c",(map[x][y]==0)? ' ' : '0' + map[x][y]);
+	    fprintf(fp,"\n");
+	}
+	fclose(fp);
+*/
+	if(groups < 2)
+		return;
+
+	dumb_join(map,groups);
+
+	for(x=1;x<COLNO;x++)
+		for(y=0;y<ROWNO;y++)
+			if(map[x][y] && IS_STWALL(levl[x][y].typ))
+				levl[x][y].typ = join_typ;
+
+
+	/* set up for floodmark */
+	for(x=0;x<COLNO;x++)
+		for(y=0;y<ROWNO;y++) {
+			if(!x || IS_STWALL(levl[x][y].typ))
+				map[x][y] = 0;
+			else
+				map[x][y] = -1;
+		}
+}
+
+STATIC_OVL void
+atmos(before,around,thresh,after,nocorners)
+int before,around,thresh,after,nocorners;
+{
+    xchar mymap[COLNO][ROWNO];
+    int x,y,x2,y2,tot;
+    for(x=1;x<COLNO;x++)
+	for(y=0;y<ROWNO;y++) {
+	    mymap[x][y] = 0;
+	    tot = 0;
+	    if(TYP_MATCH(before,levl[x][y].typ))
+		for(x2=x-1;x2<=x+1;x2++)
+		    for(y2=y-1;y2<=y+1;y2++) {
+		    	if(nocorners && (x2 != x) && (y2 != y))
+			    continue;
+			if(isok(x2,y2) && TYP_MATCH(around,levl[x2][y2].typ))
+			    tot++;
+		    }
+	    if(tot>=thresh)
+		mymap[x][y] = 1;
+	}
+
+    for(x=1;x<COLNO;x++)
+	for(y=0;y<ROWNO;y++)
+	    if(mymap[x][y])
+		levl[x][y].typ = after;
+}
+
+STATIC_OVL void
+translate(before,after)
+int before,after;
+{
+    struct rm *rmp,*endp;
+    for(rmp = &levl[1][0],endp=&levl[COLNO-1][ROWNO-1]; rmp <= endp; rmp++)
+	if(TYP_MATCH(before,rmp->typ))
+	    rmp->typ = after;
+}
+
+STATIC_OVL void
+paintrect(left,top,right,bottom,oddodd,other)
+int left,top,right,bottom,oddodd,other;
+{
+    int x,y;
+
+    for(x=left;x<=right;x++)
+	for(y=top;y<=bottom;y++)
+	    if(x&y&1 && oddodd>=0)
+		levl[x][y].typ = oddodd;
+	    else if(other>=0)
+		levl[x][y].typ = other;
+}
+
+/* vertical bars */
+STATIC_OVL void
+overlaymaze() {
+    int x,y;
+    int w,m,xmax,ymax;
+    int wall = rn2(2)+1 ? HWALL : -HWALL;
+
+    xmax = XMM-1; ymax = YMM-1;
+
+    for(x=3,m=1;x<xmax;x++) {
+	w = rn2(5)*2+4+rn2(3)*2*m;
+	if(x+w > xmax) w = xmax-x;
+	if(!m) {
+	    /* do a bridge, maybe */
+	    y = rn2(ymax/2-3)*2+3;
+	    paintrect(x,y,x+w,y+2,STONE,wall);
+	}
+	else {
+	    paintrect(x,3,x+w,ymax,STONE,wall);
+	}
+	m = !m;
+	x += w;
+    }
+    walkfrom(3,3);
+}
+
+/* center row maze */
+STATIC_OVL void
+overlaymaze2() {
+    int x,y,p,fake_y;
+    
+    for(x=3;x<XMM;x+=2)
+    	for(y=3;y<YMM;y+=2) {
+            if(x < XMM/3) fake_y = y+4;
+            else if(x > 2*XMM/3) fake_y = y-4;
+            else fake_y = y;
+            p = ((rn2(abs(y-11)+3))<2);
+            if(p)
+		paintrect(x-1,y-1,x+1,y+1,STONE,HWALL);
+        }
+
+    for(x=3;x<XMM;x+=2)
+    	for(y=3;y<YMM;y+=2)
+    	    if(levl[x][y].typ == STONE)
+		walkfrom(x,y);
+}
+
+/* LR, left and right bars */
+STATIC_OVL void
+overlaymaze3(fg)
+int fg;
+{ 
+    int w = rn2(8)+2;
+    int h = rn2(YMM/2-2)*2+3;
+	int x,y,d;
+
+    /* don't turn a wall+stone level into all stone */
+    if(fg != HWALL)
+    	atmos(HWALL,HWALL,9,STONE,FALSE);
+
+    paintrect(1,0,3+w*2-1,YMM-1,HWALL,HWALL);
+    paintrect(3,3,3+w*2,YMM-1,STONE,HWALL);
+
+    paintrect(XMM-1-w*2+1,0,COLNO-1,YMM-1,HWALL,HWALL);
+    paintrect(XMM-1-w*2,3,XMM-1,YMM-1,STONE,HWALL);
+
+    /* walk randomly from L to R.  Not necessary for
+     * joining, but makes some neat effects
+     */
+    x = 3+w*2; y = rn2(YMM/2-1)*2+3; d = 1;
+    while(x < XMM-1-w*2) {
+	if(y==3)
+	    d = ((d==0)? 1 : rn2(2)+1);
+	else if(y==YMM-1)
+	    d = ((d==2)? 1 : rn2(2));
+	else if(d==0)
+	    d = rn2(2);
+	else if(d==2)
+	    d = rn2(2)+1;
+	else
+	    d = rn2(3);
+	move(&x,&y,d);
+	move(&x,&y,d);
+	levl[x][y].typ = STONE;
+    }
+
+    /* get pockets of stone along N and S edge */
+    for(x=3;x<=XMM-1;x+=2) {
+    	if(levl[x][3].typ == STONE)
+    	    walkfrom2(x,3,STONE,ROOM,1);
+    	if(levl[x][YMM-1].typ == STONE)
+    	    walkfrom2(x,YMM-1,STONE,ROOM,1);
+    }   
+}
+
+/* checkerboard */
+STATIC_OVL void
+overlaymaze4() {
+    int i,x,y,x2,y2,xarr[6],yarr[6],flip,fliporig;
+    int w,h;
+
+    for(i=0;i<6;i++) {
+	xarr[i]=XMM-1;
+	yarr[i]=YMM-1;
+    }
+    for(i=0,x=3;i<5 && x<XMM-5;i++,x+=rn2(15)+rn2(15)+2)
+	xarr[i] = (x&1)? x : ++x;
+    for(i=0,y=3;i<5 && y<YMM-3;i++,y+=rn2(4)+rn2(4)+2)
+	yarr[i] = (y&1)? y : ++y;
+
+    fliporig = !(flip = rn2(2));
+
+    for(w=0;w<5;w++)
+	for(h=0;h<5;h++) {
+	    flip = !flip;
+	    if(flip != fliporig && rn2(8)) continue;
+	    x = xarr[w]; y = yarr[h];
+	    if(x == XMM-1 || y == YMM-1) continue;
+
+	    x2 = xarr[w+1]; y2 = yarr[h+1];
+
+	    paintrect(x,y,x2,y2,STONE,rn2(2)? HWALL : -HWALL);
+	}
+
+    walkfrom(3,3);
+}
+
+/* surrounding maze */
+STATIC_OVL void
+overlaymaze5() {
+    int x,y;
+
+    atmos(HWALL,HWALL,9,STONE,FALSE);
+
+    for(x=3;x<XMM;x+=2)
+	for(y=3;y<YMM;y+=2)
+	    if(levl[x][y].typ == STONE) {
+		walkfrom2(x,y,STONE,ROOM,2);
+		x = 3; y = 1;
+	    }
+}
+
+/* TB, top and bottom bars. */
+STATIC_OVL void
+overlaymaze6() {
+
+    int x;
+    paintrect(1,0,COLNO-1,5,HWALL,HWALL);
+    paintrect(1,YMM-3,COLNO-1,ROWNO-1,HWALL,HWALL);
+    for(x=3;x<XMM;x+=2) {
+	paintrect(x,YMM-1-(rn2(3)+(rn2(3)))*2,x+1,YMM,STONE,HWALL);
+	paintrect(x,3,x+1,3+(rn2(3)+(rn2(3)))*2,STONE,HWALL);
+    }
+
+    walkfrom(3,3);
+    walkfrom(3,YMM-1);
+}
+
+STATIC_OVL void
+overlaymaze7(fg)
+int fg;
+{
+    int x,y,w,h;
+
+    if(fg != HWALL)
+	translate(STONE,HWALL);
+    for(x=3;x<XMM-3;x+=w) {
+	w = rn2(6)+rn2(6)+3;
+	if(!w&1) w++;
+	if(x+w >= XMM)
+	    w = XMM-x-1;
+	h = rn2(4)*2+2;
+	y = rn2(YMM-3-h)+3;
+	if(!y&1) y++;
+
+	paintrect(x,y,x+w,y+h,STONE,rn2(2) ? -HWALL : HWALL);
+    }
+
+    for(x=3;x<XMM;x+=2)
+	for(y=3;y<YMM;y+=2)
+	    if(levl[x][y].typ == STONE)
+		walkfrom(x,y);
+}
+
+STATIC_OVL int
+distance_to_level(target)
+d_level * target;
+{
+    /* assumes target in same dungeon! */
+    if(u.uz.dnum != target->dnum)
+	return -99;
+    else
+    	return target->dlevel - u.uz.dlevel;
+}
+
+STATIC_OVL void
+frame_maze() {
+    int x,y;
+    struct rm *rmp;
+    for(x=1;x<COLNO;x++)
+	for(y=0;y<ROWNO;y++) {
+	    if(y==3 && x>=3 && x < XMM)
+		y = YMM;
+	    rmp = &levl[x][y];
+	    rmp->typ = HWALL;
+	    rmp->wall_info |= W_NONDIGGABLE;
+	}
+}
+
+STATIC_OVL void
+check_enough_room() {
+    int rooms;
+    struct rm *rmp,*endp;
+    rooms = 0;
+    rmp = &levl[0][0];
+    endp = &levl[COLNO-1][ROWNO-1];
+    do {
+	if(rmp->typ == ROOM || rmp->typ == CORR)
+	    rooms++;
+    } while((++rmp) <= endp);
+
+    if(rooms>=(COLNO*ROWNO/10))
+    	return;
+
+    paintrect(5,7,5+20,YMM-5,STONE,rn2(2)? HWALL : ROOM);
+    walkfrom(7,9);
+    paintrect(XMM-3-20,7,XMM-3,YMM-5,STONE, rn2(2)? HWALL : ROOM);
+    walkfrom(XMM-3,YMM-5);
+}
+
+STATIC_OVL void
+corridorify() {
+    int x,y;
+    for(x=1;x<COLNO;x++)
+	for(y=0;y<ROWNO;y++) {
+	    if(IS_STWALL(levl[x][y].typ))
+		levl[x][y].typ = STONE;
+	    else if(levl[x][y].typ == ROOM)
+		levl[x][y].typ = CORR;
+	}
+}
+
+STATIC_OVL void
+do_lev_init(fg,bg,sm,j,lit,w) 
+int fg,bg,sm,j,lit,w;
+{
+    lev_init linit;
+    int x,y;
+    linit.fg = fg; linit.bg = bg; linit.smoothed = sm;
+    linit.joined = j; linit.lit = lit; linit.walled = w;
+    	
+    mkmap(&linit);
+    /* remove side effects */
+    level.flags.is_maze_lev = TRUE;
+    level.flags.is_cavernous_lev = FALSE;
+    /* join_map makes spurious rooms */
+    nroom = 0; rooms[0].hx = -1;
+    for(x=0;x<COLNO;x++)
+	for(y=0;y<ROWNO;y++)
+	    levl[x][y].roomno = 0;
+}
+
+STATIC_OVL void
+ruinify() {
+    int w,x,y,xx,yy,roomct;
+    coord mm;
+    for(w=rn2(40)+40;w;w--) {
+    	x = rn2(XMM-3)+3;
+    	y = rn2(YMM-3)+3;
+    	if(!IS_STWALL(levl[x][y].typ))
+    	    continue;
+    	    
+    	roomct = 0;
+	for(xx=x-1; xx<=x+1; xx++)
+	    for(yy=y-1; yy<=y+1; yy++)
+		if(!IS_STWALL(levl[xx][yy].typ))
+		    roomct++;
+
+	if(!roomct) /* we found stwall surrounded by stwall */
+	    continue;
+	
+	for(xx=x-1; xx<=x+1; xx++)
+	    for(yy=y-1; yy<=y+1; yy++) {
+		if(xx != x && yy != y)
+		    continue;
+		if((rn2(3) && (xx != x  || yy != y)) || !IS_STWALL(levl[xx][yy].typ))
+		    continue;
+		levl[xx][yy].typ = ROOM;
+		mm.x = xx; mm.y = yy;
+		(void) mksobj_at(rn2(3) ? ROCK : BOULDER, mm.x, mm.y, TRUE, FALSE);		
+	    }
+    }
+}
+
+STATIC_OVL void
+lavalight(int lightall) {
+    int x,y,a,b;
+    for(x=2;x<=XMM;x++)
+	for(y=2;y<=YMM;y++)
+	    levl[x][y].lit = !!lightall;
+    if(lightall)
+	return;
+    for(x=3;x<XMM;x++)
+	for(y=3;y<YMM;y++)
+	    if(levl[x][y].typ == LAVAPOOL)
+	    	for(a=x-1; a<=x+1; a++)
+	    	    for(b=y-1;b<=y+1; b++)
+			if(levl[a][b].typ != ROOM)
+			    levl[a][b].lit = TRUE;
+}
+
+STATIC_OVL void
+secretdoorify() {
+    int x,y,i,a,b,doors_todo,walls;
+    coord m;
+    
+    doors_todo = rn2(2)+2;
+    if(abs(distance_to_level(&orcus_level))==1)
+ 	doors_todo *= 2;
+
+    for(i=1;i<60 && doors_todo;i++) {
+	mazexy(&m);
+	x = (int) m.x;  y = (int) m.y;
+	walls = 0;
+	for(a=x-1;a<=x+1;a++)
+	    for(b=y-1;b<=y+1;b++)
+		if((a == x || b == y) && IS_WALL(levl[a][b].typ))
+		    walls++;
+	if(walls != 2)
+	    continue;
+	/* only two adjacent walls, but are they opposite? */
+	if((IS_WALL(levl[x+1][y].typ) && IS_WALL(levl[x-1][y].typ))
+	   || (IS_WALL(levl[x][y-1].typ) && IS_WALL(levl[x][y+1].typ))) {
+	    if(rn2(2) || abs(distance_to_level(&baalzebub_level)) != 1) {
+		levl[x][y].typ = DOOR;
+		levl[x][y].doormask = D_CLOSED;
+		if(rn2(2))
+		    levl[x][y].doormask = D_LOCKED;
+		else if(!rn2(10))
+		    levl[x][y].doormask = D_TRAPPED;
+	    }
+	    else {
+	    	levl[x][y].typ = SDOOR;
+	    	levl[x][y].horizontal = IS_WALL(levl[x-1][y].typ);
+	    	/* pline("sdoor@%d,%d",x,y); */
+	    }
+	    doors_todo--;
+	}
+    }
+}
+
+/* make_extra_maze
+ * The three large steps
+ * - Configure the map (this is a level-init)
+ * - Overlay the map with mazey bits
+ * - Do special transforms
+ */
+STATIC_OVL void
+make_extra_maze() {
+    int conf,olay;
+    int x,y,i,walled,joined,fg,bg,smoothed,lit;
+    struct rm *rmp;
+	int nodig,w;
+
+    enum { OLAY_VERTBARS=0, OLAY_CENTERROW, OLAY_LR, OLAY_CHECKER,
+    	OLAY_SURROUND, OLAY_TB, OLAY_ROOMS, OLAY_END };
+    
+
+    /* Prepare map */
+
+    /* basic types */
+    enum { CONF_CAVE = 0, CONF_POOL, CONF_LAVA, CONF_MAZE, CONF_LAST };
+    
+    if(!In_hell(&u.uz))
+    	conf = CONF_MAZE;
+    else if(abs(distance_to_level(&juiblex_level)) == 1)
+    	conf = CONF_POOL;
+    else if(distance_to_level(&wiz3_level)<0) {
+	/* technically this can sometimes verify the true fakewiz level */
+    	if(distance_to_level(&portal_level)<0)
+    	    conf = CONF_LAVA;
+    	else
+    	    conf = rn2(3)? CONF_MAZE : CONF_CAVE;
+    }
+    else {
+    	/* above wizard tower, not adjacent to juiblex. */
+    	conf = rn2(3) ? CONF_CAVE : CONF_MAZE;
+    }
+   
+    /* we've picked, now do it */
+    joined = rn2(3); walled = rn2(3); smoothed = !rn2(4); lit = FALSE;
+    switch(conf) {
+	case CONF_CAVE: fg=ROOM; bg=rn2(2)? STONE : HWALL; break;
+	case CONF_POOL: fg=POOL; bg=STONE; smoothed = !smoothed; break;
+	case CONF_LAVA: fg=LAVAPOOL; bg=STONE; break;
+	case CONF_MAZE: fg=HWALL; bg=STONE;
+    }    
+    do_lev_init(fg,bg,smoothed,joined,FALSE,walled);
+    
+    if(conf != CONF_MAZE && rn2(3)) {
+    	/* turn solid fg into a thick outline of fg area */
+	atmos(bg,fg,1,fg,FALSE);
+        atmos(fg,fg,9,VWALL,FALSE);
+	atmos(VWALL,VWALL,9,STONE,FALSE);
+	atmos(bg,fg,1,fg,FALSE);
+    }
+
+    if(!rn2(4) && conf != CONF_MAZE) {
+	/* fill middle of fg area */
+	int fill_typ = STONE;
+	if(!rn2(4))
+	    fill_typ = (rn2(2) && fg != ROOM) ? ROOM : HWALL;
+    	atmos(fg,fg,9,fill_typ,FALSE);
+    }
+
+    /* more filling */
+    if(!rn2(4)) atmos(ROOM,ROOM,9,bg,FALSE);
+    if(fg==LAVAPOOL && !rn2(4))
+	atmos(LAVAPOOL,LAVAPOOL,9,rn2(2)? bg : ROOM,FALSE);
+    else if (fg==POOL && !rn2(4))
+	atmos(POOL,POOL,9,rn2(2)? STONE : ROOM,FALSE);
+
+    /* overlay with mazeiness */
+    
+
+    olay = rn2(OLAY_END);
+
+    switch(olay) {
+	case OLAY_VERTBARS:	overlaymaze(); break;
+	case OLAY_CENTERROW:	overlaymaze2(); break;
+	case OLAY_LR:		overlaymaze3(fg); break;
+	case OLAY_CHECKER:	overlaymaze4(); break;
+	case OLAY_SURROUND:	overlaymaze5(); break;
+	case OLAY_TB:		overlaymaze6(); break;
+	case OLAY_ROOMS:		overlaymaze7(fg); break;
+    }
+
+        	
+    /* other modifications: */
+
+    frame_maze();
+
+    atmos(HWALL,ROOM,4,ROOM,TRUE);
+    
+    if(rn2(2)) {
+    	/* fill centers */
+    	int ftyp = HWALL;
+        if(!rn2(3))
+            ftyp = rn2(2) ? POOL : LAVAPOOL;
+    	atmos(ROOM,ROOM,9,ftyp,FALSE);
+    	if(!rn2(5))
+    	    atmos(ftyp,ftyp,9, !rn2(3) ? ROOM : HWALL,FALSE);
+    }
+    if(rn2(3)) {
+    	/* make solid areas into rooms */
+	translate(HWALL,STONE);
+	translate(VWALL,STONE);
+
+	for(i=8;i--;) {
+	    atmos(ROOM,STONE,3,STONE,TRUE);
+	}
+        atmos(STONE,STONE,9,ROOM,FALSE);
+        if(!rn2(4)) {
+            atmos(ROOM,ROOM,9,VWALL,FALSE);
+            atmos(VWALL,VWALL,9,STONE,FALSE);
+            translate(VWALL,ROOM);
+        }
+        frame_maze();
+        translate(STONE,HWALL);
+    }    
+
+    if(rn2(4)) {
+	int i = rn2(3)*2+1;
+
+        /* shrink maze... */
+	translate(VWALL,HWALL);
+	translate(STONE,HWALL);
+	while(i--)
+	    atmos(ROOM,HWALL,3,HWALL,TRUE);
+    }
+    
+    /* shrink walls */
+    w = (rn2(3)+1)*2*(rn2(3)? 1 : 0);
+    if(abs(distance_to_level(&baalzebub_level))!=1) {
+    	/* pline("%d",w); */
+	for(x=0;x<w;x++)
+	    atmos(HWALL,ROOM,3,ROOM,TRUE);
+	if(rn2(3))
+	    atmos(ROOM,ROOM,9,HWALL,FALSE);
+    }
+
+    frame_maze();
+    
+    /* midnight level. */
+    if(In_hell(&u.uz) && !rn2(150)) {
+    	for(x=1;x<COLNO;x++)
+    	    for(y=0;y<ROWNO;y++)
+		if(IS_STWALL(levl[x][y].typ))
+		    levl[x][y].typ = STONE;
+
+	nodig = (rn2(100)<10) || midnight();
+	lit = 1; /* mercifully, these levels are always lit */
+	for(x=1;x<=COLNO-1;x++)
+	    for(y=1;y<=ROWNO-1;y++) {
+		if(nodig && levl[x][y].typ == STONE)
+		    levl[x][y].wall_info |= W_NONDIGGABLE;
+		if(lit)
+		    levl[x][y].lit = TRUE;
+	    }
+    }
+    else if (In_hell(&u.uz) &&
+    	     (!rn2(20) || (abs(distance_to_level(&orcus_level))==1))) {
+	/* inverted level */
+	wallification(1,0,COLNO-1,ROWNO-1);
+	for(x=2;x<=XMM;x++)
+	    for(y=2;y<=YMM;y++) {
+		rmp = &levl[x][y];
+		if(IS_STWALL(rmp->typ))
+		    rmp->typ = ROOM;
+		else
+		    rmp->typ = HWALL;
+	    }
+	for((x=rn2(9)+1);x--;)
+	    atmos(ROOM,HWALL,3,HWALL,TRUE);
+
+        if(abs(distance_to_level(&orcus_level)) != 1)
+            frame_maze();
+    }
+    else
+	translate(STONE,HWALL);
+
+
+    /* Final transformations and cleanup */
+
+    if(abs(distance_to_level(&asmodeus_level)) == 1) {
+    	translate(POOL,ICE);
+	atmos(ROOM,ICE,1,ICE,TRUE);
+    }
+    
+    if(abs(distance_to_level(&orcus_level)) == 1)
+    	ruinify();
+    
+    check_enough_room();
+    
+    do_join(ROOM);
+
+    /* remove pillars clear NSEW */
+    atmos(HWALL,ROOM,4,ROOM,TRUE);
+
+    /* change HWALL to VWALL when it will look nicer */
+    translate(VWALL,HWALL);
+    for(x=3;x<XMM;x++)
+	for(y=3;y<YMM;y++) {
+	    /* skip connected to wall or N&S==ROOM */
+	    if((levl[x][y].typ != HWALL)
+		|| (IS_STWALL(levl[x-1][y].typ) || IS_STWALL(levl[x+1][y].typ)
+		    || IS_STWALL(levl[x][y-1].typ) || IS_STWALL(levl[x][y+1].typ))
+		|| (levl[x][y-1].typ == ROOM && levl[x][y+1].typ == ROOM))
+		continue;
+	    if(levl[x-1][y].typ == ROOM || levl[x+1][y].typ == ROOM)
+		levl[x][y].typ = VWALL;
+	}
+	
+    secretdoorify();
+
+#ifndef WALLIFIED_MAZE
+    corridorify();
+#else
+    wallification(1,0,COLNO-1,ROWNO-1);
+#endif
+
+    lavalight(lit);
+}
+
+#endif /* HECK_PATCH */
 /*mkmaze.c*/
diff -ru -x '*.o' --strip-trailing-cr nh341/src/monmove.c heck1b/src/monmove.c
--- nh341/src/monmove.c	2003-02-23 05:43:28.000000000 -0800
+++ heck1b/src/monmove.c	2003-06-04 00:11:50.000000000 -0700
@@ -135,6 +135,10 @@
 	    is_lminion(mtmp) || mtmp->data == &mons[PM_ANGEL] ||
 	    is_rider(mtmp->data) || mtmp->data == &mons[PM_MINOTAUR])
 		return(FALSE);
+#ifdef HECK_PATCH
+	if( mtmp->data == &mons[PM_VLAD_THE_IMPALER] )
+		return FALSE;
+#endif
 
 	return (boolean)(sobj_at(SCR_SCARE_MONSTER, x, y)
 #ifdef ELBERETH
diff -ru -x '*.o' --strip-trailing-cr nh341/src/monst.c heck1b/src/monst.c
--- nh341/src/monst.c	2003-02-23 05:43:28.000000000 -0800
+++ heck1b/src/monst.c	2003-06-04 00:11:50.000000000 -0700
@@ -2012,15 +2012,27 @@
 	M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_STRONG|M2_NASTY|M2_LORD|M2_MALE|
 	M2_MAGIC, M3_INFRAVISIBLE, HI_ZAP),
 #endif
+#ifdef HECK_PATCH
     MON("Vlad the Impaler", S_VAMPIRE,
-	LVL(14, 18, -3, 80, -10), (G_NOGEN|G_NOCORPSE|G_UNIQ),
-	A(ATTK(AT_WEAP, AD_PHYS, 1, 10), ATTK(AT_BITE, AD_DRLI, 1, 10),
-	  NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
-	SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0,
-	M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN,
-	M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|
-	  M2_NASTY|M2_PRINCE|M2_MALE,
-	M3_WAITFORU|M3_WANTSCAND|M3_INFRAVISIBLE, HI_LORD),
+        LVL(28, 24, -6, 80, -10), (G_NOGEN|G_NOCORPSE|G_UNIQ),
+        A(ATTK(AT_WEAP, AD_PHYS, 2, 10), ATTK(AT_BITE, AD_DRLI, 1, 12),
+          ATTK(AT_GAZE,AD_PLYS,0,4), NO_ATTK, NO_ATTK, NO_ATTK),
+        SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0,
+        M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN,
+        M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|
+          M2_NASTY|M2_PRINCE|M2_MALE,
+        M3_WAITFORU|M3_WANTSCAND|M3_INFRAVISIBLE, HI_LORD),
+#else
+    MON("Vlad the Impaler", S_VAMPIRE,
+        LVL(14, 18, -3, 80, -10), (G_NOGEN|G_NOCORPSE|G_UNIQ),
+        A(ATTK(AT_WEAP, AD_PHYS, 1, 10), ATTK(AT_BITE, AD_DRLI, 1, 10),
+          NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK),
+        SIZ(WT_HUMAN, 400, 0, MS_VAMPIRE, MZ_HUMAN), MR_SLEEP|MR_POISON, 0,
+        M1_FLY|M1_BREATHLESS|M1_HUMANOID|M1_POIS|M1_REGEN,
+        M2_NOPOLY|M2_UNDEAD|M2_STALK|M2_HOSTILE|M2_PNAME|M2_STRONG|
+          M2_NASTY|M2_PRINCE|M2_MALE,
+        M3_WAITFORU|M3_WANTSCAND|M3_INFRAVISIBLE, HI_LORD),
+#endif /* HECK_PATCH */
 /*
  * Wraiths
  */
diff -ru -x '*.o' --strip-trailing-cr nh341/sys/unix/Makefile.top heck1b/sys/unix/Makefile.top
--- nh341/sys/unix/Makefile.top	2003-02-23 05:43:40.000000000 -0800
+++ heck1b/sys/unix/Makefile.top	2003-06-04 00:11:50.000000000 -0700
@@ -75,7 +75,7 @@
 
 SPEC_LEVS = asmodeus.lev baalz.lev bigrm-?.lev castle.lev fakewiz?.lev \
 	juiblex.lev knox.lev medusa-?.lev minend-?.lev minefill.lev \
-	minetn-?.lev oracle.lev orcus.lev sanctum.lev soko?-?.lev \
+	minetn-?.lev oracle.lev orcus.lev sanct???.lev soko?-?.lev \
 	tower?.lev valley.lev wizard?.lev \
 	astral.lev air.lev earth.lev fire.lev water.lev
 QUEST_LEVS = ???-goal.lev ???-fil?.lev ???-loca.lev ???-strt.lev
diff -ru -x '*.o' --strip-trailing-cr nh341/sys/winnt/Makefile.bcc heck1b/sys/winnt/Makefile.bcc
--- nh341/sys/winnt/Makefile.bcc	2003-02-23 05:43:44.000000000 -0800
+++ heck1b/sys/winnt/Makefile.bcc	2003-06-04 00:11:50.000000000 -0700
@@ -1010,7 +1010,7 @@
 	if exist $(DAT)\orcus.lev	del $(DAT)\orcus.lev
 	if exist $(DAT)\rumors		del $(DAT)\rumors
 	if exist $(DAT)\quest.dat	del $(DAT)\quest.dat
-	if exist $(DAT)\sanctum.lev	del $(DAT)\sanctum.lev
+	if exist $(DAT)\sanct*.lev	del $(DAT)\sanct*.lev
 	if exist $(DAT)\soko?-?.lev	del $(DAT)\soko?-?.lev
 	if exist $(DAT)\tower?.lev	del $(DAT)\tower?.lev
 	if exist $(DAT)\valley.lev	del $(DAT)\valley.lev
diff -ru -x '*.o' --strip-trailing-cr nh341/sys/winnt/Makefile.gcc heck1b/sys/winnt/Makefile.gcc
--- nh341/sys/winnt/Makefile.gcc	2003-02-23 05:43:44.000000000 -0800
+++ heck1b/sys/winnt/Makefile.gcc	2003-06-04 00:11:50.000000000 -0700
@@ -1006,7 +1006,7 @@
 	$(subst /,\,if exist $(DAT)/orcus.lev    del $(DAT)/orcus.lev)
 	$(subst /,\,if exist $(DAT)/rumors  del $(DAT)/rumors)
 	$(subst /,\,if exist $(DAT)/quest.dat    del $(DAT)/quest.dat)
-	$(subst /,\,if exist $(DAT)/sanctum.lev  del $(DAT)/sanctum.lev)
+	$(subst /,\,if exist $(DAT)/sanct*.lev  del $(DAT)/sanctum.lev)
 	$(subst /,\,if exist $(DAT)/soko?-?.lev  del $(DAT)/soko?-?.lev)
 	$(subst /,\,if exist $(DAT)/tower?.lev   del $(DAT)/tower?.lev)
 	$(subst /,\,if exist $(DAT)/valley.lev   del $(DAT)/valley.lev)
diff -ru -x '*.o' --strip-trailing-cr nh341/sys/winnt/Makefile.msc heck1b/sys/winnt/Makefile.msc
--- nh341/sys/winnt/Makefile.msc	2003-02-23 05:43:44.000000000 -0800
+++ heck1b/sys/winnt/Makefile.msc	2003-06-04 00:11:50.000000000 -0700
@@ -1038,7 +1038,7 @@
 	if exist $(DAT)\orcus.lev	del $(DAT)\orcus.lev
 	if exist $(DAT)\rumors		del $(DAT)\rumors
 	if exist $(DAT)\quest.dat	del $(DAT)\quest.dat
-	if exist $(DAT)\sanctum.lev	del $(DAT)\sanctum.lev
+	if exist $(DAT)\sanct*.lev	del $(DAT)\sanct*.lev
 	if exist $(DAT)\soko?-?.lev	del $(DAT)\soko?-?.lev
 	if exist $(DAT)\tower?.lev	del $(DAT)\tower?.lev
 	if exist $(DAT)\valley.lev	del $(DAT)\valley.lev
diff -ru -x '*.o' --strip-trailing-cr nh341/util/makedefs.c heck1b/util/makedefs.c
--- nh341/util/makedefs.c	2003-02-23 05:43:44.000000000 -0800
+++ heck1b/util/makedefs.c	2003-06-04 00:11:50.000000000 -0700
@@ -638,6 +638,9 @@
 #ifdef GOLDOBJ
 		"gold object in inventories",
 #endif
+#ifdef HECK_PATCH
+		"heck patch (1b) Gehennom mazes and TOUGHVLAD patch",
+#endif
 #ifdef INSURANCE
 		"insurance files for recovering from crashes",
 #endif
