##############################################################################
# zot.des: The ultimate goal. The Orb must be placed (Z). These maps can and
#          should be serious challenges! Players dying on Zot:5 are okay :)
#
# Content:
# <<1>> Zot entries (Depths:$)
# <<2>> Zot decorative vaults
# <<3>> Zot monster vaults
# <<4>> Zot end hall (Zot:5)
# <<5>> Zot floor-by-floor wall & floor colour changes
#
##############################################################################

: crawl_require('dlua/vault.lua')

{{
-- Stuff for st's various vaults.
function st_zot_vaults_setup(e)
    e.tags("no_item_gen")
    e.depth("Zot, !Zot:$")
    e.kmons("D = acid dragon / swamp dragon / fire dragon w:25 /\
                 ice dragon w:25 / storm dragon w:20 / shadow dragon w:20 /\
                 golden dragon / iron dragon w:5 / quicksilver dragon w:5 /\
                 bone dragon w:5 / lindwurm w:2 / rime drake w:2 /\
                 death drake w:2 / wyrmhole")
    e.kmons("d = base draconian / nonbase draconian")
    e.kmons("Y = patrolling golden dragon / patrolling wyrmhole w:1")
    e.kitem("Y = |")
end
}}

{{
-- Create colourful Zot glass
function coloured_glass(e)
  e.shuffle('roygbiv')
  e.kfeat('roygbiv = m')
  e.tile('r = dngn_transparent_wall_red')
  e.tile('o = dngn_transparent_wall_brown')
  e.tile('y = dngn_transparent_wall_yellow')
  e.tile('g = dngn_transparent_wall_green')
  e.tile('b = dngn_transparent_wall_blue')
  e.tile('i = dngn_transparent_wall')
  e.tile('v = dngn_transparent_wall_magenta')
  e.colour('r = red')
  e.colour('o = brown')
  e.colour('y = yellow')
  e.colour('g = green')
  e.colour('b = blue')
  e.colour('i = cyan')
  e.colour('v = magenta')
end
}}

##############################################################################
##############################################################################
#
# <<1>> Zot entries (Depths side)
#
##############################################################################
##############################################################################

###########################
# Something to give the builder a chance if massive vaults keep failing.
# NOTE: Not currently used. Larger entries are placed as primary vaults instead.
#
NAME:   zot_entry_small
TAGS:   zot_entry
WEIGHT: 0
KFEAT:  X = x
COLOUR: X = lightmagenta
COLOUR: .+ = magenta
TILE:   X = wall_zot_magenta
FTILE:  .ROZ+ = floor_zot_diamonds
FTILE:  @ = floor_depthstone
: zot_entry_setup(_G, true)
MAP
 xxxxxxxx
xxccccccxx
xxcXXXXccx
xccXZ.XXcx
xcXX...XXx
xcX..OR.+@
xcXX...XXx
xccXZ.XXcx
xxcXXXXccx
xxccccccxx
 xxxxxxxx
ENDMAP

NAME:   evilmike_zot_entry_round
TAGS:   no_monster_gen zot_entry
SUBST:  - = nnn+
SUBST:  c: c:70 v:20 b:10
SUBST:  v: vcxlmb, n: nnnnvbcx
FTILE:  .123+ = floor_depthstone
FTILE:  OR`123GZ+ = floor_zot_diamonds
SUBST:  4 = 122223
: zot_entry_setup(_G, true)
MAP
xxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxcccccccxxxxxxx
xxxcccccc..0..ccccccxx
xxcc......vvv......ccx
xxc.v......1......v.cx
xxc.2v...nn-nn...v..cx
xxc...nnnn```nnnn...cx
xxc...n````Z````n..1cx
xcc...n`G``4``G`n...cc
xc.3.nn````v````nn...c
xc.v.n````v`v````n.v.+
xc.v.+`G`vRO`v`G`-.v.+
xc.v.n````v`v````n.v.+
xc.3.nn````v````nn...c
xcc...n`G``4``G`n...cc
xxc...n````Z````n..1cx
xxc...nnnn```nnnn...cx
xxc.2v...nn-nn...v..cx
xxc.v......1......v.cx
xxcc......vvv......ccx
xxxcccccc..0..ccccccxx
xxxxxxxxcccccccxxxxxxx
xxxxxxxxxxxxxxxxxxxxxx
ENDMAP

# Sorry, no wand of wishing in this one
NAME:    evilmike_zot_entry_castle
TAGS:    no_monster_gen no_pool_fixup zot_entry layout_city
KFEAT:   ^ = trap_alarm
KFEAT:   - = +
SHUFFLE: Nn / Oo / Pp / Qq
SUBST:   o = R, NP = Z, Q = A, npq = ., ^ = ^.., s = ccc+
NSUBST:  3 = 1:9 / *:3
COLOUR:  "x = magenta
FTILE:   "OADxZ = floor_zot_diamonds
FTILE:   .+cm^012349$ = floor_depthstone
TILE:    x = wall_zot_magenta
: zot_entry_setup(_G, true)
MONS:   base draconian ; partisan | glaive
MAP
'''''''''''''''''''''''''''''''''''''''''
'wwwwwwwww'''''''''''''''''''''wwwwwwwww'
'wcccccccwwwwwwwwwwwwwwwwwwwwwwwcccccccw'
'wc3....cccccmccccccmccccccmccccc....3cw'
'wc.""".+....2.............2....+.""".cw'
'wc."N".cccccccccccc+cccccccccccc."O".cw'
'wc.""".s..1.....=4w.w4=......0.s.""".cw'
'wcn....c.....cccccc.cccccc.""".c....ocw'
'wccccccc0....+...."""1...+."x".ccc+cccw'
'wwwwwwccccccccc.""""""".ccc""".c$$$.ccw'
''''''wm.......c.""""""".c4=..1.s$$$2mww'
''''''wc.x1x1x2c"""xxx"""cwcccccccccccw''
''''''W-"""""""-"""xxx"""+.+^^^^^^^^^+w''
''''''wc.x1x1x2c"""xxx"""cwcccccccccccw''
''''''wm.......c.""""""".c4=..1.s$$$2mww'
'wwwwwwccccccccc.""""""".ccc""".c$$$.ccw'
'wccccccc0....+...."""1...+."x".ccc+cccw'
'wcp....c.....cccccc.cccccc.""".c....qcw'
'wc.""".s..1.....=4w.w4=......0.s.""".cw'
'wc."P".cccccccccccc+cccccccccccc."Q".cw'
'wc.""".+....2.............2....+.""".cw'
'wc3....cccccmccccccmccccccmccccc....3cw'
'wcccccccwwwwwwwwwwwwwwwwwwwwwwwcccccccw'
'wwwwwwwww'''''''''''''''''''''wwwwwwwww'
'''''''''''''''''''''''''''''''''''''''''
ENDMAP

NAME:   evilmike_zot_entry_gauntlet
TAGS:   no_monster_gen
WEIGHT: 8
KFEAT:  D = +
KFEAT:  G = zot_statue
SUBST:  b : a.., a : c., v : xv
# entry: 1, 2
MONS:   place:Depths:1, place:Depths:$
# easy: 3, 4
: if crawl.coinflip() then
MONS:   yellow draconian, acid dragon
: else
MONS:   green draconian, swamp dragon
: end
# medium: 5, 6
: if crawl.coinflip() then
MONS:   red draconian, fire dragon
: else
MONS:   white draconian, ice dragon
: end
# hard: 7, 8
: if crawl.coinflip() then
MONS:   black draconian
KMONS:  8 = storm dragon
: else
MONS:   purple draconian
KMONS:  8 = quicksilver dragon
: end
# boss: 9, 0
KMONS:  9 = nonbase draconian
KMONS:  0 = golden dragon / wyrmhole w:2
TILE:   x = wall_zot_magenta
TILE:   v = dngn_metal_zot
FTILE:  -RODG = floor_zot_diamonds
FTILE:  .1234567890+ = floor_depthstone
COLOUR: -R = magenta
COLOUR: x = lightmagenta
: zot_entry_setup(_G, false)
MAP
ccc+ccccccccccccccccccc
cab.bacccab.baccccccccc
cb...bcccb.9.bccccccccc
c.1.1.ccc.0...+.ccccccc
cb222bcccb.9.bc..cccccc
cab.bacccab.bacc..ccccc
ccc+ccccccc+ccccc..cccc
ccc.ccccccc.cccccc..ccc
ccc+ccccccxDxcccccc+ccc
cab.bacccxx-xxcccab.bac
cb...bccxx---xxccb.8.bc
c.3.3.ccv--O--vcc.7.7.c
cb444bccxx---xxccb...bc
cab.bacccGxRxGxccab.bac
ccc+ccccccxvxxxcccc+ccc
ccc..ccccccccccccc..ccc
cccc..ccccccccccc..cccc
ccccc..ccab.bacc..ccccc
cccccc..cb.56bc..cccccc
ccccccc.+.....+.ccccccc
cccccccccb.56bccccccccc
cccccccccab.baccccccccc
ccccccccccccccccccccccc
ENDMAP

NAME:   evilmike_zot_entry_argh
TAGS:   no_monster_gen zot_entry patrolling transparent
SUBST:  G: Gxm., m: mmlw
KMONS:  O = nonbase draconian
KFEAT:  m = iron_grate
KFEAT:  V = v
SUBST:  x : xccv, V : Vx
NSUBST: 2 = 2:2 / 1:R / *:-
: zot_entry_setup(_G, true)
MONS:   draconian stormcaller
KMASK:  4 = opaque
COLOUR: X = lightmagenta
COLOUR: . = white
FTILE:  -12RO = floor_zot_diamonds
FTILE:  .4mGZ = floor_depthstone
TILE:   x = wall_zot_magenta
TILE:   V = dngn_metal_zot
MAP
xxxxxxxxxxxx@xxxxxxxxxxxx
xVx........---........xVx
xxmmm.....G.-.G.....mmmxx
x.m4m.......-.......m4m.x
x.mmm...G...-...G...mmm.x
x..........---..........x
x.....Z....---....G.....x
x..........---..........x
x...G.....-----.....G...x
x........xx---xx........x
x.G.....-x1---1x-.....G.x
x-...------2-2------...-x
@-----------O-----------@
x-...------2-2------...-x
x.G.....-x1---1x-.....G.x
x........xx---xx........x
x...G.....-----.....G...x
x..........---..........x
x.....G....---....Z.....x
x..........---..........x
x.mmm...G...-...G...mmm.x
x.m4m.......-.......m4m.x
xxmmm.....G.-.G.....mmmxx
xVx........---........xVx
xxxxxxxxxxxx@xxxxxxxxxxxx
ENDMAP

NAME:   evilmike_zot_entry_hall
TAGS:   no_monster_gen patrolling
SUBST:  v : ....cnblw, z :..cnblw
NSUBST: d = 1:0 / 4:1 / 2:2 / *:'
SUBST:  D = +
COLOUR: x+- = magenta
FTILE:  '0123 = floor_depthstone
FTILE:  -OR+Z = floor_zot_diamonds
TILE:   x = wall_zot_magenta
: zot_entry_setup(_G, true)
MAP
                   cccccccccccc
                   cc''3''''ccc
cccccccccccccccccccc'''''''''cc
ccccccdccdccdccdccc''2xxxxx'''c
ccc..............dc''xx-Z-xx''c
D...vv.zz.vv.zz..cc''x-----x''c
D...vv.zz.vv.zz..+'''x-RO--+''c
D...vv.zz.vv.zz..cc''x-----x''c
ccc..............dc''xx-Z-xx''c
ccccccdccdccdccdccc''2xxxxx'''c
cccccccccccccccccccc'''''''''cc
                  ccc''3''''ccc
                  ccccccccccccc
ENDMAP

NAME:   evilmike_zot_entry_basic
TAGS:   no_monster_gen transparent
TILE:   c = wall_zot_magenta
COLOUR: c+- = magenta
FTILE:  OR-+cZ = floor_zot_diamonds
FTILE:  .d = floor_depthstone
SUBST:  - = .
NSUBST: d = 1:0 / 4:1 / 2:2 / 1:3
: zot_entry_setup(_G, true)
MAP
'...d...'
.dcc+ccd.
.cc---cc.
.c-----c.
dc--O--cd
.cZ-R-Zc.
.cc---cc.
.dcccccd.
'...d...'
ENDMAP

NAME:   evilmike_zot_entry_diamond
TAGS:   no_monster_gen transparent
KFEAT:  A = stone_arch
TILE:   c = wall_zot_magenta
COLOUR: c- = magenta
NSUBST: 1 = 1:0 / *:1, 2 = 2:2 / *:., 3 = 2:3 / *:2
FTILE:  -ORAcZ = floor_zot_diamonds
FTILE:  "A+ = floor_depthstone
: zot_entry_setup(_G, true)
MAP
      ..3..
     .2c+c2.
    ..cc-cc..
   1.cc---cc.1
  ..cc--O--cc..
 ..cccZ---Zccc..
.2cc"cccRccc"cc2.
.cc"""ccccc"""cc.
3+""A""ccc""A""+3
.cc"""ccccc"""cc.
.2cc"ccc"ccc"cc2.
 ..cccc"""cccc..
  ..cc""A""cc..
   1.cc"""cc.1
    ..cc"cc..
     .2c+c2.
      ..3..
ENDMAP

NAME:   grunt_zot_entry_hairpin
TAGS:   no_monster_gen patrolling
COLOUR: ABC-_R = magenta
FTILE:  .1239 = floor_depthstone
FTILE:  ABC-_ORZ = floor_zot_diamonds
SUBST:  _ = ., A = 2, B = 3, C = c, - = +
NSUBST: 3 = 1:993 / *:3
: zot_entry_setup(_G, true)
MAP
      cccccccccccccccccccc
    ccc..................cc
   cc...........0.........cc
  cc.....cccccccccccccc....c
  c.....cc...........ccc...c
 cc..1.cc1.CCCCCCCCC..c.1..c
@+....cc..CC_____AZCC.c...cc
@+..3.c.3.-____B__ORC0+2.cc
@+....cc..CC_____AZCC.c...cc
 cc..1.cc1.CCCCCCCCC..c.1..c
  c.....cc...........ccc...c
  cc.....cccccccccccccc....c
   cc...........0.........cc
    ccc..................cc
      cccccccccccccccccccc
ENDMAP

NAME:   grunt_zot_entry_funnels
TAGS:   no_monster_gen patrolling transparent
NSUBST: 3 = 1:9 / *:3, 1 = 2:0 / *:1
COLOUR: 1239c+.R = magenta
FTILE:  2'ORZc = floor_zot_diamonds
FTILE:  .0139+ = floor_depthstone
: zot_entry_setup(_G, true)
MAP
      @       @
    cc+cc   cc+cc
    c...ccccc...c
    cc...ccc...cc
 cccxcc.1.c.1.ccxccc
 c.ccxcc.....ccxcc.c
@+..ccxcc.3.ccxcc..+@
 c...ccxcc+ccccc...c
 cc.1.ccc'''Zcc.1.cc
  cc...c'R2''c...cc
  ccc.3+'2O2'+3.ccc
  cc...c''2''c...cc
 cc.1.ccZ'''ccc.1.cc
 c...ccccc+ccxcc...c
@+..ccxcc.3.ccxcc..+@
 c.ccxcc.....ccxcc.c
 cccxcc.1.c.1.ccxccc
    cc...ccc...cc
    c...ccccc...c
    cc+cc   cc+cc
      @       @
ENDMAP

NAME:   grunt_zot_entry_pinwheel
TAGS:   no_monster_gen patrolling transparent
KFEAT:  A = stone_arch
NSUBST: 1 = 2:0 / *:1, 3 = 1:9 / *:3
COLOUR: 123c+.R = magenta
FTILE:  01239c.AORZ = floor_zot_diamonds
FTILE:  @+ = floor_depthstone
: zot_entry_setup(_G, true)
MAP
       @
     cc+cc
    cc...c
   cc...cc ccccc
   c...cc cc.1.cc
   c1.1c cc.3Z..cc
   c.3.ccc.2.1.Z.c
   cc.2.cc.Rccc..+@
    cc..AcOcc cc.c
 ccc ccccccccc ccc
 c.cc ccAcA..cc
@+..ccc..cc.2.cc
 c...1.2.ccc.3.c
 cc...3.cc c1.1c
  cc.1.cc cc...c
   ccccc cc...cc
         c...cc
         cc+cc
           @
ENDMAP

NAME:   grunt_zot_entry_bicorn
TAGS:   no_monster_gen transparent patrolling
COLOUR: 0123c+_R = magenta
FTILE:  .@ = floor_depthstone
FTILE:  0123+_ORTZ = floor_zot_diamonds
SUBST:  _ = .
NSUBST: 3 = 1:9 / *:3
: zot_entry_setup(_G, true)
MAP
            .....
          ...ccc...
         ..cccRccc..
        ..cc_Z_Z_cc..
       ..cc_2_O_2_cc..
      ..cc___2_2___cc..
     ..cc___________cc..
    ..cc_____________cc..
    .cc____3__T__3____cc.
   ..c______1___1______c..
  ..cc_0_____________0_cc..
 ..cc_3___ccccccccc___3_cc..
..cc_1__ccc.......ccc__1_cc..
.cc___ccc...     ...ccc___cc.
.c__ccc...         ...ccc__c.
.c+cc...             ...cc+c.
..@...                 ...@..
ENDMAP

NAME:   grunt_zot_entry_tricorne
TAGS:   no_monster_gen transparent patrolling
COLOUR: ABC_R = magenta
FTILE:  +.013T = floor_depthstone
FTILE:  ABC-_ORZ = floor_zot_diamonds
SUBST:  _ = ., A = 2, B = 110, C = c, - = +
NSUBST: 3 = 1:9 / *:3
: zot_entry_setup(_G, true)
MAP
@''''''               ''''''@
'+cccc'''''''''''''''''cccc+'
'c...ccccccccccccccccccc...c'
'cc...........c...........cc'
''cc...1....CCCCC....0...cc''
 ''c.0T...CCC___CCC...T1.c''
  'cc...3.C___A___C.3...cc'
  ''cc...C-_B_R_B_-C...cc''
   ''cc..C_________C..cc''
    ''c..CZ___O___ZC.cc''
     'cc.C_________C.cc'
     ''ccCC_A___A_CCcc''
      ''ccC___B___Ccc''
       'ccCCC___CCCcc'
       ''c..CC-CC..c''
        'cc.......cc'
        ''c...3...c''
         'cc..T..cc'
         ''c.1.0.c''
          'cc...cc'
          ''c...c''
           'c...c'
           'cc.cc'
           ''c.c''
            'c+c'
            ''@''
ENDMAP

NAME:   grunt_zot_entry_gee_three
TAGS:   no_monster_gen zot_entry transparent patrolling
COLOUR: ABC_R = magenta
FTILE:  ABC-_ORZ = floor_zot_diamonds
FTILE:  .123T = floor_depthstone
SUBST:  _ = ., A = 2, B = 1, C = c, - = +
NSUBST: 1 = 3:0 / 7:1 / *:., 3 = 1:9 / *:3
: zot_entry_setup(_G, true)
MAP
           '''''''''
         '''ccccccc'''
        ''ccc.CCC.ccc''
       ''cc...-_-...cc''
      ''cc...cC_Cc...cc''
     ''cc.1.cCC_CCc.1.cc''
     'cc....cC___Cc....cc'
    ''c..3.ccC___Ccc.3..c''
    'cc1...ccC___Ccc...1cc'
   ''c.....ccC___Ccc.....c''
'''''c..T1.ccC_B_Ccc.1T..c'''''
'ccccc.....ccC___Ccc.....ccccc'
@+..c......ccCA_ACcc......c..+@
'ccc....1..ccC___Ccc..1....ccc'
'''ccc..T..ccC_O_Ccc..T..ccc'''
'cccc.......cZCRCZc.......cccc'
@+......2...ccCCCcc...2......+@
'ccc.......1..c.c..1.......ccc'
'''ccccc..T..1.3.1..T..ccccc'''
  ''''cc.......T.......cc''''
  ''ccc..1..cc.1.cc..1..ccc''
 ''cc......ccc...ccc......cc''
 'cc...ccccc'c...c'ccccc...cc'
 @+.cccc'''''c...c'''''cccc.+@
 'ccc''''   'c.1.c'   ''''ccc'
 '''''      'c...c'      '''''
            'c...c'
            'cc.cc'
            ''c.c''
             'c.c'
             'c+c'
             ''@''
ENDMAP

NAME:   grunt_zot_entry_alcove
TAGS:   no_monster_gen zot_entry transparent patrolling
COLOUR: 29C-_R = magenta
FTILE:  29C-_ORZ = floor_zot_diamonds
FTILE:  .@013T = floor_depthstone
SUBST:  _ = ., C = c
NSUBST: @ = 1:@ / *:.
: zot_entry_setup(_G, true)
MAP
     ccccccc
    ccCCCCCcc
    cCZ_9_ZCc
    cC__R__Cc
    cC2_O_2Cc
    cC__2__Cc
    cCC___CCc
   cc.......cc
  cc..3...3..cc
 cc.1...0...1.cc
cc...1.....1...cc
.................
@.......T.......@
 ....1.....1....
   ....0.0....
       .@.
ENDMAP

##############################################################################
##############################################################################
#
# <<2>> Zot decorative vaults
#
##############################################################################
##############################################################################

NAME:   lemuel_baited_zot_trap
TAGS:   allow_dup extra luniq
DEPTH:  Zot
WEIGHT: 20
KFEAT:  * = trap_zot
KITEM:  * = any good_item
MAP
*
ENDMAP

# Directly place a decorative vault 33% of the time on Zot:1-4.
NAME:    zot_decor
TAGS:    no_dump extra allow_dup nolayout_encompass luniq
DEPTH:   Zot, !Zot:$
CHANCE:  33%
{{
  local c = 1
  hook("post_place", function()
    dgn.place_maps{tag="zotdec", count=c}
  end)
}}


################################################################################
# Space-filling minivaults by bh.

NAME:   bh_zot_ikea_curve
TAGS:   extra zotdec transparent
DEPTH:  Zot
SUBST:  X : x., Y : x.
MAP
xxxxxxxxxxxxx
@....XxX....@
@.....x.....@
xxxx..x..xxxx
xY....x....Yx
x.....x.....x
x..xxxxxxx..x
x..xY...Yx..x
x..x.....x..x
x.....x.....x
xX....x....Xx
xxxxxxxxxxxxx
ENDMAP

NAME:   bh_zot_lava_cross
TAGS:   extra zotdec luniq_zotdec_liquid
DEPTH:  Zot
SUBST:  K : l., L : l.
MAP
      @@
     x..x
     x..x
     xK.x
 xxxxxllxxxxx
@....llllL...@
@...Lllll....@
 xxxxxllxxxxx
     x.Kx
     x..x
     x..x
      @@
ENDMAP

NAME:   bh_zot_levy_curve
TAGS:   extra no_pool_fixup zotdec luniq_zotdec_liquid
DEPTH:  Zot
SUBST:  d : WWw, e : WWw, f : WWw, ' : '...
CLEAR:  '
MAP
          WWW.
          W.W..
          d.dWW
          ....W
         ''...W
        '''.WWe
       .......W
      '.www...W
     ''.w.w.fWe
    '''.wwWWW..
