###############################################################################
# lab.des: minivaults particular to labyrinths.
#          There are two types: labyrinth exits (tagged by 'minotaur') and
#                                flavour vaults (tagged by 'lab').
###############################################################################


#############################################################################
# Labyrinth entry vaults

NAME:   lab_entry_generic
TAGS:   luniq_lab chance_lab transparent trowel_portal allow_dup extra
# Nominal chance for labs was 1 chance in 15, but making it eligible as a
# random vault gives this vault more opportunities to be placed, so dropping
# chance to 2.85%.
CHANCE: 50 : 285
DEPTH:  12-27
{{
  local messager = 
    timed_msg { 
      initmsg = { "You hear a distant snort.",
                  "Hark! There is an entrance to a minotaur's labyrinth "
                  .. "on this level. Find the entrance quickly before "
                  .. "the gate is sealed!" },
      finalmsg = "You hear the last, dying ticks of the clock.",
      verb = 'ticking',
      noisemaker = 'clock'
    }
}}
MARKER: O = lua: timed_marker {  \
                 low=400, high=600, msg=messager, floor = 'stone_arch' \
            }
KFEAT: O = enter_labyrinth
MAP
O
ENDMAP


#############################################################################
# Labyrinth exit minivaults
#############################################################################
# These are generated by the TAG: minotaur.
# You *must* place the minotaur yourself! Only one minotaur per map, please.
# There must be an exit (<), leading back to the dungeon.
#
# You can use the "generate_loot" tag to indicate that you're not explicitly
# placing the loot and that the dungeon builder should generate random loot
# (on the upstair). Note that this is not the default, and if you neither use
# this tag nor provide loot in the map definition, the player will be
# disappointed.
#
# One layer of floor space *must* surround the minivault, or the player could
# be trapped in the labyrinth (the dummy is exempt from this requirement).
#############################################################################

#############################################################################
# Dummy balancer
NAME: labyrinth_0
TAGS: minotaur dummy
WEIGHT: 20
MAP
x
ENDMAP

#############################################################################
# Watery exit 
NAME:    labyrinth_watery
TAGS:    minotaur generate_loot no_pool_fixup allow_dup
MONS:    patrolling minotaur
SHUFFLE: def
SUBST:   d=~, e=~, f=., c:vvc
MAP
.........
.ccccccc.
.cwwwwwc.
.cww<wwc.
.cwdefwc.
.ccc1ccc.
.c.....c.
.ccc+ccc.
.........
ENDMAP

#############################################################################
# Green exit
NAME: labyrinth_green
TAGS: minotaur generate_loot allow_dup
MONS: patrolling minotaur
MAP
........
.bbbbbb.
.+..1<b.
.bbbbbb.
........
ENDMAP

#############################################################################
# Spiral exit
NAME:  labyrinth_spiral
TAGS:  minotaur generate_loot allow_dup
MONS:  patrolling minotaur
SUBST: c : cvz, z = vc
MAP
............
.cccccccccc.
.c........c.
.c.cccccc.c.
.c.c<1..c.c.
.c.cccc.c.c.
.c......c.c.
.cccccccc.c.
..........c.
.cccccccccc.
............
ENDMAP

#############################################################################
# Hidden exit, and trapped loot
NAME:   labyrinth_hidden_loot
TAGS:   minotaur generate_loot allow_dup
MONS:   patrolling minotaur, minotaur zombie
SUBST:  d = 2%
SUBST:  c : cvv
MAP
............
.cccccccccc.
.cxxxxdxxxc.
.cxxxx=xxxc.
.cxx..U.xxc.
.cd=U...xxc.
.cxx...U=dc.
.cxx.<..xxc.
.cxxxx+xxxc.
.cxxxx1xxxc.
.ccccc+cccc.
............
ENDMAP

#############################################################################
# Mini labyrinth exit
NAME:    labyrinth_mini_lab
TAGS:    minotaur generate_loot allow_dup
SHUFFLE: def, ghi, klm
SUBST:   d : c, e : ., f : c
SUBST:   g : c, h : ., i : c
SUBST:   k = <, l = ., m = .
KMONS:   < = patrolling minotaur
KFEAT:   < = <
SUBST:   c : vvc

# should not be necessary
validate {{ return has_exit_from_glyph('<') }}

MAP
...............
.ccccccccccccc.
.cm....k....lc.
.cgceccccdccfc.
.c.c.........c.
.c.cccfc.ccccc.
.c.....c.c...c.
.ccecc.c.h.cfc.
.c...c.c.iicfc.
.c.c.c.c.f.cfc.
.c.c.g.c.c.cfc.
.c.c.cdchc.cfc.
.c.c.......gfc.
.cdcccecccccfc.
...............
ENDMAP

