summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--crawl-ref/source/dat/lair.des578
-rw-r--r--crawl-ref/source/dat/slime.des221
-rw-r--r--crawl-ref/source/dat/snake.des125
-rw-r--r--crawl-ref/source/dat/swamp.des228
4 files changed, 580 insertions, 572 deletions
diff --git a/crawl-ref/source/dat/lair.des b/crawl-ref/source/dat/lair.des
index 5a788b554e..422ebeb91d 100644
--- a/crawl-ref/source/dat/lair.des
+++ b/crawl-ref/source/dat/lair.des
@@ -1,6 +1,10 @@
################################################################################
-# lair.des: All maps relating to the Lair system, including entries and end
-# branch endings for Snake Pit, Slime Pit and Swamp.
+# lair.des: All maps relating to the Lair branch. Branches off of Lair can be
+# found in their relevant file:
+# Shoals - shoals.des
+# Snake Pit - snake.des
+# Swamp - swamp.des
+# Pits of Slime - slime.des
################################################################################
################################################################################
@@ -650,573 +654,3 @@ MAP
;wwwwwwww;
;;wwww;;
ENDMAP
-
-##############################################################################
-# Swamp specific non-ending vaults
-##############################################################################
-
-# The only Swamp entry... mist leaking from the stairs.
-NAME: swamp_mist
-TAGS: swamp_entry
-MARKER: O = lua:fog_machine { \
- pow_min = 8, pow_max = 12, delay = 25, \
- size = 1, walk_dist = 1, spread_rate= 33 }
-MAP
-O
-ENDMAP
-
-##############################################################################
-# Snake Pit specific non-ending vaults
-##############################################################################
-
-##############################################################################
-# Slime Pit specific non-ending vaults
-##############################################################################
-
-# Weight balancer
-NAME: slime_dummy
-TAGS: slime_entry
-MAP
-O
-ENDMAP
-
-# Slime entries featuring an altar to Jiyva
-NAME: slime_altar_1
-TAGS: slime_entry
-WEIGHT: 5
-KFEAT: Z = altar_jiyva
-MAP
-....
-.OZ.
-....
-ENDMAP
-
-NAME: slime_altar_2
-TAGS: slime_entry
-WEIGHT: 2
-KFEAT: Z = altar_jiyva
-SUBST: 1 : 111223
-NSUBST: 1 = 1 / 1. , 2 = 2 / 2... , 3 = 3 / 3....
-MONS: jelly / ooze / brown ooze / giant amoeba
-MONS: acid blob / slime creature
-MONS: azure jelly
-MAP
-ccccc
-c111c.
-cO1_+@
-c111c.
-ccccc
-ENDMAP
-
-##############################################################################
-# Branch ends: Slime Pit, Snake Pit, Swamp
-# Note that the Shoals usually have a randomised end map; predrawn maps
-# (which need not be encompassing) are sometimes used, though.
-##############################################################################
-
-################################################################################
-# Slime Pit
-#
-NAME: slime_pit
-PLACE: Slime:6
-ORIENT: encompass
-TAGS: no_rotate no_dump
-MONS: the royal jelly
-MONS: acid blob
-MONS: great orb of eyes / nothing
-SUBST: ' : ' .:1, ' : ' x:1, ' = .x
-SUBST: " : " .:3, " = .c
-NSUBST: P = O / *|
-KMASK: | = no_monster_gen
-KFEAT: Z = altar_jiyva
-SHUFFLE: ([{
-LFLAGS: no_tele_control
-
-{{
--- Attach function to the royal jelly itself. This will follow it wherever
--- it goes, even through polymorphs, and set dgn.persist.royal_jelly_dead
--- when it dies through means other than being banished.
-local function monster_die(monster, killer_type, killer_index, silent, wizard)
- if killer_type == "reset" then
- if monster.you_can_see then
- crawl.mpr("You feel a great sense of loss.")
- else
- crawl.mpr("You feel a great sense of loss, and a brush of " ..
- "the abyss.")
- end
- else
- dgn.persist.fix_slime_vaults = true
- end
-end
-}}
-MARKER: 1 = lua: MonPropsMarker:new {monster_dies_lua_key = monster_die}
-
-{{
-local function fixup_slime_vaults(data, triggerable, triggerer, marker, ev)
- if not dgn.persist.fix_slime_vaults then
- return
- end
-
- -- Restore teleport control.
- dgn.change_level_flags("!no_tele_control")
-
- local to_feat
- if you.god() == "Jiyva" then
- to_feat = "floor"
- else
- to_feat = "clear_rock_wall"
- end
-
- local seen = dgn.seen_replace_feat("stone_wall", to_feat)
- seen = dgn.seen_replace_feat("clear_stone_wall", to_feat) or seen
-
- if you.god() == "Jiyva" then
- if you.silenced() then
- crawl.mpr("An unexplained breeze blows through the dungeon.", "god")
- else
- crawl.mpr("You hear the sound of toppling stones.", "god")
- end
- else
- if seen then
- crawl.mpr("Suddenly, all colour oozes out of the stone walls.",
- "monster_enchant")
- else
- crawl.mpr("You feel a strange vibration for a moment.",
- "monster_enchant")
- end
- end
-
- -- We're done.
- dgn.persist.slime_fixup_done = true
-
- triggerable:remove(marker)
-end
-
-local fixup_marker = TriggerableFunction:new(
- {
- func=fixup_slime_vaults,
- repeated=true
- }
-)
-
-fixup_marker:add_triggerer(DgnTriggerer:new {
- type="monster_dies",
- target="any"
-})
-
-fixup_marker:add_triggerer(DgnTriggerer:new {
- type="entered_level"
-})
-
-}}
-# Doesn't matter where thisw marker goes, so we might as well chose
-# the altar.
-: lua_marker("Z", fixup_marker)
-
-{{
- dgn.set_feature_desc_short("stone wall", "rune carved stone wall")
- dgn.set_feature_desc_long("stone wall",
-"This strangely slime-free stone wall is carved all over with countless "..
-"mystical runes. One often repeated set of runes seems to refer to "..
-"'the royal jelly.'")
-}}
-MAP
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''xxxx''''...''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxx'''..'''''........'''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxx'.....................'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxx'.......................''x'xxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxx'..........................'.xxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxx'............................'xxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxx'.............................'''xxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxx'...............................''xxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxx''..(..............................''xxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxx'''....................................''xxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxx'.........................................'xxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxx''.........................................'xxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxx'...........................................'xxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxx''xx'..........................................'xxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxx'..''................""""."""""...........]....''xxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxx'x.................."cccc2ccccc".................'xxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxx'.'................"cc*cc..cc*cc".................''xxxxxxxxxxxxxxx
-xxxxxxxxxxxxx'................."cc***cc4c***cc".................xxxxxxxxxxxxxxxx
-xxxxxxxxxxxxx'................"cc*|*cc..cc*|*cc"................'xxxxxxxxxxxxxxx
-xxxxxxxxxxxx''..............."cc*|P|*c4cc*|P|*cc"...............'xxxxxxxxxxxxxxx
-xxxxxxxxxxxx'................"cc**|*cc..cc*|**cc"................'''xxxxxxxxxxxx
-xxxxxxxxxxxx'................"ccc**c|cc4c|c**ccc"..................xxxxxxxxxxxxx
-xxxxxxxxxxx'................."cccccccc.3cccccccc"..................'xxxxxxxxxxxx
-xxxxxxxxxxx'................."c.4.c.4.1..4.c.4.c"..................''xxxxxxxxxxx
-xxxxxxxxxxx'..................2.c.4.c..Z.c.4.c.2....................'xxxxxxxxxxx
-xxxxxxxxxx'..........)......."cccccccc3.cccccccc"...................'xxxxxxxxxxx
-xxxxxxxxxx'.................."ccc**c|cc4c|c**ccc"...................'xxxxxxxxxxx
-xxxxxxxxxx'.................."cc**|*cc..cc*|**cc"..................'xxxxxxxxxxxx
-xxxxxxxxx'..................."cc*|P|*c4cc*|P|*cc"..................'xxxxxxxxxxxx
-xxxxxxxxx''..................."cc*|*cc..cc*|*cc"..................'xxxxxxxxxxxxx
-xxxxxxxxxxx'..................."cc***cc4c***cc"...................'xxxxxxxxxxxxx
-xxxxxxxxxxxx'..................."cc*cc..cc*cc"....................'xxxxxxxxxxxxx
-xxxxxxxxxxxx'...................."cccc2ccccc"....................'xxxxxxxxxxxxxx
-xxxxxxxxxxxxx'...................."""".""""".....................'xxxxxxxxxxxxxx
-xxxxxxxxxxxxx'...........................................[........'xxxxxxxxxxxxx
-xxxxxxxxxxxx''..............................................'''....'xxxxxxxxxxxx
-xxxxxxxxxxxx'.............................................''xxx''.'xxxxxxxxxxxxx
-xxxxxxxxxxxxx'..........................................''xxxxxxx.xxxxxxxxxxxxxx
-xxxxxxxxxxxxx'''.......................................'xxxxxxxxx.xxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxx'......................................'xxxxxxxxx'xxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxx'.......................................'xxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxx''.....................................'xxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxx'.....................................'xxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxx''....................................'xxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxx'...................................'xxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxx'............................}......'xxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxx''................................'xxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxx'.............................''xxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxx'.............................'xxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxx'......................''...'xxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxx'''''........{.......'xx'..xxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'''............'xxxx''xxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''....'....'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''x...''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-ENDMAP
-
-
-################################################################################
-# Snake Pit: the hunt
-#
-NAME: snake_hunt
-PLACE: Snake:5
-TAGS: no_rotate
-ORIENT: northwest
-KFEAT: Z = weight:2 teleport trap / .
-KFEAT: z = teleport trap / Zot trap / weight:20 .
-MONS: naga / nothing
-MONS: greater naga / nothing
-MONS: guardian serpent / nothing
-MONS: naga warrior / nothing
-MONS: naga mage / nothing
-MONS: greater naga / guardian serpent
-SHUFFLE: 'X / "Y
-SHUFFLE: 'X / 'X / AB, "Y / CD
-SUBST: A=x, B=x, C=x, D=x
-SUBST: ' = .:250 1 2 3 4:15 5:5
-SUBST: " = .:250 1 2 3 4:5 5:15
-SUBST: X=xc..++, Y=xc++
-SUBST: T : T U V .:30 b
-SUBST: _:.!, !:!.x, !=x .:2
-SHUFFLE: 123, 45, ([<
-#
-validate {{ return glyphs_connected('{', 'O') }}
-#
-MAP
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxx''''''x4O4x""""""xxxxxxxxxxx
-xxxxxxxxxxx''''''xxxx664z466xxxx""""""xxxxxx
-xxxxxxxx''''xxxxxxxx.5665665.xxxxxxxx""""xxx
-xxxxxxx''xxxx''''xxx..45554..xxx""""xxxx""xx
-xxxxxx''xxx''''''''xxx.666.xxx""""""""xxx""x
-xxxxxx'xxx''''''''''xxxcXcxxx""""""""""xxx"x
-xxxxxx''x''''''''''''xx.3.xx""""""""""""x""x
-xxxxxxx'Y'''''''''''''45354"""""""""""""Y"xx
-xxxxxxxxxx''''''''''xx.....xx""""""""""xxxxx
-xxxxxxxxxxx''''''''xxxxx.xxxxx""""""""xxxxxx
-xxxxxxxxxxxxx''''xxxxxxx.xxxxxxx""""xxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxx!.!xxxxxx.....xxxxxx!.!xxxxxxxx
-xxxxxxxxxx!....._xx...43335...xx_...!!!xxxxx
-xxxxxxxx!......_x.11.4..3..5.22.x_......!xxx
-xxxxxxx!...2...x..11.........22..x...1...!xx
-xxxxxxx!..2..._x......T...T......x_...1..!xx
-xxxxxx!...2...x..2.............1..x...1...!x
-xxxxxx!..2....x.........{.........x....1...!
-xxxxxx!.......x....T...(.[...T.............@
-xxxxxx!..2....x.......ZZZZZ.......x....1...!
-xxxxxxx!..2..._x.................x_...1..!xx
-xxxxxxx!...2..._xx....T.}.T....xx_...1...!xx
-xxxxxxx!........._xx.........xx_.........!xx
-xxxxxxxx!.........._xxx...xxx_..........!xxx
-xxxxxxxxx!.............x.x.............!xxxx
-xxxxxxxxxx!!.........................!!xxxxx
-xxxxxxxxxxxx!!!.....3.......3.....!!!xxxxxxx
-xxxxxxxxxxxxxxx!!!!!..3...3..!!!!!xxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxx!!!...!!!xxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxx!@!xxxxxxxxxxxxxxxxxx
-ENDMAP
-
-################################################################################
-# Snake Pit: old level
-#
-NAME: snake_pit
-PLACE: Snake:5
-ORIENT: southwest
-TAGS: no_rotate
-MONS: greater naga / nothing
-MONS: naga
-MONS: naga mage / nothing
-MONS: naga warrior / nothing
-SUBST: c = c .:1
-SUBST: v = v .:1
-SUBST: v = x
-MAP
-xxxxxxxxxxxxxxxxxxxxxxx..@.xxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxx.............xxxxxxxx
-xxxxxxxxxxxxxx....v.............v..xxxxx
-xxxxxxxxxxxx....2.v.............v.2..xxx
-xxxxxxxxxxx.....2.v....v.....v..v.33.xxx
-xxxxxxxxxxx.....22v.............vv.2..xx
-xxxxxxxxxxx.......vv..v........vv.33..xx
-xxxxxxxxxx.....x233vv....T...vvv4444..xx
-xxxxxxxxxx......4444v.........v.333....x
-xxxxxxxxxx......33v4...v.......4x4.....x
-xxxxxxxxxx.......334.....v.....4333....x
-xxxxxxxxxx..c......3.3..4.4..v.......c.x
-xxxxxxxxx...cc.....1...1.1.1...133..cc.x
-xxxxxxxxx...cc....3.....4.4.........cc.x
-xxxxxxxxx...cc...3...v........2.....cc.x
-xxxxxxxxx...cc.........1...1.......cc..x
-xxxxxxxxxx..cc.....1.....1.....1..ccc.xx
-xxxxxxxxxx...ccc......3333333.....cc..xx
-xxxxxxxxxx....cccc....3333333.....cc..xx
-xxxxxxxxxx.....cccccc............cc...xx
-xxxxxxxxxx........ccccc..O....cccc....xx
-xxxxxxxxxxx........cccccccccccccc....xxx
-xxxxxxxxxxx..........ccccccccccc.....xxx
-xxxxxxxxxxxxx.......................xxxx
-xxxxxxxxxxxxxxxx..................xxxxxx
-xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-ENDMAP
-
-
-################################################################################
-# Swamp:5 standard
-#
-NAME: swamp
-PLACE: Swamp:5
-ORIENT: float
-TAGS: no_rotate
-MONS: swamp dragon / nothing
-MONS: swamp drake / nothing
-MONS: hydra / nothing
-SHUFFLE: 12
-SUBST: ' = xc
-MAP
- @
- 2
- 2
- .
- 2 2
- .
- cc.cc
- cc3.2cc
- 'c3.2.3c'
- 'c11.3322c''
- 'cc...21.1ccc
- 'c.13321.1.cc'
-'cc31333.113cc'
-'cc22113.223cc
- 'cc3333113cc'
- 'cccc3O3ccc'
- 'cccccccc'
- ''ccccc'
- ''cc'
- '
-ENDMAP
-
-################################################################################
-# Swamp:5 alternative (dp)
-#
-NAME: swamp_alternative
-PLACE: Swamp:5
-TAGS: no_pool_fixup no_rotate
-ORIENT: float
-MONS: swamp dragon, swamp drake, hydra, fire drake
-ITEM: nothing
-SUBST: 1=1., 2=2., 3=3., 4=4., L=l.
-SHUFFLE: Od, 123, lw
-SUBST: l=l .:2, '=.x, "=cx, _=c.
-MAP
- @ @
- 1' 2'
- 1 2'
- . .
- '2 3. ''3
- '' "c..1""""
- ""c".ccccc"" '3
- "cc_.2LLl.ccc""2.'3
- "cc..33LL..2._c1' @
- "cc1122lLL...1.1""
- "c....llllll21.2c"
- "cc33l4llllll2.cc"
- "ccll.llll34lcc"
- "cccO.lld3ccc"
- ""cccccccc""
- """"""""
-ENDMAP
-
-###############################################################################
-# Swamp:5 alternative (due)
-NAME: swamp_fiery
-PLACE: Swamp:5
-TAGS: no_pool_fixup no_rotate
-ORIENT: float
-MONS: dragon, mottled dragon / hydra, fire drake / swamp drake / steam dragon
-MONS: fire drake / lindwurm w:3
-SHUFFLE: OX
-SUBST: S = llw, L = ll.
-SUBST: ' = x., " = cx
-MARKER: R = lua:fog_machine { cloud_type = "flame", pow_min = 8, \
- pow_max = 12, delay_min = 40, delay_max = 70, \
- size = 1, walk_dist = 1, spread_rate= 3 }
-KFEAT: XR = lava
-MAP
- @ .@
- lS . 3.'
- '.@ SlRl '.
- 3 lS '.
- "cc.' 3'
- ""cc3c" .
- "ccc2cc" """ "cc.c"
- "c.L.2cc"cccc""""""ccLcc"
- "ccL3ll.ccc34cccccccc2Lc""
- "cc.LLl...Ll.33cc.c.L3ccc"
- "cccc3llLLlllLLl..L2Lll.Lc"
- "cc.LllllclllllLlllllL.cc"
- "cc2LllRcclLllRll.332cc"
- "ccL.Lllllccllll2lcccc"
- "ccc2Lllcc"ccX2lcc"""
- ""cc1Occ" "ccccc"
- "cccc" """"
- """"
-ENDMAP
-
-###############################################################################
-# The way to icy death!
-#
-NAME: swamp_icy
-PLACE: Swamp:5
-TAGS: no_pool_fixup no_rotate
-ORIENT: southeast
-SHUFFLE: OR
-MARKER: Q = lua:fog_machine { cloud_type = "freezing vapour", \
- pow_min = 8, pow_max = 12, delay_min = 20, delay_max = 30, \
- size = 1, walk_dist = 1, spread_rate= 33 }
-KMONS: ? = swamp worm simulacrum / giant goldfish simulacrum / electric eel \
- simulacrum
-MONS: ice dragon, hydra simulacrum, freezing wraith, azure jelly / ice dragon
-SUBST: X = cc., RY = wWwww., Q=c
-MAP
- wwxxxxxxxxx
- @. @ wwxxccccccxx
- . ..wwcc3c3ccxx
- ..w?.wXXc..Xcxx
- ?ww....Q.cXcxx
- www.wwXc3c3Xcxx
- w?.wXcXc.3ccxx
- ww.wccc..ccxx
- @xxcc..ccxx
- xcc2.ccxx
- xxc..cccxx
- @ x xxcc2Xccxx
- . xxx xcc.2.cxx
- . xxxxx xc..cccxx
- . xxxxxxxxcc2.ccxx
- . .wwxxxxxccX2.cxx
- . ...?wxxxxccc2.ccx
- .2..wwwwxxxxcc.2ccx
- ? ....ww?wxxxxccc..ccx
- xxww.wwwwwxxxxxcc..ccxx
- xxw?ww?wwxxxcccc.2ccxxx
- xxxxwwwwxxxcccccc2Xcxxxx
- xxxxxxxxxcccwwwY2.Yccxxx
- xxxxxxxcccwwQww.YY.wccxx
- xxxxxccwwwww22Yww2wwcxx
- xxccwwww22YwwwwY2wcxx
- xxccwww.2YwwQwwwY2wcxx
- xxccYw1.YwwwwwwwY2wwcxx
- xxcccwRwwwwcccwY1.wwccxx
- xxcccccwwwwcw4wwOYYcccxxx
-xxxccccccccccccccccccxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxxx
-ENDMAP
-
-##################################################################
-# Alternative swamp end, by Lemuel
-#
-NAME: swamp_pestilence
-PLACE: Swamp:5
-TAGS: no_pool_fixup
-ORIENT: southeast
-MONS: spectral swamp dragon / spectral hydra
-MONS: hydra zombie / swamp dragon zombie
-MONS: spectral swamp drake / swamp drake zombie
-MONS: death drake / plant / w:5 oklob plant
-MONS: insubstantial wisp
-MONS: phantom
-SHUFFLE: OX
-MARKER: Y = lua:fog_machine { cloud_type = "foul pestilence", \
- pow_min = 8, pow_max = 12, delay_min = 20, delay_max = 30, \
- size = 1, walk_dist = 1, spread_rate= 33 }
-MARKER: O = lua:fog_machine { cloud_type = "foul pestilence", \
- pow_min = 8, pow_max = 12, delay_min = 20, delay_max = 30, \
- size = 1, walk_dist = 1, spread_rate= 33 }
-KMONS: O = skeletal dragon
-KFEAT: O = O
-SUBST: ? = ? ! w
-KMONS: ? = big fish zombie
-KMONS: ! = swamp worm zombie
-KFEAT: ? = deep_water
-KFEAT: ! = deep_water
-SUBST: X=. , Y:w , 6=66. , 1=13 , .=W... , "=xc , '=.wW
-MAP
- ?w......w?w"xx xx
- w?ww..ww?wwc"xx xxx
- "wWWwww?w?cc"xxx xxxx
- '""cWw?w?ccc"xxxxxxxxx
- 'x"c..wwcccc"""xxxxxxx
- xxxc...ccccccccccc"xxx
- xxx"cc....cccc6666c"xxx
- xxx"cc....cccO6666cc"xx
- xxxxcccc...cc6666665c"xx
- x'"cccc...ccc666666ccxx
- 'cc1Xcc...cc6666666cxx
- xc211ccc..cccc5.666c"x
- ccc2.1cc.Y.cccc..6cc"x
- '"c.1.ccc...ccc...cc"x
- 'xcc.1.ccc...cc....cxx
- 'x"c2.21ccc..ccc5.ccxx
- xxxcc...ccc..c....c"xx
- xxx"cc.1.2c...5.cccxxx
- xxxx"c2......?wcc""xxx
- xxxxxxccc2.wwwwcc""xxxx
- xxxxxxx"cc?w?wcc""xxxxx
- xxxxxxxx"cc4wcc"xxxxxxx
- xxxxxxxxxx"cccc"xxxxxxxx
-xxxxxxxxxxxxx""xxxxxxxxxx
-xxxxxxxxxxxxxxxxxxxxxxxxx
-ENDMAP
diff --git a/crawl-ref/source/dat/slime.des b/crawl-ref/source/dat/slime.des
new file mode 100644
index 0000000000..c28ccd3e3f
--- /dev/null
+++ b/crawl-ref/source/dat/slime.des
@@ -0,0 +1,221 @@
+###############################################################################
+# slime.des: All maps and branch endings relating to the Slime Pits
+###############################################################################
+
+##############################################################################
+# Slime Pit specific non-ending vaults
+##############################################################################
+
+# Weight balancer
+NAME: slime_dummy
+TAGS: slime_entry
+MAP
+O
+ENDMAP
+
+# Slime entries featuring an altar to Jiyva
+NAME: slime_altar_1
+TAGS: slime_entry
+WEIGHT: 5
+KFEAT: Z = altar_jiyva
+MAP
+....
+.OZ.
+....
+ENDMAP
+
+NAME: slime_altar_2
+TAGS: slime_entry
+WEIGHT: 2
+KFEAT: Z = altar_jiyva
+SUBST: 1 : 111223
+NSUBST: 1 = 1 / 1. , 2 = 2 / 2... , 3 = 3 / 3....
+MONS: jelly / ooze / brown ooze / giant amoeba
+MONS: acid blob / slime creature
+MONS: azure jelly
+MAP
+ccccc
+c111c.
+cO1_+@
+c111c.
+ccccc
+ENDMAP
+
+################################################################################
+# Slime Pit
+#
+NAME: slime_pit
+PLACE: Slime:6
+ORIENT: encompass
+TAGS: no_rotate no_dump
+MONS: the royal jelly
+MONS: acid blob
+MONS: great orb of eyes / nothing
+SUBST: ' : ' .:1, ' : ' x:1, ' = .x
+SUBST: " : " .:3, " = .c
+NSUBST: P = O / *|
+KMASK: | = no_monster_gen
+KFEAT: Z = altar_jiyva
+SHUFFLE: ([{
+LFLAGS: no_tele_control
+
+{{
+-- Attach function to the royal jelly itself. This will follow it wherever
+-- it goes, even through polymorphs, and set dgn.persist.royal_jelly_dead
+-- when it dies through means other than being banished.
+local function monster_die(monster, killer_type, killer_index, silent, wizard)
+ if killer_type == "reset" then
+ if monster.you_can_see then
+ crawl.mpr("You feel a great sense of loss.")
+ else
+ crawl.mpr("You feel a great sense of loss, and a brush of " ..
+ "the abyss.")
+ end
+ else
+ dgn.persist.fix_slime_vaults = true
+ end
+end
+}}
+MARKER: 1 = lua: MonPropsMarker:new {monster_dies_lua_key = monster_die}
+
+{{
+local function fixup_slime_vaults(data, triggerable, triggerer, marker, ev)
+ if not dgn.persist.fix_slime_vaults then
+ return
+ end
+
+ -- Restore teleport control.
+ dgn.change_level_flags("!no_tele_control")
+
+ local to_feat
+ if you.god() == "Jiyva" then
+ to_feat = "floor"
+ else
+ to_feat = "clear_rock_wall"
+ end
+
+ local seen = dgn.seen_replace_feat("stone_wall", to_feat)
+ seen = dgn.seen_replace_feat("clear_stone_wall", to_feat) or seen
+
+ if you.god() == "Jiyva" then
+ if you.silenced() then
+ crawl.mpr("An unexplained breeze blows through the dungeon.", "god")
+ else
+ crawl.mpr("You hear the sound of toppling stones.", "god")
+ end
+ else
+ if seen then
+ crawl.mpr("Suddenly, all colour oozes out of the stone walls.",
+ "monster_enchant")
+ else
+ crawl.mpr("You feel a strange vibration for a moment.",
+ "monster_enchant")
+ end
+ end
+
+ -- We're done.
+ dgn.persist.slime_fixup_done = true
+
+ triggerable:remove(marker)
+end
+
+local fixup_marker = TriggerableFunction:new(
+ {
+ func=fixup_slime_vaults,
+ repeated=true
+ }
+)
+
+fixup_marker:add_triggerer(DgnTriggerer:new {
+ type="monster_dies",
+ target="any"
+})
+
+fixup_marker:add_triggerer(DgnTriggerer:new {
+ type="entered_level"
+})
+
+}}
+# Doesn't matter where thisw marker goes, so we might as well chose
+# the altar.
+: lua_marker("Z", fixup_marker)
+
+{{
+ dgn.set_feature_desc_short("stone wall", "rune carved stone wall")
+ dgn.set_feature_desc_long("stone wall",
+"This strangely slime-free stone wall is carved all over with countless "..
+"mystical runes. One often repeated set of runes seems to refer to "..
+"'the royal jelly.'")
+}}
+MAP
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''xxxx''''...''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxx'''..'''''........'''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxx'.....................'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxx'.......................''x'xxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxx'..........................'.xxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx'............................'xxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx'.............................'''xxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx'...............................''xxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxx''..(..............................''xxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxx'''....................................''xxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxx'.........................................'xxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx''.........................................'xxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxx'...........................................'xxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxx''xx'..........................................'xxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxx'..''................""""."""""...........]....''xxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxx'x.................."cccc2ccccc".................'xxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxx'.'................"cc*cc..cc*cc".................''xxxxxxxxxxxxxxx
+xxxxxxxxxxxxx'................."cc***cc4c***cc".................xxxxxxxxxxxxxxxx
+xxxxxxxxxxxxx'................"cc*|*cc..cc*|*cc"................'xxxxxxxxxxxxxxx
+xxxxxxxxxxxx''..............."cc*|P|*c4cc*|P|*cc"...............'xxxxxxxxxxxxxxx
+xxxxxxxxxxxx'................"cc**|*cc..cc*|**cc"................'''xxxxxxxxxxxx
+xxxxxxxxxxxx'................"ccc**c|cc4c|c**ccc"..................xxxxxxxxxxxxx
+xxxxxxxxxxx'................."cccccccc.3cccccccc"..................'xxxxxxxxxxxx
+xxxxxxxxxxx'................."c.4.c.4.1..4.c.4.c"..................''xxxxxxxxxxx
+xxxxxxxxxxx'..................2.c.4.c..Z.c.4.c.2....................'xxxxxxxxxxx
+xxxxxxxxxx'..........)......."cccccccc3.cccccccc"...................'xxxxxxxxxxx
+xxxxxxxxxx'.................."ccc**c|cc4c|c**ccc"...................'xxxxxxxxxxx
+xxxxxxxxxx'.................."cc**|*cc..cc*|**cc"..................'xxxxxxxxxxxx
+xxxxxxxxx'..................."cc*|P|*c4cc*|P|*cc"..................'xxxxxxxxxxxx
+xxxxxxxxx''..................."cc*|*cc..cc*|*cc"..................'xxxxxxxxxxxxx
+xxxxxxxxxxx'..................."cc***cc4c***cc"...................'xxxxxxxxxxxxx
+xxxxxxxxxxxx'..................."cc*cc..cc*cc"....................'xxxxxxxxxxxxx
+xxxxxxxxxxxx'...................."cccc2ccccc"....................'xxxxxxxxxxxxxx
+xxxxxxxxxxxxx'...................."""".""""".....................'xxxxxxxxxxxxxx
+xxxxxxxxxxxxx'...........................................[........'xxxxxxxxxxxxx
+xxxxxxxxxxxx''..............................................'''....'xxxxxxxxxxxx
+xxxxxxxxxxxx'.............................................''xxx''.'xxxxxxxxxxxxx
+xxxxxxxxxxxxx'..........................................''xxxxxxx.xxxxxxxxxxxxxx
+xxxxxxxxxxxxx'''.......................................'xxxxxxxxx.xxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxx'......................................'xxxxxxxxx'xxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxx'.......................................'xxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxx''.....................................'xxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxx'.....................................'xxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxx''....................................'xxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxx'...................................'xxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxx'............................}......'xxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxx''................................'xxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx'.............................''xxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx'.............................'xxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxx'......................''...'xxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxx'''''........{.......'xx'..xxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'''............'xxxx''xxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''....'....'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''x...''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP
diff --git a/crawl-ref/source/dat/snake.des b/crawl-ref/source/dat/snake.des
new file mode 100644
index 0000000000..9828377465
--- /dev/null
+++ b/crawl-ref/source/dat/snake.des
@@ -0,0 +1,125 @@
+###############################################################################
+# snake.des: All maps and branch endings relating to the Snake Pit.
+###############################################################################
+
+################################################################################
+# Snake endings
+################################################################################
+
+################################################################################
+# Snake Pit: the hunt
+#
+NAME: snake_hunt
+PLACE: Snake:5
+TAGS: no_rotate
+ORIENT: northwest
+KFEAT: Z = weight:2 teleport trap / .
+KFEAT: z = teleport trap / Zot trap / weight:20 .
+MONS: naga / nothing
+MONS: greater naga / nothing
+MONS: guardian serpent / nothing
+MONS: naga warrior / nothing
+MONS: naga mage / nothing
+MONS: greater naga / guardian serpent
+SHUFFLE: 'X / "Y
+SHUFFLE: 'X / 'X / AB, "Y / CD
+SUBST: A=x, B=x, C=x, D=x
+SUBST: ' = .:250 1 2 3 4:15 5:5
+SUBST: " = .:250 1 2 3 4:5 5:15
+SUBST: X=xc..++, Y=xc++
+SUBST: T : T U V .:30 b
+SUBST: _:.!, !:!.x, !=x .:2
+SHUFFLE: 123, 45, ([<
+#
+validate {{ return glyphs_connected('{', 'O') }}
+#
+MAP
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxx''''''x4O4x""""""xxxxxxxxxxx
+xxxxxxxxxxx''''''xxxx664z466xxxx""""""xxxxxx
+xxxxxxxx''''xxxxxxxx.5665665.xxxxxxxx""""xxx
+xxxxxxx''xxxx''''xxx..45554..xxx""""xxxx""xx
+xxxxxx''xxx''''''''xxx.666.xxx""""""""xxx""x
+xxxxxx'xxx''''''''''xxxcXcxxx""""""""""xxx"x
+xxxxxx''x''''''''''''xx.3.xx""""""""""""x""x
+xxxxxxx'Y'''''''''''''45354"""""""""""""Y"xx
+xxxxxxxxxx''''''''''xx.....xx""""""""""xxxxx
+xxxxxxxxxxx''''''''xxxxx.xxxxx""""""""xxxxxx
+xxxxxxxxxxxxx''''xxxxxxx.xxxxxxx""""xxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxx!.!xxxxxx.....xxxxxx!.!xxxxxxxx
+xxxxxxxxxx!....._xx...43335...xx_...!!!xxxxx
+xxxxxxxx!......_x.11.4..3..5.22.x_......!xxx
+xxxxxxx!...2...x..11.........22..x...1...!xx
+xxxxxxx!..2..._x......T...T......x_...1..!xx
+xxxxxx!...2...x..2.............1..x...1...!x
+xxxxxx!..2....x.........{.........x....1...!
+xxxxxx!.......x....T...(.[...T.............@
+xxxxxx!..2....x.......ZZZZZ.......x....1...!
+xxxxxxx!..2..._x.................x_...1..!xx
+xxxxxxx!...2..._xx....T.}.T....xx_...1...!xx
+xxxxxxx!........._xx.........xx_.........!xx
+xxxxxxxx!.........._xxx...xxx_..........!xxx
+xxxxxxxxx!.............x.x.............!xxxx
+xxxxxxxxxx!!.........................!!xxxxx
+xxxxxxxxxxxx!!!.....3.......3.....!!!xxxxxxx
+xxxxxxxxxxxxxxx!!!!!..3...3..!!!!!xxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxx!!!...!!!xxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxx!@!xxxxxxxxxxxxxxxxxx
+ENDMAP
+
+################################################################################
+# Snake Pit: old level
+#
+NAME: snake_pit
+PLACE: Snake:5
+ORIENT: southwest
+TAGS: no_rotate
+MONS: greater naga / nothing
+MONS: naga
+MONS: naga mage / nothing
+MONS: naga warrior / nothing
+SUBST: c = c .:1
+SUBST: v = v .:1
+SUBST: v = x
+MAP
+xxxxxxxxxxxxxxxxxxxxxxx..@.xxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxx.............xxxxxxxx
+xxxxxxxxxxxxxx....v.............v..xxxxx
+xxxxxxxxxxxx....2.v.............v.2..xxx
+xxxxxxxxxxx.....2.v....v.....v..v.33.xxx
+xxxxxxxxxxx.....22v.............vv.2..xx
+xxxxxxxxxxx.......vv..v........vv.33..xx
+xxxxxxxxxx.....x233vv....T...vvv4444..xx
+xxxxxxxxxx......4444v.........v.333....x
+xxxxxxxxxx......33v4...v.......4x4.....x
+xxxxxxxxxx.......334.....v.....4333....x
+xxxxxxxxxx..c......3.3..4.4..v.......c.x
+xxxxxxxxx...cc.....1...1.1.1...133..cc.x
+xxxxxxxxx...cc....3.....4.4.........cc.x
+xxxxxxxxx...cc...3...v........2.....cc.x
+xxxxxxxxx...cc.........1...1.......cc..x
+xxxxxxxxxx..cc.....1.....1.....1..ccc.xx
+xxxxxxxxxx...ccc......3333333.....cc..xx
+xxxxxxxxxx....cccc....3333333.....cc..xx
+xxxxxxxxxx.....cccccc............cc...xx
+xxxxxxxxxx........ccccc..O....cccc....xx
+xxxxxxxxxxx........cccccccccccccc....xxx
+xxxxxxxxxxx..........ccccccccccc.....xxx
+xxxxxxxxxxxxx.......................xxxx
+xxxxxxxxxxxxxxxx..................xxxxxx
+xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP
diff --git a/crawl-ref/source/dat/swamp.des b/crawl-ref/source/dat/swamp.des
new file mode 100644
index 0000000000..2866e35ea9
--- /dev/null
+++ b/crawl-ref/source/dat/swamp.des
@@ -0,0 +1,228 @@
+###############################################################################
+# swamp.des: All maps and branch endings relating to the Swamp.
+###############################################################################
+
+###############################################################################
+# Swamp specific non-ending vaults
+##############################################################################3
+# The only Swamp entry... mist leaking from the stairs.
+NAME: swamp_mist
+TAGS: swamp_entry
+MARKER: O = lua:fog_machine { \
+ pow_min = 8, pow_max = 12, delay = 25, \
+ size = 1, walk_dist = 1, spread_rate= 33 }
+MAP
+O
+ENDMAP
+
+################################################################################
+# Swamp ending vaults
+################################################################################
+
+################################################################################
+# Swamp:5 standard
+#
+NAME: swamp
+PLACE: Swamp:5
+ORIENT: float
+TAGS: no_rotate
+MONS: swamp dragon / nothing
+MONS: swamp drake / nothing
+MONS: hydra / nothing
+SHUFFLE: 12
+SUBST: ' = xc
+MAP
+ @
+ 2
+ 2
+ .
+ 2 2
+ .
+ cc.cc
+ cc3.2cc
+ 'c3.2.3c'
+ 'c11.3322c''
+ 'cc...21.1ccc
+ 'c.13321.1.cc'
+'cc31333.113cc'
+'cc22113.223cc
+ 'cc3333113cc'
+ 'cccc3O3ccc'
+ 'cccccccc'
+ ''ccccc'
+ ''cc'
+ '
+ENDMAP
+
+################################################################################
+# Swamp:5 alternative (dp)
+#
+NAME: swamp_alternative
+PLACE: Swamp:5
+TAGS: no_pool_fixup no_rotate
+ORIENT: float
+MONS: swamp dragon, swamp drake, hydra, fire drake
+ITEM: nothing
+SUBST: 1=1., 2=2., 3=3., 4=4., L=l.
+SHUFFLE: Od, 123, lw
+SUBST: l=l .:2, '=.x, "=cx, _=c.
+MAP
+ @ @
+ 1' 2'
+ 1 2'
+ . .
+ '2 3. ''3
+ '' "c..1""""
+ ""c".ccccc"" '3
+ "cc_.2LLl.ccc""2.'3
+ "cc..33LL..2._c1' @
+ "cc1122lLL...1.1""
+ "c....llllll21.2c"
+ "cc33l4llllll2.cc"
+ "ccll.llll34lcc"
+ "cccO.lld3ccc"
+ ""cccccccc""
+ """"""""
+ENDMAP
+
+###############################################################################
+# Swamp:5 alternative (due)
+NAME: swamp_fiery
+PLACE: Swamp:5
+TAGS: no_pool_fixup no_rotate
+ORIENT: float
+MONS: dragon, mottled dragon / hydra, fire drake / swamp drake / steam dragon
+MONS: fire drake / lindwurm w:3
+SHUFFLE: OX
+SUBST: S = llw, L = ll.
+SUBST: ' = x., " = cx
+MARKER: R = lua:fog_machine { cloud_type = "flame", pow_min = 8, \
+ pow_max = 12, delay_min = 40, delay_max = 70, \
+ size = 1, walk_dist = 1, spread_rate= 3 }
+KFEAT: XR = lava
+MAP
+ @ .@
+ lS . 3.'
+ '.@ SlRl '.
+ 3 lS '.
+ "cc.' 3'
+ ""cc3c" .
+ "ccc2cc" """ "cc.c"
+ "c.L.2cc"cccc""""""ccLcc"
+ "ccL3ll.ccc34cccccccc2Lc""
+ "cc.LLl...Ll.33cc.c.L3ccc"
+ "cccc3llLLlllLLl..L2Lll.Lc"
+ "cc.LllllclllllLlllllL.cc"
+ "cc2LllRcclLllRll.332cc"
+ "ccL.Lllllccllll2lcccc"
+ "ccc2Lllcc"ccX2lcc"""
+ ""cc1Occ" "ccccc"
+ "cccc" """"
+ """"
+ENDMAP
+
+###############################################################################
+# The way to icy death!
+#
+NAME: swamp_icy
+PLACE: Swamp:5
+TAGS: no_pool_fixup no_rotate
+ORIENT: southeast
+SHUFFLE: OR
+MARKER: Q = lua:fog_machine { cloud_type = "freezing vapour", \
+ pow_min = 8, pow_max = 12, delay_min = 20, delay_max = 30, \
+ size = 1, walk_dist = 1, spread_rate= 33 }
+KMONS: ? = swamp worm simulacrum / giant goldfish simulacrum / electric eel \
+ simulacrum
+MONS: ice dragon, hydra simulacrum, freezing wraith, azure jelly / ice dragon
+SUBST: X = cc., RY = wWwww., Q=c
+MAP
+ wwxxxxxxxxx
+ @. @ wwxxccccccxx
+ . ..wwcc3c3ccxx
+ ..w?.wXXc..Xcxx
+ ?ww....Q.cXcxx
+ www.wwXc3c3Xcxx
+ w?.wXcXc.3ccxx
+ ww.wccc..ccxx
+ @xxcc..ccxx
+ xcc2.ccxx
+ xxc..cccxx
+ @ x xxcc2Xccxx
+ . xxx xcc.2.cxx
+ . xxxxx xc..cccxx
+ . xxxxxxxxcc2.ccxx
+ . .wwxxxxxccX2.cxx
+ . ...?wxxxxccc2.ccx
+ .2..wwwwxxxxcc.2ccx
+ ? ....ww?wxxxxccc..ccx
+ xxww.wwwwwxxxxxcc..ccxx
+ xxw?ww?wwxxxcccc.2ccxxx
+ xxxxwwwwxxxcccccc2Xcxxxx
+ xxxxxxxxxcccwwwY2.Yccxxx
+ xxxxxxxcccwwQww.YY.wccxx
+ xxxxxccwwwww22Yww2wwcxx
+ xxccwwww22YwwwwY2wcxx
+ xxccwww.2YwwQwwwY2wcxx
+ xxccYw1.YwwwwwwwY2wwcxx
+ xxcccwRwwwwcccwY1.wwccxx
+ xxcccccwwwwcw4wwOYYcccxxx
+xxxccccccccccccccccccxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP
+
+##################################################################
+# Alternative swamp end, by Lemuel
+#
+NAME: swamp_pestilence
+PLACE: Swamp:5
+TAGS: no_pool_fixup
+ORIENT: southeast
+MONS: spectral swamp dragon / spectral hydra
+MONS: hydra zombie / swamp dragon zombie
+MONS: spectral swamp drake / swamp drake zombie
+MONS: death drake / plant / w:5 oklob plant
+MONS: insubstantial wisp
+MONS: phantom
+SHUFFLE: OX
+MARKER: Y = lua:fog_machine { cloud_type = "foul pestilence", \
+ pow_min = 8, pow_max = 12, delay_min = 20, delay_max = 30, \
+ size = 1, walk_dist = 1, spread_rate= 33 }
+MARKER: O = lua:fog_machine { cloud_type = "foul pestilence", \
+ pow_min = 8, pow_max = 12, delay_min = 20, delay_max = 30, \
+ size = 1, walk_dist = 1, spread_rate= 33 }
+KMONS: O = skeletal dragon
+KFEAT: O = O
+SUBST: ? = ? ! w
+KMONS: ? = big fish zombie
+KMONS: ! = swamp worm zombie
+KFEAT: ? = deep_water
+KFEAT: ! = deep_water
+SUBST: X=. , Y:w , 6=66. , 1=13 , .=W... , "=xc , '=.wW
+MAP
+ ?w......w?w"xx xx
+ w?ww..ww?wwc"xx xxx
+ "wWWwww?w?cc"xxx xxxx
+ '""cWw?w?ccc"xxxxxxxxx
+ 'x"c..wwcccc"""xxxxxxx
+ xxxc...ccccccccccc"xxx
+ xxx"cc....cccc6666c"xxx
+ xxx"cc....cccO6666cc"xx
+ xxxxcccc...cc6666665c"xx
+ x'"cccc...ccc666666ccxx
+ 'cc1Xcc...cc6666666cxx
+ xc211ccc..cccc5.666c"x
+ ccc2.1cc.Y.cccc..6cc"x
+ '"c.1.ccc...ccc...cc"x
+ 'xcc.1.ccc...cc....cxx
+ 'x"c2.21ccc..ccc5.ccxx
+ xxxcc...ccc..c....c"xx
+ xxx"cc.1.2c...5.cccxxx
+ xxxx"c2......?wcc""xxx
+ xxxxxxccc2.wwwwcc""xxxx
+ xxxxxxx"cc?w?wcc""xxxxx
+ xxxxxxxx"cc4wcc"xxxxxxx
+ xxxxxxxxxx"cccc"xxxxxxxx
+xxxxxxxxxxxxx""xxxxxxxxxx
+xxxxxxxxxxxxxxxxxxxxxxxxx
+ENDMAP