WWd.'''...W...
W........fW.'
WWd..W..WW..
..W..W..W..
 .WWWeWWe.
ENDMAP

##

NAME:    hangedman_zot_gyre
TAGS:    extra transparent zotdec luniq_zotdec_large
DEPTH:   Zot
KFEAT:   Z = trap_zot
SHUFFLE: dD, eE, fF, gG, hH, dD / eE / fF / gG / hH
SHUFFLE: cCbB / cCbB / bBcC, qQ / qQ / ZZ / wl / '' / ''
SUBST:   defhH = X, DEF = ., g : X.., G : X.., ' = .
SUBST:   B = bbCc, C : bWcc, b : bbc, c : bWcc, X : bcxx, W : wl
NSUBST:  0 = 2 = 0:19 .:1 / *:.
KPROP:   l = no_cloud_gen
KMASK:   lw = no_monster_gen
COLOUR:  qQ = darkgray
FTILE:   qQ = floor_rough_darkgray
MARKER:  q = lua:fog_machine {cloud_type = "freezing vapour", \
             pow_min = 9, pow_max = 10, delay = 20, size_min = 1, size_max = 1, \
             start_clouds = 1, excl_rad = 0 }
MARKER:  Q = lua:fog_machine {cloud_type = "flame", \
             pow_min = 9, pow_max = 10, delay = 20, size_min = 1, size_max = 1, \
             start_clouds = 1, excl_rad = 0 }
:  if you.depth() == dgn.br_depth(you.branch()) then
SUBST:  { = {([<
:  else
SUBST:  { = {([<})]>%
:  end
MAP
           ......
         ..........
        ..xxxxxxx...
        ........hx...
      ....B......hx....
     .............x.....
    ..G.C.G.C.....ffxxx..
    ..x...x.......x......
   ...x...x...B...x...c....
  ....F...E.......x.........
 ...xxFxxxExxD..Q.eexxx.b.x.
 ..xH.......0xD...x.......x..
..xH......q...x..0x...c...x..
..x...........x..xd.......x..
..x.....b..dxx{xxd..b.....x..
..x.......dx..x...........x..
..x...c...x0..x...q......Hx..
..x.......x...Dx0.......Hx..
 .x.b.gxxee.Q..DxxExxxFxx...
 .........x.......E...F....
  ....c...x...B...x...x...
    ......x.......x...x..
    ..gxxff.....C.G.C.G..
     .....x.............
      ....xh......B....
        ...xh........
         ...xxxxxxx..
          ..........
            ......
ENDMAP

####
# Weird orderly decorum.
NAME:    hangedman_zot_decor_unnerving_road
TAGS:    extra transparent zotdec no_pool_fixup luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
SHUFFLE: @&, (), vb / vb / bv / cc / xx, lw / lw / lw / '', JK / LM / NO
SHUFFLE: JK / JK / JK / !!, LM / ??, NO / `` / `` / `` / ``, JKLMNO / JKLMNO / KJMLON
SUBST:   '!?`& = ., X : xxc, JLN = F, KMO = f
SUBST:   ( = (:1 .:14, ) = ):1 .:14
KMASK:   wlfF = no_monster_gen
COLOUR:  fF = darkgray
FTILE:   fF = floor_rough_darkgray
MARKER:  f = lua:fog_machine {cloud_type = "freezing vapour", \
             pow_min = 9, pow_max = 10, delay = 20, size_min = 1, size_max = 1, \
             start_clouds = 1, excl_rad = 0 }
MARKER:  F = lua:fog_machine {cloud_type = "flame", \
             pow_min = 9, pow_max = 10, delay = 20, size_min = 1, size_max = 1, \
             start_clouds = 1, excl_rad = 0 }
KPROP:   l = no_cloud_gen
MAP
      XXXX...&&.
      Xllvv......
    XXXlv..v....@
   XXlllv..v....@
   Xllvv.vvJ.....
 XXXlv..v.......
XXlllv..v....XXXX
Xllvv(vvL..ObbwwX
Xlv..v.....b..bwXXX
Xlv..v.....b..bwwwXX
Xllvv.vv....bb.bbwwX
XXlllv..v.....b..bwX
 XXXlv..v.....b..bwX
   XllvvN..Mbb)bbwwX
   XXXX....b..bwwwXX
    .......b..bwXXX
   .....Kbb.bbwwX
   @....b..bwwwXX
   @....b..bwXXX
   ......bbwwX
    .&&...XXXX
ENDMAP

NAME:    hangedman_zot_decor_checkerboard
TAGS:    no_pool_fixup extra zotdec transparent luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
KFEAT:   Z = trap_zot
SHUFFLE: @' / '@ / "" / "", defg / jkhi / HIJK / NOLM
SUBST:   d : wbb, e : wwb, f : lbb, g : llb
SUBST:   h : lbb, i : llb, j : wbb, k : wwb
SUBST:   H : wwwbb, I : wwwbb, J : lllbb, K : lllbb
SUBST:   L : lbbbb, M : lbbbb, N : wbbbb, O : wbbbb
NSUBST:  Z = 1 = (:1 Z:14 / 1 = ):1 Z:14 / * = ZZUG...
SUBST:   '" = ., b : cbbvxx
KPROP:   l = no_cloud_gen
KMASK:   wl = no_monster_gen
MAP
             xx
             xx
.......      xx.......
.dw.lf.      xx.Hw.xJ.
.xe.gl.      xx.wI.Kl.
@..Z.....'...xx...Z........
.lg.ex.hl.wj.xx.lK.Iw.Ll.wN.
.fl.wd.li.kw.xx.Jl.wH.xM.Ow.
.........Z...xx...'.....Z..@
      .wk.il.xx      .wO.Mx.
      .jx.lh.xx      .Nw.lL.
      .......xx      .......
             xx
             xx
ENDMAP

NAME:    hangedman_zot_decor_slant
TAGS:    extra transparent zotdec
DEPTH:   Zot
KFEAT:   z = trap_zot
KFEAT:   fF = floor
SHUFFLE: BVfF / VBFf, aAuU / aAuU / aAuU / uUaA
SHUFFLE: AU / "", fF / fF / zz, @! / !@ / ?? / ??
SUBST:   aAB = b, uUV = v, Z = ()G .:45 z:25, '"!? = .
SHUFFLE: bv / bc / vc / cc
KMASK:   fF = no_monster_gen
COLOUR:  fF = darkgray
FTILE:   fF = floor_rough_darkgray
MARKER:  f = lua:fog_machine {cloud_type = "freezing vapour", \
             pow_min = 9, pow_max = 10, delay = 2, size_min = 1, size_max = 1, \
             start_clouds = 1, excl_rad = 0 }
MARKER:  F = lua:fog_machine {cloud_type = "flame", \
             pow_min = 9, pow_max = 10, delay = 2, size_min = 1, size_max = 1, \
             start_clouds = 1, excl_rad = 0 }
MAP
            ...!..
           ........
           @.UuuU..
         ....uuuu.!
         .vv.ufuu..
     xx  .vv..uuU..
     x.............
      .vv.VV.vv.@.
      .vv.VV.vv.
   ......Z......
   .bb.BB.bb.
 .@.bb.BB.bb.
.............x
..Aaa..bb.  xx
..aafa.bb.
!.aaaa....
..AaaA.@
........
 ..!...
ENDMAP

NAME:    hangedman_zot_decor_scrapings
TAGS:    transparent extra zotdec
DEPTH:   Zot
KFEAT:   Z = trap_zot
SHUFFLE: HIJKLM / HIJKLM / IHKJML
SUBST:   HJL : xxcb, I : x..., K : x..., M : x...
SUBST:   N : xcG.., O : xc..., P : xcG.., Z = ()G x:45 Z:25
MAP
          x     ..  ...
          xx   .... .x..
          xx  x.......x..
           x   x...O......
    .....  xx  .........x..
   ..J...P  x   .L...N.I.H.
  ..x.x...  xx  x.x.....x..
 ....K...M   Z   M...K....
..x.....x.x  xx  ...x.x..
.H.I.N...L.   x  P...J..
..x.........  xx  .....
 ......O...x   x
  ..x.......x  xx
   ..x. ....   xx
    ...  ..     x
ENDMAP

NAME:    hangedman_zot_decor_tridents
TAGS:    transparent extra zotdec
DEPTH:   Zot
KFEAT:   Z = trap_zot
SHUFFLE: bc / xy / XY, bc / cb / cc
SUBST:   ~ = ()+Z .:60, - : ++.
SUBST:   H : z., I : z., J : z.
SUBST:   K : ., L : xxxw.., M : xxw...
SUBST:   N : xxxl.., O : xxl..., PXyY = x
KMASK:   wl = no_monster_gen
MAP
            x
            x      ......
            x    ..Ic.ccc
     ...    x    ..c.....
   ....K.   x   .O...N.@
.........   x cc...c....
bbb.bJ..P   xccc-cHc.cc.
.....b...   x cc...c....
 @.L...M.   ~   .M...L.@
 ....b...bb y   ...c.....
 .bb.bHb-bbby   P..Jc.ccc
 ....b...bb y   .........
 @.N...O.   y   .K....
.....b..    y    ...
bbb.bI..    y
......      y
            y
ENDMAP


NAME:    hangedman_zot_diagonal_lockstep
TAGS:    transparent extra zotdec
DEPTH:   Zot
ITEM:    % no_pickup
KFEAT:   Z = trap_zot
SHUFFLE: ABCDEFG, defg / hijk / mnop / qrst, defg, hjik, mnop
SUBST:   A : xbvcZ, B : xc, C : xxc, D : c, EFG = x
SUBST:   d : xxZ, h = x, e : xx., i : xx., f : x.., j : x.., m : x..
SUBST:   gknopqrst = .
:  if you.depth() == dgn.br_depth(you.branch()) then
SUBST:  { = {([ <:5 Z:5
:  elseif you.depth() == "1" then
SUBST:  { = {:40 })]> d:20 Z:20
:  else
SUBST:  { = {([<})]> d:20 Z:20
:  end
MAP
             Dq...iC
        .....rD...Ch..
        .......x.x...p
        ...mF...x...o.
       Es..F...x.x....
 ......tE.x..kx...x..eB
 ........x...Cj....x.xd
A..fB...x.x.....G...x..
.A.xg.nG...{...Gn.gx.A.
..x...G.....x.x...Bf..A
dx.x....jC...x........
Be..x...Ck..x.Et......
 ....x.x...F..sE
 .o...x...Fm...
 p...x.x.......
 ..hC...Dr.....
   Ci...qD
ENDMAP

NAME:    hangedman_zot_wheel_spokes
TAGS:    transparent extra zotdec
DEPTH:   Zot, !Zot:$
# Swap positions in unit's potential spots
# with the spokes and / or the center, maybe.
SHUFFLE: AGMBHN / AHMBGN / AGNBJM
SHUFFLE: CIOFLR / CLOFIR / CIRFLO
SHUFFLE: DJPEKQ / DJQEKP / DJQEKP
SHUFFLE: AGM / BHN / CIO / DJP / EKQ / FLR
# Make those slots random walls or floor.
SUBST:   AGM : xxxxcccbbv, BHN : xxxxcccbbv
SUBST:   CIO : x., DJP : x., EFKLQR = .
MAP
                 x .CDEF@
                 x.F.AB.C
                 x.DB..AD
      ......     x.EA..BE
     .......     x.C.BA.F
   .IJKL......@  x..FDEC.
   L.GH.I........x......
   KH..GJ..OPQR..xxxxxxxxx
   JG..HK.R.MN.O.......
   I.HG.L.QN..MP..IJKL.
   .LKJI..PM..NQ.L.GH.I
    ......O.NM.R.KH..GJ
xxxxxxxxx..RQPO..JG..HK
  ......x........I.HG.L
 .CDEF..x  @......LKJI.
 F.AB.C.x      ........
 EB..AD.x      .......
 DA..BE.x
 C.BA.F.x
 @FEDC. x
ENDMAP

##########################################################################
# Some decorative multi-coloured glass columns
NAME:   skrybe_zot_glass_1
TAGS:   transparent zotdec no_pool_fixup luniq_zotdec_liquid
DEPTH:  Zot
SUBST:  W : Wwl
KMASK:  Wwl = no_monster_gen
: coloured_glass(_G)
MAP
  .....    .....
 ..WWW..  ..WWW..
..WWrWW....WWyWW..
.WWrrrWW..WWyyyWW.
.WrrrrrW..WyyyyyW.
.WWrrrWW..WWyyyWW.
..WWrWW....WWyWW..
 ..WWW......WWW..
  ..............
  ..............
 ..WWW......WWW..
..WWoWW....WWgWW..
.WWoooWW..WWgggWW.
.WoooooW..WgggggW.
.WWoooWW..WWgggWW.
..WWoWW....WWgWW..
 ..WWW..  ..WWW..
  .....    .....
ENDMAP

NAME:   skrybe_zot_glass_2
TAGS:   transparent zotdec no_pool_fixup luniq_zotdec_liquid
DEPTH:  Zot
SUBST:  l : Wwl
KPROP:  l = no_cloud_gen
KMASK:  Wwl = no_monster_gen
: coloured_glass(_G)
MAP
      .....
 ......lll......
..lll.lloll.lll..
.llrlllooolllyll.
.lrrrlooooolyyyl.
.llrlllooolllyll.
..lll.lloll.lll..
 ......lll......
      .....
ENDMAP

NAME:   skrybe_zot_glass_3
TAGS:   transparent zotdec no_pool_fixup luniq_zotdec_liquid
DEPTH:  Zot
SUBST:  l : Wwl
SUBST:  ( : ([{.
KMASK:  Wwl = no_monster_gen
KPROP:  l = no_cloud_gen
: coloured_glass(_G)
MAP
xxxxxx@@@xxxxxx
xlllll...lllllx
xlrrrl...looolx
xlrrll...lloolx
xlrll.....llolx
xlll.......lllx
@.............@
@......(......@
@.............@
xlll.......lllx
xlyll.....llglx
xlyyll...llgglx
xlyyyl...lggglx
xlllll...lllllx
xxxxxx@@@xxxxxx
ENDMAP

###########################################################################
# Some simple riffs on zot layout choices, negative space abuse,
# and st_'s old gridded stair vaults.
NAME:    regret_index_zot_stipple_split
TAGS:    extra transparent zotdec no_pool_fixup luniq_zotdec_negative_space
DEPTH:   Zot, !Zot:$
SHUFFLE: ab, cde
SUBST:   a : GlwTB b:30, b : GwT
SUBST:   c : cbxdd, d : cbxxeee, e : ccxxx
SUBST:   ' : xx.'''
CLEAR:   '
MAP
            c.
            ..
            d.e
            ...
            ..c.d
            '....
      c.'''''.d.e.c
      ....'''..b...
    c.e.d.'''...c.d.e
    ...a..'''........
  c.e.d...'''.....e.c.d
..........'''''..........
c.e.d..'''''''''''..d.e.c
..........'''''..........
  d.c.e.....'''...d.e.c
    ........'''..a...
    e.d.c...'''.d.e.c
      ...b..'''....
      c.e.d.'''''.c
        ....'
        d.c..
          ...
          e.d
           ..
           .c
ENDMAP

NAME:    regret_index_zotdec_onion_hex
TAGS:    extra transparent zotdec luniq_zotdec_negative_space
DEPTH:   Zot
SHUFFLE: ABCDE
SUBST:   AB = x, C : x., D : x., E = ., ' : x.'''
CLEAR:   '
MAP
    ........x
   ..xxAxBx..
  ..xx......x
 ..xx..''''....x.......
..xx..''''''CDE..x..xx..
.xc..'''''''''.x.....xx..
xc...'''''''''...'''..xx..
.xc..''''''''''''''''..xx..
..xx..''''''''''''''''..cx.
 ..xx..'''..''''''''''...cx
  ..xx.....x...'''''''..cx.
   ..xx..x..EDC''''''..xx..
    .......x....''''..xx..
             x......xx..
             ..xBxAxx..
             x........
ENDMAP

NAME:    regret_index_zotdec_misc_clamp
TAGS:    extra transparent zotdec
DEPTH:   Zot, !Zot:$
SHUFFLE: A' / B" / C` / D~
SUBST:   X : xx`, Y : xxx., AB = x, '" = .
NSUBST:  . = 1 = {[(}]} >:140 / *:.
CLEAR:   C`D~
MAP
A'A'A'x.x.x.x.x.B"B"B
 '''''.........."""""
A'A'A'x.x.x.c.x.B"B"B
 '''''.........."""""
 `````xxxxx.c.x.xxxx
C`C`C`xxxx......xxxx
 `````xxxxx.x.x.xxxxxx
C`C`C`xxxx......xxxxxxxx
xxxxxxxxxxYxYxYxxxxxxxxxxxXX
xxxxxxxxxxxxxxxxxxxxxxxxxxXX
XXxxxxxxxxxxxxxxxxxxxxxxxxxx
XXxxxxxxxxxxxYxYxYxxxxxxxxxx
    xxxxxxxx......xxxx`C`C`C
      xxxxxx.x.x.xxxxx`````
        xxxx......xxxx`C`C`C
        xxxx.x.c.xxxxx`````
       """""..........'''''
       B"B"B.x.c.x.x.x'A'A'A
       """""..........'''''
       B"B"B.x.x.x.x.x'A'A'A
ENDMAP


NAME:    regret_index_zotdec_stipple_waver
TAGS:    extra transparent zotdec
DEPTH:   Zot
SHUFFLE: opqrstu
SUBST:   o = c, p = x, q : x'', r : x'', stu = '
NSUBST:  ' = 1:GTUV>... / *:.
MAP
    x.x.xrx.x.x
    .q...q.....
    x.x.x.x.x.x
    .....s...s.
x.x.x.x.x.x.x.x.xux      .xpx.x
 ....o.     .t.....     .....o
x.x.x.x     x.x.x.x     x.x.x.x
 o.....     .....t.     .o....
x.xpx.      xux.x.x.x.x.x.x.x.x
                .s...s.....
                x.x.x.x.x.x
                .....q...q.
                x.x.xrx.x.x
ENDMAP

NAME:    regret_index_zotdec_twisting_globes
TAGS:    extra transparent zotdec luniq_zotdec_large
DEPTH:   Zot, !Zot:$
ORIENT:  float
SHUFFLE: opqrs
SUBST:   o : xxb, p : xxb, qrs = .
SUBST:   { = {([})]<CG>TU
NSUBST:  H = 1:x / 1:xxx++ / *:+, I = 1:x / 1:xxx++ / *:+
NSUBST:  J = 1:c / *:+, K = 1:x / 1:xxx++ / *:+
SHUFFLE: cvb
MAP
 xKxx...              ....xxHxx
xx..xx..              ...xx...xx
K....K..................xx..q..xx
x....x..................x.......x
xx..xx..ccJc...xoxxq.x..H.q.s.r.H
.xKxx..cc..cc...x.rxxpxxx.......x
......cc....cc..x.ss.p..xx..r..xx
......c..po..cxxpxxr.x...xx...xx
    ..J..o{..J..p.qxxox...xxHxx
    ..cc....cc.................
    ...cc..cc..................
    ....ccJc..
    .....x...
    ..x..x...
    ..oxppx..
    ..x..x...
    ..xrsxq..
    ..qxsrx..
    ...x..x..
    ..ppxxo..
  .....x..x..
  .....x.....
  ..xxIxx....
  .xx...xx...
  xx..q..xx..
  x.......x..
  I.q.s.r.I..
  x.......x..
  xx..r..xx..
   xx...xx
    xxIxx
ENDMAP

NAME:    regret_index_zotdec_storm_pass
TAGS:    extra no_pool_fixup zotdec luniq_zotdec_negative_space
DEPTH:   Zot, !Zot:$
KFEAT:   C = altar_qazlal
KFEAT:   S = w
SUBST:   { = {([})]<>CCUUUUUU
SUBST:   z : xxv.., Z : xxv.., v : vvvb
KMASK:   wWS = no_monster_gen
KMASK:   wWS = no_item_gen
KPROP:   wWS = no_tele_into
MARKER:  S = lua:fog_machine {cloud_type = "thunder", \
             pow_min = 15, pow_max = 20, delay = 20, \
             size_min = 4, size_max = 8, excl_rad = 1, walk_dist = 1}
MAP
             .xxxxxxxx
             .vvvvvvvxxx
@...         ...nwwSvvvx
xv..z.       ...nnwwwWvxx
xv....        z..nnnWwvvx
xvnn..Z       .....nnwSvx
xvwnn..         Z..{nwwvx
xvwwn...Z         ..nnwvx
xvSwnnC....       Z..nnvx
xvvwWnnn..z        ....vx
xxvWwwwnn...       .z..vx
 xvvvSwwn...         ...@
 xxxvvvvvvv.
   xxxxxxxx.
ENDMAP

NAME:    regret_index_zotdec_carving_tricks
TAGS:    extra transparent zotdec no_rotate luniq_zotdec_negative_space
DEPTH:   Zot
SHUFFLE: zZ
SUBST:   z = b, Z = .
MAP
                       @
                       .
      .               .b
      .                .  .
   .  b.               .  .
   .  .               .Zz.b..@
   .  .           ...b.zZ.  .
@..b.zZ.             .  .
 .  .Zz.b...         .  .
     .  .               b.
     .  .               .
    .b                  .
     .
     @
ENDMAP

NAME:    regret_index_zotdec_banners
TAGS:    extra transparent zotdec
TAGS:    luniq_zotdec_large luniq_zotdec_negative_space
DEPTH:   Zot, !Zot:$
ORIENT:  float
SUBST:   y : c.., Y : c.., z : b..
SHUFFLE: cb / xc / xc / xb, <>GUVm
NSUBST:  < = 1:<<{([ / *:<, > = 1:>>})]
MAP
.c...
..c...
..c...
cc.c..
...c..
...c..
yyy.c.        ...b.
....c.       ...b..
..<..c       ...b..
.....c       ..b.bb
...cc.       ..b...
.cc...       ..b.<.       .c..
c.....       .b....       .c...
c..>..       .b..zz       ..c...
.c....       b.zz..       ..c...
.c.YYY       b.....       cc.c..
..c...       .bb...       ...c..
..c...       ...bb.       ...c..
..c.cc       zz...b       yyy.c.
...c..       ..zz.b       ....c.
...c..       ....b.       ..<..c
 ...c.       .>..b.       .....c
  ..c.       ...b..       ...cc.
             ...b..       .cc...
             bb.b..       c.....
             ..b...       c..>..
             ..b...       .c....
             .b...        .c.YYY
                          ..c...
                          ..c...
                          ..c.cc
                          ...c..
                          ...c..
                           ...c.
ENDMAP

NAME:    regret_index_zotdec_split_disrupt
TAGS:    extra transparent zotdec luniq_zotdec_negative_space
DEPTH:   Zot, !Zot:$
SHUFFLE: ABCDEFGHI
SUBST:   AB = x, B : xx., C : xx., D : xx., E : x., F : x., G : x., HI = .
SUBST:   { = {([})]xxxcTUV> .:40 %:40
MAP
                  ... .........   .......
                   x....x.x.........x..x.
       ...          x...x..xxxxxBxxx..xx.
      ..x.. ...      x...E...........A...
     ...x.....x       G...x.....c...x..
    ...xCx.D...x       F...xx...x..xx.
   .....x.......x   {   x.......x.....
   .xx..x...xx...F       x...D.xCx...
  ..x...c.....x...G       x.....x...
...A...........E...x      ... ..x..
.xx..xxxBxxxxx..x...x          ...
.x..x.........x.x....x
.......   ......... ...
ENDMAP

NAME:    regret_index_zotdec_ex
TAGS:    extra transparent zotdec
DEPTH:   Zot
SHUFFLE: opqrstu
SUBST:   o = b, p = x, q : xx., r : x.., stu = .
MAP
@.....              xx
.xxx..         ss. xxx
.xxx.r..      ....xxx
.xxp....      ...xxx
....pxx...  ....xxx..
..o.xxx.r....tuxxx..s
  ..xxq.......xxx...s
  .....qxx...xxxu...
    .o.xxx..xxx.t.
    ...xxx.xxx....
     .....bbx....
     ....xbb.....
    ....xxx.xxx...
    .t.xxx..xxx.o.
  ...uxxx...xxq.....
 s...xxx.......qxx..
 s..xxxut....r.xxx.o..
 ..xxx....  ...xxp....
  xxx...      ....pxx.
 xxx....      ..r.xxx.
xxx .ss         ..xxx.
xx              .....@
ENDMAP

NAME:    regret_index_zotdec_zees
TAGS:    extra transparent zotdec no_rotate no_hmirror no_vmirror
DEPTH:   Zot
KFEAT:   t = petrified_tree
KFEAT:   C = altar_qazlal w:20 / altar_makhleb / altar_xom
KFEAT:   Z = trap_zot
SHUFFLE: opqrstu
SUBST:   o = x, p : x., q : x., rs = ., z : xxbbCVG, b : bbc, F : F..
MARKER:  Z = lua:fog_machine {cloud_type = "seething chaos", \
             pow_min = 9, pow_max = 10, delay = 2, size_min = 1, \
             size_max = 1, start_clouds = 1, excl_rad = 0 }
KMASK:   Z = opaque
KMASK:   Z = no_monster_gen
TILE:    m = dngn_transparent_wall_magenta
: decorative_floor(_G, 'F', "floral vase")
MAP
sxxxxxxxxxxxxx
...........mZx
.o.q.....z.mxx
......xr...xx.
.p...xb...xx..
....xb.F.bx...
...xb.F.bx....
..xx...bx...u.
.xx...rx......sxxxxxxxxxxxxx
xxm.z.....t.o............mZx
xZm............o.t.....z.mxx
xxxxxxxxxxxxxs......xr...xx.
              .u...xb...xx..
              ....xb.F.bx...
              ...xb.F.bx....
              ..xx...bx...p.
              .xx...rx......
              xxm.z.....q.o.
              xZm...........
              xxxxxxxxxxxxxs
ENDMAP

NAME:    regret_index_zotdec_plus
TAGS:    extra transparent zotdec
DEPTH:   Zot
SHUFFLE: ?'- / XXX
SUBST:   ? = ?'', ' = ., - = +, X = x
SUBST:   y : xx., z : xx., b = cccbbv+
: decorative_floor(_G, '?', "flower patch")
MAP
       xxx
 @.....xxx ..
 .xxxx.xyx....
 .x''-........
 .x''x.....zz..
 .x-xb..xxxxxxxxx
 ..........x...
xxx........x..
xxy..x....xxx@
xxx..x.....x..
  ...x..x..x..x
 ...zxxxxxxbxxxxxx
 ...zx..x..xxxx
  ...x..@..xxx..
    .x.   xxx...
     x     x ..@
     x     x
           x
ENDMAP

NAME:    regret_index_zotdec_tunneler
TAGS:    extra transparent zotdec
DEPTH:   Zot, !Zot:$
SHUFFLE: hH / iI / jJ / kK / lL, hH, iI, jJ, kK, lL
SUBST:   hij = x, k : xxxm, HIJKlL = .
SUBST:   a : cccG., b : cc., c : ccb
NSUBST:  @ = 2:@ / *:.
TILE:    G = dngn_statue_depths_zot_tentacles
MAP
            xxxxxxxxxx.@x
          xxxxxhxxxxix..x
          xx..hhh..iii..xx
          xxHHxhx..xixIIxx
      xxxxxxxHHxx..xxxxIIx
   ..xxjxxjxHHxxx..xxxIIxx
   @.....jjj............x
   ..xxJJxjx..aca..xxxKKxx
 xxxxxxxJJxx..ccc..xxxxKKx
 xkxxkxJJxxx..bca..xkxKKxx
xx..kkk............kkk..xx
xxKKxkx..acb..xxxJJxkxxkx
xKKxxxx..ccc..xxJJxxxxxxx
xxKKxxx..aca..xjxJJxx..
 x............jjj.....@
xxIIxxx..xxxHHxjxxjxx..
xIIxxxx..xxHHxxxxxxx
xxIIxix..xhxHHxx
xx..iii..hhh..xx
 x..xixxxxhxxxxx
 x@.xxxxxxxxxx
ENDMAP

NAME:    regret_index_zotdec_ceiling_fans
TAGS:    extra transparent luniq_zotdec
DEPTH:   Zot, !Zot:$
SHUFFLE: hHiIjJkKlLmMnNoO / oOhHiIjJkKlLmMnN / nNoOhHiIjJkKlLmM / \
         mMnNoOhHiIjJkKlL / lLmMnNoOhHiIjJkK / kKlLmMnNoOhHiIjJ / \
         jJkKlLmMnNoOhHiI / iIjJkKlLmMnNoOhH
SUBST:   hjILKNO = x, HJilkno = ., mM : bbcvx, B : CGxx
MAP
  .J...... ..........x.....
 IxJxK...........xx..J...x.
.xIJKx...mmo.....xI..J..K...
HHH.LLL..l.h.......I.J.K....
.xONMx...kji........IJK......
.OxNxM..........xHHHH.LLLLx..
...N................ONM........
..........x........O.N.M........
......xx..N..xx..xO..N..Mx...B..
...B..xM..N..Ox..xx..N..xx......
 .......M.N.O........x..........
  .......MNO................N...
    .xLLLL.HHHHx..........MxNxO.
    .....KJI........ijk...xMNOx.
     ...K.J.I.......h.l..LLL.HHH
     ..K..J..Ix.....onm...xKJIx.
      x...J..xx...........KxJxI
      ....x.......... ......J.
ENDMAP

# Not every enemy fort's readied in advance, you know.
NAME:    regret_index_zotdec_under_construction
TAGS:    extra transparent zotdec luniq_zotdec_large
DEPTH:   Zot, !Zot:$
MONS:    pile of debris
NSUBST:  x = 4 = x. / *:x, + = 1:xxx1.. / 3 = +.. / *:+
NSUBST:  ' = 1:Gxx / *:., . = 1:G1x / 1:{([})]TUV<>>>
SUBST:   X = xx1....
SHUFFLE: @&
CLEAR:   &
MAP
               xxxxxxxxxxxxxx
               xx..+...+...xx
               x...x...x....x
              xxx+xxx+xx.'.Xx
              x....X...x...Xx
             @+........x.'.Xx
       xxxxxxxx....'...+...Xx
       xx..XX.xX...'...x....x
       x......xX.......xx..xx
       x......x...XX...xxxxxx
      xx+xxx+xx+xxxxx+xxx
      x...x.....xxxx...Xx
      x...+.....'xxxX...x
     &x...x..'..xxxxxx+xx
   xx+xxxxxx..'..x...x&
   x...Xxxx'.....+...x
   xX...xxxx.....x...x
   xxx+xxxxx+xx+xxx+xx
xxxxxx...XX...x......x
xx..xx.......Xx......x
x....x...'...Xx.XX..xx
xX...+...'....xxxxxxxx
xX.'.x........+@
xX...x...X....x
xX.'.xx+xxx+xxx
x....x...x...x
xx...+...+..xx
xxxxxxxxxxxxxx
ENDMAP

NAME:    regret_index_zotdec_wing_it
TAGS:    extra transparent zotdec no_rotate no_vmirror
DEPTH:   Zot, !Zot:$
SHUFFLE: pqrs
SUBST:   pq = x, r : xxV>.., s = .
MAP
                  xc
              xxxx..
          xxxx.....
      xxxx........
     x....xx...pqs
     x......xx....
     x...p....xx...
    x.x.........xx..
    x..x...q......xx
    x...x.........
   x.....x...r....
   x..p...x......
   x.......x..s.
  x...q.....x...
  xx.........x.
  x.x...r.....
 x..x.........
 xp..x....s..
 x.q..x.....
x..s..x.....
c.   ..x...
ENDMAP

NAME:    regret_index_zotdec_alabaster_prism
TAGS:    extra zotdec no_pool_fixup
DEPTH:   Zot, !Zot:$
WEIGHT:  4
KMONS:   s = sacred lotus
KFEAT:   no = m
KFEAT:   s = w
KFEAT:   A = altar_the_shining_one
KFEAT:   B = altar_zin
KFEAT:   C = altar_elyvilon
SHUFFLE: mno, AG / Bg / Cs
SUBST:   } = {([}}))]]<>, y : x.., z : x..
SUBST:   X : xx., Y : xx., Z : xx., + = +++.
FTILE:   'ABC : floor_w_marble
TILE:    m : dngn_transparent_wall_white
TILE:    n : dngn_transparent_wall_yellow
TILE:    o : dngn_transparent_wall_brown
TILE:    G = dngn_statue_depths_zot_angel
: vault_metal_statue_setup(_G, "g", "silver statue")
MAP
           xxxxxxx..
          xxxx.sxc..
         xxmx..xx...
        xx..x.xx....
       xx...xx......
      xx....x............
     xx'..z.xx....X......
    xx'A'...x.xZ.......cx
   xx..'G.xxx..Yc.....xxx
  xx........xX.oYZ...xxGx
 xx..y..x...x....x...x..x
xxm.....x...x..X..x.x..xx
xxxxZx.xxxxx+xxxxxxxxxxxx
xxxxxxx..Y'gx...x.....nxx
    xx.x.'B'x...x..z..xx
    xx..x.'Yx........xx
    xx..cx..xxx.s'..xx
    xc.}..x.x...'C'xx
    xxo....x.....'xx
    xcxcxxxxx.y..xx
    xxxxxxxxZ...xx
           xx..xx
           xxnxx
           xxxx
           xxx
ENDMAP

##########################################################################
# A set of decorative vaults based off of branch rune vaults.
# Constant coloured glass is always supposed to view just walls.

NAME:    regret_index_zotdec_decaying_vile
TAGS:    transparent extra no_pool_fixup zotdec luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
WEIGHT:  5
NSUBST:  A = 1:x / 1:. / * = x., B = 1:x / 1:. / * = x.
NSUBST:  C = 1:x / 1:. / * = x., D = 2:x / 1:. / * = x.
NSUBST:  E = 1:x / 1:. / * = x., F = 1:x / 1:. / * = x.
NSUBST:  G = 1:x / 1:. / * = x., H = 1:x / 1:. / * = x.
SUBST:   Z : zz., z = x:9 .:1, w : wx., { = {([})]>>>
TILE:    m = dngn_transparent_wall_brown
MAP
...xxxxxxxx
..z....Z..xx
.z....z....xx
x..AA..z..BBxx
x..AA.z...BB.xx
x......z......xx
x.z.z.xxz.z.z..xx
xZ.z.zxc.z.z.zc.xx
x.....z.......z..xx
x......z.......z..xx
x..CC.z...DD..z..EExx
x..CC..z..DD...z.EE.xx
x.....z.......z......x
x......z.......z.....x
x.z.z.xcz.z.z.cxz.z.Zx
xZ.z.zxx.z.z.zxx.z.z.x
x.....z.......z......x
x..FF..z..GG...z.HH..x
x..FF.z...GG..z..HH..x
xw{....z.......z....z.
xmw...Z.......Z....z..
xxxxxxxxxxxxxxxxxxx...
ENDMAP

NAME:    regret_index_zotdec_decaying_basic
TAGS:    extra no_pool_fixup no_trap_gen zotdec luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
ITEM:    swamp dragon scales, spear, wand of flame pre_id charges:1
KFEAT:   ^ = shaft
KFEAT:   t = petrified_tree
KFEAT:   C = altar_fedhas
SHUFFLE: pqrs
SUBST:   p : wxb., q : xb.., rs = .
SHUFFLE: def, def / VCV / >{> / ^{^ / G^G
SUBST:   { = {([})]>>>^, t : ttw, w : www..
TILE:    m = dngn_transparent_wall_brown
MAP
         @@@
  xx  xx..p..xx  xx
 xxxxxxxx...xxxxxxxx
xxxx.dxxx...xxxf.xxxx
xx.....xx...xx.....xx
xx..s..x..p..x..s..xx
xxt...xx.....xx...txx
xxw..xx..ccc..xx..wxx
xxw.xx..ccccc..xx.wxx
xx..x..cc.e.cc..x..xx
xm..x.cc.....cc.x..mx
xx....c..r.r..c....xx
xxx.q.cc.....cc.q.xxx
xxx...............xxx
 xxxmxx..wtw..xxmxxx
  xxxxxxxxxxxxxxxxx
ENDMAP

NAME:    regret_index_zotdec_serpentine_coiled
TAGS:    extra transparent no_rotate zotdec
TAGS:    luniq_zotdec_rune luniq_zotdec_large
DEPTH:   Zot, !Zot:$
WEIGHT:  5
ITEM:    mundane barding
KFEAT:   C = altar_cheibriados
SHUFFLE: pqrs, yz
SUBST:   G : GGc, p : xbCV, q : xb.., X rs = ., y : cb., z = c
SUBST:   { = {([})]<$d>>>CCC
TILE:    m = dngn_transparent_wall_green
: vault_metal_statue_setup(_G, "G", "alchemical conduit")
MAP
     ..cc@@cc.....
    ...c....c.cccc.
  ..cccc....cc....cc
 .cc...............@
.c.................@
.c...ccc.p..cc....cc
c...cmxc....c.cccc..
y.s.Gcxc....z.....
c...cmxc....c....
.c...ccc..q.cccc..
.c..............cc.
..cc..............c.
  ..cccc.r..ccc...c.
    ...z....cxmc.s.y
    ...z....cxmc.s.y
  ..cccc..r.ccc...c.
..cc..............c.
.c..............cc..
.c...ccc.q..cccc...
c...cmxc....c...
y.s.Gcxc....z..
c...cmxc....c...
.c...ccc..p.cccc...
.c..............cc..
 .cc.............{cc
  ..cccccccccccccccc
ENDMAP

NAME:    regret_index_zotdec_serpentine_scales
TAGS:    extra transparent zotdec luniq_zot_rune
DEPTH:   Zot, !Zot:$
ITEM:    mundane barding
KFEAT:   C = altar_cheibriados
SHUFFLE: ABCDEF, no / pq / rs / tu / vw
SUBST:   ABC = x, D : xx., E : xx., F = ., G : GGx
SUBST:   npr = @, tuvw = x, { = {([})]<$d>>>CCC
TILE:    m = dngn_transparent_wall_green
CLEAR:   ors
: vault_metal_statue_setup(_G, "G", "alchemical conduit")
MAP
fffxxxxxxxxxxxxxxxxxxxxxxxxxxxhhh
fee..xxxxxxxxxxxxxxxxxxxxxxx..ggh
x..A....xmx...........xmx....E..x
xx..B..xx.xx.........xx.xx..D..xx
xxx....x...x..xxcxx..x...x....xxx
 xxx.........xxx{xxx.........xxx
  xxG...C...xxx...xxx...C...Gxx
   xxx...D.............B...xxx
    xxx...E...........A...xxx
     xxx.....xx...xx.....xxx
      xxx.....xx.xx.....xxx
       xxx.....xcx.....xxx
        xxxjjjjiiijjjjxxx
ENDMAP

NAME:    regret_index_zotdec_barnacled_simple
TAGS:    extra transparent zotdec no_pool_fixup
TAGS:    luniq_zotdec_rune luniq_zotdec_negative_space
DEPTH:   Zot, !Zot:$
ITEM:    mundane javelin q:1 no_pickup, throwing net q:1 no_pickup
SUBST:   m = mw..
NSUBST:  A = 1:+ / *:xxx+, B = 1:+ / *:xxx+, C = 1:+ / *:xxx+, D = 1:+ / *:xxx+
NSUBST:  { = 1:{([T<<<<dwcc / 1:})]T>>>>ewcc / * = xxcww
CLEAR:   `
TILE:    m = dngn_transparent_wall_darkgray
MAP
                  ......
  ......         ........
 ........       ..mxxCxx.
..mxxAxx.       ..xx...xx
..xx...xx       ..x.....x
..x.....x       ..C..{..x
..A..{..x       ..x.....x
..x.....x       ..xx...xx
..xx...xx        ..xxxxx
 ..xxxxx               `
        `               `
         `               `
          `               xxxxx..
          xxxxx..        xx...xx..
         xx...xx..       x.....x..
         x.....x..       x..{..D..
         x..{..B..       x.....x..
         x.....x..       xx...xx..
         xx...xx..       .xxDxxm..
         .xxBxxm..       ........
         ........         ......
          ......
ENDMAP

NAME:    regret_index_zotdec_barnacled_alternative
TAGS:    extra transparent zotdec no_pool_fixup
TAGS:    luniq_zotdec_rune luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
WEIGHT:  5
MONS:    bush
ITEM:    mundane javelin q:1 no_pickup, throwing net q:1 no_pickup
SHUFFLE: AB / AB / BA, CD / CD / DC, -~
SUBST:   AC : cbvxx, B = w, D = ., - = w, ~ : ww...
SUBST:   { = {([<11%dG, } = })]>11$eG
TILE:    m = dngn_transparent_wall_darkgray
MAP
  ........     ..........
 .........     ..~xxxxxxw..
..-xxxxx....   .~xxwwwwxxw.
.-xx~...x...   .xx-...mwxx.
.xx~..DC.x..   .x-..A.}mwx.
.xw..x..C.x.   .x..xwB..wx.
.xw.Aww.D.x.   .x.D.wwA.wx.
.xw..Bwx..x.   .x.C..x..wx.
.xwm{.A..-x.   ..x.CD..~xx.
.xxwm...-xx.   ...x...~xx-.
.wxxwwwwxx~.   ....xxxxx-..
..wxxxxxx~..     .........
 ..........      ........
ENDMAP

NAME:    regret_index_zotdec_gossamer_parallel
TAGS:    extra no_trap_gen zotdec luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
KFEAT:   z = web
KFEAT:   Z = trap_zot
SUBST:   { = {[(}])<>$%, A : CVGZ..
SUBST:   c : ccx
SHUFFLE: qrs
SUBST:   q = x, r : x.., s = .
TILE:    m = dngn_transparent_wall_magenta
MAP
 cxxxxxxxxxxxxxxx
  @......zxmz..xxx
  ........xz....zxxx
 .....r...x..A...xxx
 ........xx.......xx
cxxxxx.cxxxxxxcc..xx
..................cx
@.s...q...s.q....{cx
..................cx
cxxxxx.cxxxxxxcc..xx
 ........xx.......xx
 .....r...x..A...xxx
  ........xz....zxxx
  @......zxmz..xxx
 cxxxxxxxxxxxxxxx
ENDMAP

NAME:    regret_index_zotdec_gossamer_gf
TAGS:    extra no_trap_gen zotdec no_rotate luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
WEIGHT:  5
ITEM:    mundane cloak
KFEAT:   ^ = web
NSUBST:  { = 1:{([T<<<<d^c / 1:})]T>>>>d^c / * = xxc^%
SUBST:   c : ccx
SHUFFLE: pqrstuv
SUBST:   pqr = x, s : x.., t : x.., uv = ., X = x..
TILE:    m = dngn_transparent_wall_magenta
MAP
    xxxxxxx.@.xxxxxxx
 xxxxxxxxxx.X.xxxxxxxxxx
xx^.x...ccxp.qxcc...x.^xx
x^....x..{x...x{..x....^x
xx...xXx..xr.rx..xXx...xx
 xx...xxccx...xmcxx...xx
  xx...xxxxq.pxxxx...xx
  xxX...x.x...x.x...Xxx
  xx...ss.t.u.v.XX...xx
 xx..............r....xx
 xx....r..............xx
  xx...XX.v.u.t.ss...xx
  xxX...x.x...x.x...Xxx
  xx...xxxxp.qxxxx...xx
 xx...xxcmx...xccxx...xx
xx...xXx..xq.px..xXx...xx
x^....x..{x...x{..x....^x
xx^.x...ccx.X.xcc...x.^xx
 xxxxxxxxxx.@.xxxxxxxxxx
ENDMAP

NAME:    regret_index_zotdec_slimy_original
TAGS:    extra transparent zotdec luniq_zotdec_rune
DEPTH:   Zot
ITEM:    stone q:1
KFEAT:   C = altar_jiyva
SUBST:   < = <<<({[Cd$, > = >dCC
NSUBST:  p = 4:. / 4 = x. / *:x, q = 4:. / 4 = x. / *:x
NSUBST:  P = 4:. / 2 : c. / *:c, Q = 4:. / 2 : c. / *:c
NSUBST:  r = 2 : x' / 2 : x' / *:x, s = 2 : x' / 2 : x' / *:x
CLEAR:   '
TILE:    m = dngn_transparent_wall_green
MAP
   xxxxxx
 xxxpppppp
 xppp......
xxp..........
xpp.....cc..r
xp....ccmcP.r
xp...cccccP.r
xp...cccccP.r
xp..cmccccP.r
 p..ccccccP.rr
  ...PPPPP<..rrrrr.
   ................
   .sssss..>QQQQQ...
        ss.Qcccccc..q
         s.Qccccmc..qx
         s.Qccccc...qx
         s.Qccccc...qx
         s.Qcmcc....qx
         s..cc.....qqx
         ..........qxx
            .....qqqx
             qqqqqxxx
              xxxxx
ENDMAP

NAME:    regret_index_zotdec_abyssal_star_handed
TAGS:    extra no_rotate no_pool_fixup luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
ITEM:    dagger ego:distortion pre_id no_pickup
KFEAT:   C = altar_lugonu
KFEAT:   mn = m
SUBST:   C = {([})]>>>CCC<d$
NSUBST:  m = 2:m / 2:n / 1:mn
NSUBST:  z = 1:. / 2 = bxx / *:x, c = 6 : xxv / 2:. / *:c
NSUBST:  + = 2:+ / *:c
TILE:    m : dngn_transparent_wall_red / dngn_transparent_wall_brown / \
             dngn_transparent_wall_green
TILE:    n : dngn_transparent_wall_magenta / dngn_transparent_wall_blue / \
             dngn_transparent_wall_cyan
TILE:    b = bedevilled_crystal_abyss
: set_feature_name("crystal_wall", "bedevilled crystal wall")
MAP
      ..  ccc  ..
 ..@....cccmccc....@..
 ......+c.....c+......
 c.ccccc...z...cccccccc
 .cccm....z.z....mccc.
ccccc.............cc.c
 ...c...z.....z...c..
  ..cc..z..C..z..cc..
  ...+...........+...
 @...c...z...z...c...@
c.c..cc..zz.zz..cc....
ccccccc.........ccccccc
 .....cm.......mc...c.c
 .....ccccc+ccccc.....
      .....@.....
ENDMAP

NAME:    regret_index_zotdec_abyssal_contain_seething_sorcery
TAGS:    extra transparent zotdec luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
WEIGHT:  5
ITEM:    dagger ego:distortion pre_id no_pickup
KFEAT:   C = altar_lugonu
KFEAT:   mn = m
KFEAT:   - = +
SUBST:   X = xxxcc......, { = {([})]>>>CC<d$
NSUBST:  b = 1:bcc / *:c
FTILE:   - = floor_nerves
TILE:    m : dngn_transparent_wall_red / dngn_transparent_wall_brown / \
             dngn_transparent_wall_green
TILE:    n : dngn_transparent_wall_magenta / dngn_transparent_wall_blue / \
             dngn_transparent_wall_white
TILE:    b = bedevilled_crystal_abyss
: set_feature_name("crystal_wall", "bedevilled crystal wall")
MAP
x x x x
 x.xxxxxxxxxxxxxxx
x.x.x...xxxnnmmxxxxx
...x..X....mmnnmmxxxxx
 .........X..mmnncbcxxx
 .....X..cc.xxxxcc-cccx
  ......Xc..x...c...-bx
   .X.V.....+...+.{.ccx
  ......Xc..x...c...-bx
 .....X..cc.xxxxcc-cccx
 .........X..mmnncbcxxx
...x..X....mmnnmmxxxxx
x.x.x...xxxnnmmxxxxx
 x.xxxxxxxxxxxxxxx
x x x x
ENDMAP

NAME:    regret_index_zotdec_silver_v_v_loose
TAGS:    extra zotdec transparent no_trap_gen luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
ITEM:    mundane arbalest
KFEAT:   ^ = trap_alarm
KFEAT:   C = altar_gozag
KFEAT:   V = v
SHUFFLE: opqrstu
SUBST:   op = ., q : v.., r : v.., stu = v
SUBST:   { = {([<d$
NSUBST:  > = 1:})]>>>> / * : d$>C^
TILE:    m = dngn_transparent_wall_white
TILE:    V = dngn_metal_wall_darkgray
MAP
............
.vvvvvvvvv..
.v..................
.v.q.r.s.v..vv..V.t.
.v..>V...v.....p.o..
.v.rVVVq.v..v.V.>.V.
.v...Vm..v..v..o.p..
.v.s.q...v......V...
.v.......v..us....v.
.v.vvvvvvt..vu.v.vv.
...........<..........
..........{...........
  .vv.v.uv..tvvvvvv.v.
  .v....su..v.......v.
  ...V......v...q.s.v.
  ..p.o..v..v..mV...v.
  .V.>.V....v.qVVVr.v.
  ..o.p..v..v...V>..v.
  .t.V..vv..v.s.r.q.v.
  ..................v.
          ..vvvvvvvvv.
          ............
ENDMAP

NAME:    regret_index_zotdec_silver_v_v_orig_slice
TAGS:    extra zotdec transparent no_trap_gen no_rotate
TAGS:    luniq_zotdec_rune luniq_zotdec_large
DEPTH:   Zot, !Zot:$
ITEM:    mundane arbalest
KFEAT:   ^ = trap_alarm
KFEAT:   C = altar_gozag
KFEAT:   V = v
SHUFFLE: opqrst
SUBST:   op = ., q : Vx.., r : Vx.., st = V
NSUBST:  { = 1:{([<<<d$ / * : d$, } = 1:})]>>>>C / * : d$>^
TILE:    m = dngn_transparent_wall_white
TILE:    V = dngn_metal_wall_darkgray
MAP
              .p.vvvvvvvvvvvv
              p...........m}v
              .............mv
              v....VVVVV....v
              v..VVV....VV..v
              v..V..vvv..V..v
              q..V.vv}vv.V..v
              v..V...vv..V..v
              v..VVV...VVV..v
              v....VVVVV....v
            .................
............................o
..vvvvvvvvv.{.{..vvvvrvvvv.o.
.v.V.V.V.r.v....
v.o.V.V.V.V.v.
vV.V.v.v.v.qv.
v.V.v.v.v.V.v.
vV.v.v.v.v.Vv.
v}V.v.v.v.V.v.
vV.V.v.v.V.Vv.
v.V.V.V.V.p.v.
vm.V}V.V.V.v..
vvvvvvvvvvv...
ENDMAP

NAME:    regret_index_zotdec_golden_two_three
TAGS:    extra zotdec no_trap_gen no_rotate no_vmirror
TAGS:    luniq_zotdec_rune luniq_zotdec_large
DEPTH:   Zot, !Zot:$
ITEM:    stone q:1
KFEAT:   C = altar_kikubaaqudgha / altar_yredelemnul
KFEAT:   Z = trap_zot / trap_alarm
SUBST:   < = <>, Z = ZC.
SUBST:   { = {([})]<>%$VVVVC
SHUFFLE: pqrs, +-
SUBST:   pq = ., r : c., s = c, - : ++.
TILE:    m = dngn_transparent_wall_yellow
MAP
         c     c
     ....c..@..c....
     p...c.....c...p
  .@...cccccGccccc...@.
 .....ccccccccccccc.....
 p..ccc...........ccc..p
 ..ccc.....ccc.....ccc..
ccccc.r..mcc{ccm..r.ccccc
 ..cc...ccc...ccc...cc..
 r.cc..ccc.....ccc..cc.r
 @.cc.......p.......cc.@
 ..ccm...r.....r...mcc..
cccccc.q...s.s...q.cccccc
 ..ccc.............ccc..
 ...ccc+cc.....cc+ccc...
 @..cc...cc.Z.cc...cc..@
 s..cc....c...c....cc..s
 ..ccd.s..c...c..s.dcc..
cccccd..q.+.p.+.q..dccccc
 ..cccd...c...c...dccc..
 @..cccd..c.<.c..dccc..@
 ...cccddcc...ccddccc...
 .q.c.ccccc---ccccc.c.q.
    c......@.@......c
ENDMAP

NAME:    regret_index_zotdec_glowing_original
TAGS:    extra transparent zotdec no_trap_gen luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
KFEAT:   C = altar_nemelex_xobeh
KFEAT:   Z = trap_zot
SHUFFLE: qrst
SUBST:   q : ., r : c., st = c
SUBST:   { = {([})]>>C%$UUUU, Z : ZUV
TILE:    m = dngn_transparent_wall_yellow
MAP
.................
.tcsccc.....cccc.
.ccccmc..cc..cmc.
.scccc..cZcc..cc.
.cccc....cccc..c.
.cmc..c...qccc...
.cc...cr..{qccc..
.c..c.cmr...cZc..
...cc.cccr...c...
.sccc.cccmr......
.....tcccccc..cc.
.ccc..t......cmc.
.cccc..ccc..cccc.
..crcc.cc..ccccs.
 ..ccc.c..cmcccc.
  ..cc.s.ccccsct.
   ..............
ENDMAP

NAME:    regret_index_zotdec_magical_s
TAGS:    extra transparent zotdec no_pool_fixup
TAGS:    luniq_zotdec_rune luniq_zotdec_large luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
ITEM:    mundane ring of magical power pre_id
KFEAT:   CD = altar_sif_muna
SHUFFLE: MNmn, <CD>{$d, pqrs
SUBST:   MNn : ., V = m, { = {([})]
NSUBST:  B = 2:. / *:b
SUBST:   p = ., q : w.., r : w.., s = w, w : ww.
TILE:    m = dngn_transparent_wall_white
TILE:    b = wall_emerald
MAP
    ........ .........
   ...ss.........rrr...
  ..rbbbbbp.q..bbbbbbs..
 ..bbbwwwbb...bbwwwwbbs..
..rb......bb.bb..v+vwbb..
.qbb.v.vv.wbBbw.vv.Vvwbr.
.qbw..<...wb.bw.+.C.+wbr.
.qbw.v.vv.bb.bb.vv.vvwbr.
..bw.v.v..b...b..v+v.wb..
..bb........N........bb..
..qbbwwbb.m.N.M.bbwwbb...
....bbbb.........bbbb....
 .p..B...nn.Z.NN...B..q.
....bbbb.........bbbb....
...bbwwbb.M.n.m.bbwwbbp..
............n........bb..
   .......b...b..v.v.wbs.
        ..bb.bb.vv.v.wbs.
        ..wb.bw...>..wbs.
        ..wbBbw.vv.v.bb..
        ..bb.bb......br..
        ..b...bbwwwbbb..
         ...p.qbbbbbr..
         .......qqq...
         ............
ENDMAP

NAME:    regret_index_zotdec_fiery_em
TAGS:    extra transparent zotdec
TAGS:    luniq_zotdec_rune luniq_zotdec_large luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
ITEM:    mundane great sword ego:flaming plus:0 pre_id
KFEAT:   C = altar_okawaru
SHUFFLE: DEF, pqrs, lx', lxV
SUBST:   D : ++., EF = v, p : v., q : v., rs : v
SUBST:   ' : ., V = v, C = CCC>>>GG$dd<{([})]
KPROP:   l = no_cloud_gen
TILE:    m = dngn_transparent_wall_brown
TILE:    G = dngn_statue_depths_zot_cerebov
MAP
       ...vvDvv..........
       .vvv...vvv...vvEv.
      ..vvv...vmv.vvv..E.
      ....vv+vv...vvv..v.
       .............+vvv.
      ..vpv.v.vqv....mv..
  .. ..vv.......vv...vv.
......vv.........vv......
.vv..vv..l'''''l..vv..vv.
.vv..p..lll'''lll..r..vv.
vvvv.v.llll'''llll.v.vvvv
v..v...lxxll'llxxl...v..v
F..+.v.xxxx'C'xxxx.v.+..F
v..v...lxxll'llxxl...v..v
vvvv.v.llll'''llll.v.vvvv
.vm..q..lll'''lll..s..vv.
.vv..vv..l'''''l..vv..vv.
......vv.........vv......
 .vv...vv.......vv.. ..
..vv....vrv.v.vsv..
.vvv+.............
.v..vvv...vv+vv....
.E..vvv.vmv...vvv..
.vEvv...vvv...vvv.
..........vvDvv...
ENDMAP

NAME:    regret_index_zotdec_dark_gr
TAGS:    extra transparent zotdec no_trap_gen luniq_zotdec_rune
DEPTH:   Zot, !Zot:$
KFEAT:   C = altar_kikubaaqudgha
KFEAT:   Z = trap_zot
SHUFFLE: qrs
SUBST:   q = ., rs = x
SUBST:   + : ++., Z : Z.., { = {([})]CC<>dd$VVV
TILE:    m = dngn_transparent_wall_darkgray
ITEM:    any skeleton
MAP
   ..x..x..x..x..
  ...............
  .ccccccccccc...
 ..cr...s...ccc...
 ..c.r.....x.mcc..
...+..r...x...cc..
...+...r.x.Z.x.c..
.x.c.cccc...x..c..
x.xccc...s.x.x.c..
.q.cm{c.q.x...xc.
x.xccc...s.x.x.c..
.x.c.cccc...x..c..
...+...r.x.Z.x.c..
...+..r...x...cc..
 ..c.r.....x.mcc..
 ..cr...s...ccc...
  .ccccccccccc...
  ...............
   ..x..x..x..x..
ENDMAP

# Based on the first four non-disco guaranteed demonic rune vaults.
# Probably a bit too much for a decorative vault, but who cares, it's Zot.
NAME:     regret_index_zotdec_demonic_mixed
TAGS:     extra transparent zotdec no_item_gen no_pool_fixup
TAGS:     luniq_zotdec_rune luniq_zotdec_large luniq_zotdec_liquid
DEPTH:    Zot, !Zot:$
WEIGHT:   4
ITEM:     mundane demon whip / mundane demon blade / mundane demon trident
KFEAT:    C = altar_makhleb
KFEAT:    n = m
KFEAT:    u = w
KFEAT:    k = l
SHUFFLE:  ABCDEF
SUBST:    AB = w, C : w., D : w., EF = .
SHUFFLE:  lk / uw, ~-, G' / Y' / C' / >"
SUBST:    ~ : ++-, - : +vv, o : n., b = bcc
NSUBST:   < = 1:{([})]>w$d / *:.
KMASK:    uk = no_monster_gen
KMASK:    'YC = opaque
KPROP:    uk = no_tele_into
KPROP:    l = no_cloud_gen
TILE:     m : dngn_transparent_wall_red / dngn_transparent_wall_yellow
TILE:     n : dngn_transparent_wall_green / dngn_transparent_wall_blue
TILE:     G = dngn_statue_depths_zot_ancient_evil
TILE:     b = bedevilled_crystal_pandemonium
: set_feature_name("crystal_wall", "bedevilled crystal wall")
MAP
           ....@...
          ..Dww.wwC..
         ..Dwcc.vvwC..
         .Ewcc.w.vvwB.
        .Ewcc.w.w.vvwB..
        .Fwc.......vwA..
       ..Fwc......vvvA..
      ...vvvvv-~vvvuvvv...
    ....vv........vnvwvv..
  ..EFFvv+mm..........wv..
 ..Ewwwv.m<m.......c++vvv.
..Dwcccv.mmm.lll...c..mkm.
.Dwcc..v....cllll..c..vvv.
.wcc...v...llc''ll.c..lv..
.wc.w..v...ll'G'cl.c..lv..
@..w...~...ll''>ll.c..lv..
.wv.w..-....llclbl.c..lv..
.wvv...v.....llll..c..vv..
.Cwvv.vvv.........<c..v...
..Cwvvvun.cccccccccc.....@
 ..Bwwvvv.+...............
  ..BAAvw.+..........ooo..
    ...vvwvmvllllvv..ouo..
    ....vvvkvvvvvv...ooo..
       ...vmv............
        ...........@....
ENDMAP

NAME:    regret_index_zotdec_obsidian_hm
TAGS:    extra transparent zotdec
TAGS:    luniq_zotdec_rune luniq_zotdec_large luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
ITEM:    mundane trident ego:flaming plus:0
SHUFFLE: opqr, fg
SUBST:   op = l, qr = ., f = v, g = ., l : ll.
SUBST:   } = {([})]<b$>>>
TILE:    m = dngn_transparent_wall_red
TILE:    b = bedevilled_crystal_gehenna
: set_feature_name("crystal_wall", "bedevilled crystal wall")
MAP
xxxxxxxxxxx
c......col.
c...vg.+o..
c...fv.co..
c.vf...co..
c.gv...+o..
c......co..
cc+c+ccco..
c.....cpl.
c..v..cp..
c.....+p..
c..v..cp..
c.....cp..
cc+c+ccp..
c....+ql.
c.fg.cq..
c.gf.cq..
c....+q..
c+c+ccq..            .......x
c...crl.       ............lx
c.v.+r..  ..........looooooox
c...cr.}......lppppppcc+cc+cx
cc+ccr...lqqqqqccc+ccc......x
c.....rrrrc+cc+c.....c.gv...x
c.....cc+cc....+.....+.vf...x
@..d..c...+.fg.c.v.v.c...fv.x
c.....+.v.c.gf.+.....+...vg.x
cm....c...+....c.....c......x
ccc@ccccccccccccccccccccccccx
ENDMAP

NAME:    regret_index_zotdec_icy_dp
TAGS:    extra transparent zotdec no_pool_fixup
TAGS:    luniq_zotdec_rune luniq_zotdec_large luniq_zotdec_liquid
DEPTH:   Zot, !Zot:$
SHUFFLE: HIJKLM, pqr, CT{([<$
SUBST:   HI = x, J : xw, K : xw, LM = w
SUBST:   p : xww., qr = ., - : ++., w : www.., C : CCb
CLEAR:   '
TILE:    m = dngn_transparent_wall_blue
TILE:    b = bedevilled_crystal_cocytus
TILE:    T = dngn_fountain_novelty_octopode
: set_feature_name("crystal_wall", "bedevilled crystal wall")
MAP
   .............
 .......www......
 ...HHHHIwIJJJ.r..
...M........JJ....
.p.M..ccc....KK.q.
...M.ccmcc+c..K...
..wL.cc....c..Lw..
..ww..cC..Tc..ww..
..wL..c....cc.Lw..
...K..c+ccmcc.M...
.q.KK....ccc..M.p.
....JJ........M...
..r.JJJIwIHHHH....
 ......www.......
  ..............
                ''''
                    .......
                   ..........
                  ..pccc-ccc..
                  ..cc.....cc.
                  ..c..q...rc.
                  ..-.......c.
                  ..c.........
                  ..ccr..
                  ...ccc.
                   ......