#############################################################################
# Trapped exits - this is evil!
NAME:    labyrinth_trapped
TAGS:    minotaur generate_loot allow_dup
MONS:    patrolling minotaur
NSUBST:  g = 1:. / *:c
NSUBST:  D = 1:. / *:D
KFEAT:   d = axe trap / dart trap / needle trap / blade trap
KFEAT:   D = teleport trap
SUBST:   c : vvc
WEIGHT:  2
MAP
..............
.cccccccccccc.
.g..ddD+.cccc.
.c.ccccc.cccc.
.g..ddD+.+1<c.
.c.ccccc.cccc.
.g..ddD+.cccc.
.cccccccccccc.
..............
ENDMAP

#############################################################################
# Another trapped exit - most evil again! 
NAME:    labyrinth_trapped_2
TAGS:    minotaur allow_dup generate_loot
ITEM:    potion of porridge
SHUFFLE: XYZ
SHUFFLE: GH, LM, fghijklmn, FHIJKLN
KFEAT:   f = teleport trap
KFEAT:   n = teleport trap
KFEAT:   F = teleport trap
KFEAT:   N = teleport trap
SUBST:   g=., h=., i=., j=., k=., l=., m=.
SUBST:   G=., H=., I=., J=., K=., L=., M=.
SUBST:   Y=*, Z=*
KFEAT:   X = <
KMONS:   X = patrolling minotaur
KFEAT:   S = granite_statue
WEIGHT:  2
MAP
.............
.vvvvvvvvvvv.
.vvXvvYvvZvv.
.vv+vv+vv+vv.
.vFGHIJKLMNv.
.vfghijklmnv.
.v.........v.
.v.S..S..S.v.
.v...d.d...v.
.vvvvv+vvvvv.
............
ENDMAP
# The heart stopper

#############################################################################
# Labyrinth flavour minivaults
#############################################################################
# One layer of floor space *must* surround the minivault, or the player could
# be trapped in the labyrinth (the dummy is exempt from this requirement).
#
# These minivaults can be placed anywhere onto the labyrinth, making for
# easier navigation (as the number of connections increases) but can also add
# to confusion or despair (use teleportation very sparingly, and abstain from
# unthematic monster sets).
#############################################################################

############################################################################
# Labyrinth dummy decorator
NAME: lab_dummy
TAGS: lab dummy
WEIGHT: 90
MAP
x
ENDMAP

############################################################################
# Labyrinth furniture
NAME:    lab_block
TAGS:    lab allow_dup
SHUFFLE: vcx
MAP
.....
.xxx.
.xxx.
.xxx.
.....
ENDMAP

############################################################################
# Labyrinth furniture II
NAME: lab_fountain
TAGS: lab allow_dup
MAP
.......
..b.b..
.bb.bb.
...T...
.bb.bb.
..b.b..
.......
ENDMAP

############################################################################
# Labyrinth hedge
NAME:    lab_hedge
TAGS:    lab allow_dup
SHUFFLE: 1l
MONS:    plant
MAP
.......
.11111.
.1ccc1.
..1c1..
..1c1..
..1c1..
.1ccc1.
.11111.
.......
ENDMAP

############################################################################
# Teaser: inaccessible loot
NAME:  labyrinth_glass_1
TAGS:  lab allow_dup
SUBST: % = %*
MAP
......
.mmmm.
.m%%m.
.m%%m.
.mmmm.
......
ENDMAP

NAME:   labyrinth_glass_2
TAGS:   lab allow_dup
WEIGHT: 1
MAP
......
.nnnn.
.n||n.
.n||n.
.nnnn.
......
ENDMAP

############################################################################
# The other minotaur's lava lair
NAME: labyrinth_lava_lair
TAGS: lab allow_dup
MONS: minotaur zombie
MAP
.......
.lllll.
.l***l.
.l*1*l.
.l***l.
.lllll.
.......
ENDMAP

############################################################################
# Baited teleport trap - this is evil!
NAME:    labyrinth_baited_teleportation_trap
TAGS:    lab allow_dup
KFEAT:   Y = teleport trap
KITEM:   Y = any good_item
SHUFFLE: cxv
WEIGHT:  1
MAP
.....
.x=x.
.=Y=.
.x=x.
.....
ENDMAP

############################################################################
# Teaser: fake exit
NAME:  labyrinth_fake_exit
TAGS:  lab allow_dup
KFEAT: X = enter_abyss
MAP
........
.vvvvvv.
.v...Xv.
.v.vvvv
.v....v.
.vvvv+v.
........
ENDMAP
# Disheartened?

############################################################################
# A few monsters: Nothing is as it seems.
NAME:   labyrinth_single_monster
TAGS:   lab allow_dup generate_awake
KFEAT:  x = .
KMONS:  x = trapdoor spider / w:2 wandering mushroom
MAP
x
ENDMAP

# Death by starvation?
NAME:   labyrinth_hungry_ghost
TAGS:   lab allow_dup generate_awake
WEIGHT: 2
KFEAT:  x = .
KMONS:  x = hungry ghost
MAP
x
ENDMAP