##############################################################################
# pan.des: Minivaults particular to Pan, and the lairs of the Pan Demon Lords
#
# Contents:
#   Pan inline functions
#   Entry portals to Pan
#   Panlord vaults: Mnoleg, Lom Lobon, Cerebov, Gloorx Vloq.
#   Lesser demon vaults: repeating rune vaults.
#   Lesser demon vaults: standalone vault.
#
##############################################################################


##############################################################################
# Pan lua functions
###############################################################################

# The generic pan lord warning message.

{{
function pan_lord_epilogue(name)
    local msgs = {
        Mnoleg = "The air here is shimmering with an eerie glow.",
        ['Lom Lobon'] = "You sense a powerful magical presence. It is not pleased.",
        Cerebov = "Searing heat pours from the floors and walls of this place.",
        ['Gloorx Vloq'] = "Shadowy figures dance across your vision."
    }

    crawl.mpr(msgs[name])
    crawl.mpr("You feel a terrible weight on your shoulders! A mighty lord of Pandemonium must reside here.", "warning")
    crawl.take_note('Entered the realm of ' .. name .. '.')
    crawl.mark_milestone('br.enter', 'entered the realm of ' .. name .. '.', "")
end

function pan_lord_setup(_G, name)
    -- Set level monsters.
    -- needs exactly 10 monsters, weights are not supported yet
    local monsters = {
        Mnoleg = "small abomination / small abomination / large abomination / " ..
                 "large abomination / neqoxec / neqoxec / cacodemon / " ..
                 "cacodemon / chaos spawn / chaos spawn",
        ['Lom Lobon'] = "hellwing / smoke demon / smoke demon / sixfirhy / " ..
                 "Green Death / blizzard demon / smoke demon / hellwing / " ..
                 "Green Death / hellwing",
        Cerebov = "efreet / efreet / orange demon / orange demon / " ..
                 "sun demon / sun demon / ynoxinul / ynoxinul / balrug / balrug",
        ['Gloorx Vloq'] = "small skeleton / small skeleton / large skeleton / " ..
                 "large skeleton / soul eater / soul eater / lorocyproca / " ..
                 "executioner / executioner / executioner"
    }

    _G.set_random_mon_list(monsters[name])

    -- Set level colours / tiles, and the rune.
    if name == "Mnoleg" then
        _G.lfloorcol("lightred")
        _G.lrockcol("yellow")
        _G.lfloortile("floor_nerves")
        _G.lrocktile("wall_zot_yellow")
        _G.kitem("O = glowing rune of Zot")
    elseif name == "Lom Lobon" then
        _G.lfloorcol("lightgrey")
        _G.lrockcol("white")
        _G.lfloortile("floor_rough_lightgray")
        _G.lrocktile("wall_hall_white")
        _G.kitem("O = magical rune of Zot")
    elseif name == "Cerebov" then
        _G.lfloorcol("red")
        _G.lrockcol("red")
        _G.lfloortile("floor_volcanic")
        _G.lrocktile("wall_zot_red")
        _G.kitem("O = fiery rune of Zot")
    elseif name == "Gloorx Vloq" then
        _G.lfloorcol("blue")
        _G.lrockcol("blue")
        _G.lfloortile("floor_grey_dirt")
        _G.lrocktile("wall_hall_darkgray")
        _G.kitem("O = dark rune of Zot")
    end
end

colours = {
    "magenta", "blue", "cyan", "green",
    "brown", "red", "lightgrey"
}
brightcolours = {
    "lightmagenta", "lightblue", "lightcyan", "lightgreen",
    "yellow", "lightred", "white"
}

disco_choices = {
    function (x, y, ballx, bally, turn, rand)
        local index = ((x + turn) % #colours) + 1
        if rand > 60 then
            return colours[index]
        else
            return brightcolours[index]
        end
    end,
    function (x, y, ballx, bally, turn, rand)
        local index = ((y + turn) % #colours) + 1
        if rand > 60 then
            return colours[index]
        else
            return brightcolours[index]
        end
    end,
    function (x, y, ballx, bally, turn, rand)
        local angle = math.atan2(y - bally, x - ballx)
        local segment = (math.floor(angle / (2 * math.pi) * (2 * #colours)) + 2 * #colours) % (2 * #colours)
        local index = (math.floor((segment + turn) / 2) % #colours) + 1
        if rand > 60 then
            return colours[index]
        else
            return brightcolours[index]
        end
    end,
    function (x, y, ballx, bally, turn, rand)
        local distance = math.floor(math.sqrt((x - ballx)^2 + (y - bally)^2))
        local index = ((distance + turn) % #colours) + 1
        if rand > 60 then
            return colours[index]
        else
            return brightcolours[index]
        end
    end
}

colour.add_colour("disco", function(rand, x, y)
    local vault = dgn.vault_at(x, y)
    local ballx = 0
    local bally = 0
    if vault then
        local ul = vault:pos()
        local ulx, uly = ul:xy()
        x, y = x - ulx, y - uly

        local map = vault:map()
        local bx, by = dgn.gly_point(map, "D")
        if bx ~= nil then
            ballx = bx
            bally = by
        end
    end

    local cycle = disco_choices[math.floor((you.turns() % (16 * #disco_choices)) / 16) + 1]
    return cycle(x, y, ballx, bally, you.turns() % 16, rand)
end)

function pan_demonic_rune(e, glyph, place_lord)
    e.subst(glyph .. ' = ' .. (place_lord and glyph or '.') .. ':6 O:1 N:2')
    e.kitem('O = demonic rune of Zot')
    e.kfeat('N = exit_pandemonium')
    if place_lord then
        e.kmons(glyph .. 'ON = pandemonium lord')
    end
end

}}


##############################################################################
# Entry portals to Pan
##############################################################################

# 25% chance to appear on D:21-27, and guaranteed on D:24.
NAME: pan_entry
TAGS: extra allow_dup can_overwrite replace_portal
DEPTH: D:21-27
CHANCE: 100% (D:24), 25%
: if you.where() == 'D:24' then
KFEAT: O = enter_pandemonium no_mimic
: else
KFEAT: O = enter_pandemonium
: end
MAP
O
ENDMAP


##############################################################################
# Random unguarded exits
##############################################################################
NAME:   pan_exit
TAGS:   extra allow_dup transparent no_dump
DEPTH:  Pan
CHANCE: 5%
KFEAT:  O = exit_pandemonium
MAP
O
ENDMAP

NAME:   pan_to_abyss
TAGS:   extra allow_dup transparent no_dump
DEPTH:  Pan
CHANCE: 25%
KFEAT:  O = exit_through_abyss
MAP
O
ENDMAP


##############################################################################
# Pan Demon Lairs
#
# NOTE: The pandemonium lord levels are requested by tag; if you change the
# tag, also update dungeon.cc.
#
# You can define alternate levels for a pandemonium lord by using the same
# TAGS: and a different NAME:
##############################################################################

###########################################################################
# Mnoleg
#
NAME:      mnoleg
ORIENT:    northeast
TAGS:      mnoleg uniq_mnoleg
: pan_lord_setup(_G, 'Mnoleg')
TILE:      c = dngn_stone_wall_yellow
MONS:      patrolling Mnoleg, neqoxec
epilogue{{
  pan_lord_epilogue('Mnoleg')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x.................2............xxxx
x.....2........................xxxx
x..cccccccc...ccccccc..ccccccc.xxxx
x..ccccccccc.2.ccccccc..cccccc.xxxx
x..cccccccccc...ccccccc..ccccc.xxxx
x..ccccccccccc.1.ccccccc..cccc.xxxx
x2.cccccccccc.2..Occccccc2.ccc.xxxx
x..ccccccccc.....ccccccccc..cc.xxxx
x..cccccccc...c...ccccccccc..c.xxxx
x..ccccccc...ccc...ccccccccc...xxxx
x..cccccc...ccccc...ccccccccc..xxxx
x..ccccc...ccccccc...ccccccccc.xxxx
x..cccc...ccccccccc...ccccccc..xxxx
x..ccc.2.ccccccccccc.2.ccccc...xxxx
x..cc.....ccccccccccc...ccc....xxxx
x..c...c...ccccccccccc...c.2...xxxx
x.....ccc.2.ccccccccccc......c.xxxx
x....ccccc...ccccccccccc....cc.xxxx
x.2.ccccccc...ccccccccccc..ccc.xxxx
x.................2.......cccc.xxxx
x...c..ccccccc.ccccccc...ccccc.xxxx
x..ccc......2c.c2cccc...cccccc.xxxx
x.ccccc..ccc.c.c2ccc.2.ccccccc.xxxx
x.cccccc..cc.c.c.cc...cccccccc.xxxx
x.ccccccc..c.c.c.c...ccccccccc.xxxx
x.cccccccc...c.c....cccccccccc.xxxx
x.ccccccccc..c.c...ccccccccccc.xxxx
x..............................xxxx
xxxxxxxxxxxxxx@xxxxxxxxxxxxxxxxxxxx
ENDMAP

NAME:      mnoleg_st
ORIENT:    southwest
TAGS:      mnoleg uniq_mnoleg
: pan_lord_setup(_G, 'Mnoleg')
TILE:      c = dngn_stone_wall_yellow
MONS:      patrolling Mnoleg, neqoxec
MONS:      patrolling cacodemon, patrolling tormentor
MONS:      large abomination, tentacled monstrosity
KMONS:     w = brain worm
KMONS:     u = very ugly thing
KMONS:     U = ugly thing
NSUBST:    q = 2:u / *:.
NSUBST:    e = 2:u / *:.
NSUBST:    p = 3:u / *:.
epilogue{{
  pan_lord_epilogue('Mnoleg')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxx@xxxxxxxx
xc...........................cx
xc..ccccccc..c..c.c.c.c.c.c.ccx
xc...ccccc..ccc..c.........c.cx
xc.c2.ccc.2ccccc..c.2.2.2.c..cx
xc.cc..c..ccccccc..c.w.w.c...cx
xc.ccc...ccccccccc..c.w.c..c.cx
xc.cccc...ccccccccc..c.c..cc.cx
xc.cc.cc...ccccccccc..c..ccc.cx
xc.ccqqcc...ccccccccc...cccc.cx
xc.ccqqqcc...ccccccccc.ccccc.cx
xc.ccqqq..c...ccccc..ccccccc.cx
xc.ccqq...cc...ccc....c...c..cx
xc2cc......cc...c...cc.....cccx
xc.ccU......cc..2..cc...5...ccx
xc..cc....eeecc...ccc..565..ccx
xc...ccU.eeecc...ccccc..5..cccx
xcc...cceeecc...cc..ccc...ccccx
xccc...ccecc...cc....cccccccccx
xc.cc...ccc...cc......ccccccccx
xcp.cc...c............2cccccccx
xc.pp.c.....c...........ccccccx
xcppppcc...cc............cccccx
xc.ppppcc2cc..............ccccx
xcp.pp.pccc........1....4..cccx
xc....wccc.................cccx
xcw...cccc...............3.cccx
xc..wcccccc..........cc....cccx
xc..cccccccc.........cOc..ccccx
xc.cccccccccc2....3...cc.cccccx
xccccccccccccc..........ccccccx
xcccccccccccccccccccccccccccccx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

# The eyes probably make this vault harder than the others, but it's still Mnoleg.
#
# Note: if M were to cast malign gateway, there would be enough room for it here
NAME:       evilmike_mnoleg_eyes
ORIENT:     northwest
TAGS:       mnoleg uniq_mnoleg
: pan_lord_setup(_G, 'Mnoleg')
NSUBST:     O = 1:O / *:|
TILE:       c = dngn_stone_wall_yellow
MONS:       patrolling mnoleg
MONS:       giant eyeball / golden eye / eye of devastation / \
            eye of draining / shining eye
MONS:       w:3 large abomination / w:2 tentacled monstrosity
MONS:       cacodemon
MONS:       neqoxec / brain worm
NSUBST:     C = 1:4 / *:N
NSUBST:     N = 2:4 / *:5
NSUBST:     M = 5:3 / 2=3. / *:.
NSUBST:     E = 3:2 / 2=22. / 2=2.. / *:.
SHUFFLE:    '-
NSUBST:     ' = 5:3 / 2=3. / 1:4 / 3:5 / *:.
NSUBST:     - = 5:2 / 2=2. / 1:4 / 3:5 / *:.
epilogue{{
  pan_lord_epilogue('Mnoleg')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xcccccccccccccccccccccccccccccccccccx
xcOcccccccccccccccccccccOcccccccccccx
xcc...ccccccccccccccc...ccccccccccccx
xcc.ccMcccccccccccccMcc.ccccccccccccx
xcc.ccM.ccccccccccc.Mcc.ccccccccccccx
xcccMMC..ccccccccc..CMMcccccccccccccx
xcccc.....ccccccc.....ccccc''cccccccx
xccccc.....ccccc.....ccccc''''ccccccx
xcccccc.............ccccc''''''cccccx
xccccccc...EEE.....ccccc''''''''ccccx
xcccccccc.EEEEE...ccccc''''''''''cccx
xcccccccc.EE1EE...cccc.'''''''''''ccx
xcccccccc.EEEEE...ccc'''cc'''''''..cc
xcccccccc..EEE....cc'''cccc'''''.....
xcccccccc.........cc'''cccc'''cc....@
xccccccc...........cc'''cc'''cc......
xcccccc.............cc''''''cc.....cc
xccccc.....ccccc.....cc''''cc.....ccx
xcccc.....ccccccc.....cc''cc.....ccxx
xcccMMC..ccccc--cc.....cccc.....ccxxx
xcc.ccM.ccccc----cc.....cc.....ccxxxx
xcc.ccMccccc------cc..........ccxxxxx
xcc...ccccc---cc---cc........cccxxxxx
xcOccccccc---cccc---cc......ccccxxxxx
xcccccccc----cccc---cc......ccccxxxxx
xccccccc------cc---cc........cccxxxxx
xcccccc-----------cc........N.ccxxxxx
xcccccc----------cc.....cc.N2..cxxxxx
xccccccc--------cc.....cccc..N.cxxxxx
xcccccccc------cc.....cccccc...cxxxxx
xccccccccc-----c.....cccccccccccxxxxx
xcccccccccc---......ccxxxxxxxxxxxxxxx
xccccccccccc-......ccxxxxxxxxxxxxxxxx
xcccccccccccc.....ccxxxxxxxxxxxxxxxxx
xccccccccccccc...ccxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxc.@.cxxxxxxxxxxxxxxxxxxx
ENDMAP


#######################################################################
# Lom Lobon
#
NAME:      lom_lobon
TAGS:      lom_lobon uniq_lom_lobon no_rotate
ORIENT:    north
: pan_lord_setup(_G, 'Lom Lobon')
MONS:      patrolling Lom Lobon, giant orange brain, rakshasa, wizard
epilogue{{
  pan_lord_epilogue('Lom Lobon')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwww.......wwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwbbbwwwwwww.......wwwwwwwxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxwwwwwwwwwwwwbbbbbbbbbbbwwwwww.........wwwwwwxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxwwwwwwwwwwwwbbbbwwwwwwwwwbbbbwwwwww.........wwwwwwxxxxxxxxxxxxxxx
xxxxxxxxxxxxxwwwwwwwbbbbbbbbwwwwwwwwwwwwwwwbbbwwwww...........wwwwwxxxxxxxxxxxxx
xxxxxxxxxxxxwwwwwbbbb......bbbwwwwwwwwwwww...bbwwwww.............wwwxxxxxxxxxxxx
xxxxxxxxxxxxwwwbbb...........bbbwwwwww........bbwwwww.............wwxxxxxxxxxxxx
xxxxxxxxxxxwwwbb...............bbwwww..........bwwwwww.............wwxxxxxxxxxxx
xxxxxxxxxxxwwbb........1O.......bbww...........bbwwww..............wwxxxxxxxxxxx
xxxxxxxxxxwwwb...................bw......2......bwww.....U....2.....wwxxxxxxxxxx
xxxxxxxxxxwwbb...................bb.............bww.................wwxxxxxxxxxx
xxxxxxxxxxwwbb..3................bbb............bbw..............4..wwxxxxxxxxxx
xxxxxxxxxwwbbb...................b.b............4....................wwxxxxxxxxx
xxxxxxxxxwwbwbb.................bb.......U......4..........U..........wxxxxxxxxx
xxxxxxxxxwwbwwbb...............bb..b............bbw..............4.....xxxxxxxxx
xxxxxxxxxwwbbwwbbb...........bbb..bb............bwww...................xxxxxxxxx
xxxxxxxxxwwwbwwwwb..b..2..bbbb....b.............bwww...................xxxxxxxxx
xxxxxxxxxxwwbwwww...bbbbbbb.......bw.....3.....bbwwww...U.....3.......xxxxxxxxxx
xxxxxxxxxxwwbbww.................bbww........wwbwwwww.................xxxxxxxxxx
xxxxxxxxxxwwwbbw................bbwwwww....wwwbbwwww..................xxxxxxxxxx
xxxxxxxxxxwwwwbb...4...U........bwwwwwwwwwwwwbbwww....................xxxxxxxxxx
xxxxxxxxxxxwwwwbbb...........bbbbbwwwwwwwwwbbbwww....................xxxxxxxxxxx
xxxxxxxxxxxwwwwwwbbbb.....bbbbwwwbbbbwwwbbbbwwww....................xxxxxxxxxxxx
xxxxxxxxxxxwwwwwwwwwbbbbbbbwwwwwwwwwbbbbbwwwww......4.....4........xxxxxxxxxxxxx
xxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww......................xxxxxxxxxxxxxx
xxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwwwwwwwwwww.......................xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwwww........................xxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxwwwwwww......................xxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...@.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

NAME:      lom_lobon_st
TAGS:      lom_lobon no_pool_fixup uniq_lom_lobon
ORIENT:    northwest
: pan_lord_setup(_G, 'Lom Lobon')
MONS:      patrolling Lom Lobon
MONS:      blizzard demon, green death, wizard, draconian annihilator
MONS:      sixfirhy
SUBST:     0 = 23444445566
NSUBST:    Q = 1:O / *:4
NSUBST:    B = 1:. / *:b
TILE:      v = dngn_metal_wall_blue
epilogue{{
  pan_lord_epilogue('Lom Lobon')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxwxxwwwwwwwxxxxxxxwwwwwwwwwxxxxxxxxxxxx
xxxxxxxxwxwwwwbbbbbbbwwxxwwwbbbbbbbwwwxxxxxxxxxxx
xxxxxxxwwwwwbbbb...bbbbwwwbbbb...bbbbwwwxxwxxxxxx
xxxxwxxwwwwbb....0....bbwbb....0....bbwwwwwwxxxxx
xxxwwwwwwwbb...........bbb...........bbwwwwwwxxxx
xxxwwwwwwbb...wwwwwww.......wwwwwww...bbwwwwxxxxx
xxxxwwwwbb...wwwwwwwww.....wwwwwwwww...bbwwwwxxxx
xxwwwwwbb...wwbbbbbbbww...wwbbbbbbbww...bbwwwwxxx
xxxwwwbb...wwbbwwwwwbbw...wbbwwwwwbbww...bbwwwxxx
xxxwwbb...wwbbwwwwwwwbb...bbwwwwwwwbbww...bbwwwxx
xxwwbb...wwbbwwvvvwwwwbbBbbwwwwvvvwwbbww...bbwxxx
xwwwbb..wwbbwwvv.vvwwwwb.bwwwwvv.vvwwbbww..bbwwxx
xxwbb...wwbwwwv.Q.vwwwwb.bwwwwv.Q.vwwwbww...bbwwx
xxwbb.0.wwbwwwvv.+vwwwwb.bwwwwv+.vvwwwbww.0.bbwwx
xwwbb...wwbwwwwvvv.wwwbb.bbwww.vvvwwwwbww...bbwxx
xxwwbb..wwbbwwwwwww.wbb...bbw.wwwwwwwbbww..bbwxxx
xxwwbb...wwbbwwwwwww.........wwwwwwwbbww...bbwxxx
xwwwwbb...wwbbwwwwwb.........bwwwwwbbww...bbwwxxx
xxxwwwbb...wwbbwwwbb.........bbwwwbbww...bbwwxxxx
xxxxwwwbb.....bbbbb...........bbbbb.....bbwwwwxxx
xxxwwwwwb.....B.........1.........B.....bwwwwwxxx
xxxwwwwbb.....bbbbb...........bbbbb.....bbwwwwwxx
xxwwwwbb...wwbbwwwbb.........bbwwwbbww...bbwwwxxx
xwwwwbb...wwbbwwwwwb.........bwwwwwbbww...bbwwwxx
xxwwbb...wwbbwwwwwww.........wwwwwwwbbww...bbwwxx
xxwwbb..wwbbwwwwwww.wbb...bbw.wwwwwwwbbww..bbwwxx
xwwbb...wwbwwwwvvv.wwwbb.bbwww.vvvwwwwbww...bbwwx
xwwbb.0.wwbwwwvv.+vwwwwb.bwwwwv+.vvwwwbww.0.bbwxx
xxwbb...wwbwwwv.Q.vwwwwb.bwwwwv.Q.vwwwbww...bbwwx
xxxwbb..wwbbwwvv.vvwwwwb.bwwwwvv.vvwwbbww..bbwwxx
xxwwbb...wwbbwwvvvwwwwbbBbbwwwwvvvwwbbww...bbwwxx
xxxxwbb...wwbbwwwwwwwbb...bbwwwwwwwbbww...bbwwwxx
xxxxwwbb...wwbbwwwwwbbw...wbbwwwwwbbww...bbwwwxxx
xxxxxwwbb...wwbbbbbbbww...wwbbbbbbbww...bbwwwwxxx
xxxxwwwwbb...wwwwwwwww.....wwwwwwwww.......wwwxxx
xxxwwwwwwbb...wwwwwww.......wwwwwww...b.....wwwxx
xxxxwwwwwwbb...........bbb...........bb.......wxx
xxxxxxwwwwwbb....0....bbwbb....0....bbw....6....x
xxxxxxwxwwwwbbbb...bbbbwwwbbbb...bbbbwww......6..
xxxxxxxxxwwwwwbbbbbbbwwwwwwwbbbbbbbwwwwww.6......
xxxxxxxxxwxwwwwwwwwwwwwwxxxwwwwwwwwwwxxxw........
xxxxxxxxxxxxxxxxwwxxxxxxxxxxxxxxwwxwxxxxxx.......
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..@..
ENDMAP

NAME:      lom_lobon_spiral_st
TAGS:      lom_lobon no_pool_fixup patrolling uniq_lom_lobon
ORIENT:    northeast
: pan_lord_setup(_G, 'Lom Lobon')
MONS:      patrolling Lom Lobon, titan, vapour, wizard
KMONS:     S = storm dragon
KMONS:     d = draconian annihilator
KMONS:     e = deep elf annihilator
COLOUR:    c = white
KFEAT:     S = deep_water
NSUBST:    D = 1:S / *:w
TILE:      c = dngn_stone_wall_white
epilogue{{
  pan_lord_epilogue('Lom Lobon')
}}
MAP
cccccccccccccccccccccccccccccccccccccccc
cbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc
cbbbbbb.....bb+..2..bbbbbwwwbbbbbbbbbbbc
cbbbb.........bb...bbbwwwwwwwwwbbbbbbbbc
cbbb...........bbObbwww.....wwwwwbbbbbbc
cbb.............bbbww.........wwwwbbbbbc
cbb.............bbww.....w......wwwbbbbc
cb.......1.......bw....www.......wwbbbbc
cb...............bw...wwwww...V..wwwbbbc
cb...............bb..wwwwwww......wwbbbc
cbb.............bbb.....wwwww.....wwbbbc
cbb.............bbbb...2..wwwww....wwbbc
cbbb...........bbbbbbb.......www...wwwbc
cbbbbb.......bbbbbbbbbbbbbb...bbb...wwwc
cbbbbbbb...bbbbbbbbbbbbbwwww....bb..wwwc
cbbbbbb...bbbbbbbbbbbwwwwwwwww...bb..wwc
cbbbbb..wbbbbbbbbbbwwwwwwwwwwww...b..wwc
cbbb...wwwbbbbbbbbwwwwwwwwwwwwww..bb.wwc
cbb...wwwwwbbbbbbbwwwwww..wwwwww...b..wc
cbb.d..wwwwwbbbbb.wwwww.ee.wwwww...b..wc
cbb.....wwwwwwbbb.wwwwww..wwwwww...b..wc
cbb...d.wwww....2..wwwwwwwwwwwww..bb..Dc
cwb.........www.....wwwwwwwwwww...bw..wc
cwbb...wwwwwwwwbbb...wwwwwwwww...bbw..wc
cwbbbdwwwwwwwwbbbbb....wwww.....bbww.wwc
cwwbbbbwwwwbbbbwwwbbb.........bbbww..wwc
cwwSbbbbbbbbwwwwwwwwbbb....bbbbwww...wwc
cwwwwwbbbbwwwwwwwwwwwwbbbbbbwwwDww...wwc
cwwwwwwwwwwwww.4.wwwwwwwwwwwwwwwww....wc
cwwwwwwwwww........wwwwwwwwwwwwww.....wc
cwwwwwwww...........wwwwwwwwwwww.....wwc
cwwwwwww.....U...U......wwwwwwww.....wwc
cwwwwbbbb..................wwww.....wwwc
cwwbbb..............ww..............wwDc
cwbb..3...........wwwwww.....2.....wwwwc
cwb$.........ww..wwwwwwwww.......wwwwwwc
cwb$..3.....wwww..wwwwwwwww....wwwwwwwwc
cwbb3...3.bbwwww...wwwwwwwwwwwwwwwwwwwcc
cwwbbb$$bbbwwwwww....wwwwwwwwwwwwwwwwccc
ccwwwbbbbwwwww...w....wwwwwwwwwwwwwwcccc
cccwwwwwwwwww..4.....4.wwwwwwwwwwwcccccc
cccccwwwwww............wwwwwwwwwcccccccc
cccccccccccccccc..@..ccccccccccccccccccc
ENDMAP


#############################################################################
# Cerebov
#
# You might not want to teleport too much on this level - unless you can
# reliably teleport away again.
#
NAME:      cerebov
TAGS:      cerebov uniq_cerebov
ORIENT:    northeast
: pan_lord_setup(_G, 'Cerebov')
MONS:      patrolling Cerebov, Balrug, brimstone fiend
epilogue{{
  pan_lord_epilogue('Cerebov')
}}
COLOUR:     n = blue
TILE:       n = dngn_metal_wall_cracked
TILE:       v = dngn_metal_wall_brown
:           set_feature_name("clear_stone_wall", "cracked metal wall")
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...............................xxxx
.............vvvvv.............xxxx
.............v$$$v.............xxxx
.............v|||v.............xxxx
.............v$$$v.............xxxx
.vvvvv...vvvvvvvvvvvvv...vvvvv.xxxx
.v|$|vvvvv...........vvvvv$|$v.xxxx
.v$|$v.....vvvvvvvvv.....v|$|v.xxxx
.v|$|v.vvvvvvvvOvvvvvvvv.v$|$v.xxxx
.vvvvv.vvvvvv..3..vvvvvv.vvvvv.xxxx
...v...vv.....vvv.....vv...v...xxxx
...v.vvvv....vv1vv....vvvv.v...xxxx
...v.vv......v...v......vv.v...xxxx
...v.vvvv.............vvvv.v...xxxx
...v...vv..2.......2..vv...v...xxxx
.vvvvv.vv..2.......2..vv.vvvvv.xxxx
.v|$|v.vv.............vv.v$|$v.xxxx
.v|$|v.vv...vv...vv...vv.v$|$v.xxxx
.v|$|v.vv...vv+++vv...vv.v$|$v.xxxx
.vvvvv.vvvvvvv...vvvvvvv.vvvvv.xxxx
....v..vvvvvvv...vvvvvvv..v....xxxx
....vv...................vv....xxxx
.....vv.vvvnv..2..vvvvv.vv.....xxxx
......vvv|||v.....v$$$vvv......xxxx
........v|$|vv...vv$|$v........xxxx
........v|||v.....v$$$v........xxxx
........vvvvv.....vvvvv........xxxx
...............................xxxx
...............@...............xxxx
ENDMAP

NAME:      cerebov_st
TAGS:      cerebov patrolling uniq_cerebov
ORIENT:    north
: pan_lord_setup(_G, 'Cerebov')
TILE:      v = dngn_metal_wall_brown
MONS:      patrolling Cerebov, balrug, brimstone fiend
MONS:      red devil, sun demon, crimson imp
epilogue{{
  pan_lord_epilogue('Cerebov')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx.....................................................................xx
xx...............................6.....6...............................xx
xx..................................6..................................xx
xx.............................vvv.....vvv.............................xx
xx...vvvvv.....................vvv.v.v.vvv.....................vvvvv...xx
xx...v|$|v..vv..vv..vv..vv..vv.vvv.....vvv.vv..vv..vv..vv..vv..v|||v...xx
xx...v$|$vvvvvvvvvvvvvvvvvvvvvvvvvvv.vvvvvvvvvvvvvvvvvvvvvvvvvvv|$|v...xx
xx...v|$|v.......................vvv.vvv.......................v|||v...xx
xx...vvvv+.vvvvvvvvvvvvvvvvvvvvv.v.....v.vvvvvvvvvvvvvvvvvvvvv.+vvvv...xx
xx....vv...vvvvvvvvvvvvvvvvvvvvv+vvv.vvv+vvvvvvvvvvvvvvvvvvvvv...vv....xx
xx.....v.vvvvvvv...........v.......v.v.......v.v.....5..5.+..vvv.v.....xx
xx....vv.vvvvvvv+v+vvvvvvv+v.v.v.v.....v.v.v.v.v..v..v..v.v.$||v.vv....xx
xx....vv.vv||v.......v$$vv+v.................v.+.........3v.$||v.vv....xx
xx.....v.vv||v.v.1.v.v$$v6.v.v.............v.v.v..v..v..v.v.$$$v.v.....xx
xx....vv.vv||v.v...v.v$$vO3v......2...2......v.v.....5..5.+.$$$v.vv....xx
xx....vv.vv+vv.......vv+vvvv.v.............v.v.vvvvvvvvvvvvvvvvv.vv....xx
xx.....v.vv..2.......2..v..+.................+.............+...v.v.....xx
xx....vv.vv..2.......2..v..v.v.............v.vvvvvvvvvvvvvvv...v.vv....xx
xx....vv.vv.............v..v......2...2......v...v..4..v$|$v.6.v.vv....xx
xx.....v.vv....v...v....v..v.v.............v.v...+..2..+|$|v.2.v.v.....xx
xx....vv.vv...vv+++vv...v..v.................v.4.v..4..v$|$v...v.vv....xx
xx....vv.vvvvvv.....vvvvv..v.v.v.v.....v.v.v.v.4.vvvvvvvvvvv...v.vv....xx
xx.....v.vvv...............v.......v.v.......v...vvvvvvvvvvv+vvv.v.....xx
xx....vv...vvvvvvvvvvvvvvvvvvvvv+vvv.vvv+vvvvv...+...........v...vv....xx
xx...vvvv+.vvvvvvvvvvvvvvvvvvvvv.v.....v.vvvvvvvvvvvvvvvvvvvvv.+vvvv...xx
xx...v$$$v.......................vvv.vvv.......................v$$$v...xx
xx...v|||vvvvvvvvvvvvvvvvvvvvvvvvvvv.vvvvvvvvvvvvvvvvvvvvvvvvvvv$|$v...xx
xx...v$$$v..vv..vv..vv..vv..vv.vvv.....vvv.vv..vv..vv..vv..vv..v$$$v...xx
xx...vvvvv.....................vvv.v.v.vvv.....................vvvvv...xx
xx.............................vvv.....vvv.............................xx
xx..................................6..................................xx
xx...............................6.....6...............................xx
xx.....................................................................xx
xx.................................@@@.................................xx
ENDMAP

NAME:       evilmike_cerebov_lava
TAGS:       cerebov patrolling uniq_cerebov
ORIENT:     northwest
: pan_lord_setup(_G, 'Cerebov')
SHUFFLE:    XY
SUBST:      X : v, Y : .v
SUBST:      L : lll.
SUBST:      U : W., W : V., V : v.
KPROP:      l = no_cloud_gen
TILE:       v = dngn_metal_wall_brown
MONS:       Cerebov, balrug, brimstone fiend, sun demon
NSUBST:     Q = 1:3 / 2:|
NSUBST:     B = 3:2 / 3:4
NSUBST:     C = 2:2 / 2:|
epilogue{{
  pan_lord_epilogue('Cerebov')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xx..........................................
xx..........................................
xx..............vvvvvvv.....................
xx...vvvvv......v%|||%v......vvvvv..........
xx...v|$$v......v%|Q|%v......v$$|v..........
xx...v$C$vvvvvvvv%|||%vvvvvvvv$C$v..........
xx...v$$$vvvvvvvvvv+vvvvvvvvvv$$$v...lll....
xx...vvvv+v.................v+vvvv..lllll...
xx.....vvv..vVvWvU.B.UvWvVv..vvv....llvll...
xx.....vv..vv.............vv..vv....lllll...
xx.....vv.vvB.............Bvv.vv.....lll....
xx.....vv.V.....LLL.lll.....V.vv............
xx.....vv.v....LLLL.llll....v.vv............
xx.....vv.W...LLLL...llll...W.vvvvvvvvvv....
xx.....vv.v...LLLL...llll...v.vvvvvvvvvvvv..
xx..vvvvv.U..LLLL.....llll..........vllvvv..
xx..v%%%v...LLvvv......llll...vWvWv.v4...vv.
xx..v|||v..LLvv.v.Y....llll...2.....+.....4.
xx..v|Q|+..LLvOX3.Y...1lllll.4......+.2....@
xx..v|||v..LLvv.v.Y....llll...2.....+.....4.
xx..v%%%v...LLvvv......llll...vWvWv.v4...vv.
xx..vvvvv.U..LLLL.....llll..........vllvvv..
xx.....vv.v...LLLL...llll...v.vvvvvvvvvvvv..
xx.....vv.W...LLLL...llll...W.vvvvvvvvvv....
xx.....vv.v....LLLL.llll....v.vv............
xx.....vv.V.....LLL.lll.....V.vv............
xx.....vv.vvB.............Bvv.vv.....lll....
xx.....vv..vv.............vv..vv....lllll...
xx.....vvv..vVvWvU.B.UvWvVv..vvv....llvll...
xx...vvvv+v.................v+vvvv..lllll...
xx...v$$$vvvvvvvvvv+vvvvvvvvvv$$$v...lll....
xx...v$C$vvvvvvvv%|||%vvvvvvvv$C$v..........
xx...v|$$v......v%|Q|%v......v$$|v..........
xx...vvvvv......v%|||%v......vvvvv..........
xx..............vvvvvvv.....................
xx..........................................
xx..........................................
ENDMAP


##############################################################################
# Gloorx Vloq
#
NAME:      gloorx_vloq
TAGS:      gloorx_vloq uniq_gloorx_vloq
ORIENT:    southwest
: pan_lord_setup(_G, 'Gloorx Vloq')
TILE:      c = dngn_stone_wall_darkgray
SHUFFLE:   1O
MONS:      patrolling Gloorx Vloq, Executioner, demonic crawler, shadow wraith
epilogue{{
  pan_lord_epilogue('Gloorx Vloq')
}}
MAP
xxxxxxxxxxxxxxxxxx@.xxxxxxxxxxxxxxx
xxxx..............................x
xxxx..............................x
xxxx..............................x
xxxx.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x
xxxx..............................x
xxxx.x.xxxx=xxxxxxxxxxxx=xxxxxx.x.x
xxxx...xx....................xx...x
xxxx.x.x..ccccc..4..4..ccccc..x.x.x
xxxx...x.cc.3............3.cc.x...x
xxxx.x.x.c..ccccc.cc.ccccc..c.x.x.x
xxxx...x.c.cc.....cc.....cc.c.x...x
xxxx.x.x.c.c.2...cccc...2.c.c.x.x.x
xxxx...x...c...ccc..ccc...c...=...x
xxxx.x.x.3.....2..1O..2.....3.x.x.x
xxxx...=...c...ccc..ccc...c...x...x
xxxx.x.x.c.c.2...cccc...2.c.c.x.x.x
xxxx...x.c.cc.....cc.....cc.c.x...x
xxxx.x.x.c..ccccc.cc.ccccc..c.x.x.x
xxxx...x.cc.3............3.cc.x...x
xxxx.x.x..ccccc..4..4..ccccc..=.x.x
xxxx...xx....................xx...x
xxxx.x.xxxx=xxxx=xxxxxxxx=xxxxx.x.x
xxxx..............................x
xxxx.x.x.x.x.x.x.x..x.x.x.x.x.x.x.x
xxxx..............................x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

NAME:      gloorx_vloq_st
TAGS:      gloorx_vloq uniq_gloorx_vloq
ORIENT:    southeast
: pan_lord_setup(_G, 'Gloorx Vloq')
TILE:      c = dngn_stone_wall_darkgray
MONS:      patrolling Gloorx Vloq, Executioner, shadow wraith
MONS:      soul eater, unseen horror
epilogue{{
  pan_lord_epilogue('Gloorx Vloq')
}}
MAP
xxxxxxxxxxxxxxxxxx.@.xxxxxxxxxxxxxxxxxx
xxxxx.............................xxxxx
xxxx...xxx.x.xxx.x.x.x.xxx.x.xxx...xxxx
xxx....xxx.x.xxx.x3x3x.xxx.x.xxx....xxx
xx...................................xx
x..5..ccccccccccccccccccccccccccc..5..x
xx...xcxxxxxxxxxxxxxxxxxxxxxxxxxcx...xx
x.x.x.cx.x4x.x.x.x.x.x.x.x.x4x.xc.x.x.x
x..x..cxx.x.x.x.x.xOx.x.x.x.x.xxc..x..x
x.x.x.cx.x.x.x.x.xxxxx.x.x.x.x.xc.x.x.x
xx...xcxx.x.x.x.x4...4x.x.x.x.xxcx...xx
x.x.x.cx.x.x.x.x.x...x.x.x.x.x.xc.x.x.x
x..x..cxx.x.x.x.x.....x.x.x.x.xxc..x..x
x.x.x.cx.x.x2x.x.x...x.x.x2x.x.xc.x.x.x
xx...xcxx.x.x.x.x.....x.x.x.x.xxcx...xx
x.x.x.cx.x.x.x.x.x.1.x.x.x.x.x.xc.x.x.x
x3.x.3cxx.x.x.x.x.....x.x.x.x.xxc3.x.3x
x.x.x.cx2x.x.x.x.x...x.x.x.x.x2xc.x.x.x
xx...xcxx.x.x.x.x.....x.x.x.x.xxcx...xx
x.x.x.cx.x.x.x.x.x...x.x.x.x.x.xc.x.x.x
x..x..cxx.x.x.x.x4...4x.x.x.x.xxc..x..x
x.x.x.cx.x.x.x.x.x...x.x.x.x.x.xc.x.x.x
xx...xccx.x.x.x.x.....x.x.x.x.xccx...xx
xxx.x.xccx.x.x.x.x...x.x.x.x.xccx.x.xxx
xxxx....ccc2x.x.x.....x.x.x2ccc....xxxx
xxxxx.....cccc.x.x...x.x.cccc.....xxxxx
xxxxxxx......ccccx...xcccc......xxxxxxx
xxxxxxxxx.......cc===cc.......xxxxxxxxx
xxxxxxxxxxxx.......2.......xxxxxxxxxxxx
xxxxxxxxxxxxxxx.........xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

NAME:       evilmike_gloorx_vloq_box
TAGS:       gloorx_vloq uniq_gloorx_vloq
ORIENT:     southeast
: pan_lord_setup(_G, 'Gloorx Vloq')
SUBST:      X : xx.
SUBST:      V : x.
: if crawl.coinflip() then
SUBST:      C : c, d : c
: else
SUBST:      C : ., d : =
: end
MARKER:     + = lua:restrict_door()
TILE:       c = dngn_stone_wall_darkgray
MONS:       patrolling Gloorx Vloq
MONS:       executioner, shadow demon, shadow wraith, demonic crawler
KMONS:      O = demonic crawler
epilogue{{
  pan_lord_epilogue('Gloorx Vloq')
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
x.4..........................4.xx
x4x.V.x.x.V.x.x.V.x.x.V.x.x.V.4xx
x..x.x.V.x.x.V.x2x.V.x.x.V.x2V.xx
x.V.........................x..xx
x..x.........................x.xx
x.x....ccccccccccccccccccc..V..xx
x..V...cxxxxxxxxxxxxxxxxxc...x.xx
x.x....cxxxxxxxxxxxxxx...c..x..xx
x..x...cxxxxxxxxxxxxx..X.c...V.xx
x.V....cxxxxxxxxxxx......c..x..xx
x..x...cxxxxxxxx.....X.X.c...x.xx
x.x..cccxxxx.............c..V..xx
x...3c5+.2.........X.X.X.cc..x.xx
....cc5c.................=3.x..xx
@...cO5c1....2...X.X.X.X.dC..V.xx
....cc5c.................=3.x..xx
x...3c5+.2.........X.X.X.cc..x.xx
x.x..cccxxxx.............c..V..xx
x..x...cxxxxxxxx.....X.X.c...x.xx
x.V....cxxxxxxxxxxx......c..x..xx
x..x...cxxxxxxxxxxxxx..X.c...V.xx
x.x....cxxxxxxxxxxxxxx...c..x..xx
x..V...cxxxxxxxxxxxxxxxxxc...x.xx
x.x....ccccccccccccccccccc..V..xx
x..x.........................x.xx
x.V.........................x..xx
x..x.x.V.x.x.V.x2x.V.x.x.V.x2V.xx
x4x.V.x.x.V.x.x.V.x.x.V.x.x.V.4xx
x.4..........................4.xx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP


#############################################################################
# Pandemonium lesser demon vaults: repeating rune vaults.
#############################################################################
# Pandemonium demon vaults are selected by tag. They must have the tag "pan",
# or they won't even be considered. Tags are case-sensitive.
#
# Tagging these levels also ensures they won't be generated in the main
# dungeon.
#
# The first block consists of repeating vaults featuring a rune and Pan lord.
# TAG: allow_dup
# : pan_demonic(_G, 'P', true)     -- place the rune with a pandemonium lord
# : pan_demonic(_G, 'P')           -- place the rune without lord; have to
#                                  -- put down the Pan lord manually
#
# Of these maps, rand_demon_1 to rand_demon_9 are ancient heritage.

NAME:  rand_demon_1
TAGS:  pan allow_dup
MONS:  pandemonium lord, greater demon
: pan_demonic_rune(_G, 'P')
MAP
............
.xx.xx.x.xx.
..x.x2.x.x..
..x.x..x.x..
..x.x..x.x..
..x.x..x.x..
..x.x1Px.x..
..x.x..x.x..
..x.x..x.x..
..x.x.2x.x..
.xx.x.xx.xx.
............
ENDMAP

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

NAME:  rand_demon_2
TAGS:  pan allow_dup
MONS:  greater demon, common demon, common demon
: pan_demonic_rune(_G, 'P', true)
MAP
............
.xxxxxxxx2x.
.2.....xx.x.
.xxxxxx3x.x.
.xx3x..xx.x.
.x.x.11.x.x.
.x.x.P1.x.x.
.x.xx..x3xx.
.x.x3xxxxxx.
.x.xx.....2.
.x2xxxxxxxx.
............
ENDMAP

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

NAME:  rand_demon_3
TAGS:  pan allow_dup
MONS:  common demon, common demon
: pan_demonic_rune(_G, 'P', true)
MAP
............
.x.x.x2x.x..
..x.x2x2x.x.
.x.x.x1x.x..
..x2x1x1x2x.
.x2x1xPx1x2.
..x2x1x1x2x.
.x.x.x1x2x..
..x.x2x2x.x.
.x.x.x2x.x..
..x.x.x.x.x.
............
ENDMAP

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

NAME:  rand_demon_4
TAGS:  pan allow_dup
MONS:  pandemonium lord, any demon, any demon
: pan_demonic_rune(_G, 'P')
MAP
............
.xxxxxxxxx..
.x$=*=3=|x..
.xxxxxxx=x..
.x2=3=2x|x..
.x=xxxxx=x..
.x3=*x1=Px..
.x=x=xxxxx..
.x*x2=3=2=..
.xxxxxxxxx..
............
............
ENDMAP

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

NAME:  rand_demon_5
TAGS:  pan allow_dup
MONS:  pandemonium lord, any demon, any demon
: pan_demonic_rune(_G, 'P')
MAP
............
...xxxxxx...
..xx....xx..
.xx......xx.
.x..3232..x.
.x..2|P3..x.
.x..3.|2..x.
.x..2123..x.
.xx......xx.
..xx....xx..
...xxxxxx...
............
ENDMAP

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

NAME:  rand_demon_6
TAGS:  pan allow_dup
MONS:  pandemonium lord, any demon, any demon
: pan_demonic_rune(_G, 'P')
MAP
............
............
......2.....
............
.3..........
..........2.
.....1P.....
............
............
.2.......3..
............
............
ENDMAP

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

NAME:  rand_demon_7
TAGS:  pan allow_dup
MONS:  any demon, greater demon
: pan_demonic_rune(_G, 'P', true)
MAP
............
.xxx....xxx.
.x|xx=xxx|x.
.xx=....=xx.
..x.x==x.x..
..x.=P1=.=..
..=.=12=.x..
..x.x==x.x..
.xx=....=xx.
.x|xxx=xx|x.
.xxx....xxx.
............
ENDMAP

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

NAME:  rand_demon_8
TAGS:  pan allow_dup
MONS:  pandemonium lord, greater demon, any demon
: pan_demonic_rune(_G, 'P')
MAP
............
....xxxxxxx.
..xxx....1x.
.xx..2..P.x.
.x........x.
.xx.......x.
..xx33..2.x.
....33...xx.
.....x...x..
..F..xx.xx..
......xxx...
............
ENDMAP

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

NAME:  rand_demon_9
TAGS:  pan allow_dup
MONS:  pandemonium lord, any demon, greater demon
: pan_demonic_rune(_G, 'P')
MAP
............
.xxxxxxxxxx.
.x2=3=3=3xx.
.x=xxxxxx2x.
.x3x^^^^x=x.
.x=x^P^^x2x.
.x3x^^1^x=x.
.x=x^^^^x3x.
.x2xxxx=x=x.
.xx2=2=3x3x.
.xxxxxxxx=x.
............
ENDMAP

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

NAME:   evilmike_mini_pan_diamond
TAGS:   pan allow_dup
SUBST:  m : nx, n : mnxx.
MONS:   greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
    .....
   ..m.m..
  ..mm2mm..
 ..mm.n.mm..
..mm3...3mm..
.mm...1...mm.
..2n.1P1.n2..
.mm...1...mm.
..mm3...3mm..
 ..mm.n.mm..
  ..mm2mm..
   ..m.m..
    .....
ENDMAP

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

NAME:   evilmike_mini_pan_thingy
TAGS:   pan allow_dup
MONS:   greater demon, common demon, any demon, pandemonium lord
: pan_demonic_rune(_G, 'P')
MAP
     .....
    ..x+x.
  ...xx.x.
  .cccc.x.
 ..c|1c.x.
..xc3c2.x......
.xxcc2c3xxxxxx.
.+.....4.....+.
.xxxxxx3c2ccxx.
......x.2c3cx..
     .x.c1Pc..
     .x.cccc.
     .x.xx...
     .x+x..
     .....
ENDMAP

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

NAME:   evilmike_mini_pan_other_thingy
TAGS:   pan allow_dup
SUBST:  d : +x
SUBST:  X : c., C : ccx
MONS:   greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
@...........@
.............
xxxxxd+dxxxxx
xxxxC...Cxxxx
xxxCC...CCxxx
xxxC.....Cxxx
xxCC.....CCxx
xCC..1.1..CCx
xC..3XcX3..Cx
xC.2.cPc.2.Cx
xC....c....Cx
xCC.3...3.CCx
xxCC..1..CCxx
xxxCC*|*CCxxx
xxxxCCCCCxxxx
xxxxxxxxxxxxx
ENDMAP

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

NAME:   evilmike_mini_pan_3x3
TAGS:   pan allow_dup
MONS:   greater demon, common demon, any demon
NSUBST: 1 = 1:P / 3:1 / 2:2 / 2:3 / 1:|
SHUFFLE: =A
SUBST:  A = x
: pan_demonic_rune(_G, 'P', true)
MAP
.............
.xxx.xxx.xxx.
.x1x.x1x.x1x.
.xx+.x+x.+xx.
.............
.xxx.A=A.xxx.
.x1+.=1=.+1x.
.xxx.A=A.xxx.
.............
.xx+.x+x.+xx.
.x1x.x1x.x1x.
.xxx.xxx.xxx.
.............
ENDMAP

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

NAME:   evilmike_mini_pan_corridor
TAGS:   pan allow_dup
SUBST:  Y : Xx, X : x., Z : c.
MONS:   greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
xxxxxxxxxxxxxxxxxxx
xxxxxxxcccccxxxxxxx
xxxxxxcc1..ccxxxxxx
xXXXXXY3Z2Z3YXXXXXx
@...2...cPc...2...@
xXXXXXY3Z2Z3YXXXXXx
xxxxxxcc..1ccxxxxxx
xxxxxxxcccccxxxxxxx
xxxxxxxxxxxxxxxxxxx
ENDMAP

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

NAME:   evilmike_mini_pan_pillars
TAGS:   pan allow_dup
MONS:   greater demon, common demon, any demon, pandemonium lord
SUBST:  X : x.., Y : x+, C : cx
: pan_demonic_rune(_G, 'P')
MAP
xxxxxxxxxxxxxx.@
xc|.........|x..
xc.C.C.C.C.C.x..
xc....2.2....x..
xc.C.3...3.C.x..
xc..2.1X1.2..Y..
xcPC..X4X..C.+..
xc..2.1X1.2..Y..
xc.C.3...3.C.x..
xc....2.2....x..
xc.C.C.C.C.C.x..
xc|.........|x..
xxxxxxxxxxxxxx.@
ENDMAP

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

# I'm sorry
NAME:   evilmike_mini_pan_murderfest
WEIGHT: 2
TAGS:   pan allow_dup
MONS:   greater demon, any demon, pandemonium lord
NSUBST: | = 1:P / *:|
SUBST:  = : +., X : +c, c : cccx
# I don't want this vault to be an autoexplore trap
MARKER: G = lua:props_marker { stop_explore = "ominous statue." }
MARKER: + = lua:restrict_door()
: pan_demonic_rune(_G, 'P')
MAP
xxxxxxxxxxxxxxxxx
xcccccccccccccccx
xc|c.........c|cx
xcc=..2.1..2.=ccx
xc..1.......1..cx
xc.2..+++++....cx
xccccXX...++.2.cx
...........+...cx
@.......G..+.3.cx
...........+...cx
xccccXX...++...cx
xc.2..+++++..2.cx
xc..1.......1..cx
xcc=.2..1.2..=ccx
xc|c.........c|cx
xcccccccccccccccx
xxxxxxxxxxxxxxxxx
ENDMAP

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

NAME:    evilmike_mini_pan_rooms
WEIGHT:  3
TAGS:    pan allow_dup
SUBST:   + : +.
SHUFFLE: 123|P
MONS:    any demon, any demon, any demon
MONS:    greater demon / common demon, common demon
: pan_demonic_rune(_G, 'P', true)
MAP
xxxxxxxxxxxxxx
xx5..xxxxx..4x
xx.|..+.+..P.x
xx4..xx.xx..5x
xxxxxxx.xxxxxx
......x.xx..4x
@.....+.+..3.x
......x.xx..5x
xxxxxxx.xxxxxx
xx4..xx.xx..5x
xx.1..+.+..2.x
xx5..xxxxx..4x
xxxxxxxxxxxxxx
ENDMAP

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

NAME:   evilmike_mini_pan_layers
TAGS:   pan allow_dup
SUBST:  x = x:9 =:1
MONS:   greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
         ...
        ..x..
       ...2...
      ..xxxxx..
     .....3.....
    ..xxxxxxxxx..
   .......3.......
  ..xxxxxxxxxxxxx..
 ........2|1........
..xxxxxxxxxxxxxxxxx..
.........3P3.........
..xxxxxxxxxxxxxxxxx..
 ........1|2........
  ..xxxxxxxxxxxxx..
   .......3.......
    ..xxxxxxxxx..
     .....3.....
      ..xxxxx..
       ...2...
        ..x..
         ...
ENDMAP

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

NAME:   evilmike_mini_pan_corner
TAGS:   pan allow_dup
SUBST:  X : x., Y : c.
MONS:   greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
xxxxxx@xxxxxx
xxxxxX.xxxxxx
xxxxXX.xxxxxx
xxxXXX.xxxxxx
xxXXXX.xxxxxx
xXXXXX.Yccccx
@.......YYYcx
xxxxxY...2Ycx
xxxxxcY.213cx
xxxxxcY21P3cx
xxxxxcYY33Ycx
xxxxxcccccccx
xxxxxxxxxxxxx
ENDMAP

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

NAME:    evilmike_mini_pan_branches
TAGS:    pan allow_dup
SHUFFLE: 4A
SUBST:   A = 1
MONS:    greater demon, common demon, any demon, pandemonium lord
: pan_demonic_rune(_G, 'P')
MAP
xxxxxxxxxxxxxxxx
xxxxxxxxxxccccxx
xxxxxxxxxxcP.ccx
xxxxxxxxxxccc.cx
xxxxxxxxxxx|c4cx
xxxxxxxx*xx1c.cx
xxxx%xxx3xx.c.cx
xxxx2xxx.xx.c.cx
xxxx.xxx.xx.c.cx
@.............cx
xxxx.xxx.xx.c.cx
xxxx2xxx.xx.c.cx
xxxx%xxx3xx.c.cx
xxxxxxxx*xx1c.cx
xxxxxxxxxxx|cAcx
xxxxxxxxxxccc.cx
xxxxxxxxxxc|.ccx
xxxxxxxxxxccccxx
xxxxxxxxxxxxxxxx
ENDMAP

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

NAME:  evilmike_mini_pan_T
TAGS:  pan allow_dup
SUBST: + : +..
MONS:  greater demon, common demon, any demon, pandemonium lord
: pan_demonic_rune(_G, 'P')
MAP
xxxxxxxxxxxxxxxx
xxxxxxxcccxxxxxx
xxxxxxxcP+...xxx
xxxxxxxccc.1.xxx
xxxxxxxxxx3.2xxx
xxxxxxxxxx...xxx
xxxxxxxxxx...xxx
..............xx
@.....3......4xx
..............xx
xxxxxxxxxx...xxx
xxxxxxxxxx...xxx
xxxxxxxxxx2.3xxx
xxxxxxxccc.1.xxx
xxxxxxxc|+...xxx
xxxxxxxcccxxxxxx
xxxxxxxxxxxxxxxx
ENDMAP

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

# based slightly on rand_demon_3
NAME:    evilmike_mini_pan_possible_glass
TAGS:    pan allow_dup
SHUFFLE: mnxcll
MONS:    greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
 ...........
.............
..m.m.m.m.m..
...m2m.m2m...
..m2m.1.m2m..
...m.....m...
..m.3.P.3.m..
...m.....m...
..m2m.1.m2m..
...m2m.m2m...
..m.m.m.m.m..
.............
 ...........
ENDMAP

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

NAME:   evilmike_mini_pan_pillars_b
TAGS:   pan allow_dup
SUBST:  X : x.
SUBST:  Y : mmxxl
MONS:   greater demon, common demon, any demon, pandemonium lord
NSUBST: D = 1:P / 3:1 / 3:2 / 3:3 / 3:|
: pan_demonic_rune(_G, 'P')
MAP
@.xxxxxxxxxxx
..xXDXDXDXDXx
..x.Y.Y.Y.YDx
..xX.X.X.X.Xx
..x.Y.Y.Y.YDx
..xX.X.X.X.Xx
....Y.Y4Y.YDx
..xX.X.X.X.Xx
..x.Y.Y.Y.YDx
..xX.X.X.X.Xx
..x.Y.Y.Y.YDx
..xXDXDXDXDXx
@.xxxxxxxxxxx
ENDMAP

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

NAME: evilmike_mini_pan_secret
TAGS: pan allow_dup
MONS: greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
............
..x=xxxx=x..
.xx......xx.
.=.x3..2x.=.
.x.2c==c3.x.
.x..=|1=..x.
.x..=1P=..x.
.x.3c==c2.x.
.=.x2..3x.=.
.xx......xx.
..x=xxxx=x..
............
ENDMAP

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

NAME:   evilmike_mini_pan_secret_b
TAGS:   pan allow_dup
# The secret doors are not treated as large gates, but individually:
MARKER: X = lua: props_marker { connected_exclude="true" }
SUBST:  X = =
NSUBST: D = 2:1 / 2:2 / 2:3 / 1:P / 1:|
MONS:   greater demon, common demon, any demon
: pan_demonic_rune(_G, 'P', true)
MAP
xxxxxxxxxxxxx
xxxxDxDxDxDxx
xxx.........x
xxxXXXXXXXXXx
@...........x
xxxXXXXXXXXXx
xxx.........x
xxxxDxDxDxDxx
xxxxxxxxxxxxx
ENDMAP

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

NAME:   evilmike_mini_pan_V
TAGS:   pan allow_dup
MONS:   greater demon, common demon, any demon, pandemonium lord
: pan_demonic_rune(_G, 'P')
MAP
x.@.xxxxxxxxxxxxxxxxx.@.x
xx...xxxxxxxxxxxxxxx...xx
xxx.3.xxxxxxxxxxxxx.3.xxx
xxxx...xxxxxxxxxxx...xxxx
xxxxx.2.xxxxxxxxx.2.xxxxx
xxxxxx...xxcccxx...xxxxxx
xxxxxxx.1.xcPcx.1.xxxxxxx
xxxxxxxx...c+c...xxxxxxxx
 xxxxxxxx..3.3..xxxxxxxx
  xxxxxxxx..4..xxxxxxxx
   xxxxxxxx3.3xxxxxxxx
    xxxxxxxx|xxxxxxxx
     xxxxxxxxxxxxxxx
ENDMAP

#############################################################################
# Pandemonium lesser demon vaults: standalone.
#############################################################################
# If the map is repeating (TAG: allow_dup) and features a rune, it does not
# go here.
#

NAME:    lemuel_draining_boxes
TAGS:    pan
MONS:    pandemonium lord, eye of draining, any demon
SHUFFLE: aA/bB/cC/dD/eE/fF, eE/gG, fF/hH
SUBST:   a=m, b=m, c=m, d=m, e=m, f=m, g=., h=.
SUBST:   A=2, B=2, C=2, D=2, E=2, F=2, G=., H=.
# the two center boxes are granted;
# of the six outer boxes, one or two may be missing
SUBST:   n = m
KFEAT:   m = iron_grate
KMONS:   O = eye of draining
KITEM:   O = demonic rune of Zot
MAP
                  ....bbb..
.......           ....bBb..
.aaa...           ....bbb..
.aAa...           .........
.aaa.......................
...........................
.............mmm.............
    .........m2m..........ccc
    .........mmm3.........cCc
...............333........ccc
..............33133nnn.......
.fff...........333.nOn.......
.fFf............3..nnn...
.fff.....................
.........................
.............................
  .........        ...ddd....
  ...eee...        ...dDd....
  ...eEe...        ...ddd....
  ...eee...        ..........
ENDMAP

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

NAME:  lemuel_hellion_island
TAGS:  pan
MONS:  hellion
SUBST: L=l.
KMONS: O = pandemonium lord
KITEM: O = demonic rune of Zot
MAP
    ..LlllL..
  ..LlllllllL..
 .LlllllllllllL.
.LlllllL1LlllllL.
.LllllL1.1LllllL.
LllllL1|1|1LllllL
llllL1.1O1.1Lllll
llllL.1|1|1.Lllll
LllllL.1.1.LllllL
.LllllL.1.LllllL.
.LlllllLLLlllllL.
 .LlllllllllllL.
  ..LlllllllL.
    ..LlllL..
ENDMAP

###################################
# XXX: Undiggable glass has been converted to grates.
NAME:    lemuel_hall_of_pain
TAGS:    pan
MONS:    pandemonium lord, any demon
MONS:    smoke demon / weight:1 brimstone fiend
SHUFFLE: xc
KFEAT:   m = iron_grate
SHUFFLE: O1/AB
SUBST:   A=|, B=|
KITEM:   O = demonic rune of Zot
MAP
.......@.......
xxxxxx+++xxxxxx
xOx.xl...lx.xAx
x1x3xl.2.lx3xBx
x.x.ml...lm.x.x
x2x.xl...lx.x2x
x.x3xl...lx3x.x
x2x.ml...lm.x2x
x.x3xl...lx3x.x
x2x.xl.2.lx.x2x
x.x.ml...lm.x.x
x.x3xl...lx3x.x
x2x.xl...lx.x2x
x.x.ml...lm.x.x
x.x3xl.2.lx3x.x
x2xxxl2.2lxxx2x
x....2.2.2....x
xxxxxxxxxxxxxxx
ENDMAP

###################################
# A couple of small vaults featuring blood fountains.

NAME:   pan_blood_fountain
TAGS:   extra allow_dup transparent
DEPTH:  Pan
CHANCE: 10%
SUBST:  ' = '..
SUBST:  . = " / .:80
KPROP:  '" = bloody
SUBST:  '=. , "=.
MAP
 ...
.'''.
.'Y'.
.'''.
 ...@
ENDMAP

NAME:   pan_blood_fountain_2
TAGS:   extra allow_dup transparent
DEPTH:  Pan
CHANCE: 5%
SUBST:  Y = YYV
SUBST:  ' = '..
SUBST:  . = " / .:80
KPROP:  '" = bloody
SUBST:  '=. , "=.
MAP
 @.....
 '''.'''
.'Y'.'Y'.
.'''''''.
 ..'Y'..
  .'''.
   ...
ENDMAP

NAME:   pan_blood_fountain_small
TAGS:   extra allow_dup transparent
DEPTH:  Pan
CHANCE: 15%
MAP
Y
ENDMAP

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

NAME:   pan_surprise
TAGS:   pan extra
KMONS:  1 = executioner
# It may be a surprise for the executioner as well if the player has high
# stealth -- an alarm trap would be found by most chars who dare Pan and thus
# spoil the fun.
MAP
xxxx
xx.x
x1x@
xxx
ENDMAP

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

NAME:   pan_captured_pigsty
TAGS:   pan extra
MONS:   red devil, holy swine
KFEAT:  o = iron_grate
{{
local function swineherd_die(monster, killer_type, killer_index, silent, wizard)
  local p = dgn.find_marker_positions_by_prop("pigsty_gate", 1)[1]
  if (p == nil) then
    crawl.mpr("Error: someone stolen the pigsty gate!")
    return
  end
  if dgn.grid(p.x, p.y) ~= dgn.fnum("iron_grate") then
    return
  end
  dgn.grid(p.x, p.y, "floor")
  if (you.see_cell(p.x, p.y)) then
    crawl.mpr("The grate goes up!")
  else
    crawl.mpr("You hear a sound of rusty metal sliding.")
  end
end
}}
MARKER: 1 = lua:MonPropsMarker:new {monster_dies_lua_key = swineherd_die}
MARKER: o = lua:props_marker {pigsty_gate=1}
MAP
xxxxx
x222x
x222x
xxoxx
@..1@
ENDMAP

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

# Sadly, this vault works well only in text. If we could get changing tiles,
# it would be great, but for now, these are static.
#
NAME:   pan_disco_hall
TAGS:   pan no_rotate
ORIENT: float
SUBST:  - = 0:1 / .:10
COLOUR: D = random
COLOUR: .x = disco
COLOUR: 0123456789 = disco
KFEAT:  D = granite_statue
: set_feature_name("granite_statue", "weirdly glowing ball")
MARKER: D = lua:props_marker { veto_fragmentation="veto", \
                               veto_disintegrate="veto", \
                               veto_shatter="veto" }
MONS:   col:random name:demonic name_adjective plant
MONS:   red devil ; demon trident good_item ego:distortion
MONS:   red devil ; lajatang good_item ego:distortion
MONS:   red devil ; demon blade good_item ego:distortion
RTILE:  x = wall_zot_blue / wall_zot_green / wall_zot_cyan / wall_zot_red /\
            wall_zot_magenta / wall_zot_yellow
# alas, floor tiles are not distinguished from walls enough, commenting out:
# FTILE: . = floor_moss / floor_dirt / floor_orc / floor_rough_red /\
#            floor_snake / floor_swamp
KFEAT:  _ = floor
FTILE:  _ = floor_hall
MAP
                   xx@xx
                   x1.1x
                   x...x
   xxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxx
   x........................x---------------x
   x.x.x.x.x.x.x.x.x.x.x.x..x---------------x
   x........................x---------------xxxxxx
   x.x.x.x.x.x.x.x.x.x.x.x..x---------------_....x
xxxx.........................---------------_..2.x
x1.x.........................---------------_....x
@...........................D---------------_..3.x
x1.x.........................---------------_....x
xxxx.........................---------------_..4.x
   x.xxxxxxxxxxxxxxxxxxxxx..x---------------_....x
   x.x0.0x..0x0.0x0.0x..0x..x---------------xxxxxx
   x.x0..x0..x...x0..x...x..x---------------x
   x........................x---------------x
   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

### Holy Pan Level ############################################################
#
# The angels have gained a foothold in pandemonium.
#
# This level's main feature is a TSO fortress with a lot of loot. Smaller
# features are a temple of Zin, a weird Ely pasture in a cave, and a river for
# some reason. There's also a cave with a pearl dragon and phoenixes.
#
# This level has a lot of open space where it mostly is up to the RNG to place
# monsters.
#
# Four exits are given, with one placed randomly and the others in a room safe
# to teleport into.
#
# My opinion is that in the long term this concept would work better as a
# portal vault (for pan, even).
#
NAME:   evilmike_holy_pan
TAGS:   pan no_pool_fixup
ORIENT: encompass
NSUBST: . = > / .
ITEM:   w:5 any / potion of curing
ITEM:   any / potion of heal wounds
ITEM:   acquire any
ITEM:   potion of cure mutation
ITEM:   potion of restore abilities
ITEM:   any
NSUBST: i = 2=ghh / 3=ghhiii / *:i
MONS:   angel
MONS:   cherub
MONS:   paladin
MONS:   ophan
MONS:   ophan
MONS:   shedu band
MONS:   daeva
KMONS:  8 = phoenix
KMONS:  9 = pearl dragon
KMONS:  0 = apis
KMONS:  A = apis
KMONS:  B = daeva god:Zin
KMONS:  Z = patrolling silver star
KMONS:  S = patrolling seraph
KFEAT:  _ = altar_the_shining_one
KFEAT:  E = altar_elyvilon
KFEAT:  Z = altar_zin
KFEAT:  > = transit_pandemonium
TILE:   c = wall_church
COLOUR: cGH = yellow
TILE:   v = dngn_metal_wall_white
COLOUR: v& = white
TILE:   GH = dngn_golden_statue
FTILE:  _124SDcG|*' = floor_limestone
FTILE:  "E0 = floor_grass
COLOUR: "0 = green
FTILE:  -ZBghi&v = floor_vault
SUBST:  D& = +, '"- = ., H = G, C = c
: set_feature_name("granite_statue", "golden statue")
: set_feature_name("metal_wall", "silver wall")
: set_random_mon_list("angel / cherub / ophan / daeva / phoenix / " ..
:                     "apis / paladin / apis / shedu band / angel")
# Do not place if you are with a holy god. It's just free loot in that case.
veto {{
    if you.god() == "the Shining One" or you.god() == "Zin" or you.god() == "Elyvilon" then
        return true
    else
        return false
    end
}}
MAP
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxCCCCCxxxxxxxxxxxxwwwwxxxxxxxxxwwwxxxwwwxxxxxxCCCCCCCCCCCCCCCCCxxxxxxxxxxx
xxxxxxxC%%%CxxxxxxxxxxwwwwwwwwwxxxwwwxwwwwwwwwxxxxxxCCCCC.......CCCCCxxxxxxxxxxx
xxxxxxxC%.%CxxxxxxxxxxwwwwwwwwwwwwxxxwwwwwwwwxxxxxxxC...+.>.>.>.+...Cxxxxxxxxxxx
xxxxxxCCC+CCCxxxxxx""""wwwwwwwwwwwwwwwwwwwwCCCCCCCCCC.CCC.......CCC.Cxxxxxxxxxxx
xxxCCCC.....Cxxxx""0"""wwwwwwwwwww"wwwwwwww+........+.CCCCCC+CCCCCC.Cxxxxxxxxxxx
xxxCddC.A...CCC"""""""""wwwwwwww""0"wwwwwwwCCCCCCCCCC.CCCCCC.CCCCCC.Cxxxxxxxxxxx
xxxCd.+9......+""0"www0"""wwwww""E""wwwwwwwxxxxxxxxxC.CCCCCC.CCCCCC.Cxxxxxxxxxxx
xxxCddC.A...CCCx""""ww"""""wwwww"""wwwwwwwxxxxxxxxxxC.C7CCCC+CCCC7C.Cxxxxxxxxxxx
xxxCCCC.....Cxxxxx""""""""""wwwww""wwwwwxxxxxxxxxxxxC.CC.........CC.Cxxxxxxxxxxx
xxxxxxCCC+CCCxxxxx""0"""xx"""wwwwwwwwwwxxxxxxxxxxxxxC..+.C3C.C3C.+..Cxxxxxxxxxxx
xxxxxxxCe.eCxxxxxxx""""xxxxxx""wwwwwwwxxxxxxxxxxxxxxCCCC.........CCCCxxxxxxxxxxx
xxxxxxxCeeeCxxxxxxxxx"xxxxxx""wwwwwwwxxxxxxxxxxxxxxxCCCCCCCC+CCCCCCCCxxxxxxxxxxx
xxxxxxxCCCCCxxxxxxxxxxxxxxxx"wwwwwwwwww.xxxxxxxxxxxxxxxxxxxC.Cxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwxwwwww.xxxxxxxxxxxxxxxxxxxC.Cxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwww..xxxxxxxxxxxxxxxxxxxxC.Cxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx..wwwwwwwwwwww.xxxxxxxxxxxxxxxxxxxxC.Cxxxxxxxxxxxxxxxxxx
xCCCCCCCCCCCxxxxxxxxxxx..wwwwxwwwwwww.xx..xxxxx..xxx..xxxxxC+Cx..xxxxxxxxxxxxxxx
xCf7333....Cxxxxxxx.....wwwwxxwwwww........xx..........xxxx........xxxxxxxxxxxxx
xCCCCCCCC..Cxxxx.......wwwwxxwwww...............xx...................xxxxxxxxxxx
xxxxxxxCCC.Cxx........wwwwwwwwcccc.............................cccc...xxxxxxxxxx
xxxxxxxxxC+Cx...xx...wwwwwwwwwc1*ccccccccccccccccccccccccccccccc*1c...xxxxxxxxxx
xxxxxxxxx......xxx..wwwwwwwww.c*'ccccccccccccccccccccccccccccccc'*c...xxxxxxxxxx
xxxxxxxx.....xxxx...wwwwwwwww.ccc+..........3.......3..........+ccc...xxxxxxxxxx
xxxxxxxx....xxxxx..wwwwwwwww...cc...............5...............cc...xxxxxxxxxxx
xxxxxxx....xxxxx...wwwwwwww....cc..www.ccccccccccccccccccc.www..cc...xxxxxxxxxxx
xxxxxx.....xxxx....wwwwwwwww...cc..wHw.cccccccc|||cccccccc.wHw..cc....xxxxxxxxxx
xxxxxx....xxxx...wwwwwxxwwww...cc..www.ccw4''|||||||''4wcc.www..cc....xxxxxxxxxx
xxxxxx....xxx...wwwwwxxwwww....cc......ccw''||||'||||''wcc......cc....xxxxxxxxxx
xxxxxx...xxx...wwwwwwwwwww..xx.cc..ccc+cccccccccSccccccccc+ccc..cc.....xxxxxxxxx
xxxxx....xx....wwwwwwwwww..xx..cc..c'''ccwwwcccc'ccccwwwcc***c..cc.....xxxxxxxxx
xxxx...........wwwxwwwwww.xxx..cc..c1'1cGw'2'cc1_1cc'2'wGc***c..cc......xxxxxxxx
xxxx..........wwwwxxwwww..xxx..cc..ccccccw''''c'4'c''''wcccccc..cc........xxxxxx
xxxx...xxx....wwwxxxwwww.xxx...cc..ccwwcGw''''c'''c''''wGcwwcc..cc.........xxxxx
xxxxx..xxx...wwwwxxxwww.xxxx...cc..cc22ccw''''''G''''''wcc22cc..cc..........xxxx
xxxxx...xxx..wwwxxxwww...xx....cc..cc''D'''''''''''''''''D''cc..cc..........xxxx
xxxxx...xx...wwwwwwww..........cc.3cc''ccw'''''''''''''wcc''cc3.cc.....xx....xxx
xxxx...xxx..wwwwwwww...xx......cc..cc''cGw'''''''''''''wGc''cc..cc....xxxx...xxx
xxx...xxx..wwwwwww...xxxxxx....cc..cc''ccwwwwwwwwwwwwwwwcc''cc..cc....xxxx...xxx
xxx........wwwwww...xxxxxxx....cc..cc''cccGcGcGcGcGcGcGccc''cc..cc...xxxx....xxx
xxx.......wwwwww....xxxxxxxx...cc..cc''ccccccccccccccccccc''cc..cc.....x....xxxx
xxx......wwwwwww...xxxxxxxxx...cc..cc'''''''''''''''''''''''cc..cc..........xxxx
xx.....wwwwwwwww..xxxxxxxxx....cc..cc''''2'''G'''''G'''2''''cc..cc.........xxxxx
xx....wwwwwwwww...xxxxxxxxx....cc..cc4'''''''''''''''''''''4cc..cc........xxxxxx
xx...wwwwwwwww.....xxxxxxxx....cc..cc''cccccccDcDcDccccccc''cc..cc........xxxxxx
xx..wwwwwwwww.....xxxxxxxx.....cc..ccwwcccccG'''''''Gcccccwwcc..cc........xxxxxx
xx.wwwwwwwww.......xxxxxx......cc..cccccccccc'''''''cccccccccc..cc...xx....xxxxx
xxwwwwwwww....xx....xxx........cc...........cccDDDccc...........cc...xxx....xxxx
xwwwwwww.....xxxx.........x....cc......5........3........5......cc....xx....xxxx
xwwwwww.....xxxx.........xx...ccc+.......3.............3.......+ccc.........xxxx
xwwww........xx...............c*'cccccccccccc.......cccccccccccc'*c........xxxxx
xww...........................c1*cccccccccccc.......cccccccccccc*1c.......xxxxxx
xxxx..xx..v.vvvvvvvvvvvvvv....cccc..........H.......H..........cccc......xxxxxxx
xxxx..xx...vvv----v-----iv.v................................x..........xxxxxxxxx
xxxx...x..vvv-Bv-----vvBiv.vv...............H.......H......xxx........xxxxxxxxxx
xxxxx.....vvi-----v-----iv........v.........6.......6......xxx.........xxxxxxxxx
xxxxx.....vv------vvvvvvvvvvvvvv......xx....H.......H.....xxx.....xx..x..xxxxxxx
xxxxx.....vv---------vBv-v-v-v-v.v...xxxx.......................xxxxx....xxxxxxx
xxxxx.....vg-Z---vvv-&---------&......xxxx..................xxxxxxxxxxxx...x.8xx
xxxxxx....vv---------vBv-v-v-v-v.v.....xxx.............xxxxxxxxxxxxxxxx........x
xxxxxx....vv------vvvvvvvvvvvvvv...............xxxxxxxxxxxxxxx$$$xxxxx..xxxx...x
xxxxxxx...vvi-----v-----iv........v......xxxxxxxxxxxxxxxxxxxx$.88xxxx8.xxxx..xxx
xxxxxxxx..vvv-Bv-----vvBiv.vv.........xxxxxxxxxxxxxx$$$$$xxxxxx8...xxxxxxx....xx
xxxxxxxx...vvv----v-----iv.v......xxxxxxxxxxxxxxxxx$$$9$$$xxxxxx..x..xxx....x..x
xxxxxxxx..v.vvvvvvvvvvvvvv....xxxxxxxxxxxxxxxxxxxxx$$$$$$..xxxxxxx........xxxx8x
xxxxxxxxx..................xxxxxxxxxxxxxxxxxxxxxxxxx$$$.....xxxxxxx......xxxxxxx
xxxxxxxxxxx..............xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....wwxxx....xxxxxxxxxxx
xxxxxxxxxxxxx........xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ENDMAP

##############################################################################
# Random vault and minivault balancers for Pan.

NAME: pan_mini_dummy_balancer
DEPTH: Pan
TAGS: dummy
WEIGHT: 100
MAP
x
ENDMAP

NAME: pan_dummy_balancer
DEPTH: Pan
TAGS: dummy
ORIENT: float
WEIGHT: 100
MAP
x
ENDMAP