ENDMAP

NAME:    regret_index_zotdec_bone_old
TAGS:    extra transparent zotdec luniq_zotdec_rune no_rotate
DEPTH:   Zot, !Zot:$
ITEM:    maw talisman
KFEAT:   C = altar_yredelemnul
KFEAT:   ^ = shaft
SHUFFLE: opqrst
SUBST:   op = x, q : xx., r : x.., st = .
SUBST:   - : +c, { = {([})]++CC^^.., b = bxx
TILE:    G = dngn_statue_depths_fangs
TILE:    b = bedevilled_crystal_tartarus
: set_feature_name("crystal_wall", "bedevilled crystal wall")
MAP
           s
   ........s........
  cc-++-ccccccc-++-cc
  c......+...+......c
  c.x..x.x.G.x.x..x.c
  c......x...x......c
cccccccccxx{xxccccccccc
  cd...............dc
  cx.x.r.x.b.x.r.x.xc
  c.................c
  c.x.x.x.x.x.x.x.x.c
  c.................c
  cx.x.x.x.x.x.x.x.xc
  c.................c
   ...p.q.....q.p...
ENDMAP

NAME:    regret_index_zotdec_iron_s
TAGS:    extra transparent zotdec luniq_zotdec_rune luniq_zotdec_large
DEPTH:   Zot, !Zot:$
ITEM:    mundane mace, any mundane weapon
SHUFFLE: opqrst, P- / Q~ / R' / S"
SUBST:   o : v.., p : vG., r : vGb, s : vb, t = v
SUBST:   P = CCC>>><$d{([})], ~QRS = e, -'" = v, G : Gvv
TILE:    G = dngn_statue_depths_zot_devil
: if crawl.coinflip() then
TILE:    b = bedevilled_crystal_dis
: set_feature_name("crystal_wall", "bedevilled crystal wall")
: else
TILE:    b = wall_emerald
: end
MAP
  ........................
  ........................
  vv..v....v..vv..vv..vv..vv
vvvvvvvv++vvvvvvvvvvvvvvvvvvvv
vvvvmvvv++vvvmvvvvvvvvvvvvvvvv
  vv..v....v..vvvvvv..vv..vv
  zz............vv........
  zz..........vvvvvvv.
  zz..o....t..+..-d.v.
  zz..p....s..v.P-..+.
  zz.....G...vvvvvvvv.
  zz..q....r.+..~d.v..
  zz..q....r.v.Q~..+..
  zz.........vvvvvvvv.
  zz..r....q..v.R'..+.
  zz..r....q..+..'d.v.
  zz....G....vvvvvvvv.
  zz..s....p.v.S"..+..
  zz..t....o.+.."d.v..
  zz.........vvvvvvv..
  vvvvvvvvvvvvvvvvvvvvvv
ENDMAP

##############################################################################
##############################################################################
#
# <<3>> Zot monster vaults
#
##############################################################################
##############################################################################

###########################
# Halls of Wrath
#
NAME:   lemuel_halls_of_wrath
DEPTH:  Zot, !Zot:$
ORIENT: float
NSUBST: 1 = 6:2 / *=1
SUBST:  1 = 1 .:5
SUBST:  1 = 1 3
MONS:   troll / deep troll / iron troll / ogre / two-headed ogre
MONS:   moth of wrath
MONS:   stone giant / fire giant / frost giant / ettin / \
        w:5 efreet / w:3 titan
SUBST:  } = }:80 >, ) = ):80 >
FTILE:  .123G})]>+ = floor_zot_diamonds
MAP
cccccccccccccccccccccccc
c111111111111111111.n..c
c111111111111111111.n.)c
ccnnccccccccccccc++cc..c
c....G....G....G....c..c
+...................+..c
+...................+.}c
+...................+..c
c....G....G....G....c..c
ccnnccccccccccccc++cc..c
c111111111111111111.n.]c
c111111111111111111.n..c
cccccccccccccccccccccccc
ENDMAP

