###############################################################################
# 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:   uniq_lab chance_lab transparent trowel_portal allow_dup extra
# (Jan 2010) With the reduction in placement of Labyrinths to 10-20 (roughly
# across 24 levels) and changing to game-unique, chance of NOT having a
# Labyrinth was (1-285/10^4)^24 = ~49%. Increasing chance to 5% gives you
# (1-500/10^4)^24 = ~29% chance of NOT placing a Labyrinth, ~71% chance
# of getting a Labyrinth every game, skewed towards earlier depths.
CHANCE: 500
DEPTH:  10-20, !Orc, !Swamp, !Shoals, !Hive, !Snake, !Slime
{{
  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', \
                 single_timed=true \
            }
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=., b:vvb
MAP
.........
.bbbbbbb.
.bwwwwwb.
.bww<wwb.
.bwdefwb.
.bbb1bbb.
.b.....b.
.bbb+bbb.
.........
ENDMAP

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

#############################################################################
# Spiral exit
NAME:  labyrinth_spiral
TAGS:  minotaur generate_loot allow_dup
MONS:  patrolling minotaur
SUBST: b : bvz, z = vb
MAP
............
.bbbbbbbbbb.
.b........b.
.b.bbbbbb.b.
.b.b<1..b.b.
.b.bbbb.b.b.
.b......b.b.
.bbbbbbbb.b.
..........b.
.bbbbbbbbbb.
............
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:  b : bvv
MAP
............
.bbbbbbbbbb.
.bxxxxdxxxb.
.bxxxx=xxxb.
.bxx..U.xxb.
.bd=U...xxb.
.bxx...U=db.
.bxx.<..xxb.
.bxxxx+xxxb.
.bxxxx1xxxb.
.bbbbb+bbbb.
............
ENDMAP

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

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

MAP
...............
.bbbbbbbbbbbbb.
.bm....k....lb.
.bgbebbbbdbbfb.
.b.b.........b.
.b.bbbfb.bbbbb.
.b.....b.b...b.
.bbebb.b.h.bfb.
.b...b.b.iibfb.
.b.b.b.b.f.bfb.
.b.b.g.b.b.bfb.
.b.b.bdbhb.bfb.
.b.b.......gfb.
.bdbbbebbbbbfb.
...............
ENDMAP

#############################################################################
# Trapped exits - this is evil!
NAME:    labyrinth_trapped
TAGS:    minotaur generate_loot allow_dup
MONS:    patrolling minotaur
NSUBST:  g = 1:. / *:b
NSUBST:  D = 1:. / *:D
KFEAT:   d = axe trap / dart trap / needle trap / blade trap
KFEAT:   D = teleport trap
SUBST:   b : vvb
WEIGHT:  2
MAP
..............
.bbbbbbbbbbbb.
.g.dddD+.bbbb.
.b.bbbbb.bbbb.
.g.dddD+.+1<b.
.b.bbbbb.bbbb.
.g.dddD+.bbbb.
.bbbbbbbbbbbb.
..............
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

############################################################################
# Labyrinth furniture
NAME:    lab_statue
TAGS:    lab allow_dup
MAP
...
.G.
...
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 / zot 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
WEIGHT: 20
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: 40
KFEAT:  x = .
KMONS:  x = hungry ghost
MAP
x
ENDMAP

############################################################################
# The remains of a previous adventurer.
# No items. Maybe the minotaur got them.
NAME:   labyrinth_skeletal_remains
TAGS:   lab allow_dup
WEIGHT: 40
KFEAT:  x = .
: dgn.delayed_decay(_G, 'x', 'human skeleton / troll skeleton / centaur skeleton / ogre skeleton')
MAP
x
ENDMAP
