Heck Patch 1e 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-?.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 nilla_cyg/src/dungeon.c heck1b/src/dungeon.c --- nilla_cyg/src/dungeon.c 2009-05-10 12:28:10.082200000 -0700 +++ heck1e/src/dungeon.c 2009-07-07 02:38:05.591000000 -0700 @@ -626,7 +626,7 @@ #ifdef REINCARNATION { "rogue", &rogue_level }, #endif - { "sanctum", &sanctum_level }, + { "sanctm", &sanctum_level }, { "valley", &valley_level }, { "water", &water_level }, { "wizard1", &wiz1_level }, 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 0 && map[cx][cy] < m) { + done[map[cx][cy]-1] = 1; + joins++; + } + + for(faux=1;faux>1)-1; + else + x = cx - (faux>>1); + } + else + x = faux; + + for(y=0;y=thresh) + mymap[x][y] = 1; + } + + for(x=1;xtyp)) + 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) 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 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) + 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;xdnum) + return -99; + else + return target->dlevel - u.uz.dlevel; +} + +STATIC_OVL void +frame_maze() { + int x,y; + struct rm *rmp; + for(x=1;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;xtyp)) + 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;xdata == &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