###########################
# Lich library
#
NAME:   lemuel_lich_library
TAGS:   no_monster_gen no_descent
DEPTH:  Zot, !Zot:$
MONS:   laughing skull, lich, ancient lich / dread lich, necromancer
MONS:   vampire mage, black draconian draugr, orb of entropy
ITEM:   any book mimic:10 w:20 / any scroll mimic:10
KFEAT:  ^ = trap_archmage
SUBST:  x : xvv, w : w?, G : Gg
NSUBST: ? = 14 = 111' / *:'
SUBST:  4 = 4 5:3 .:3, ^ : ^..
FTILE:  .>$d234567^Gg+m = floor_mystic_chasm
TILE:   G = dngn_statue_depths_zot_lich / dngn_statue_zot_old_guardian
TILE:   c = wall_studio
: if dgn.zot_orb_type() == "orb of entropy" then
NSUBST: 3 = 1:37 / *:7
: end
: vault_metal_statue_setup(_G, "g", "soul conduit")
MAP
wwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwww
wwxxxxxxxxx+xxxxxxxxxww
wwx....x.......x....xww
wwx6...+..^G^..+...6xww
wwx.4.6x.......x6.4.xww
wwx4.4.xxxx+xxxx.4.4xww
wwx.4.4xxx...xxc4.4.xww
wwx4.4.xxx.2.xxx.4.4xww
wwxxcxxxxxx+xxxxxxx+xww
wwxcxcxxxc..xxxxxx$$xww
wwxdddxxxxx.x...xx$$xww
wwx.3.xxxc..+.G.xxxxxww
wwx.>.xxxxx.x...xxxxxww
wwx...xxxc..xxxxxxxxxww
wwxx+xxxxxx.xxcdddddxww
wwxx.xcxxc..xxcd232dxww
wwxx.x.xxxx.x.xd...dxww
wwxx......+^..+....dxww
wwxxxxxxxxxmxxxd...dxww
wwxxxxxxxxxGxxcdddddxww
wwxxxxxxxxxxxxxxxxxxxww
wwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwww
ENDMAP

###########################
# Lake of fire (...or ice!)
#
NAME:   lemuel_lake_of_fire
TAGS:   no_pool_fixup
DEPTH:  Zot
WEIGHT: 12
KMONS:  1 = orb of fire
KMONS:  2 = orb of winter
KMONS:  P = fire dragon-shaped block of ice / red draconian-shaped block of ice
KFEAT:  1 = l
KFEAT:  2P = w
: if dgn.zot_orb_type() == "orb of fire" then
SUBST:  * = 1l, ~ = l, . = .l
: elseif dgn.zot_orb_type() == "orb of winter" then
SUBST:  * = 2P, ~ = w, . = .w
: end
veto {{
  return dgn.zot_orb_type() == "orb of entropy"
}}
MAP
 ..~~..
..~~~~..
.~~~~~~.
.~~**~~.
.~~**~~.
.~~~~~~.
..~~~~..
 ..~~..
ENDMAP

###########################
# Globe of electric golems
#
NAME:   lemuel_golem_globe
TAGS:   no_rotate no_exits
DEPTH:  Zot
MONS:   electric golem
KFEAT:  ^ = trap_teleport_permanent / trap_dispersal
KFEAT:  m = iron_grate
NSUBST: 1 = 1:1 / 1:. / * = 1.
: vault_metal_statue_setup(_G, "Z", "nascence circuit")
MAP
  mmmm
 mm..mm
mm.11.mm
mZ1^^1Zm
mm.11.mm
 mm..mm
  mmmm
ENDMAP

###################################################################
# Draconian Sentry Boxes
# There is an 70% chance all three upstairs will be here.
#
NAME:    lemuel_draconian_sentries
TAGS:    no_monster_gen no_rotate no_pool_fixup
DEPTH:   Zot, !Zot:$
ORIENT:  float
MONS:    draconian stormcaller / draconian scorcher w:5
KFEAT:   m = iron_grate
SHUFFLE: {([>, wW / -?, '2n / "3o / "3o
SUBST:   { = {:80 >, ( = (:80 > , [ = [:80 >
SUBST:   -?' = ., 2 = 1, n = m
KMASK:   ~ = !no_monster_gen
CLEAR:   "3o
MAP
''''''''''''''''''''''''''''
''nnn'~~~~~~~~~~~~~~~~'nnn''
''n2n'~~~..........~~~'n2n''
''nnn'~~mmmwwWWwwmmm~~'nnn''
''''''~.m1mWWwwWWm1m.~''''''
''''''~.mmmwwWWwwmmm.~''''''
nnn'''~.WwW.{..(.WwW.~'''nnn
n2n'''~.wWw......wWw.~'''n2n
nnn'''~.WwW.[..>.WwW.~'''nnn
''''''~.mmmwwWWwwmmm.~''''''
''''''~.m1mWWwwWWm1m.~''''''
''nnn'~~mmmwwWWwwmmm~~'nnn''
''n2n'~~~..........~~~'n2n''
''nnn'~~~~~~~~~~~~~~~~'nnn''
''''''''''''''''''''''''''''
ENDMAP

###########################
# Acid trip
# 70% chance of having all stairs.
NAME:   lemuel_acid_trip
DEPTH:  Zot, !Zot:$
ORIENT: centre
MONS:   oklob plant, acid blob, jelly, yellow draconian
MONS:   any nonbase yellow draconian, slymdra band, orb of entropy
KFEAT:  ^ = trap_devourer
SUBST:  1 = 1:2 .
SUBST:  . = .:20 3:3 2:1
SUBST:  } = }:80 >, ) = ):80 >, ] = ]:80 >
# Have a small chance to place a top-tier acid threat, using either the Zot
# orb or slymdra depending on which is available.
: if crawl.x_chance_in_y(2, 5) then
NSUBST: 2 = 1:6 / 2:. / *:2, 4 = 2:. / *:4, 5 = 1:. / *:5
: end
: if dgn.zot_orb_type() == "orb of entropy" then
SUBST:  6 = 7
: end
FTILE:  .12345})]>^+ = floor_zot_diamonds
MAP
       xx++xx
     xxx....xxx
   xxx..4444..xxx
  xx....4554....xx
 xx.....cccc.....xx
 x....ccc..ccc....x
xx...cc^....^cc...xx
x...cc..1111..cc...x
x...c...1}11...c...x
x.5.c...11]1...c.5.x
x...c...1)11...c...x
x...cc..1111..cc...x
xx...cc......cc...xx
 x....cc....cc....x
 xx....c....c....xx
  xx............xx
   xxx..4444..xxx
     xxx4554xxx
       xxxxxx
ENDMAP

###########################
# Firehouse
#
NAME:   lemuel_firehouse
DEPTH:  Zot, !Zot:$
ORIENT: centre
MONS:   orb of fire, fire elemental
MONS:   red draconian, any nonbase red draconian
MONS:   efreet, sun moth, red draconian scorcher
: if dgn.zot_orb_type() == "orb of fire" then
SUBST:  1 = 122, 6 = '
: else
NSUBST: 16 = 2:7 / * = 667
: end
SUBST:  3 = 322, 4 = 2:20 4:5 3:15 ':20, G : G.
FTILE:  @ = floor_pebble_lightmagenta
FTILE:  '123456+}])>F = floor_zot_diamonds
TILE:   c = wall_stone_scorched
: vault_metal_statue_setup(_G, "G", "fiery conduit")
MAP
          lllll
       lllllllllll
     lllll..<..lllll
    llll....x....llll
   llll....xxx....llll
   llll...xx}xx...llll
  llll...xx]2)xx...llll
  llll..xx2'''2xx..llll
 llll..xx'''5'''xx..llll
 llll..x'''2'2'''x..llll
llll...x'2cc+cc2'x...llll
llll..Gx'cc444cc'xG..llll
llll...x'c44444c'x...llll
 llll..x'c44F44c'x..llll
 llll..x6c44444c6x..llll
  llll.x6cc444cc6x.llll
  llll.x'1c'''c1'x.llll
   llllxxxc+++cxxxllll
    llll333'''333llll
     lllll'''''lllll
       lllll'lllll
          ll@ll
ENDMAP

######################################
# Circus (by mu)
# full of klowns, caged animals outside
NAME:    circus_mu
TAGS:    no_rotate no_hmirror no_monster_gen
DEPTH:   Zot, !Zot:$
ORIENT:  float
MONS:    killer klown, elephant / dire elephant / hellephant w:5, human ; club
KITEM:   ! = club
KFEAT:   y = x
KFEAT:   B = cache_of_baked_goods
SUBST:   2 = 22., % = !.....
NSUBST:  1 = 3:1 / 1:2 / 2:3 / * = 112333
SHUFFLE: })]>UVY
COLOUR:  " = red
FTILE:   " = floor_rough_red
TILE:    x = wall_zot_red
TILE:    y = wall_zot_white
: decorative_floor(_G, 'F', "flower patch")
MAP
     ................
    .....xxxxx.............
   .....xx...xx.............
  .....yx..%..xy.....mmmmm...
 .....yy..%.%..yy....m222m....
.....xx.%..1..%.xx...m+mmm.....
....xx...%.%.%...xx...3........
...yy..%1"""""1%..yy....mmmmm..
.Fxy..%.""..."".%..yxF..m222m..
.xx..%%."..}..".%%..xx..m+mmm..
.xB%1..1"..1.."1..1%Bx.........
.xx..%%."..)..".%%..xx..3......
.Fxy..%.""..."".%..yxF.........
...yy..%1"""""1%..yy...mmmmm...
....xx...%.%.%...xx....m222m...
.....xx.%..1..%.xx.....m+mmm..
 .....yy...%...yy............
  .....yx.%.%.xy............
   .....xx+++xx.....
    .....xx+xx.....
     .............
ENDMAP

######################################
# This is weird, but in Zot weirdness fits. (nrook)
NAME:   nrook_zot_tub
TAGS:   no_monster_gen
DEPTH:  Zot
WEIGHT: 25
KMONS:  M = patrolling red draconian att:neutral / \
            patrolling nonbase red draconian att:neutral
KMONS:  F = orb of fire att:neutral
KFEAT:  MFX = W
MARKER: X = lua:fog_machine { cloud_type="steam", \
            pow_min = 2, pow_max = 10, delay = 25, \
            size = 2, walk_dist = 3, spread_rate= 10 }
: vault_metal_statue_setup(_G, "g", "enigmatic dynamo")
veto {{
  return dgn.zot_orb_type() ~= "orb of fire"
}}
MAP
     @
xxxxx+xxxxx
xGWWWWWWWGx
xWMWWMWWMWx
xWWXWXWXWWx
xWWWmmmWWWx
xWMXmFmXMWx
xWWWmmmWWWx
xWWXWXWXWWx
xWMWWMWWMWx
xGWWWWWWWGx
xxxxxxxxxxx
ENDMAP

###################################################
# Minmay's Elemental castle
# 50% electricity, 25% fire, 25% ice
NAME:    minmay_elemental_castle
TAGS:    no_rotate no_descent
ORIENT:  southwest
DEPTH:   Zot, !Zot:$
KITEM:   $ = $ no_pickup
KFEAT:   G = metal_statue
SHUFFLE: GHIJ
: if crawl.coinflip() then
MONS:    titan, storm dragon
KMONS:   F = electric golem
MARKER:  F = lua:fog_machine { cloud_type = "thunder", pow_min = 5, \
              pow_max = 15, delay = 10, size = 2, walk_dist = 0, \
              spread_rate= 0 }
ITEM:    storm talisman, book of lightning, staff of air, book of storms
:   vault_metal_statue_setup(_G, "G", "storm conduit")
: elseif crawl.coinflip() then
MONS:    frost giant, ice dragon / thermic dynamo w:3
KMONS:   F = shard shrike
MARKER:  F = lua:fog_machine { cloud_type = "freezing vapour", \
              pow_min = 5, pow_max = 15, delay = 10, size = 2, \
              walk_dist = 0, spread_rate= 0 }
ITEM:    granite talisman randart artprops:rC:2&&rF:-1
ITEM:    staff of cold, book of winter, book of ice
SUBST:   w = l
SUBST:   W = l..
:   vault_metal_statue_setup(_G, "G", "icy conduit")
: else
MONS:    fire giant, fire dragon / thermic dynamo w:3
KMONS:   F = balrug
MARKER:  F = lua:fog_machine { cloud_type = "flame", pow_min = 5, \
              pow_max = 15, delay = 10, size = 2, walk_dist = 0, \
              spread_rate= 0 }
ITEM:    book of the dragon, staff of fire, book of fire, book of annihilations
:   vault_metal_statue_setup(_G, "G", "fiery conduit")
: end
ITEM:    potion of enlightenment pre_id q:1
ITEM:    ring of flight randart pre_id no_pickup
SHUFFLE: defg, hi
SUBST:   HIJ = c
SUBST:   1 = 112., 2 = 221.
FTILE:   .>123defg$%*|GF = floor_zot_diamonds
MAP
xx'''''''''''''''''''@@'''''''''''''''''''
xx'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW'
xx'WwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwW'
xx'WwcccccccwwwwwwwwwwwwwwwwwwwwcccccccwW'
xx'Wwcd*%$1cwwwwwwwwwwwwwwwwwwwwc1$%*gcwW'
xx'Wwc*%$$.cwwwwwwwwwwwwwwwwwwwwc.$$%*cwW'
xx'Wwc%$$$.ccccccccc++++ccccccccc.$$$%cwW'
xx'Wwc$$$$........................$$$$cwW'
xx'Wwc1........2............2........1cwW'
xx'Wwcccc..........................ccccwW'
xx'Wwwwwc...ccccccccGccGcccccccc...cwwwwW'
xx'Wwwwwc...HccccccccccccccccccH...cwwwwW'
xx'Wwwwwc...cccccccccccccccccccc...cwwwwW'
xx'Wwwwwc.2.ccc*>*cccccccc*>*ccc.2.cwwwwW'
xx'Wwwwwc...ccc$|$cccccccc$|$ccc...cwwwwW'
xx'Wwwwwc...ccc...cccccccc...ccc...cwwwwW'
xx'Wwwwwc...ccc.F.cccccccc.F.ccc...cwwwwW'
xx'Wwwwwc...Icc...cccccccc...ccI...cwwwwW'
xx'Wwwwwc...ccc...cJccccJc...ccc...cwwwwW'
xx'Wwwwwc..........................cwwwwW'
xx'Wwwwwc..........................cwwwwW'
xx'Wwwwwc...ccc..............ccc...cwwwwW'
xx'Wwwwwc...Icc....2....2....ccI...cwwwwW'
xx'Wwwwwc...ccc..............ccc...cwwwwW'
xx'Wwwwwc...ccc..............ccc...cwwwwW'
xx'Wwwwwc...ccc..............ccc...cwwwwW'
xx'Wwwwwc.2.ccc1............1ccc.2.cwwwwW'
xx'Wwwwwc...cccccccJc..cJccccccc...cwwwwW'
xx'Wwwwwc...Hcccccccc..ccccccccH...cwwwwW'
xx'Wwwwwc...cccccccGc..cGccccccc...cwwwwW'
xx'Wwcccc..........................ccccwW'
xx'Wwc1$.......2............2.......$1cwW'
xx'Wwc$$$..........................$$$cwW'
xx'Wwc%$$$.cccccccccccccccccccccc.$$$%cwW'
xx'Wwc*i$$$cwwwwwwwwwwwwwwwwwwwwc$$$h*cwW'
xx'Wwce*%$1cwwwwwwwwwwwwwwwwwwwwc1$%*fcwW'
xx'WwcccccccwwwwwwwwwwwwwwwwwwwwcccccccwW'
xx'WwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwW'
xx'WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW'
xx''''''''''''''''''''''''''''''''''''''''
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

###################################################
# Based on zotdef III. Idea from kilobyte.
NAME:   evilmike_crystal_ball_defense
TAGS:   no_rotate no_monster_gen
DEPTH:  Zot, !Zot:$
ORIENT: float
WEIGHT: 5
MONS:   oklob plant w:4 / lightning spire w:3
MONS:   orange crystal statue / curse skull
# Not quite the orb, but but close enough
ITEM:   orb randart no_pickup, randbook disc:forgecraft spells:diamond_sawblades
KFEAT:  ^ = trap_archmage / trap_harlequin / trap_devourer
NSUBST: 1 = 1:1 / 6 = 11^ / *:., 3 = 1:1 / 4 = 11....... / *:.
SUBST:  } = }:80 >, ) = ):80 >, ] = ]:80 >
: vault_metal_statue_setup(_G, "G", "enigmatic dynamo")
MAP
        xxxxxxxxx
        xxx.2.xxx
        xGx.e.xGx
        xx..1..xx
xxxxxxxxx1.....1xxxxxxxxx
xxxxxxx.....).....xxxxxxx
xxx.....1..}d]..1.....xxx
xx...xx.....>.....xx...xx
@x..xxxxx1.....1xxxxx..x@
.x.3xxxxxx..1..xxxxxx3.x.
.x..xxxxxGx...xGxxxxx..x.
.x..xxxxxxx...xxxxxxx..x.
.x..xxxxxxxx.xxxxxxxx..x.
.x..xxxxxxxx2xxxxxxxx..x.
.x..xxxxxxxx.xxxxxxxx..x.
.xx3.................3xx.
...x.................x...
...x......3.3.3......x...
xxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

################################################################################
# A highlight reel of Xom's many altar vault gimmicks.
NAME:    hangedman_xom_zot_hilarity
TAGS:    no_monster_gen no_trap_gen no_pool_fixup patrolling transparent
DEPTH:   Zot, !Zot:$
WEIGHT:  3
# Gifts, too.
KMONS:   1 = guardian mummy ; randart dire flail ego:chaos . \
             randart hand cannon ego:chaos . randart robe
KMONS:   3 = guardian mummy ; randart battleaxe ego:chaos . \
             randart chain mail . any blast wand
KMONS:   5 = guardian mummy ; randart great sword ego:chaos . \
             randart scale mail . any beam wand
KMONS:   7 = guardian mummy ; randart glaive ego:chaos . \
             randart ring mail . throwing net
KMONS:   246 = killer klown ; club plus:12 ego:chaos | \
                              club plus:12 ego:antimagic w:5
KMONS:   8&! = protean progenitor
KMONS:   _ = ghost moth
KMONS:   90 = moth of wrath / butterfly w:30
KFEAT:   B = cache_of_baked_goods
KFEAT:   0 = trap_harlequin
KFEAT:   ^~ = trap_teleport / trap_dispersal
KFEAT:   _ = altar_xom
KFEAT:   > = } mimic
KFEAT:   m = iron_grate
SUBST:   d = tGmcc, y = c`, c = cccccbbvvx, l = wl
NSUBST:  > = 1 = }:80 > / 1 = ):80 > / 1 = ]:80 > / >, 9 = 0 / 9
NSUBST:  ^ = ' / ^, ~ = " / ~, ` = 2=f / .
SHUFFLE: 12 / 34 / 56 / 78 / &!, 56, 78, ^' / ~"
: single_cloud(_G, "f", "seething chaos", true)
FTILE:   f = floor_pebble_lightmagenta
MAP
        ccccccc
     cccc2B1B2cccc
  @@ccyycm+m+mcyycc@@
  @..cl`yl```ly`lc..@
  c.c.```````````.c.c
 ccc.l````.c.````l.ccc
 cyl``c..`.>.`..c``lyc
 cy```.>.`d..`d>.```yc
cccy``.d.^~~^`...``yccc
c3ml`````m==mm^````lm6c
cB+``...^m999=~d..``+Bc
c4m``c>.~=9_9=~.>c``m5c
cB+``..d~=999m^...``+Bc
c3ml````^mm==m`````lm6c
cccy``...`^~~^.d.``yccc
 cy```.>d`..d`.>.```yc
 cyl``c..`.>.`..c``lyc
 ccc.l````.c.````l.ccc
  c.c.```````````.c.c
  @..cl`yl```ly`lc..@
  @@ccyycm+m+mcyycc@@
     cccc8B7B8cccc
        ccccccc
ENDMAP

#################
# Dragon hoards.
#
# These range from small, essentially just flavour vaults,
# to large vaults with many dragons.
NAME:   st_single_dragon_hoard_1
TAGS:   extra
: st_zot_vaults_setup(_G)
MAP
 xxxxx
xx$x$xx
xx**xxx
x$xY*$x
xx$*$xx
 xx@xx
ENDMAP

NAME:   st_single_dragon_hoard_2
TAGS:   extra
: st_zot_vaults_setup(_G)
MAP
xxxxx
xx*Yx
x.$*x
x.xxx
x..xx
xx@xx
ENDMAP

NAME:   st_single_dragon_hoard_3
TAGS:   extra
: st_zot_vaults_setup(_G)
MAP
xxxxxxxx
xxxx$*xx
xx.$$Y*x
x...$*$x
xx.xx$xx
x...xxxx
xxx..xxx
xxxx@xxx
ENDMAP

NAME:   st_single_dragon_hoard_4
TAGS:   extra
: st_zot_vaults_setup(_G)
MAP
xxxxxxxxx
@.xxx**xx
xx..x$Y*x
x.xx.$$xx
xxx.xx$xx
xxxxxxxxx
ENDMAP

NAME:   st_small_dragon_hoard_1
TAGS:   extra
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xxxxxxxx
xxx*$xDx
xx*Y*x$x
xxx*$$xx
xD$$$x.x
xx$...xx
x.x....x
xx....xx
xxx..xxx
xxx@xxxx
ENDMAP

NAME:   st_small_dragon_hoard_2
TAGS:   extra
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xxxxxxxxxx
xxx$$$xxxx
xx$x*$$xxx
x*$*Y*xDxx
xD$x*$$$*x
xxx$$$$xxx
xxxx@xxxxx
ENDMAP

NAME:   st_small_dragon_hoard_3
TAGS:   extra
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xxxxxxxxxxxxxxxx
xxD$$xxD..xxx$xx
xx$x$$xx.x.x$x*x
x$*Y*$...xx.$$Yx
xx$*x$xx...xx$*x
xxxDxxx..xxxD$xx
xxxxxxx@x.xxxxxx
ENDMAP

NAME:   st_small_dragon_hoard_4
TAGS:   extra
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xxx@x.xxxxxxxxxxxx
xx.x.xxxxxxxxx.$xx
xxx..xxxxxxx..x$Dx
xxxx...xxx..xx$**x
xDxxxx....xxxDxYxx
x**x$x.x.x..xxxx*x
xxY$..xxxxx..xxxxx
xD*$xxxxxxxx...xxx
xxxxxxxxxxxx.xx@xx
ENDMAP

NAME:   st_small_dragon_hoard_5
TAGS:   extra
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xx..xxxxxxxxxxxxxx
x.xxxxxxxD*lxD*xxx
@x.xxxxx$xl$$l$**x
xx...xxx*$lllllYxx
..xx..xxx$.llll*Dx
xxxxx.xxxxx.llllxx
xxxxx...xx..lxllxx
xxxxxxx....xxlxxxx
xxxxxxxxxxxxxxxxxx
ENDMAP

NAME:   st_large_dragon_hoard_1
SUBST:  D = DD$
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xxxxxxx@xxxxxxxx
xxxx.x...lxxlxxx
xxx|x.llllxl.xxx
xxD$llxlllllx..x
xDxllxl|DDll....
x.lllD|Y*Dlllx.x
.xlxllD*Dlll$$xx
xx.llxllllxx*Dxx
xxx...xll.$Dxxxx
xxxxxx...xxxxxxx
xxxxxxx@xxxxxxxx
ENDMAP

NAME:   st_large_dragon_hoard_2
SUBST:  D = D$
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxx
xxxxD$$Dxxxxxxxxxxxxxxx
xxxY*xx$$D$$xxxx...xxxx
xxx|$$|D$x*$$.x..x...xx
xxD$x|Y|D$Y*$...xxx.$$x
xxx$$D*$x$|$xx..xxx*$xx
xx$D$|$D$*xxxx.xxD|Y*xx
xxx$xY*$*Dxxx..xx$x|xDx
xxxxx|$D$xxx....xxD$Dxx
xxxxxxxxxxx..xx.xxxxxxx
xxxxxxxxxx..xxx...xxxxx
xxxxxxxx..x@xxxx.x..xxx
ENDMAP

NAME:   st_large_dragon_hoard_3
SUBST:  D = DDD$
KITEM:  D = $
: st_zot_vaults_setup(_G)
MAP
x.xx@xxxxxx.xxxxxxxxxxx
.xx...xxxxxx.xxxxxxxxxx
...xx..x......xxx....xx
xxxxxxx...xxxx....xx..x
xD$*xx..xxxx...xxxx$$xx
xxD$xxxx.x..xxxxxx$*$xx
xDx$$.x...x...xxxD*Y*Dx
xxxxxx..xxxxx..xxx$|$xx
xxxlx.x.lxlxxx.xxxx$$*x
xxlxll.lllxlxx..xxxDxDx
xxllxl$$Dlllxxx..xxx*xx
xxxlllxD*Dlxlxxx..xxxxx
xxlllDD|Y*llxxxxxx.xxxx
xxxxlx*D|Dxlllxxx....x.
xlllllD|Dlllxlxxx.xxx..
xxlxllllxllllllxxx.x.xx
xxxllxxlllxxlxxxxx..xxx
xxxxxxxxxxxxxxxx@.xxxxx
ENDMAP

# draconians are a bit more organised with their hoards.
NAME:   st_large_dragon_hoard_4
SUBST:  D = DDD$
KITEM:  D = $
KMONS:  1 = nonbase draconian band
KITEM:  & = dragon-coil talisman / dragon-coil talisman randart / \
            book of the dragon w:15 / $
: st_zot_vaults_setup(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x$$$$xxxx.......xxxxxxxxxxxxxxxx
x$$$$xx......1....x*$*xxxx...xxx
xxx+xx..x.........+$|$xxx.....xx
xxx....xxxx......xx*$*xxx.xx...x
xx..xxxxxxxxxx..xxxxxxxx.xxx..xx
xxx..xxxD&Dxxxx...xxxxx..xxxx..x
xDxx.xx$*Y*$Dxxxx..x....xxxx..xx
xD$x.xxD$|D$$*xxxx...xxxxxxx..xx
xxx..xxx*$$$$$xxxxxxx$Dxxxx..xxx
xx.xxxxxxD$.1..x|*|xD|Dxx...xxxx
xxx..xxxxxx....+*|*xxDxx.x.xxxxx
xxxx.....x....xx|*|xxxx.x.xxxxxx
xxxxxx......xxxxxxxxx..x...xxxxx
xxxxxxxxxxxxxxxxxxxx.xxx@xx.xxxx
ENDMAP

# A mighty hoard indeed...
# Intended to be an extreme visual spectacle.
# Obviously lowering the amount of gold in stacks is necessary.
# There's about 800 gold.
NAME:   st_grand_hoard_of_tiamat
TAGS:   no_monster_gen
KMONS:  1 = patrolling Tiamat, patrolling golden dragon
KITEM:  1 = dragon-coil talisman / dragon-coil talisman randart / \
            book of the dragon w:15
SUBST:  D = DDD$
KITEM:  D = $
KITEM:  $ = gold q:1
: st_zot_vaults_setup(_G)
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxx*x$$x$x$$xxxxxxxxx
xxxxx*xxD*$xxD$$$xD$x$xxxxx
xxx$xD$x$$$$$$x$*$$$$x$$xxx
xx$$x$$$*xx$$$$*Yx$$$$$xxxx
xx$x*$x*Y*$D$$$$*$$xD$x$*xx
xxxxD$x$*$$$D|DD$$$x$$$$Dxx
xx$$x$$$$$DD*|*$DD$$$x$$xx.
xxx$$$$D$$$||1||$$$$$$$$$..
xx$x$x$$$$$D*|*$D$D$x$$$x.@
xxxD*$$x$*$D$|DD$$x*$$$xxx.
xx*xx$$$xY*xxD$$$$*Y*xxD$xx
xxx$$$x$$*$$$$Dx$xx*$x$$xxx
xxxxx$$xDxx$$x$$x$$x$$xxxxx
xxxxxxxxx$$x$$xx*Dxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

#########################
# Minivaults based on the old orb chambers.
#
NAME:    zot_minivault_1
TAGS:    transparent
WEIGHT:  20
DEPTH:   Zot, !Zot:$
FTILE:   .@0 = floor_rough_lightmagenta
MAP
 xxxxxxxxxxx
xxx...0...cxx
xx..0...0..cx
x0.........0x
@..0..0..0..@
x0.........0x
xc..0...0..xx
xxc...0...xxx
 xxxxxxxxxxx
ENDMAP

# Based on orb_monky_inset
NAME:    zot_minivault_2
TAGS:    transparent
WEIGHT:  5
DEPTH:   Zot, !Zot:$
SUBST:   > = }}]
FTILE:   .@0}] = floor_rough_lightmagenta
MAP
 xxxxxxxxxxx
xxx0.....0xxx
xx....0....xx
x0...xxx...0x
@...cxxxc...@
x0...xxx...0x
xx....0....xx
xxx0.....0xxx
 xxxxc.cxxxx
xx...0.0...xx
x...........x
x.....>.....x
xx.........xx
 xxxxxxxxxxx
ENDMAP

# Based on orb_two_ways
NAME:    zot_minivault_3
TAGS:    transparent
WEIGHT:  5
DEPTH:   Zot, !Zot:$
SUBST:   < = {[(TUV
FTILE:   .@0{[(TUV = floor_rough_lightmagenta
MAP
 xxxxxxxxxxx
xxxx.....xxxx
xx....c...xxx
xx.<.xxx..xxx
xx...xx..xxxx
xxxxxx..xxxxx
xxxx.....xxxx
xxx..0x0..xxx
x0...xxx...0x
@..0cxxxc0..@
x0...xxx...0x
xxx..0x0..xxx
xxxx.....xxxx
xxxxx..xxxxxx
xxxx..xx...xx
xxx..xxx.<.xx
xxx...c....xx
xxxx.....xxxx
 xxxxxxxxxxx
ENDMAP

# Based on orb_monky_within_orb
NAME:    zot_minivault_4
TAGS:    transparent
DEPTH:   Zot, !Zot:$
COLOUR:  n = magenta
TILE:    n = dngn_transparent_stone_magenta
FTILE:   .@0n = floor_rough_lightmagenta
MAP
 xxxxxxxxxxx
xxx0.....0cxx
xx..nn0nn..cx
x..n0...0n..x
@..n.0.0.n..@
x..n0...0n..x
xc..nn0nn..xx
xxc0.....0xxx
 xxxxxxxxxxx
ENDMAP

# Based on orb_monky_twist
NAME:    zot_minivault_5
TAGS:    transparent
DEPTH:   Zot, !Zot:$
COLOUR:  .n = magenta
TILE:    n = dngn_transparent_stone_magenta
FTILE:   .@0n = floor_rough_lightmagenta
MAP
 xxxxxxxxxxx
xxxnn...0.cxx
xxnn0.0.n..cx
xnnn....nn.0x
@.nn0.0.0nn.@
x0.nn....nnnx
xc..n.0.0nnxx
xxc.0...nnxxx
 xxxxxxxxxxx
ENDMAP

# Based on orb_nicolae_swirls
# Guarantees an upstairs and downstairs,
# and makes sure the player can see them both from one side.
NAME:    zot_minivault_6
TAGS:    transparent
DEPTH:   Zot, !Zot:$
SUBST:   < = {{[, > = }}]
COLOUR:  n = magenta
TILE:    n = dngn_transparent_stone_magenta
FTILE:   .@0{[}]n = floor_rough_lightmagenta
MAP
 xxxxxxxxxxxxx
xxcccccccccccxx
xccxxxxxxxxxccx
xcxx.......xncx
xcx0...>...0ncx
xcx.........ncx
xcxx0.....0cccx
xcxxxxx...xcxxx
xcxxxx..0nnn.
xnxx...0nnn0@
  ...0nnn....
  @0nnn0...xxnx
  .nnn...xxxxcx
xxxcx0..xxxxxcx
xccc.......xxcx
xcn.........xcx
xcn0...<...0xcx
xcnx.......xxcx
xccxxxxxxxxxccx
xxcccccccccccxx
 xxxxxxxxxxxxx
ENDMAP

# Based on orb_nicolae_fourfold
NAME:    zot_minivault_7
TAGS:    transparent
WEIGHT:  5
DEPTH:   Zot, !Zot:$
SUBST:   > = }}]
FTILE:   .@0}] = floor_rough_lightmagenta
MAP
 xxxxxxxxx
xx...0...xx
x0.0...0.0x
x..xc.cx..x
x..x...x..x
x..x.0.x..x
x..x...x..x
x..xx.xx..x
x.xx...xx.x
x.x.0.0.x.x
@.x0.>.0x.@
x.x.0.0.x.x
x.xx...xx.x
x..xx.xx..x
x..x...x..x
x..x.0.x..x
x..x...x..x
x..xc.cx..x
x0.0...0.0x
xx...0...xx
 xxxxxxxxx
ENDMAP

# Based on orb_grunt_hallway
NAME:    zot_minivault_8
TAGS:    transparent
WEIGHT:  5
DEPTH:   Zot, !Zot:$
SUBST:   > = }}]
FTILE:   .@0}] = floor_rough_lightmagenta
MAP
 xxxxxxxxx
xxxx...xxxx
xxx0...0xxx
xxx..>..xxx
xxx0...0xxx
xxxc...cxxx
xxxx0.0xxxx
x00x...x00x
x..x...x..x
@..x0.0x..@
x..x...x..x
x..x...x..x
x..x0.0x..x
x.0x...x0.x
x.0x...x0.x
x..x0.0x..x
x..c...c..x
x.........x
xx.......xx
 xxxxxxxxx
ENDMAP

##########################################################################

NAME:    nicolae_zot_draconian_monastery
TAGS:    no_trap_gen no_monster_gen no_item_gen
DEPTH:   Zot, !Zot:$
ORIENT:  float
MONS:    draconian monk / base draconian w:15
MONS:    patrolling draconian stormcaller, patrolling draconian knight
MONS:    patrolling draconian scorcher
KFEAT:   rybgmq = n
KFEAT:   TU = T
SHUFFLE: ]}), rybgmq, DZF
MARKER:  + = lua:restrict_door()
# The choice of altar might matter more if monster gods meant much.
# Till then, it's just a style thing.
KFEAT:   _ = altar_qazlal w:40 / altar_xom / altar_lugonu / \
             altar_makhleb / altar_yredelemnul
SUBST:   1 = 1., S : SSG
# What kind of holy books would draconians have?
KITEM: D = book of the Dragon
KITEM: Z = randbook numspells:4 spells:ignition&fireball&animate_dead&airstrike \
           title:the_Zealot
KITEM: F = randbook numspells:4 spells:starburst&fireball&sticky_flame&flame_wave \
           title:Fire_and_Brimstone
KITEM: _ = manual of invocations
COLOUR:    r = red, y = yellow, b = blue, g = green, \
           m = magenta, q = cyan, c = magenta, S = electricity
FTILE:     .1234STDZF_G+ = floor_zot_diamonds
TILE:      r = dngn_transparent_stone_red, y = dngn_transparent_stone_yellow, \
           b = dngn_transparent_stone_blue, m = dngn_transparent_stone_magenta, \
           g = dngn_transparent_stone_green, q = dngn_transparent_stone
TILE:      G = dngn_statue_zot_serpent / dngn_statue_depths_zot_dragon / \
               dngn_statue_zot_tornado w:15 / dngn_statue_zot_orb
TILE:      T = dngn_fountain_novelty_octopode
: vault_metal_statue_setup(_G, "S", "storm conduit")
MAP
           @'''''''''''''''''''''''@
ccccccccccccqqcrrcyycbbcggcmmcqqcrrccccccccccc
cS............G..G..G..G..G..G..G..ccc.ccc.ccc
c..2ccccc..T.......................cc...c...ccl
c]2.cccDccccc..1..1..1..1..1..1..1.c..1...1..cl
c...cc...cc........................cc.......ccll
cS..+..2....c.cc.cc.cc.cc.cc.cc.cc.cT........clll
cccccc...cccc.cc.cc.cc.cc.cc.cc.cc.ccc.......clllll
ccccTc...cccc......................ccc..1..1.c''''l
@qc......1.........................+.........+''3'@
@mF.4.._.1....1..1..1..1..1..1..1..+......1..+'T''@
@qc......1.........................+.........+''3'@
ccccTc...cccc......................ccc..1..1.c''''l
cccccc...cccc.cc.cc.cc.cc.cc.cc.cc.ccc.......clllll
cS..+..2....c.cc.cc.cc.cc.cc.cc.cc.cT........clll
c...cc...cc........................cc.......ccll
c}2.cccZccccc..1..1..1..1..1..1..1.c..1...1..cl
c..2ccccc..T.......................cc...c...ccl
cS............G..G..G..G..G..G..G..ccc.ccc.ccc
ccccccccccccqqcrrcyycbbcggcmmcqqcrrccccccccccc
           @'''''''''''''''''''''''@
ENDMAP

##########################################################################

NAME:    hangedman_zot_spectrum
TAGS:    no_monster_gen no_descent
DEPTH:   Zot, !Zot:$
KMONS:   A = red very ugly thing
KMONS:   B = red draconian
KMONS:   C = balrug / red draconian scorcher w:6
KMONS:   D = cyan very ugly thing
KMONS:   E = black draconian
KMONS:   F = electric golem / black draconian knight w:6
KMONS:   G = green very ugly thing
KMONS:   H = green draconian
KMONS:   I = green death / green draconian monk w:6
KMONS:   J = white very ugly thing
KMONS:   K = white draconian
KMONS:   L = shard shrike / white draconian stormcaller w:6
KMONS:   M = brown very ugly thing
KMONS:   N = yellow draconian
KMONS:   O = acid blob / yellow draconian annihilator w:6
KMONS:   Z = killer klown ; club randart plus:12 ego:chaos / \
             protean progenitor band w:6 / Tiamat w:3, \
             killer klown ; club randart plus:12 ego:chaos / \
             protean progenitor band w:6
KITEM:   BEHKN = $ w:15 / % w:25 / *
KITEM:   z = any good_item
KITEM:   Z = superb_item
KFEAT:   ^ = trap_harlequin
# Rotates out loot, upstairs, downstairs,
# both (in an enclosed bubble), or nothing, at either end.
SHUFFLE: defg{>Z' / defg{<'' / fgde>{'Z / fgde<{'' / defg'|Z' / fgde|''Z / \
         fgfgZ'() / fgfg'Z)( / dede'''' / dede'''' / dede''''
SHUFFLE: ABC / DEF / GHI / JKL / MNO
SUBST:   d = @, e = ., f = x, g = c, c : ccb, Z = z Z:6, { = ., ? : ?., ^ : ^..
NSUBST:  < = 1:{ / 1:[, > = 1:} / 1:]
FTILE:   .'ABCDEFGHIJKLMNOZz{([})]?+^ = floor_zot_diamonds
: vault_granite_statue_setup(_G, "?", "scintillating statue")
MAP
              xxxxxxxfffff
              xcccccgggggff
          xxxxxcKKcc..>.ggf
          xcccccJ.J+..^Z.gf
          xcccccc..+..Z^>gf
          xcHHccc..ccc...gf
      xxxxxcG.Gcc..Lcc...gx
      xcccccc..++..?Lc++ccx
      xcEEccc..++......Jccx
  xxxxxcD.Dcc..ccc......Kcx
  xcccccc..cc..Icc++cccJKcx
  xcBBccc..++...Ic++ccccccx
  xcA.Acc..++.......Gcccx
  xcc..cc..ccc.......Hcxx
  xcc..cc..Fcc++ccccGHcx
  xxc..++...Fc++cccccccx
  xxc..++........Dccxxxx
xxxxc..ccc........Ecx
xcccc..Ccc++cccccDEcx
xcc.+..?Cc++ccccccccx
xe..+.........Acccccx
de{.cc..........Bcxxx
de.^'c++ccccccA.Bcx
de.'^...cxxxxcccccx
dee..{.ccxxxxxxxxxx
ddeeeeeccx
 dddddxxxx
ENDMAP

##########################################################################

NAME:    hangedman_zot_vaults_quadrants
TAGS:    no_monster_gen no_item_gen transparent
DEPTH:   Zot, !Zot:$
ORIENT:  centre
# Humanoids, guardian beasts, the strongest; first V, then Zot.
MONS:    ettin / stone giant w:5 / fire giant / \
         frost giant / crystal guardian w:5
MONS:    base draconian
MONS:    glowing shapeshifter w:20 / guardian sphinx w:15 / war gargoyle w:20 / \
         iron dragon w:20 / shadow dragon / golden dragon
MONS:    fire dragon / ice dragon / storm dragon w:8 / moth of wrath w:12 / \
         ghost moth w:5 / tentacled monstrosity w:5 / quicksilver dragon w:5
MONS:    titan / lich / deep elf annihilator w:3 / deep elf high priest w:4 / \
         deep elf sorcerer w:3 / glowing orange brain w:3
MONS:    nonbase draconian w:20 / protean progenitor / killer klown / \
         death cob / curse toe w:5 / ancient lich / dread lich / \
         electric golem / orb of appropriateness w:5
KFEAT:   V = v
SHUFFLE: EF
SUBST:   E : "
SHUFFLE: ABCDF, GH / GH / GH / HG
NSUBST:  1 = 3:1 / 2:2 / 2:112 / 1:122, 0 = 3:1 / 2:2 / 2:112 / 1:122
NSUBST:  3 = 3:3 / 2:4 / 2:334 / 1:344, 6 = 3:5 / 2:6 / 2:556 / 1:566
SUBST:   % = $%, * = %:3 *:1, | = %:60 *:25 |:15, 1 = 1:3 ':2
SUBST:   2 = 2:2 ':1, 3 = 3:4 ':1, 4 = 4:6 ':1, 5 = 5:6 ':1, 6 = 6:5 ':1
SUBST:   A : V:4 ":1, B : V:7 ":3, C : V:1 ":4, DF = ", H = .
SUBST:   G : V:7 G:2 .:1, - : +', + : +:5 .:1, { : {:2 }:3 .:2
NSUBST:  { = 1:{ / 1:( / 1:[ / 1:<, } = 1:} / 1:) / 1:] / 1:>
SUBST:   ( = (:14 >:1 <:1 ):2, [ = [:14 >:1 <:1 ]:2, ) = ):70 >(, ] = ]:70 >[
FTILE:   "{([})]<> = floor_zot_diamonds
FTILE:   '$%*|123456+ = floor_vault
TILE:    V = dngn_metal_wall_magenta
: vault_metal_statue_setup(_G, "G", "silver statue")
MAP
       xx@@VVVVV@@xx
      xx..VvvvvvV..xx
      x..Vvv6v6vvV..x
     xx.Vvv'*v*'vvV.xx
    xx..Vv3*|-|*3vV..xx
   xx..GVvvv+v+vvvVG..xx
 xxx..H.Vv0$%-%$0vV.H..xxx
xx...G...Vv4$v$4vV...G...xx
x..VVVV...Vv'v'vV...VVVV..x
@.VvvvvV.'1V"""V1'.VvvvvV.@
@Vvv3v0vV1'""A""'1Vv0v3vvV@
Vvv'*v$4vV"BC{DB"Vv4$v*'vvV
Vv6*|+%$'""DEFEC""'$%+|*6vV
Vvvv-v-vv"A{F<F{A"vv-v-vvvV
Vv6*|+%$'""CEFED""'$%+|*6vV
Vvv'*v$4vV"BD{CB"Vv4$v*'vvV
@Vvv3v0vV1'""A""'1Vv0v3vvV@
@.VvvvvV.'1V"""V1'.VvvvvV.@
x..VVVV...Vv'v'vV...VVVV..x
xx...G...Vv4$v$4vV...G...xx
 xxx..H.Vv0$%-%$0vV.H..xxx
   xx..GVvvv+v+vvvVG..xx
    xx..Vv3*|-|*3vV..xx
     xx.Vvv'*v*'vvV.xx
      x..Vvv6v6vvV..x
      xx..VvvvvvV..xx
       xx@@VVVVV@@xx
ENDMAP

####
# A bit of sporting fun...
NAME: grunt_zot_stairs_faceoff
DEPTH: Zot, !Zot:$
ORIENT: float
# The competitors:
{{
  local teams = { "black", "yellow", "green", "purple", "red", "white", }

  local team1num = crawl.random2(#teams) + 1
  local team1 = teams[team1num]

  -- ensures we can't roll the same team twice
  teams[team1num] = teams[#teams]

  local team2 = teams[crawl.random2(#teams - 1) + 1]

  mons(team1 .. " draconian")
  mons(team1 .. " draconian knight")
  mons(team2 .. " draconian")
  mons(team2 .. " draconian knight")
}}
# The refs:
MONS:   Killer Klown
# The ball / puck / whatever:
ITEM:   orb

KFEAT:  K = iron_grate
NSUBST: @ = 2:@ / *:x
SUBST:  } = }:80 >, ] = ]:80 >, ) = ):80 >
MAP
  xxxxxxxxxxxxxxxxxxxxxxx
 xx.....................xx
xx..mmmmmm.mmmmm.mmmmmm..xx
x..mm........5........mm..x
@.mm...................mm.@
x.m.KK.....1...3.....KK.m.x
x.m.K}..1.........3...K.m.x
x.m.K.1....2.d.4....3)K.m.x
x.m.K]..1.........3...K.m.x
x.m.KK.....1...3.....KK.m.x
@.mm...................mm.@
x..mm........5........mm..x
xx..mmmmmm.mmmmm.mmmmmm..xx
 xx.....................xx
  xxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

####
# A microcosm of everything Zot: draconians, dragons, weird enemies,
# and fractal vault patterns.
NAME:   grunt_zot_stairs_mandelzot
TAGS:   no_monster_gen
DEPTH:  Zot, !Zot:$
ORIENT: east
MONS:   nonbase draconian, base draconian, moth of wrath
MONS:   fire dragon w:35 / ice dragon w:35 / shadow dragon w:25 / \
        storm dragon w:50 / wyrmhole w:15 / golden dragon w:35
MONS:   Killer Klown / electric golem w:5 / \
        curse toe w:5 / protean progenitor w:5
MONS:   orb of appropriateness
SUBST:  2 = 222., 5 = 55.
SUBST:  } = }:80 >, ] = ]:80 >, ) = ):80 >
MAP
                   xxxx
                   xllxxx
                   xllllx
                  xxllllxx
                 xxll.lllxx
              xxxxll.].lllxxxxx
              xllllll..lllllllx
             xxl3l.......lllllx
             xll...2.1.2...3llx
     xxxxxxxxx.l...........lllx
     xllxllxxll.....2.2.....llx
    xxllllllll..............llx
   xxlll....ll...5...........lx
  xxlll.2.2..l............4.llx
xxxlll......................llx
@......2.1.2.3......5..4.}6lllx
xxxlll......................llx
  xxlll.2.2..l............4.llx
   xxlll....ll...5...........lx
    xxllllllll..............llx
     xllxllxxll.....2.2.....llx
     xxxxxxxxx.l...........lllx
             xll...2.1.2...3llx
             xxl3l.......lllllx
              xllllll..lllllllx
              xxxxll.).lllxxxxx
                 xxll.lllxx
                  xxllllxx
                   xllllx
                   xllxxx
                   xxxx
ENDMAP

####
NAME:    nicolae_moth_party
TAGS:    no_pool_fixup no_monster_gen
DEPTH:   Zot, !Zot:$
ORIENT:  north
MONS:    ghost moth, moth of wrath
MONS:    any base draconian
SUBST:   l : lw
SHUFFLE: ]})>, 12
TILE:    T = dngn_fountain_novelty_octopode
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxx......xxxxxxxxx......xxx
xx.3.]....xxx}xxx....).3.xx
x...llll...x...x...llll...x
x..llllll.1..2..1.llllll..x
x..llllll.........llllll..x
x...llll...........llll...x
xx...........3...........xx
xxx......3.......3......xxx
xxxx..3.............3..xxxx
xxxxx.................xxxxx
xxxx...................xxxx
xxx.....................xxx
xx...lll...........lll...xx
xx..lllll..x...x..lllll..xx
xx...lll...x.T.x...lll...xx
xxx...3...xx...xx...3...xxx
xxxx.....xxx...xxx.....xxxx
xxxxxxxxxxx@@@@@xxxxxxxxxxx
ENDMAP

NAME:    nicolae_zot_crop_circle
TAGS:    no_monster_gen transparent
DEPTH:   Zot, !Zot:1
SHUFFLE: {[(, qrs
SUBST:   q = 2, r : pp2, s = p
NSUBST:  p = 2:3 / 1:13 / 1
MONS:    withered plant, petrified flower, death cob
MAP
   ..@..
  .......
 ...pqp...
...p...r...
..p.....s..
@.p..{..p.@
..s.....p..
...r...p...
 ...pqp...
  .......
   ..@..
ENDMAP

NAME:    nicolae_zot_stationary_front
TAGS:    transparent no_pool_fixup patrolling
DEPTH:   Zot
ORIENT:  float
KMONS:   R = red draconian scorcher
KMONS:   C = white draconian stormcaller
KMONS:   D = golden dragon
KMONS:   B = blizzard demon
KFEAT:   r = c
SHUFFLE: Gg/Gg/Gg/Hh, Pp/Pp/Pp/Qq
SUBST:   GP = x, g = r, p = c, HQ = @, hq = .
COLOUR:  r = red, c = blue
TILE:    r = dngn_stone_wall_red
TILE:    c = dngn_stone_wall_blue
FTILE:   @ = floor_rough_magenta
FTILE:   .RCDB = floor_zot_diamonds
MAP
    xxx                   xxx
   xxrxx                 xxrxx
  xxrrrxx               xxrrrxx
 xxrrlrrxx             xxrrlrrxx
xxrrlllrrxx           xxrrlllrrxx
xrrllDllrrxxxxxxPxxxxxxrrllDllrrxxxxxxPxxxxx
rrll...llrrcccccpcccccrrll...llrrcccccpccccc
@....R..........C...C..R...R..........C....@
rrrrrgrrrrrccw.....wccrrrrrgrrrrrccw.....wcc
xxxxxGxxxxxxcww...wwcxxxxxxGxxxxxxcww...wwcx
           xccwwBwwccx           xccwwBwwccx
           xxccwwwccxx           xxccwwwccxx
            xxcccccxx             xxcccccxx
             xxxxxxx               xxxxxxx
ENDMAP

NAME:   amethyst_zot_foddershock
TAGS:   no_monster_gen transparent
DEPTH:  Zot, !Zot:$
MONS:   lightning spire, patrolling electric golem
KMONS:  ! = patrolling death cob
KFEAT:  C = cache_of_baked_goods
NSUBST: % = 2:! / 2:C / *:a
: vault_metal_statue_setup(_G, "Z", "nascence circuit")
: dgn.delayed_decay(_G, 'a', 'random draconian corpse')
MAP
@xxxxx@
..$*$..
x.....x
x.%%%.x
x.%1%.x
x2%%%2x
xZ$.$Zx
xxxxxxx
ENDMAP

# Inspired by a distant submission from nicolae-,
# a revelation: nothing in Zot makes any sense!
NAME:    hangedman_orp_of_zott
TAGS:    no_monster_gen no_trap_gen
DEPTH:   Zot, !Zot:$
ORIENT:  northwest
WEIGHT:  5
# Cheap plastic imitations, mostly. Well, maybe not cheap...
MONS:    hell knight w:6 / very ugly thing / caustic shrike zombie / \
         sin beast / thermic dynamo / void ooze / \
         tentacled starspawn / spark wasp / glowing shapeshifter
MONS:    guardian serpent / deep elf annihilator / balrug / \
         deep elf high priest / will-o-the-wisp / cognitogaunt / acid blob
MONS:    halazid warlock / revenant soulmonger / apocalypse crab / wyrmhole w:2
MONS:    butterfly
ITEM:    stone q:1 no_pickup, large rock q:1 no_pickup
KITEM:   O = charlatans_orb no_pickup
KFEAT:   T = fountain_eyes
# Altars obliquely refer to those temple maps.
KFEAT:   C = altar_ecumenical
KFEAT:   D = altar_lugonu / altar_jiyva / altar_beogh w:5 / altar_ignis w:5
KFEAT:   ~ = trap_zot
KFEAT:   ^ = trap_archmage / trap_harlequin / trap_zot w:2
KFEAT:   y = x
SHUFFLE: Xy / Xy / Xy / Aa
NSUBST:  A = 1:. / 19 = X:9 .:1 / *:X
SUBST:   X : X Y Z:4, X = bbbbvvc, Y = bvvvvc, Z = bvvcccc
SUBST:   az = bbvc
NSUBST:  2 = 4 = 2223 / 2 = 122 / 1 = 1.. / *:1
NSUBST:  . = 1:3 / 4:4 / 12:% / *:.
# 1/15 chance for two downward staircases, 9/15 for (only) one.
SHUFFLE: ])deOG, OGUCD~, GM
# Invert the normal Zot colours.
: local wallc = "darkgray"
: local floorc = "white"
: if you.depth() == 2 then
:   wallc = "yellow"
:   floorc = "darkgray"
: elseif you.depth() == 3 then
:   wallc = "lightred"
:   floorc = "yellow"
: elseif you.depth() == 4 then
:   wallc = "green"
:   floorc = "lightred"
: end
: tile("y = wall_zot_" .. wallc)
: tile("b = dngn_crystal_" .. wallc)
: tile("v = dngn_metal_wall_" .. wallc)
: tile("c = dngn_stone_wall_" .. wallc)
: ftile(".`^123409deO%CDTG~+ = floor_rough_" .. floorc)
: vault_granite_statue_setup(_G, "G", "scintillating statue")
: vault_metal_statue_setup(_G, "M", "enigmatic dynamo")
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx1...........^.+''''''''''''''''''''''''''''''
xx1..........^..+'''''''''''''''''''''''''''''''
xXX......XXXXXXXXXXXXXXX......XXXXXXXXXXXXXX'''''
xzXX......XyyyyyyyyyyyX......XXyyyyyyyyyyyyXX''''
xyyXX.....XXyxxxxxxxyXX.....XXyyxxxxxxxxxxyyXX'''
xxyyXX.....XyxxxxxxxyX1....XXyyxxxxxxxxxxxxyyXX''
xxxyyX....1zzxxxxxxxzz.....XyyxxxxxxxxxxxxxxyyX''
xxxxyX.....zyyyyyyyyyyz1....XyxxxxxxxxxxxxxxxxyX'
xxxxyX....Xzy..`2`..yzX....XyxxxxxxxxxxxxxxxxyX'
xxxyyX....Xzy1y`]`y1yzX....XyyxxxxxxxxxxxxxxxyX''
xxyyXX...Xzzzzzz+zzzzzzX...XXyyxxxyyyyyyyyyyzzX''
xxyXX...zzz1....2....1zzz.^.XXyxxyyd``....2zzX'''
xxyX...zzX1...........1Xzz.^.Xyyyyyyyy1..1zzX''''
xxXX+++z.................z+++XXXXXXXzzzz+zzX''''
xx1....................................112z1'''
xxXX.........................XXXXXXXzzzz+zzX''''
xxyXXXX...................XXXXyyyyyyy1...1zzX''''
xxxyyyXXX...............XXXyyyyyyye``.....2zzX'''
xxxxxyyyXX.............XXyyyxxxxyyyyyyyyyyyyzzX'
xxxxxxxyyX...zzz1zzz...XyyxxxxxxxxxxxxxxxxxyyXX'
xxxxxxxxyX..Xz1z+z1zX..XyxxxxxxxxxxxxxxxxxxyXX'''
xxxxxxxxyXT2zzX$$$Xzz2TXyxxxxxxxxxxxxxxxxxyyX'''
xxxxxxxxyzzzz1.$)$.1zzzzyxxxxxxxxxxxxxxxxxyX1''
xxxxxxxxyX''zzX$$$Xzz''XyxxxxxxxxxxxxxxxxxyyX'''
xxxxxxxxyX''Xz2zzz2zX''XyxxxxxxxxxxxxxxxxxxyXX'''
xxxxxxxyyX'''zzz'zzz'''XyyxxxxxxxxxxxxxxxxxyyXX'
xxxxxyyyXX'''''''''''''XXyyyxxxxxxxxxxxxxxxyyXX'
xxyyyyXXX'''''''''''''''XXXyyyyxxxxxxxxxyyyyXX'''
xyyXXXX'''''''''''''''''''XXXXyyyyyyyyyyyXXXX'''
xXXX'''''''''''''''''''''''''XXXXXXXXXXXXX'''''
xx''''''''''''''''''''''''''''''''''''''''''''
   ''''''   ''''@''''   '''''''''   '''''''''
ENDMAP

# Originally a submitted wizlab of "Nikola's Generator",
# with random drops of summoned ball lightning.
# Uncontrolled blinks near the turbines are dangerous!
NAME:   infiniplex_zot_generator
TAGS:   no_pool_fixup no_item_gen no_monster_gen no_trap_gen
DEPTH:  Zot, !Zot:$
ORIENT: south
MONS:   shock serpent w:20 / air elemental w:6 / thermic dynamo w:2
MONS:   black draconian ; cloak . mundane staff of air
MONS:   war gargoyle / dancing weapon ; scimitar good_item / spark wasp w:5
MONS:   black draconian stormcaller / black draconian shifter / storm dragon
MONS:   ghost moth / moth of wrath / death cob / \
        tentacled monstrosity / killer klown w:5
MONS:   patrolling electric golem
MONS:   patrolling black draconian annihilator ; cloak good_item . \
        rapier ego:electrocution
KMONS:  O = diamond obelisk
KMONS:  S = lightning spire
ITEM:   storm talisman, randbook disc:air spells:chain_lightning
: local e = "ego:electrocution good_item pre_id no_pickup"
: item("quick blade " .. e .. " w:5 / double sword " .. e .. " w:5 / " ..
:      "executioner's axe " .. e .. " w:5 / eveningstar " .. e .. " w:5 / " ..
:      "bardiche " .. e .. " w:5 / lajatang " .. e .. " w:5 / " ..
:      "rapier " .. e .. " / scimitar " .. e .. " / dire flail " .. " / " ..
:      "broad axe " .. e .. " / partisan w:5 " .. e .. " / quarterstaff " .. e)
ITEM:   scroll of blinking q:1 / scroll of blinking q:2 / \
        scroll of teleportation q:3 w:30 / any scroll good_item / \
        staff of air randart
KFEAT:  yz = w
KFEAT:  YZ" = W
KFEAT:  # = iron_grate
NSUBST: . = 4:1 / 4:2 / 3:3 / 3 = 123. / *:., ' = 2:3 / 6:4 / 4 = 34455 / *:.
NSUBST: d = 1:d / 1:|ee / *:f, f = 4:f / *:g, G = 2:GG. / *:.
SUBST:  ` = ., ) = )>>
KPROP:  -_ly"O> = no_tele_into
MARKER: - = lua:fog_machine { cloud_type = "steam", walk_dist = 3, \
                              pow_max = 100, pow_min = 10, delay = 20, \
                              size = 1, start_clouds = 5, excl_rad = 0 }
FTILE:  -_ = floor_pebble_darkgray
FTILE:  .`1234567Sdefg#})>G = floor_zot_diamonds
: if crawl.coinflip() then
:   vault_metal_statue_setup(_G, "G", "storm conduit")
: else
:   vault_metal_statue_setup(_G, "G", "nascence circuit")
: end
MAP
                 vvvvvvvvv
                 vd`d`d`dv
                 v```7```v         vvvvv
                 vf`f'f`fv         vyyyv
                 v``6`6``v         vyyyv
                 vf`````fv         vyyyv
   vvvvvvvvvvvvvvv###S###v         vyyyv
   v..............```````v         vyyyv
   v.S...S...S...S```'```vvvvvvvvvvv###vvv@vvv
   v...'...'...'..`````````````````#www#.....v
   v.'...}.G.)...'```'``````````Gf.#www#..'..v
   v..............`````````````````#www#.....v
   vvvvvvWWvvvvvvvvvvvvvvv##########www#.....v
   vyywwwWWwwwwwwwwwwwwwwwwwwwwwwwwwwww#..'..v
 vvvy#ww#WW##########wwwwwwwwwwwwwwwwww#.'.'.v
 vyyy#yy#...........#w################w#..'..v
 vyyy#yy#......G....#w#..............#w#.....v
 vyyy#yy#...........#w#.....G........#w#.....v
 v__-#yyvvv.........#w#5.............#w#..'..v
vvvvv#yyyyvv5...WWvvvwvvvWW..........WWW..G..v
vllll-yy###vvvvvvWWWvwvWWW#########..WWW.....v
vllll_y##"""""""vvWWvwvWW##"""""""#vvvwvvvv..v
vvvvvv##"""""""""vvWvwvW##"""""""""vvvwwwwv..v
xxxxxvv"""""""""""#WWWWW#"""""""""""vvww#wv..v
    xvv"""""""""""##WWW##"""""""""""vvww#wv..v
    xv"""""""""""""#WWW#"""""""""""""vyy#wv..v
    xv>"""""O""""">#WWW#>"""""O""""">vyy#yv..v
    xv"""""""""""""#WWW#"""""""""""""vyy#y'..v
    xvv"""""""""""##WWW##"""""""""""vvyy#yY..v
    xxv"""""""""""#WWWWW#"""""""""""vyyy#yYY.v
     xvv"""""""""##Wv#vW##"""""""""##yyy#yYYYv
     xxvv"""""""##vvvyvvv##"""""""##__-_#yYYYv
      xxvvvvvvvvvvvxvyvxvvvvvvvv###__ll_#-YYYv
       xxxxxxxxxxxxxvyvxxxxxxxxvvvvvvllvvvvvvv
        xxxxxxxxxxxxvyvxxxxxxxxxxxxxvllvxxxxxx
        xxxxxxxxxxxxvyvxxxxxxxxxxxxxvllvx
        xxxxxxxxxxxxvyvxxxxxxxxxxxxxvvvvx
        xxxxxxxxxxxxvvvxxxxxxxxxxxxxxxxxx
        xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

NAME:   cheibrodos_zot_enchanting_chambers
TAGS:   no_item_gen no_monster_gen
DEPTH:  Zot
ORIENT: float
MONS:   purple draconian, nonbase purple draconian
MONS:   quicksilver dragon, killer klown
KFEAT:  B = cache_of_baked_goods
NSUBST: - = 2:1 / 2 = 112.. / 1 = 3:1 . / *:., " = 1:1 / 3 = 122. / 1 = 34 / *:.
NSUBST: ' = 2:1 / 2 = 12 / 2:3 / 1=34.. / *:., ; = 2:1 / 2 = 112.. / 1 = 3:1 . / *:.
NSUBST: _ = 1:1 / 3 = 122. / 1:34 / *:., p = 2:1 / 2=12 / 2:3 / 1:34.. / *:.
SUBST:  | = |*
FTILE:  .1234B+*|m = floor_mystic_chasm
MAP
     xxxxx xxxxx xxxxx
    xxpppxxx___xxx;;;xx`
    x|ppp.b____.b;;;;.b`
    x|ppb.+_b_b.+;b;;.+@
    x|ppp.b____.b;;;;.b`
    xxpppxxm___xxx;;;xx`
     xxxxxm..Bmxxxxxxx
  xxxxxxxmB..mxxxxx
`xx---xxx"""mxx'''xx
`b.----b.""""b.'''|x
@+.--b-+.b"b"+.b''|x
`b.----b.""""b.'''|x
`xx---xxx"""xxx'''xx
  xxxxx xxxxx xxxxx
ENDMAP

##############################################################################
# The circus has come to town

# A manic carousel. The carnie operators are in the center, behind the
# mechanicals surrounded by the ride and riders.
#
# The player either comes downstairs and finds themselves on the ride,
# or needs to fight through the crowd lined up to find the way down.
NAME:    ebering_klown_carousel
TAGS:    no_monster_gen no_trap_gen
DEPTH:   Zot, !Zot:$
ORIENT:  float
MONS:    killer klown, ancient lich / dread lich, death cob
KFEAT:   a = iron_grate
KFEAT:   ^ = trap_dispersal
NSUBST:  - = 2 / 3 = 3.. / *:.
: if (crawl.coinflip()) then
NSUBST:  > = 1 = }:80 > / 1 = ):80 > / 1 = ]:80 >, G = 4:G / *:U
SUBST:   1 = 100..
: else
NSUBST:  G = 3 = {[( / 3:G / *:U
NSUBST:  1 = 6 = 1. / *=0...
NSUBST:  > = >. / *:.
: end
NSUBST:  ^ = 4:^ / *=^..
SUBST:   a = aaax.
: coloured_glass(_G)
: vault_granite_statue_setup(_G, "G", "scintillating statue")
MAP
         ...........
       ...............
      .....vxxrxxo.....
     ....xvv1r1r1oox....
    ....bbx...^...xyx....
    ...gx1.........1xx...
......xg1^....G....^1gx...
......yx..G.......G..xb...
...V.xy......aaa......bb..
.V...xo.....a---a.....1x..
.....^.....a-->--a....ix..
......1^1G.a->---a.G1^1i..
.....^.....a-->--a....ix..
.V...xo.....a---a.....1x..
...V.xr......aaa......vv..
......rx..G.......G..xv...
......xv1^....G....^1rx...
    ...vx1.........1xr...
    ....iix...^...xoo....
     ....xbb1g1g1yyx....
      .....bxxgxxy.....
       ...............
         ...........
ENDMAP

# The three ring circus, with the player descending in mid show
NAME:    ebering_greatest_show_in_zot
TAGS:    no_monster_gen no_trap_gen
DEPTH:   Zot, !Zot:$
ORIENT:  float
SUBST:   x : x b:1
SUBST:   < = {[(
KFEAT:   ^ = trap_alarm w:5 / trap_zot / trap_harlequin w:5
KFEAT:   X = x
# The possible acts:
MONS:    red draconian scorcher, red draconian, juggernaut
MONS:    tentacled monstrosity, ancient lich, electric golem
MONS:    purple draconian
SHUFFLE: ABCDEFHI
# Fire breathers: Red draconians, with some scorchers
NSUBST:  A = 3 = 112 / 9 = 2. / *:.
# The strongman (juggernaut) and Contortionists (tentacled mons)
NSUBST:  B = 3 / 8 = 4. / *:.
# The Magic act: An Ancient Lich and elec golems
NSUBST:  C = 5 / 6 / 2 = 6. / *:.
# The Acrobats: grey draconians, with some monks, and nets
NSUBST:  D = 3 = qqp / 9 = p. / 9 = - / *:.
KMONS:   p = grey draconian
KMONS:   q = grey draconian monk
KFEAT:   - = trap_net
# The Beasts: moths and Dragons
NSUBST:  E = 3 = r. / 6 = ss. / *:.
KMONS:   r = moth of wrath / ghost moth
KMONS:   s = quicksilver dragon / storm dragon / \
             shadow dragon / iron dragon / \
             wyrmhole / golden dragon w:5
# The Freakshow: death cobs and maybe a curse toe or protean
NSUBST:  F = 8 = z. / 1 = y .:50 / *:.
KMONS:   y = curse toe
KMONS:   z = death cob / protean progenitor w:6
# The Jugglers:  draconian shifters and purple draconians
NSUBST:  H = 3 = aa7 / 9 = 7. / *:.
KMONS:   a = draconian shifter
# Those laffy daffy Klowns
NSUBST:  I = 8 = k. / *:.
KMONS:   k = killer klown
TILE:    x = wall_zot_red
TILE:    X = wall_zot_white
: vault_granite_statue_setup(_G, "G", "scintillating statue")
MAP
               xxx
             xxxlxxx
  XxxxX    XXxl...lxXX    XxxxX
 XXAAAXXxxxXl..BBB..lXxxxXXCCCXX
xxAAAAAxxxxl..BBBBB..lxxxxCCCCCxx
+AA...AA.....BB...BB.....CC...CC+
+AA.<.AAG.l..BB.<.BB..l.GCC.<.CC+
+AA...AA.....BB...BB.....CC...CC+
xxAAAAAxxxxl..BBBBB..lxxxxCCCCCxx
 XXAAAXXxxxXl..BBB..lXxxxXXCCCXX
  XxxxX    XXxl...lxXX    XxxxX
             xx+++xx
             Gx...xG
             .......
             ...V...
             .......
             ..m^m..
             ..m7m..
             @@mmm@@
ENDMAP

##############################################################################
NAME:    hangedman_player_shredder
TAGS:    transparent no_monster_gen no_item_gen no_pool_fixup
DEPTH:   Zot, !Zot:$
KMONS:   01 = ghost moth
KMONS:   23 = golden dragon
KMONS:   45 = nonbase draconian
KMONS:   67 = protean progenitor
KMONS:   89 = killer klown
KMONS:   AB = curse toe
KMONS:   CD = electric golem
KMONS:   E = orb of appropriateness
KMONS:   F = ancient lich / dread lich
KMONS:   ! = base draconian w:30 ; cloak . great sword good_item | \
             battleaxe good_item | bardiche good_item | great mace good_item / \
             storm dragon / quicksilver dragon / bone dragon w:5
KMONS:   ? = moth of wrath / death cob w:3
KITEM:   % = % / * w:2
KMONS:   H = iron dragon
SHUFFLE: abcdefghij / bacdegfhij / bcadeghfij / bcdaeghifj / bcdeaghijf, ghij, ^~
SUBST:   a = +, bcde = v, fgh = %, i = P, j = p
NSUBST:  } : 1:P / 1:p / *:%, p : 1:P / *:%
SHUFFLE: HI, PQRS|, 0246' / 1357", 0246', 1357", 02468ACE, 13579BDF
NSUBST:  P = 1:{ / 1:} / 1 : [:1 ]:1 %:16, Q = 1:{ / 1 : [:8 <:1 / 1 : (:1 %:8
NSUBST:  RS = 1:} / 1 : ]:8 >:1 / 1 : ):1 %:8
SUBST:   I = G, ~ : wv., ` : wv., ^ = ., % : %:9 .:1, % = %:499 |:1
FTILE:   .0123456789ABCDEF!?%{([})]I = floor_zot_diamonds
MAP
-------------------------
-vv---vv+vv---vv+vv---vv-
-vvv+vv.!.vv+vv.!.vv+vvv-
-vv.!.vvbvv.!.vvdvv.!.vv-
-vvvavv%g%vvcvv%i%vvevvv-
-vv%f%vv+vv%h%vv+vv%j%vv-
-vvv+vv.2.vv+vv.6.vv+vvv-
-vv.0.v...v.4.v...v.'.vv-
-vv...vv+vv...vv+vv...vv-
-vvv+vv...vv+vv...vv+vvv-
-vv...................vv-
?vv..~`^I~`^.~`^.~`^H.vv-
-vv.H^`~.^`~.^`~I^`~..vv-
-vv...................vv-
-vvv+vv...vv+vv...vv+vvv-
-vv...vv+vv...vv+vv...vv-
-vv.1.v...v.5.v...v.".vv-
-vvv+vv.3.vv+vv.7.vv+vvv-
-vv%}%vv+vv%}%vv+vv%}%vv-
-vvvvvv%}%vvvvv%}%vvvvvv-
-vv-G-vvvvv-G-vvvvv-G-vv-
------------?------------
ENDMAP

NAME:   dreamdust_zin_vs_xom
TAGS:   no_monster_gen
ORIENT: float
DEPTH:  Zot
MONS:   angel god:zin dbname:zin_angel
MONS:   killer klown / protean progenitor w:5
MONS:   chaos spawn, glowing shapeshifter
KMONS:  s = killer klown-shaped pillar of salt
KMONS:  f = butterfly
KFEAT:  _ = altar_zin
KFEAT:  O = altar_xom
KFEAT:  ^ = trap_dispersal
KFEAT:  t = demonic_tree
NSUBST: - = 4=s / 4=s- / -
NSUBST: ? = O / 2=^ / 2=2 / 2=2? / 2:tG / ?
SUBST:  ? = ":400 n:30 x:40 v b ^
SUBST:  " = .:200 W:100 O:30 f 3 4 T U V Y
COLOUR: v = white
FTILE:  _`1 = floor_w_marble
TILE:   v = dngn_metal_wall_white
: vault_granite_statue_setup(_G, "G", "scintillating statue")
: vault_metal_statue_setup(_G, "g", "silver statue")
MAP
xxxxxxxxx@xxxxxxxxx
x........."?"?"?"?x
x.......---"?"?"?"x
xvvvvng.---?"?"?"?x
xv`1`vv.---"?"?"?"x
xv_`1`1.---?"?"?"?x
xv`1`vv.---"?"?"?"x
xvvvvng.---?"?"?"?x
x.......---"?"?"?"x
x........."?"?"?"?x
xxxxxxxxx@xxxxxxxxx
ENDMAP

##############################################################################
# some more fun and exciting stair vaults

NAME:   hellmonk_body_bag
TAGS:   no_monster_gen transparent
DEPTH:  Zot, !Zot:$
MONS:   toenail golem w:1 / glowing orange brain / golden eye band
MONS:   shining eye / glass eye w:5, bone dragon, curse toe / curse skull
SUBST:  ' = c., V:VYY
NSUBST: - = 6 = 1.. / 12 = 2... / 8 = 3... / 8 = 4... / .
NSUBST:  > = 1 = ):80 . / 1 = ]:80 . / 1 = }:80 >
FTILE:  .1234VY})]>+ = floor_zot_diamonds
MAP
  ccccccc
 ccc>>>ccc
 cc-----cc
 c'--c--'c
 c-'-c-'-c
cc--ccc--cc
c----c----c
c--c-'-c--c
c'cc'V'cc'c
c--c-'-c--c
c-'--c--'-c
c---ccc---c
c--'-c-'--c
c-'--'--'-c
cc-ccccc-cc
 c--ccc--c
 c..ccc..c
 c.'.c.'.c
 c'..c..'c
 c...c...c
 cc.....cc
 cc.....cc
  ccc+ccc
     @
ENDMAP

NAME:   hellmonk_formless_pools
TAGS:   no_monster_gen transparent no_pool_fixup
DEPTH:  Zot, !Zot:$
MONS:   protean progenitor
MONS:   glowing shapeshifter hd:20 / glowing shapeshifter hd:18
KFEAT:  T = fountain_eyes
SUBST:  - : Ac, A : lw
NSUBST: ' = 2:1 / 3:2 / 2 = 1... / 8 = 2... / *:.
NSUBST: < = 1 = }. / 1 = ). / 1 = ]<
FTILE:  .12T})]<G = floor_zot_diamonds
TILE:   G = dngn_statue_depths_zot_tentacles
MAP
   @@@@@
 cc+++++cc
 cG..-..Gc
 c...-...c
 cT..-..Tc
 c'''''''c
cc''''''Gc
cG''ccccccc
cA'ccc'<'ccc
cA'cG''G''Gc
cA'cc<'''<cc
cG''ccc''cc
cc'''''''c
 ccGAAAGcc
  ccccccc
ENDMAP

NAME:   hellmonk_crystal_mountain
TAGS:   transparent ruin
ORIENT: north
DEPTH:  Zot, !Zot:$
MONS:   lich, ancient lich / dread lich
NSUBST: . = 4 = 2. / 16 = 1... / 12 = 8... / 12 = 0...
NSUBST:  < = 1 = {([. / 1 = )}].
: vault_granite_statue_setup(_G, "G", "gravestone")
MAP
bbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbb
bb.......bbb.......bb
b......<.bbb.<......b
b..bbb...bbb...bbb..b
b.bbbbbbbbbbbbbbbbb.b
b..bbb...bbb...bbb..b
b......G..b..G......b
bb........b........bb
bbbb..bbb.b.bbb..bbbb
 bbb.bbbbbbbbbbb.bbb
  bb..bbb.b.bbb..bb
  bb......b......bb
   bb.....b.....bb
   bbbb..bbb..bbbb
    bbb..bbb..bbb
     bb..bbb..bb
     bb...b...bb
      bb.....bb
      bbbb.bbbb
       bb@@@bb
ENDMAP

NAME:    hellmonk_zot_clocked
TAGS:    no_monster_gen no_exits
DEPTH:   Zot:2-, !Zot:$
WEIGHT:  5
MONS:    death cob, iron dragon
KFEAT:   B = altar_cheibriados
SHUFFLE: Dd / Ee / Ff / Hh
SUBST:   D = v, d = )}], EeFfHh = ., < = ({[
NSUBST:  '  = 1:1 / 1:2 / 16 = 1... / 16 = 2..... / *:.
NSUBST:  - = 1 = B:1 G:26 / *:G
FTILE:   .12{([})]+Gn = floor_zot_diamonds
TILE:    G = dngn_statue_snail
MAP
      ccccc
    ccc'-'ccc
   cc-'''''-cc
  cchH''n''''cc
 cc''HH'n''''dcc
 c-'''Hcnc''DD-c
cc''''ccnccDD''cc
c''''ccHnDcc''''c
c-FFF+FF<..+'''-c
cf'''cc..Ecc''''c
cc''''cc.cc''''cc
 c-''''c+cE'''-c
 cc'''''''EE''cc
  cc'''''''Eecc
   cc-'''''-cc
    ccc'-'ccc
      ccccc
ENDMAP

NAME:   hellmonk_greenhouse_of_terror
TAGS:   no_monster_gen no_descent
WEIGHT: 25
DEPTH:  Zot:2-, !Zot:$
MONS:   orb of fire, bush
NSUBST: . = 1:1 / .
SUBST:  > = )}], < = ({[
: decorative_floor(_G, 'p', "garden patch")
veto {{
  return dgn.zot_orb_type() ~= "orb of fire"
}}
MAP
  ttttt
  t.>.t
  t.t.t
 tt.t.tt
tt..t..tt
t..ptp..t
t.tt2tt.t
t..ptp..t
tt..t..tt
 tt.t.tt
  t.t.t
  t.<.t
  ttttt
ENDMAP

NAME:   hellmonk_zupermarket
TAGS:   no_monster_gen no_descent
DEPTH:  Zot:2-4
WEIGHT: 5
MONS:   death cob, nonbase draconian
SHUFFLE: -"'1
SUBST:  - = ---., " = """., ' = '''., 1 = 1., T = TccV
SUBST:  > = )}], < = ({[
SUBST:  c:xc
NSUBST: 2 = 1:2 / 2...
KFEAT:  - = cache_of_baked_goods
KFEAT:  " = cache_of_fruit
KFEAT:  ' = cache_of_meat
FTILE:  .'"-T12{([})] = floor_zot_diamonds
MAP
  ccccc
 cc...cc
cc..>..cc
c.......c
cc.ccc.cc
c-.-c"."c
c-2-c"2"c
c-.-c"."c
cc.cTc.cc
c'.'c1.1c
c'2'c121c
c'.'c1.1c
cc.ccc.cc
c.2...2.c
cc..<..cc
 cc...cc
  ccccc
ENDMAP

##############################################################################

NAME:    regret_index_zot_pan_timeshare
TAGS:    no_monster_gen patrolling transparent
DEPTH:   Zot, !Zot:$
ORIENT:  float
MONS:    glass eye, protean progenitor, blizzard demon
MONS:    draconian annihilator, balrug, draconian scorcher, executioner
KMONS:   8 = curse toe
NSUBST:  1 = 2:1 / 2:2 / 1 = 112. / *:.,  3 = 3:3 / 2:4 / 4 = 334. / *:.
NSUBST:  5 = 2:5 / 2:6 / 4 = 556. / *:., 7 = 1:7 / 1:8 / 3 = 7.. / 2 = 8.. / *:.
SHUFFLE: {([}
SUBST:   ( = (:40 U, [ = [:40 Y
SUBST:   a = b.., d = c.., u = v.., y = x..
# fudged a bunch for Lom, admittedly.
TILE:    V = dngn_metal_steel_blood
TILE:    B = wall_crystal_bookcase
TILE:    b = dngn_crystal_white
TILE:    X = wall_hall_darkgray
TILE:    C = stone_wall_flesh_cage
SUBST:   V = v, X = x, B = b, C = c
MAP
        .........      ..............
      ............    ....a..b..bbbb..b
     c...ccccc.c...  .bbb...bbbbb33bbbbb
    ccc...ccc........bb....bbb3......%bbb
   ccccc...c..cc.....bb.....b3........%b.
  cccc.....d...cc.....bb....b..........b..
 ..cc..ccc.....1cc.....bb..bb..........bb.
 ...c.ccc...cc..1cc.....b..+.....BB....3b.
......cc...cc1...1cc....b..+.....BB....3b.
..c...c...cc..1cc..c...bb..bb...(......bb.
..cc.....cc...Cc......bb...3b..........b..
..cccd..cc.{.Cc..d...bb..a..b.........3b..
..cc...cc...cc..c..c.bb.....bb.......3bbb.
..c....c1..Cccc%..cc..bb....3bbbb..bbbbb..
....c....1Cc.ccc.cc......bb3...3b++b..b...
..c.cc1..cc..%cccc......bbbb............a.
.....cc1.c..c..cc.......bbbb..a...........
......cc1..d..cc...c.....bb.....bbbb...b..
 ......cc....cc...cc..bb....b..bb..bb..b..
   .....cc..cc...ccc..bb....bbbb....bbbb.
   ..........................bb......bb.
  ......vvvv...........................
 ....vvvv5.vvvv.......y.x.x.x.x.x.x.x.x.
.vv+vv.....5..vvvvv......x.x.x.x.x.x.x...
 v...v.u......v5.%v...x.................x.
 v%.5+...v....+...v....x.xx+++xxxxxxxx.x..
 v...v...v....v..5v...x..x.7.....7xxxx..x.
.vv+vv...v....vv+vvv...x.+7...y....xxx.x..
.........vv........v..x..+..7x.x...%xx..x.
.......u.5VV[......v...x.+..x7X..x..7x.x..
vv.........vV.....5vv.x..x.y.X.X.x.x.x..x.
v...vvv5....Vv......v..x.x..x.X}.xx7xx.x..
v.....vv....5vvvv..5v.x..x......xx.x.x..x.
vv.....vv..........vv..x.x7..xxxxx...+.x..
v.......vv5.u....u.v..x..xx....x.....+..x.
v........vv........v...x.xxx%.x7x..y.+.x..
vvv+vv....v...vv+vvv..x..xxxx7.x.....x..x.
 v...v....v...v.5.v....x.xxxxxxxx+++xx.x.
 v...+........+...+...x.................x
 v%..v........v.%.v.. ...x.x.x.x.x.x.x.
 vvvvv..v..v..vvvvv.   .x.x.x.x.x.x.x.x
     vvvvvvv...   .      ............
ENDMAP

NAME:    chapayev_index_zotdef_columnade
TAGS:    no_monster_gen no_rotate no_pool_fixup
ORIENT:  south
DEPTH:   Zot, !Zot:$
MONS:    0 band
MONS:    red draconian / will-o-the-wisp w:2
MONS:    red draconian scorcher, golden dragon
MONS:    white draconian / blizzard demon w:2
MONS:    white draconian knight, golden dragon
KMONS:   8 = black draconian / spark wasp w:2
KMONS:   9 = black draconian stormcaller
KMONS:   0 = electric golem / storm dragon
KMONS:   A = green draconian / green death w:2
KMONS:   B = green draconian monk
KMONS:   C = protean progenitor band
KMONS:   d = purple draconian / ghost moth w:4
KMONS:   e = purple draconian shifter / wyrmhole w:2
KMONS:   f = quicksilver dragon
KMONS:   g = death cob / storm dragon zombie w:4
KMONS:   h = shadow dragon
KMONS:   i = curse toe / ancient lich w:2
KMONS:   ? = orb of fire
KMONS:   ! = orb of winter
KMONS:   & = orb of entropy
KMONS:   z = 0 band
KMONS:   W = withered plant
KFEAT:   jk = m
KFEAT:   s = metal_statue
NSUBST:  D = 1:< / 2:x. / *:x, . = 3:1 / *:.
SHUFFLE: 234j / 567k / 890s / ABCW / defU / ghiG
SUBST:   j : jjl, k : kkw
SHUFFLE: 369Beh / 369Beh / 369Beh / heB963 / Beh369, HIJKLMNO, }])
SUBST:   HIJ = x, K : x., L : x., MNO = ., } = }:70, ] = ]:40 >
MARKER:  U = lua:fog_machine { cloud_type = "purple smoke", \
                               pow_min = 4, pow_max = 5, \
                               delay_min = 85, delay_max = 95, size = 1, \
                               walk_dist = 1, spread_rate = 10 }
COLOUR:  s = electricity
TILE:    j = dngn_transparent_wall_red
TILE:    k = dngn_transparent_wall_blue
TILE:    m = dngn_transparent_wall_magenta
: vault_granite_statue_setup(_G, "G", "gravestone")
: if crawl.coinflip() then
:   vault_metal_statue_setup(_G, "s", "storm conduit")
: else
:   vault_metal_statue_setup(_G, "s", "nascence circuit")
: end
: if dgn.zot_orb_type() == "orb of fire" then
SUBST:   4 = 3?
: elseif dgn.zot_orb_type() == "orb of winter" then
SUBST:   7 = 6!
: elseif dgn.zot_orb_type() == "orb of entropy" then
SUBST:   i = i&
: end
MAP
                         xccccccccccccccx
                 xxccccccccsccWcccWcckccccccccxx
xc@.@xxxxxxxccccccccjccsc%.............%ckccjccccccccxxxxxxx@.@cx
xc...xxxxxxxb.....+.............).............+.....bxxxxxxx...cx
xc..1.......+..b..+......xx...........xx......+..b..+.......1..cx
xc>.........b.....+.....xxx...........xxx.....+.....b.........>cx
xcccxxxx....xxxxxxc...cxxxx...x...x...xxxxc...cxxxxxx....xxxxcccx
xxxcxxxx....xxxxxxc..Hcxxxx...........xxxxc.O.cxxxxxx....xxxxcxxx
  xc%..........%mmcH..cxxxj...x...x...jxxxc...cmm%..........%cx
  xc..x......xk.ccc...cxxxx.3.......3.xxxxc...ccc.sx......x..cx
  xc............mmc.I.cxxxj...x...x...jxxxc.N.cmm............cx
  xc.kx......x..ccc...cxxxx2....2....2xxxxc...ccc..x......xs.cx
  xc..5..xx7.5...mc...cxxxx...x...x...xxxxc..Mcm...8.0xx..8..cx
  xc..x......xk.ccc.J.cxxxx%....4....%xxxxcM..ccc.sx......x..cx
  xc.6........6.mmc...cxxxxxxxb+++bxxxxxxxc...cmm.9........9.cx
  xc.kx......x..ccc.K.cxxxxxxx.....xxxxxxxc.L.ccc..x......xs.cx
  xc%..........%mmc...cxxxxxxx..x..xxxxxxxc...cmm%..........%cx
  xccccc....xxxxxxc..Kcxxxxxxx..D..xxxxxxxc...cxxxxxx....cccccx
  xxxxxc.}..xxxxxxcK5.cxxxxxxx..D..xxxxxxxcK8Kcxxxxxx..].cxxxxx
    xxxc....xxxxxxc...cxxxxxxx..D..xxxxxxxc...cxxxxxx....cxxx
    xxcc.O...N......L.ccxxxxxx..D..xxxxxxcc......I.......ccxx
    xcc......N.5.M.....ccxxxxx..D..xxxxxcc.....J.8.H......ccx
    xc..O........M...L..ccxxx...x...xxxcc...............x..cx
    xc....cccc++cccc.....ccx...xxx...xcc.....cccc++cccc....cx
    xc<..ccxxc++cxxcc+++++c...x.x.x...c+++++ccxxc++cxxcc..<cx
    xcccccxxxc$$cxxxccc......xB%A%Bx......cccxxxc$$cxxxcccccx
    xxxxxxxxxc$$cxxxxxcc..A.W.%.C.%.W.A..ccxxxxxc$$cxxxxxxxxx
    xxxxxxxxxccccxxxxxxcccccccccccccccccccxxxxxxccccxxxxxxxxx
           xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

NAME:   tekkud_klown_kollege
TAGS:   no_monster_gen
DEPTH:  Zot, !Zot:$
WEIGHT: 3
KMONS:  1 = killer klown
KMONS:  2 = protean progenitor w:14 / juggernaut / draconian monk /\
            draconian knight / death cob / executioner w:6
# XXX: Very awkward to see the rewards without knowledge of ctrl-x.
KITEM:  1 = | no_pickup / any weapon ego:chaos good_item no_pickup w:5
KITEM:  2 = orb no_pickup / orb randart no_pickup w:5
KFEAT:  ^ = trap_harlequin
KFEAT:  ~ = trap_tyrant
NSUBST: ~ = 4:^ / 4=^~~` / *:`, 1 = 2:1 / * = 12
SUBST:  g = g-, G = GGg-
KPROP:  '`-*12^~QRgG = no_tele_into
KMASK:  '`*12^~QRgG = opaque
FTILE:  -gGPQRS = floor_zot_diamonds
TILE:   n = dngn_transparent_stone_magenta
MARKER: P = lua:transp_loc("kollege_entry")
MARKER: Q = lua:transp_dest_loc("kollege_entry")
MARKER: R = lua:transp_loc("kollege_exit")
MARKER: S = lua:transp_dest_loc("kollege_exit")
: vault_metal_statue_setup(_G, "g", "misfortune conduit")
MAP
..............
.GnnnnnnnnnnS.
.nn`~g~~g~`nn.
.n`g~~^~~~g`n.
.n~~Gm==mG~~n.
.ng~mm12mm~gn.
.n~^=12R2=~~n.
.n~~=2*21=^~n.
.ng~mm21mm~gn.
.n~~Gm==mG~~n.
.n`Q~~~^~~g`n.
.nn`~g~~g~`nn.
.PnnnnnnnnnnG.
@.............
ENDMAP

##############################################################################
##############################################################################
#
# <<4>> hall_of_Zot_5
#
##############################################################################
##############################################################################

NAME:    hall_of_Zot
TAGS:    no_dump no_trap_gen patrolling
PLACE:   Zot:$
ORIENT:  north
MONS:    orb guardian, boundless tesseract
MONS:    electric golem, killer klown, ancient lich / dread lich
MONS:    orb of appropriateness
KITEM:   R = prismatic gem
KITEM:   Z = Orb of Zot
KFEAT:   Z = orb dais
# Traps to spread throughout the vault. Fewer alarm traps as those have a big
# effect on the vault as a whole.
KFEAT:   ~ = trap_zot / trap_dispersal / trap_teleport_permanent / trap_net \
             / trap_alarm w:5
# Flat distribution of traps for specific sections.
KFEAT:   ^ = trap_zot / trap_dispersal / trap_teleport_permanent / trap_alarm \
             / trap_net
# Weaker trap lua for replacing the old rare double-trapped entrances option.
{{
local weaker_t = { { t = "trap_tyrant", weight = 12 },
                   { t = "trap_harlequin w:7", weight = 10 },
                   { t = "trap_archmage", weight = 7 },
                   { t = "trap_devourer w:5", weight = 5}, }
local t_choice_a = util.random_weighted_from("weight", weaker_t)
local t_choice_b = t_choice_a
while t_choice_a == t_choice_b do
  t_choice_b = util.random_weighted_from("weight", weaker_t)
end
}}
KMASK:   ^~ = no_item_gen
SHUFFLE: DdOo / HhPp
# As a replacement to the small chance of both wing entrances being covered in
# traps, cover up one and use weaker traps along the full path of the other.
: if crawl.one_chance_in(4) then
NSUBST:  H = 1:^ / * = ^'
SUBST:   D = '
:   kfeat("oO = " .. t_choice_a.t .. " / " .. t_choice_b.t)
: else
SUBST:   D = ^'', O = d, o = '
: end
SUBST:   P = h, Hp = '
# Place a minimum number of traps and some extra liches in each lower wing.
NSUBST:  d = 2=5. / 4=~ / ., h = 2=5. / 4=~ / .
# In each upper wing, place a few monsters along with locations for the main
# monster set on '?'. Use more central areas in the upper wings to do this.
# Both boundless tesseracts are placed in fixed positions right by the upper
# wing entrances, replacing old chances to place monster statues or traps there.
NSUBST:  f = 3 / 4 / 6 / 9 = ? .:8 / e, k = 3 / 4 / 6 / 9 = ? .:8 / j
# Minimum number of traps in each upper wing.
NSUBST:  e = 4=~ / ., j = 4=~ / .
# Each upper wing has equal chance to get one of three sets that most heavily
# weight specific monsters: killer klown, ancient / dread lich, or orbs.
SUBST:   ? : KLM
SUBST:   K = 0 4:40 5 6 ., L = 0 4 5:40 6 ., M = 0 4 5 6:40 .
# Make a final sprinkling of traps throughout the vault.
SUBST:   . = ~ .:600, ' = .
# For upper-wing entrances, sometimes put statue monsters, traps, or statues.
SUBST:   E = 2 ^:20 G .:80, J = 2 ^:20 G .:80
# For the orb chamber, some guaranteed and random traps. About 4 on-average.
NSUBST:  - = 2=^ / * = ^ .:240
# Colours
COLOUR:     cX = lightmagenta
TILE:       c = stone_wall_zot_last
LFLOORCOL:  magenta
LROCKCOL:   lightmagenta
LFLOORTILE: floor_rough_magenta
LROCKTILE:  wall_zot_lightmagenta
validate {{ return has_exit_from_glyph('Z') }}
MAP
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXeeeeeeeeeeeeeXXXXXXXXXXXXXXXXXXXXXXXXXjjjjjjjjjjjjjXXXXXXXXXXXXXX
XXXXXXXXXXXXeeeeeeeeeeeeeeeeeeeXXXXXXXXXXXXXXXXXXXjjjjjjjjjjjjjjjjjjjXXXXXXXXXXX
XXXXXXXXXXXeeeeeeeeeeeeeeeeeeeeeeXXXXXXXXXXXXXXXjjjjjjjjjjjjjjjjjjjjjjXXXXXXXXXX
XXXXXXXXXXeeeeeeeeeeeeeeeeeeeeeeeeXXXXXXXXXXXXXjjjjjjjjjjjjjjjjjjjjjjjjXXXXXXXXX
XXXXXXXXXXeeeeeeefffffffffffffeeeeXXX---1---XXXjjjjkkkkkkkkkkkkkjjjjjjjXXXXXXXXX
XXXXXXXXXXXeeeeeefffffffffffffeeeeXX--1---1--XXjjjjkkkkkkkkkkkkkjjjjjjXXXXXXXXXX
XXXXXXXXXXXXeeeeefffffffffffffeeeeX1---------1XjjjjkkkkkkkkkkkkkjjjjjXXXXXXXXXXX
XXXXXXXXXXXXXeeeefffffffffffffeeeee--1--Z--1--jjjjjkkkkkkkkkkkkkjjjjXXXXXXXXXXXX
XXXXXXXXXXXXeeeeefffffffffffffeeeeX1---------1XjjjjkkkkkkkkkkkkkjjjjjXXXXXXXXXXX
XXXXXXXXXXXeeeeeefffffffffffffeeeeXX--1---1--XXjjjjkkkkkkkkkkkkkjjjjjjXXXXXXXXXX
XXXXXXXXXXeeeeeeefffffffffffffeeeeXXX---1---XXXjjjjkkkkkkkkkkkkkjjjjjjjXXXXXXXXX
XXXXXXXXXXeeeeeeefffffffffffffeeeecXXXXXXXXXXXcjjjjkkkkkkkkkkkkkjjjjjjjXXXXXXXXX
XXXXXXXXXXXeeeeeeeeeeeeeeeeeeeeeecccccccccccccccjjjjjjjjjjjjjjjjjjjjjjXXXXXXXXXX
XXXXXXXXXXXXeeeeeeeeeeeeeeeeeeeXcccccccccccccccccXjjjjjjjjjjjjjjjjjjjXXXXXXXXXXX
XXXXXXXXXXXXXeeeeee2eeeeeeeeXXXXcccccccccccccccccXXXXjjjjjjjj2jjjjjjXXXXXXXXXXXX
XXXXXXXXXXXXXX.111.ccXXXXXXXXXXXcccccccccccccccccXXXXXXXXXXXcc.111.XXXXXXXXXXXXX
XXXXXXXXXXXccddddddGdddddddODDo1ccccccccccccccccc1pHHPhhhhhhhGhhhhhhccXXXXXXXXXX
XXXXXXXXXXccddddddddddddddd.cc1...ccccccccccccc...1cc.hhhhhhhhhhhhhhhccXXXXXXXXX
XXXXXXXXXccddddddddddddddddddccc...ccccccccccc...ccchhhhhhhhhhhhhhhhhhccXXXXXXXX
XXXXXXXXXcddddddddddddddddddddccc.1.....1.....1.ccchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXcddddddddddddddddddddcXcc......R......ccXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXcddddddddddddddddddddcXXc.............cXXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXcddddddddddddddddddddcXXcc...........ccXXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXcddddddddddddddddddddcXXXc...........cXXXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXcddddddddddddddddddddcXXcc...........ccXXchhhhhhhhhhhhhhhhhhhhcXXXXXXXX
XXXXXXXXXccddddddddddddddddddccXXc.............cXXcchhhhhhhhhhhhhhhhhhccXXXXXXXX
XXXXXXXXXXccddddddddddddddddccXXcc.............ccXXcchhhhhhhhhhhhhhhhccXXXXXXXXX
XXXXXXXXXXXccddddddddddddddccXXXcp.............ocXXXcchhhhhhhhhhhhhhccXXXXXXXXXX
XXXXXXXXXXXXccccccccccccccccXXXXcccccccc@ccccccccXXXXccccccccccccccccXXXXXXXXXXX
ENDMAP

# There's few vaults on Zot:5, tone down their chances.
NAME: dummy_balancer_zot
TAGS: dummy
DEPTH: Zot:$
ORIENT: float
WEIGHT: 60
MAP
x
ENDMAP

##############################################################################
##############################################################################
#
# <<5> Colouring the walls and floors of each floor
#
##############################################################################
##############################################################################

NAME:       hall_of_Zot_1
TAGS:       extra transparent allow_dup no_dump
DEPTH:      Zot:1
CHANCE:     100%
LFLOORCOL:  lightgrey
LROCKCOL:   white
LFLOORTILE: floor_rough_lightgray
LROCKTILE:  wall_zot_white
MAP
.
ENDMAP

NAME:       hall_of_Zot_2
TAGS:       extra transparent allow_dup no_dump
DEPTH:      Zot:2
CHANCE:     100%
LFLOORCOL:  white
LROCKCOL:   blue
LFLOORTILE: floor_rough_white
LROCKTILE:  wall_zot_blue
MAP
.
ENDMAP

NAME:       hall_of_Zot_3
TAGS:       extra transparent allow_dup no_dump
DEPTH:      Zot:3
CHANCE:     100%
LFLOORCOL:  blue
LROCKCOL:   lightblue
LFLOORTILE: floor_rough_blue
LROCKTILE:  wall_zot_lightblue
MAP
.
ENDMAP

NAME:       hall_of_Zot_4
TAGS:       extra transparent allow_dup no_dump
DEPTH:      Zot:4
CHANCE:     100%
LFLOORCOL:  lightblue
LROCKCOL:   magenta
LFLOORTILE: floor_rough_lightblue
LROCKTILE:  wall_zot_magenta
MAP
.
ENDMAP
